123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #ifndef CALMWATER_VERTEX_INCLUDED
- #define CALMWATER_VERTEX_INCLUDED
- void displacement(inout appdata v)
- {
- half4 worldSpaceVertex = mul(unity_ObjectToWorld, (v.vertex));
- half3 offsets;
- half3 nrml;
- #if _DISPLACEMENTMODE_WAVE
- Wave(
- offsets, nrml, v.vertex.xyz, worldSpaceVertex,
- _Amplitude,
- _Frequency,
- _Speed
- );
- v.vertex.y += offsets.y;
- v.normal = nrml;
- v.color.a = offsets.y;
- #endif
- #if _DISPLACEMENTMODE_GERSTNER
- half3 vtxForAni = (worldSpaceVertex.xyz).xzz; // REMOVE VARIABLE
- Gerstner(
- offsets, nrml, v.vertex.xyz, vtxForAni, // offsets, nrml will be written
- _Amplitude * 0.01, // amplitude
- _Frequency, // frequency
- _Steepness, // steepness
- _WSpeed, // speed
- _WDirectionAB, // direction # 1, 2
- _WDirectionCD // direction # 3, 4
- );
- v.vertex.xyz += offsets;
- v.normal = nrml;
- v.color.a = offsets.y;
- #endif
- #if _DISPLACEMENTMODE_TEXTURE
- //offs, nrml, vtx, intensity, vectorLength
- TextureDisplacement(offsets, nrml, v.vertex, _Amplitude * 0.02, 1);
- v.vertex.y += offsets.y;
- v.normal = nrml;
- v.color.a = offsets.y;
- #endif
- }
- // Vertex
- v2f vert(appdata v) {
- v2f o;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_OUTPUT(v2f, o);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
- #if !_DISPLACEMENTMODE_OFF
- displacement(v);
- #endif
- o.pos = UnityObjectToClipPos(v.vertex);
- o.GrabUV = ComputeGrabScreenPos(o.pos);
- o.DepthUV = ComputeScreenPos(o.pos);
- COMPUTE_EYEDEPTH(o.DepthUV.z);
- //Normals
- float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
- float3 worldNormal = UnityObjectToWorldNormal(v.normal);
- float3 worldTangent = UnityObjectToWorldNormal(v.tangent.xyz);
- float3 worldBinormal = cross(worldTangent, worldNormal);
- o.tspace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
- o.tspace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
- o.tspace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
- o.worldPos = worldPos;
- o.ambient.rgb = ShadeSH9(half4(worldNormal, 1));
- o.ambient.a = v.color.a;
- //UV Animation
- #if _BUMPMODE_SINGLE || _BUMPMODE_DUAL
- #if _WORLDSPACE_ON
- o.AnimUV = AnimateBump(worldPos.xz);
- #else
- o.AnimUV = AnimateBump(v.texcoord);
- #endif
- #endif
- #if _BUMPMODE_DUAL
- #if _WORLDSPACE_ON
- o.AnimUV2 = AnimateLargeBump(_BumpMapLarge_ST, worldPos.xz, _SpeedsLarge.xy);
- #else
- o.AnimUV2 = AnimateLargeBump(_BumpMapLarge_ST, v.texcoord, _SpeedsLarge.xy);
- #endif
- #endif
- #if _BUMPMODE_FLOWMAP
- #if _WORLDSPACE_ON
- o.BumpUV = TRANSFORM_TEX(worldPos.xz, _BumpMap);
- o.FlowMapUV = TRANSFORM_TEX(worldPos.xz, _FlowMap);
- #else
- o.BumpUV = TRANSFORM_TEX(v.texcoord, _BumpMap);
- o.FlowMapUV = TRANSFORM_TEX(v.texcoord, _FlowMap);
- #endif
- #endif
- //Foam
- #ifndef SHADER_API_D3D9
- #if _FOAM_ON || _WHITECAPS_ON
- o.FoamUV = float4(0, 0, 0, 0);
- // Shore Foam
- #if _WORLDSPACE_ON
- o.FoamUV.xy = TRANSFORM_TEX(worldPos.xz, _FoamTex);
- #else
- o.FoamUV.xy = TRANSFORM_TEX(v.texcoord, _FoamTex);
- #endif
- // White Caps
- #if _WHITECAPS_ON
- #if _WORLDSPACE_ON
- o.FoamUV.zw = TRANSFORM_TEX(worldPos.xz, _CapsMask);
- #else
- o.FoamUV.zw = TRANSFORM_TEX(v.texcoord, _CapsMask);
- #endif
- // Animate Caps
- o.FoamUV.zw += frac(_CapsSpeed * _Time.x).xx;
- #endif
- #endif
- #endif
- #ifdef UNITY_PASS_FORWARDBASE
- UNITY_TRANSFER_FOG(o, o.pos);
- #endif
- UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy); // pass shadow coordinates to pixel shader
- return o;
- }
- #endif
|