CalmWater_Vertex.cginc 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #ifndef CALMWATER_VERTEX_INCLUDED
  2. #define CALMWATER_VERTEX_INCLUDED
  3. void displacement(inout appdata v)
  4. {
  5. half4 worldSpaceVertex = mul(unity_ObjectToWorld, (v.vertex));
  6. half3 offsets;
  7. half3 nrml;
  8. #if _DISPLACEMENTMODE_WAVE
  9. Wave(
  10. offsets, nrml, v.vertex.xyz, worldSpaceVertex,
  11. _Amplitude,
  12. _Frequency,
  13. _Speed
  14. );
  15. v.vertex.y += offsets.y;
  16. v.normal = nrml;
  17. v.color.a = offsets.y;
  18. #endif
  19. #if _DISPLACEMENTMODE_GERSTNER
  20. half3 vtxForAni = (worldSpaceVertex.xyz).xzz; // REMOVE VARIABLE
  21. Gerstner(
  22. offsets, nrml, v.vertex.xyz, vtxForAni, // offsets, nrml will be written
  23. _Amplitude * 0.01, // amplitude
  24. _Frequency, // frequency
  25. _Steepness, // steepness
  26. _WSpeed, // speed
  27. _WDirectionAB, // direction # 1, 2
  28. _WDirectionCD // direction # 3, 4
  29. );
  30. v.vertex.xyz += offsets;
  31. v.normal = nrml;
  32. v.color.a = offsets.y;
  33. #endif
  34. #if _DISPLACEMENTMODE_TEXTURE
  35. //offs, nrml, vtx, intensity, vectorLength
  36. TextureDisplacement(offsets, nrml, v.vertex, _Amplitude * 0.02, 1);
  37. v.vertex.y += offsets.y;
  38. v.normal = nrml;
  39. v.color.a = offsets.y;
  40. #endif
  41. }
  42. // Vertex
  43. v2f vert(appdata v) {
  44. v2f o;
  45. UNITY_SETUP_INSTANCE_ID(v);
  46. UNITY_INITIALIZE_OUTPUT(v2f, o);
  47. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  48. #if !_DISPLACEMENTMODE_OFF
  49. displacement(v);
  50. #endif
  51. o.pos = UnityObjectToClipPos(v.vertex);
  52. o.GrabUV = ComputeGrabScreenPos(o.pos);
  53. o.DepthUV = ComputeScreenPos(o.pos);
  54. COMPUTE_EYEDEPTH(o.DepthUV.z);
  55. //Normals
  56. float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
  57. float3 worldNormal = UnityObjectToWorldNormal(v.normal);
  58. float3 worldTangent = UnityObjectToWorldNormal(v.tangent.xyz);
  59. float3 worldBinormal = cross(worldTangent, worldNormal);
  60. o.tspace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  61. o.tspace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  62. o.tspace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
  63. o.worldPos = worldPos;
  64. o.ambient.rgb = ShadeSH9(half4(worldNormal, 1));
  65. o.ambient.a = v.color.a;
  66. //UV Animation
  67. #if _BUMPMODE_SINGLE || _BUMPMODE_DUAL
  68. #if _WORLDSPACE_ON
  69. o.AnimUV = AnimateBump(worldPos.xz);
  70. #else
  71. o.AnimUV = AnimateBump(v.texcoord);
  72. #endif
  73. #endif
  74. #if _BUMPMODE_DUAL
  75. #if _WORLDSPACE_ON
  76. o.AnimUV2 = AnimateLargeBump(_BumpMapLarge_ST, worldPos.xz, _SpeedsLarge.xy);
  77. #else
  78. o.AnimUV2 = AnimateLargeBump(_BumpMapLarge_ST, v.texcoord, _SpeedsLarge.xy);
  79. #endif
  80. #endif
  81. #if _BUMPMODE_FLOWMAP
  82. #if _WORLDSPACE_ON
  83. o.BumpUV = TRANSFORM_TEX(worldPos.xz, _BumpMap);
  84. o.FlowMapUV = TRANSFORM_TEX(worldPos.xz, _FlowMap);
  85. #else
  86. o.BumpUV = TRANSFORM_TEX(v.texcoord, _BumpMap);
  87. o.FlowMapUV = TRANSFORM_TEX(v.texcoord, _FlowMap);
  88. #endif
  89. #endif
  90. //Foam
  91. #ifndef SHADER_API_D3D9
  92. #if _FOAM_ON || _WHITECAPS_ON
  93. o.FoamUV = float4(0, 0, 0, 0);
  94. // Shore Foam
  95. #if _WORLDSPACE_ON
  96. o.FoamUV.xy = TRANSFORM_TEX(worldPos.xz, _FoamTex);
  97. #else
  98. o.FoamUV.xy = TRANSFORM_TEX(v.texcoord, _FoamTex);
  99. #endif
  100. // White Caps
  101. #if _WHITECAPS_ON
  102. #if _WORLDSPACE_ON
  103. o.FoamUV.zw = TRANSFORM_TEX(worldPos.xz, _CapsMask);
  104. #else
  105. o.FoamUV.zw = TRANSFORM_TEX(v.texcoord, _CapsMask);
  106. #endif
  107. // Animate Caps
  108. o.FoamUV.zw += frac(_CapsSpeed * _Time.x).xx;
  109. #endif
  110. #endif
  111. #endif
  112. #ifdef UNITY_PASS_FORWARDBASE
  113. UNITY_TRANSFER_FOG(o, o.pos);
  114. #endif
  115. UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy); // pass shadow coordinates to pixel shader
  116. return o;
  117. }
  118. #endif