76 lines
2.6 KiB
HLSL
76 lines
2.6 KiB
HLSL
// Stylized Water 3 by Staggart Creations (http://staggart.xyz)
|
|
// COPYRIGHT PROTECTED UNDER THE UNITY ASSET STORE EULA (https://unity.com/legal/as-terms)
|
|
// • Copying or referencing source code for the production of new asset store, or public, content is strictly prohibited!
|
|
// • Uploading this file to a public repository will subject it to an automated DMCA takedown request.
|
|
|
|
TEXTURE2D(_BumpMap);
|
|
SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_BumpMapLarge);
|
|
TEXTURE2D(_BumpMapSlope);
|
|
|
|
float3 BlendTangentNormals(float3 a, float3 b)
|
|
{
|
|
#if _ADVANCED_SHADING
|
|
return BlendNormalRNM(a, b);
|
|
#else
|
|
return BlendNormal(a, b);
|
|
#endif
|
|
}
|
|
|
|
float3 SampleNormals(float2 uv, float2 tiling, float subTiling, float3 wPos, float2 time, float speed, float subSpeed, float slope, int vFace)
|
|
{
|
|
float4 uvs = PackedUV(uv, tiling, time, speed, subTiling, subSpeed);
|
|
float3 n1 = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMap, sampler_BumpMap, uvs.xy));
|
|
float3 n2 = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMap, sampler_BumpMap, uvs.zw));
|
|
|
|
float3 blendedNormals = BlendTangentNormals(n1, n2);
|
|
|
|
#ifdef QUAD_NORMAL_SAMPLES
|
|
uvs = PackedUV(uv, tiling, time.yx, speed, subTiling, subSpeed);
|
|
float3 n4 = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMap, sampler_BumpMap, uvs.xy * 2.0));
|
|
float3 n5 = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMap, sampler_BumpMap, uvs.zw * 2.0));
|
|
|
|
blendedNormals = BlendTangentNormals(blendedNormals, BlendTangentNormals(n4, n5));
|
|
#endif
|
|
|
|
#if _DISTANCE_NORMALS
|
|
float fadeFactor = DistanceFadeMask(wPos, _DistanceNormalsFadeDist.x, _DistanceNormalsFadeDist.y, vFace);
|
|
|
|
float3 largeBlendedNormals;
|
|
|
|
half distanceSubSpeed = -0.9;
|
|
#if _RIVER
|
|
distanceSubSpeed = 0.9;
|
|
#endif
|
|
|
|
uvs = PackedUV(uv, _DistanceNormalsTiling.xx, time, speed * 2.0, 2.0, distanceSubSpeed);
|
|
float3 n1b = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMapLarge, sampler_BumpMap, uvs.xy));
|
|
|
|
#if _ADVANCED_SHADING //Use 2nd texture sample
|
|
float3 n2b = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMapLarge, sampler_BumpMap, uvs.zw));
|
|
largeBlendedNormals = BlendTangentNormals(n1b, n2b);
|
|
#else
|
|
largeBlendedNormals = n1b;
|
|
#endif
|
|
|
|
blendedNormals = lerp(largeBlendedNormals, blendedNormals, fadeFactor);
|
|
#endif
|
|
|
|
#if _RIVER
|
|
uvs = PackedUV(uv, tiling, time, speed * _SlopeSpeed, subTiling, subSpeed * _SlopeSpeed);
|
|
uvs.xy = uvs.xy * float2(1, 1-_SlopeStretching);
|
|
float3 n3 = UnpackNormal(SAMPLE_TEXTURE2D(_BumpMapSlope, sampler_BumpMap, uvs.xy));
|
|
|
|
#if _ADVANCED_SHADING
|
|
n3 = BlendTangentNormals(n3, UnpackNormal(SAMPLE_TEXTURE2D(_BumpMapSlope, sampler_BumpMap, uvs.zw)));
|
|
#endif
|
|
|
|
blendedNormals = lerp(blendedNormals, n3, slope);
|
|
#endif
|
|
|
|
#if WAVE_SIMULATION
|
|
BlendWaveSimulation(wPos, blendedNormals);
|
|
#endif
|
|
|
|
return blendedNormals;
|
|
} |