CalmWater_Normals.cginc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef CALMWATER_NORMALS_INCLUDED
  2. #define CALMWATER_NORMALS_INCLUDED
  3. float3 NormalBlendReoriented(float3 A, float3 B)
  4. {
  5. float3 t = A.xyz + float3(0.0, 0.0, 1.0);
  6. float3 u = B.xyz * float3(-1.0, -1.0, 1.0);
  7. return (t / t.z) * dot(t, u) - u;
  8. }
  9. void ComputeNormals(inout GlobalData data, v2f IN)
  10. {
  11. // NormalMaps
  12. float3 tangentNormal = float3(0, 0, 1);
  13. #if _BUMPMODE_SINGLE || _BUMPMODE_DUAL
  14. float3 n1 = UnpackNormalScale(tex2D(_BumpMap, IN.AnimUV.xy), _BumpStrength);
  15. float3 n2 = UnpackNormalScale(tex2D(_BumpMap, IN.AnimUV.zw), _BumpStrength);
  16. tangentNormal = NormalBlendReoriented(n1, n2);
  17. #if _BUMPMODE_DUAL
  18. float3 n3 = UnpackNormalScale(tex2D(_BumpMapLarge, IN.AnimUV2), _BumpLargeStrength);
  19. tangentNormal = NormalBlendReoriented(tangentNormal, n3);
  20. #endif
  21. #endif
  22. #if _BUMPMODE_FLOWMAP
  23. half4 bump = SampleFlowMap(_BumpMap, IN.BumpUV, _FlowMap, IN.FlowMapUV, _FlowSpeed, _FlowIntensity);
  24. tangentNormal = UnpackNormalScale(bump, _BumpStrength);
  25. #endif
  26. // Tangent Normal
  27. data.tangentNormal = tangentNormal;
  28. // World Normal
  29. data.worldNormal = WorldNormal(IN.tspace0.xyz, IN.tspace1.xyz, IN.tspace2.xyz, tangentNormal);
  30. }
  31. #endif