CalmWater_Reflections.cginc 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef CALMWATER_REFLECTIONS_INCLUDED
  2. #define CALMWATER_REFLECTIONS_INCLUDED
  3. // =====================================================================
  4. // Reflections
  5. // No Reflection on backface
  6. // =====================================================================
  7. void ComputeReflections(inout GlobalData data, v2f IN)
  8. {
  9. #ifndef CULL_FRONT
  10. //Reverse cubeMap Y to look like reflection
  11. #if _REFLECTIONTYPE_MIXED || _REFLECTIONTYPE_CUBEMAP
  12. half3 worldRefl = reflect(-data.worldViewDir, half3(data.worldNormal.x * _CubeDist, 1, data.worldNormal.z * _CubeDist));
  13. half3 cubeMap = texCUBE(_Cube, worldRefl).rgb * _CubeColor.rgb;
  14. #endif
  15. #if _REFLECTIONTYPE_MIXED || _REFLECTIONTYPE_REALTIME
  16. //Real Time reflections
  17. //TODO: Upgrade to GrabUV when unity fixes its bug
  18. fixed3 rtReflections = tex2Dproj(_ReflectionTex, UNITY_PROJ_COORD(data.DepthUV)) * _Reflection;
  19. #endif
  20. #if _REFLECTIONTYPE_MIXED
  21. fixed3 finalReflection = lerp(cubeMap, rtReflections, 0.5);
  22. #endif
  23. #if _REFLECTIONTYPE_REALTIME
  24. fixed3 finalReflection = rtReflections;
  25. #endif
  26. #if _REFLECTIONTYPE_CUBEMAP
  27. fixed3 finalReflection = cubeMap;
  28. #endif
  29. //end CULL_FRONT
  30. #endif
  31. // ===========================================================================
  32. // Apply Reflections
  33. // ===========================================================================
  34. #ifndef CULL_FRONT
  35. float3 vertexNormals = float3(IN.tspace0.z, IN.tspace1.z, IN.tspace2.z);
  36. float3 reflectionNormals = lerp(vertexNormals, data.worldNormal, _ReflectionNormals);
  37. data.NdotV = NdotVTerm(reflectionNormals, data.worldViewDir);
  38. #if _REFLECTIONTYPE_MIXED || _REFLECTIONTYPE_REALTIME || _REFLECTIONTYPE_CUBEMAP
  39. // TEST: Use vertex normal for reflection fresnel
  40. //float NdotVertex = NdotVTerm(vertexNormals, worldViewDir);
  41. half fresnel = smoothstep(1 - saturate(data.NdotV), 0, _RimPower);
  42. data.finalColor = lerp(data.finalColor, finalReflection, fresnel * _Reflection);
  43. #endif
  44. #endif
  45. }
  46. #endif