Closed ytgui closed 5 years ago
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.screenPosition = ComputeScreenPos(o.vertex);
o.screenPosition.z = -UnityObjectToViewPos(v.vertex).z;
o.noiseUV = TRANSFORM_TEX(v.uv, _SurfaceNoise);
return o;
}
float4 frag (v2f i) : SV_Target
{
float depthRaw = tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenPosition)).r;
float depthLinear = LinearEyeDepth(depthRaw);
float depthDifference = depthLinear - i.screenPosition.z;
float waterDepth01 = clamp(depthDifference / _MaxWaterDistance, 0.0, 1.0);
float4 waterColor = lerp(_WaterShallowColor, _WaterDeepColor, waterDepth01);
float2 noiseUV = float2(i.noiseUV.x + 0.1 * _Time.x, i.noiseUV.y + 0.1 * _Time.y);
float surfaceNoiseSample = tex2D(_SurfaceNoise, noiseUV).r;
// surfaceNoiseSample = surfaceNoiseSample > 0.707 ? 1.0 : 0.0;
float foamDepthDifference01 = saturate(depthDifference / _FoamMaxDistance);
float surfaceNoiseCutoff = foamDepthDifference01 * 0.7;
float surfaceNoise = surfaceNoiseSample > surfaceNoiseCutoff ? 1 : 0;
return 0.8 * waterColor + 0.2 * surfaceNoise;
}
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.viewDir = WorldSpaceViewDir(v.vertex);
return o;
}
float4 frag (v2f i) : SV_Target
{
float4 texColor = tex2D(_MainTex, i.uv);
float3 normal = normalize(i.worldNormal);
float NdotL = dot(_WorldSpaceLightPos0, normal);
// NdotL = clamp(NdotL, 0.0, 1.0);
// float lightIntensity = NdotL > 0.0 ? 1.0 : 0.0;
float lightIntensity = smoothstep(0, 0.01, NdotL);
float4 light = lightIntensity * _LightColor0;
float3 viewDir = normalize(i.viewDir);
float3 halfVector = normalize(_WorldSpaceLightPos0 + viewDir);
float NdotH = dot(normal, halfVector);
float specularIntensity = pow(NdotH * lightIntensity, _Glossiness * _Glossiness);
float specular = smoothstep(0.005, 0.01, specularIntensity);
float rimDot = 1 - dot(viewDir, normal);
float rimIntensity = smoothstep(_RimAmount - 0.01, _RimAmount + 0.01, rimDot);
float4 rim = rimIntensity * _RimColor;
return _Color * texColor * (_AmbientColor + light + specular + rim);
}
? camera depth - fragment depth ? multi fragment render order -> https://www.cnblogs.com/zsb517/p/6655546.html -> SHADOWCASTER