Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader "StylizedWater/Desktop" {
- Properties {
- _WaterColor ("Water Color", Color) = (0,0.503546,1,1)
- _RimColor ("Rim Color", Color) = (1,1,1,1)
- _FresnelColor ("Fresnel Color", Color) = (1,1,1,0.5019608)
- _Wavetint ("Wave tint", Range(-1, 1)) = 0
- _Fresnelexponent ("Fresnel exponent", Float ) = 4
- _NormalStrength ("Normal Strength", Range(0, 1)) = 1
- _Transparency ("Transparency", Range(0, 1)) = 0.75
- _Glossiness ("Glossiness", Range(0, 3)) = 1
- _SurfaceHighlight ("Surface Highlight", Range(0, 1)) = 0.05
- _Surfacehightlightsize ("Surface hightlight size", Range(0, 1)) = 0
- _SurfaceHightlighttiling ("Surface Hightlight tiling", Float ) = 0.25
- _UseIntersectionHighlight ("UseIntersectionHighlight", Range(0, 1)) = 0
- [MaterialToggle] _HighlightPanning ("HighlightPanning", Float ) = 0
- _Depth ("Depth", Range(0, 30)) = 30
- _Depthdarkness ("Depth darkness", Range(0, 1)) = 0.5
- _RimSize ("Rim Size", Range(0, 4)) = 2
- _Rimfalloff ("Rim falloff", Range(0, 5)) = 0.25
- _RimDistance ("Rim Distance", Range(0, 1)) = 0.1
- [MaterialToggle] _Worldspacetiling ("Worldspace tiling", Float ) = 0
- _Tiling ("Tiling", Range(0.1, 1)) = 0.9
- _Rimtiling ("Rim tiling", Float ) = 2
- _RefractionAmount ("Refraction Amount", Range(0, 0.2)) = 0.1
- _Wavesspeed ("Waves speed", Range(0, 10)) = 0.75
- _Wavesstrength ("Waves strength", Range(0, 1)) = 0
- _WaveSize ("WaveSize", Float ) = 0.1
- [NoScaleOffset][Normal]_Normals ("Normals", 2D) = "bump" {}
- [NoScaleOffset]_Shadermap ("Shadermap", 2D) = "black" {}
- _Reflection ("Reflection", Cube) = "_Skybox" {}
- [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
- }
- SubShader {
- Tags {
- "IgnoreProjector"="True"
- "Queue"="Transparent"
- "RenderType"="Transparent"
- }
- GrabPass{ }
- Pass {
- Name "FORWARD"
- Tags {
- "LightMode"="ForwardBase"
- }
- Blend SrcAlpha OneMinusSrcAlpha
- ZWrite Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #define UNITY_PASS_FORWARDBASE
- #include "UnityCG.cginc"
- #include "UnityPBSLighting.cginc"
- #include "UnityStandardBRDF.cginc"
- #pragma multi_compile_fwdbase
- #pragma multi_compile_fog
- #pragma exclude_renderers d3d11_9x xbox360 ps3 psp2
- #pragma target 3.0
- #pragma glsl
- uniform sampler2D _GrabTexture;
- uniform sampler2D _CameraDepthTexture;
- uniform float4 _TimeEditor;
- uniform fixed _RimSize;
- uniform fixed4 _WaterColor;
- uniform fixed4 _RimColor;
- uniform sampler2D _Shadermap;
- uniform fixed _Tiling;
- uniform float _RefractionAmount;
- uniform float _Transparency;
- uniform sampler2D _Normals;
- uniform fixed _Wavesspeed;
- uniform float _Glossiness;
- uniform float _Wavesstrength;
- uniform fixed _Depth;
- uniform fixed _Depthdarkness;
- uniform fixed _Rimtiling;
- uniform fixed _Worldspacetiling;
- uniform fixed _Rimfalloff;
- uniform float _SurfaceHighlight;
- uniform float _Surfacehightlightsize;
- uniform float _SurfaceHightlighttiling;
- uniform float _Fresnelexponent;
- uniform float4 _FresnelColor;
- uniform float _RimDistance;
- uniform fixed _HighlightPanning;
- uniform samplerCUBE _Reflection;
- uniform float _Wavetint;
- uniform float _WaveSize;
- uniform float _NormalStrength;
- uniform float _UseIntersectionHighlight;
- struct VertexInput {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- float4 tangent : TANGENT;
- float2 texcoord0 : TEXCOORD0;
- };
- struct VertexOutput {
- float4 pos : SV_POSITION;
- float2 uv0 : TEXCOORD0;
- float4 posWorld : TEXCOORD1;
- float3 normalDir : TEXCOORD2;
- float3 tangentDir : TEXCOORD3;
- float3 bitangentDir : TEXCOORD4;
- float4 screenPos : TEXCOORD5;
- float4 projPos : TEXCOORD6;
- UNITY_FOG_COORDS(7)
- };
- VertexOutput vert (VertexInput v) {
- VertexOutput o = (VertexOutput)0;
- o.uv0 = v.texcoord0;
- o.normalDir = UnityObjectToWorldNormal(v.normal);
- o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );
- o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
- float4 Time = _Time + _TimeEditor;
- float WaveSpeed = (Time.g*(_Wavesspeed*0.1));
- fixed2 Tiling = (lerp( ((-20.0)*o.uv0), mul(unity_ObjectToWorld, v.vertex).rgb.rb, _Worldspacetiling )*(1.0 - _Tiling));
- float2 node_5626 = ((Tiling*_WaveSize)+(WaveSpeed*0.5)*float2(0,1));
- float4 HeightmapTex = tex2Dlod(_Shadermap,float4(node_5626,0.0,0));
- float DisplacementDirection = (HeightmapTex.g*_Wavesstrength);
- float3 Displacement = (v.normal*DisplacementDirection);
- float3 node_933 = Displacement;
- v.vertex.xyz += node_933;
- o.posWorld = mul(unity_ObjectToWorld, v.vertex);
- float3 lightColor = _LightColor0.rgb;
- o.pos = UnityObjectToClipPos(v.vertex );
- UNITY_TRANSFER_FOG(o,o.pos);
- o.projPos = ComputeScreenPos (o.pos);
- COMPUTE_EYEDEPTH(o.projPos.z);
- o.screenPos = o.pos;
- return o;
- }
- float4 frag(VertexOutput i) : COLOR {
- #if UNITY_UV_STARTS_AT_TOP
- float grabSign = -_ProjectionParams.x;
- #else
- float grabSign = _ProjectionParams.x;
- #endif
- i.normalDir = normalize(i.normalDir);
- i.screenPos = float4( i.screenPos.xy / i.screenPos.w, 0, 0 );
- i.screenPos.y *= _ProjectionParams.x;
- float3x3 tangentTransform = float3x3( i.tangentDir, i.bitangentDir, i.normalDir);
- float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
- float4 Time = _Time + _TimeEditor;
- float WaveSpeed = (Time.g*(_Wavesspeed*0.1));
- fixed mWaveSpeed = WaveSpeed;
- fixed2 Tiling = (lerp( ((-20.0)*i.uv0), i.posWorld.rgb.rb, _Worldspacetiling )*(1.0 - _Tiling));
- fixed2 mTiling = Tiling;
- fixed2 WavePanningV = (mTiling+mWaveSpeed*float2(0,1));
- fixed3 WavePanningV_Tex = UnpackNormal(tex2D(_Normals,WavePanningV));
- fixed2 WavePanningU = (mTiling+mWaveSpeed*float2(0.1,0));
- fixed3 WavePanningU_Tex = UnpackNormal(tex2D(_Normals,WavePanningU));
- float3 WaveNormalBlend_nrm_base = WavePanningV_Tex.rgb + float3(0,0,1);
- float3 WaveNormalBlend_nrm_detail = WavePanningU_Tex.rgb * float3(-1,-1,1);
- float3 WaveNormalBlend_nrm_combined = WaveNormalBlend_nrm_base*dot(WaveNormalBlend_nrm_base, WaveNormalBlend_nrm_detail)/WaveNormalBlend_nrm_base.z - WaveNormalBlend_nrm_detail;
- float3 WaveNormalBlend = WaveNormalBlend_nrm_combined;
- float2 HighlightPanningV = (WavePanningV*_SurfaceHightlighttiling);
- float4 HighlightPanningV_Tex = tex2D(_Shadermap,HighlightPanningV);
- float node_8200 = lerp(HighlightPanningV_Tex.r,HighlightPanningV_Tex.b,_UseIntersectionHighlight);
- float2 HightlightPanningU = (WavePanningU*_SurfaceHightlighttiling);
- float4 HightlightPanningU_Tex = tex2D(_Shadermap,HightlightPanningU);
- float node_5823 = lerp(HightlightPanningU_Tex.r,HightlightPanningU_Tex.b,_UseIntersectionHighlight);
- float SurfaceHighlights = saturate((_SurfaceHighlight*lerp(step(_Surfacehightlightsize,(node_8200-node_5823)),(1.0 - lerp( node_5823, (node_8200*node_5823), _HighlightPanning )),_UseIntersectionHighlight)));
- float3 Normals = lerp(i.normalDir,lerp(WaveNormalBlend,float3(0,0,1),SurfaceHighlights),_NormalStrength);
- float3 normalLocal = Normals;
- float3 normalDirection = normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
- float3 viewReflectDirection = reflect( -viewDirection, normalDirection );
- float sceneZ = max(0,LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)))) - _ProjectionParams.g);
- float partZ = max(0,i.projPos.z - _ProjectionParams.g);
- float2 Refraction = (_RefractionAmount*float2(WavePanningV_Tex.r,WavePanningU_Tex.g));
- float2 sceneUVs = float2(1,grabSign)*i.screenPos.xy*0.5+0.5 + Refraction;
- float4 sceneColor = tex2D(_GrabTexture, sceneUVs);
- float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
- float3 lightColor = _LightColor0.rgb;
- float3 halfDirection = normalize(viewDirection+lightDirection);
- ////// Lighting:
- float attenuation = 1;
- float3 attenColor = attenuation * _LightColor0.xyz;
- float Pi = 3.141592654;
- float InvPi = 0.31830988618;
- ///////// Gloss:
- float Roughness = (saturate((1.0-(1.0-WavePanningV_Tex.r)*(1.0-WavePanningU_Tex.g)))*_Glossiness);
- float gloss = 1.0 - Roughness; // Convert roughness to gloss
- float specPow = exp2( gloss * 10.0+1.0);
- /////// GI Data:
- UnityLight light;
- #ifdef LIGHTMAP_OFF
- light.color = lightColor;
- light.dir = lightDirection;
- light.ndotl = LambertTerm (normalDirection, light.dir);
- #else
- light.color = half3(0.f, 0.f, 0.f);
- light.ndotl = 0.0f;
- light.dir = half3(0.f, 0.f, 0.f);
- #endif
- UnityGIInput d;
- d.light = light;
- d.worldPos = i.posWorld.xyz;
- d.worldViewDir = viewDirection;
- d.atten = attenuation;
- Unity_GlossyEnvironmentData ugls_en_data;
- ugls_en_data.roughness = 1.0 - gloss;
- ugls_en_data.reflUVW = viewReflectDirection;
- UnityGI gi = UnityGlobalIllumination(d, 1, normalDirection, ugls_en_data );
- lightDirection = gi.light.dir;
- lightColor = gi.light.color;
- ////// Specular:
- float NdotL = max(0, dot( normalDirection, lightDirection ));
- float LdotH = max(0.0,dot(lightDirection, halfDirection));
- float3 specularColor = 0.0;
- float specularMonochrome;
- float depth = saturate((sceneZ-partZ)/_Depth);
- float RimAllphaMultiply = ((saturate((sceneZ-partZ)/_RimDistance)-pow(saturate((sceneZ-partZ)/_RimSize),_Rimfalloff))*_RimColor.a); // Control rim opacity with color alpha
- float node_2352 = WaveSpeed;
- fixed2 rimTiling = (Tiling*_Rimtiling);
- fixed2 rimPanningU = (rimTiling+node_2352*float2(0.5,0.1));
- float4 rimU_Tex = tex2D(_Shadermap,rimPanningU);
- fixed2 rimPanningV = (rimTiling+node_2352*float2(0,1));
- float4 rimV_Tex = tex2D(_Shadermap,rimPanningV);
- float Intersection = saturate((RimAllphaMultiply+(RimAllphaMultiply*(1.0 - (rimU_Tex.b*rimV_Tex.b))*_RimColor.a)));
- float2 node_5626 = ((Tiling*_WaveSize)+(WaveSpeed*0.5)*float2(0,1));
- float4 HeightmapTex = tex2D(_Shadermap,node_5626);
- float3 Color = saturate((lerp(lerp(_FresnelColor.rgb,lerp(lerp(_WaterColor.rgb,(_WaterColor.rgb*(1.0 - _Depthdarkness)),depth),_RimColor.rgb,Intersection),(1.0 - (pow((1.0-max(0,dot(i.normalDir, viewDirection))),_Fresnelexponent)*_FresnelColor.a))),float3(1,1,1),SurfaceHighlights)-(HeightmapTex.g*_Wavetint)));
- float3 diffuseColor = Color; // Need this for specular when using metallic
- diffuseColor = DiffuseAndSpecularFromMetallic( diffuseColor, specularColor, specularColor, specularMonochrome );
- specularMonochrome = 1.0-specularMonochrome;
- float NdotV = max(0.0,dot( normalDirection, viewDirection ));
- float NdotH = max(0.0,dot( normalDirection, halfDirection ));
- float VdotH = max(0.0,dot( viewDirection, halfDirection ));
- float visTerm = SmithJointGGXVisibilityTerm( NdotL, NdotV, 1.0-gloss );
- float normTerm = max(0.0, GGXTerm(NdotH, 1.0-gloss));
- float specularPBL = (NdotL*visTerm*normTerm) * (UNITY_PI / 4);
- if (IsGammaSpace())
- specularPBL = sqrt(max(1e-4h, specularPBL));
- specularPBL = max(0, specularPBL * NdotL);
- float3 directSpecular = attenColor*specularPBL*FresnelTerm(specularColor, LdotH);
- float3 specular = directSpecular;
- /////// Diffuse:
- NdotL = max(0.0,dot( normalDirection, lightDirection ));
- half fd90 = 0.5 + 2 * LdotH * LdotH * (1-gloss);
- float nlPow5 = Pow5(1-NdotL);
- float nvPow5 = Pow5(1-NdotV);
- float3 directDiffuse = ((1 +(fd90 - 1)*nlPow5) * (1 + (fd90 - 1)*nvPow5) * NdotL) * attenColor;
- float3 indirectDiffuse = float3(0,0,0);
- indirectDiffuse += UNITY_LIGHTMODEL_AMBIENT.rgb; // Ambient Light
- float3 Reflection = saturate((_Glossiness*texCUBE(_Reflection,viewReflectDirection).rgb));
- indirectDiffuse += Reflection; // Diffuse Ambient Light
- float3 diffuse = (directDiffuse + indirectDiffuse) * diffuseColor;
- /// Final Color:
- float3 finalColor = diffuse + specular;
- float node_8832 = Intersection;
- float Opacity = saturate(( (_Transparency+node_8832) > 0.5 ? (1.0-(1.0-2.0*((_Transparency+node_8832)-0.5))*(1.0-depth)) : (2.0*(_Transparency+node_8832)*depth) ));
- fixed4 finalRGBA = fixed4(lerp(sceneColor.rgb, finalColor,Opacity),1);
- UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
- return finalRGBA;
- }
- ENDCG
- }
- Pass {
- Name "FORWARD_DELTA"
- Tags {
- "LightMode"="ForwardAdd"
- }
- Blend One One
- ZWrite Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #define UNITY_PASS_FORWARDADD
- #include "UnityCG.cginc"
- #include "AutoLight.cginc"
- #include "UnityPBSLighting.cginc"
- #include "UnityStandardBRDF.cginc"
- #pragma multi_compile_fwdadd
- #pragma multi_compile_fog
- #pragma exclude_renderers d3d11_9x xbox360 ps3 psp2
- #pragma target 3.0
- #pragma glsl
- uniform sampler2D _GrabTexture;
- uniform sampler2D _CameraDepthTexture;
- uniform float4 _TimeEditor;
- uniform fixed _RimSize;
- uniform fixed4 _WaterColor;
- uniform fixed4 _RimColor;
- uniform sampler2D _Shadermap;
- uniform fixed _Tiling;
- uniform float _RefractionAmount;
- uniform float _Transparency;
- uniform sampler2D _Normals;
- uniform fixed _Wavesspeed;
- uniform float _Glossiness;
- uniform float _Wavesstrength;
- uniform fixed _Depth;
- uniform fixed _Depthdarkness;
- uniform fixed _Rimtiling;
- uniform fixed _Worldspacetiling;
- uniform fixed _Rimfalloff;
- uniform float _SurfaceHighlight;
- uniform float _Surfacehightlightsize;
- uniform float _SurfaceHightlighttiling;
- uniform float _Fresnelexponent;
- uniform float4 _FresnelColor;
- uniform float _RimDistance;
- uniform fixed _HighlightPanning;
- uniform float _Wavetint;
- uniform float _WaveSize;
- uniform float _NormalStrength;
- uniform float _UseIntersectionHighlight;
- struct VertexInput {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- float4 tangent : TANGENT;
- float2 texcoord0 : TEXCOORD0;
- };
- struct VertexOutput {
- float4 pos : SV_POSITION;
- float2 uv0 : TEXCOORD0;
- float4 posWorld : TEXCOORD1;
- float3 normalDir : TEXCOORD2;
- float3 tangentDir : TEXCOORD3;
- float3 bitangentDir : TEXCOORD4;
- float4 screenPos : TEXCOORD5;
- float4 projPos : TEXCOORD6;
- LIGHTING_COORDS(7,8)
- UNITY_FOG_COORDS(9)
- };
- VertexOutput vert (VertexInput v) {
- VertexOutput o = (VertexOutput)0;
- o.uv0 = v.texcoord0;
- o.normalDir = UnityObjectToWorldNormal(v.normal);
- o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );
- o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
- float4 Time = _Time + _TimeEditor;
- float WaveSpeed = (Time.g*(_Wavesspeed*0.1));
- fixed2 Tiling = (lerp( ((-20.0)*o.uv0), mul(unity_ObjectToWorld, v.vertex).rgb.rb, _Worldspacetiling )*(1.0 - _Tiling));
- float2 node_5626 = ((Tiling*_WaveSize)+(WaveSpeed*0.5)*float2(0,1));
- float4 HeightmapTex = tex2Dlod(_Shadermap,float4(node_5626,0.0,0));
- float DisplacementDirection = (HeightmapTex.g*_Wavesstrength);
- float3 Displacement = (v.normal*DisplacementDirection);
- float3 node_933 = Displacement;
- v.vertex.xyz += node_933;
- o.posWorld = mul(unity_ObjectToWorld, v.vertex);
- float3 lightColor = _LightColor0.rgb;
- o.pos = UnityObjectToClipPos(v.vertex );
- UNITY_TRANSFER_FOG(o,o.pos);
- o.projPos = ComputeScreenPos (o.pos);
- COMPUTE_EYEDEPTH(o.projPos.z);
- o.screenPos = o.pos;
- TRANSFER_VERTEX_TO_FRAGMENT(o)
- return o;
- }
- float4 frag(VertexOutput i) : COLOR {
- #if UNITY_UV_STARTS_AT_TOP
- float grabSign = -_ProjectionParams.x;
- #else
- float grabSign = _ProjectionParams.x;
- #endif
- i.normalDir = normalize(i.normalDir);
- i.screenPos = float4( i.screenPos.xy / i.screenPos.w, 0, 0 );
- i.screenPos.y *= _ProjectionParams.x;
- float3x3 tangentTransform = float3x3( i.tangentDir, i.bitangentDir, i.normalDir);
- float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
- float4 Time = _Time + _TimeEditor;
- float WaveSpeed = (Time.g*(_Wavesspeed*0.1));
- fixed mWaveSpeed = WaveSpeed;
- fixed2 Tiling = (lerp( ((-20.0)*i.uv0), i.posWorld.rgb.rb, _Worldspacetiling )*(1.0 - _Tiling));
- fixed2 mTiling = Tiling;
- fixed2 WavePanningV = (mTiling+mWaveSpeed*float2(0,1));
- fixed3 WavePanningV_Tex = UnpackNormal(tex2D(_Normals,WavePanningV));
- fixed2 WavePanningU = (mTiling+mWaveSpeed*float2(0.1,0));
- fixed3 WavePanningU_Tex = UnpackNormal(tex2D(_Normals,WavePanningU));
- float3 WaveNormalBlend_nrm_base = WavePanningV_Tex.rgb + float3(0,0,1);
- float3 WaveNormalBlend_nrm_detail = WavePanningU_Tex.rgb * float3(-1,-1,1);
- float3 WaveNormalBlend_nrm_combined = WaveNormalBlend_nrm_base*dot(WaveNormalBlend_nrm_base, WaveNormalBlend_nrm_detail)/WaveNormalBlend_nrm_base.z - WaveNormalBlend_nrm_detail;
- float3 WaveNormalBlend = WaveNormalBlend_nrm_combined;
- float2 HighlightPanningV = (WavePanningV*_SurfaceHightlighttiling);
- float4 HighlightPanningV_Tex = tex2D(_Shadermap,HighlightPanningV);
- float node_8200 = lerp(HighlightPanningV_Tex.r,HighlightPanningV_Tex.b,_UseIntersectionHighlight);
- float2 HightlightPanningU = (WavePanningU*_SurfaceHightlighttiling);
- float4 HightlightPanningU_Tex = tex2D(_Shadermap,HightlightPanningU);
- float node_5823 = lerp(HightlightPanningU_Tex.r,HightlightPanningU_Tex.b,_UseIntersectionHighlight);
- float SurfaceHighlights = saturate((_SurfaceHighlight*lerp(step(_Surfacehightlightsize,(node_8200-node_5823)),(1.0 - lerp( node_5823, (node_8200*node_5823), _HighlightPanning )),_UseIntersectionHighlight)));
- float3 Normals = lerp(i.normalDir,lerp(WaveNormalBlend,float3(0,0,1),SurfaceHighlights),_NormalStrength);
- float3 normalLocal = Normals;
- float3 normalDirection = normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
- float sceneZ = max(0,LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)))) - _ProjectionParams.g);
- float partZ = max(0,i.projPos.z - _ProjectionParams.g);
- float2 Refraction = (_RefractionAmount*float2(WavePanningV_Tex.r,WavePanningU_Tex.g));
- float2 sceneUVs = float2(1,grabSign)*i.screenPos.xy*0.5+0.5 + Refraction;
- float4 sceneColor = tex2D(_GrabTexture, sceneUVs);
- float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));
- float3 lightColor = _LightColor0.rgb;
- float3 halfDirection = normalize(viewDirection+lightDirection);
- ////// Lighting:
- float attenuation = LIGHT_ATTENUATION(i);
- float3 attenColor = attenuation * _LightColor0.xyz;
- float Pi = 3.141592654;
- float InvPi = 0.31830988618;
- ///////// Gloss:
- float Roughness = (saturate((1.0-(1.0-WavePanningV_Tex.r)*(1.0-WavePanningU_Tex.g)))*_Glossiness);
- float gloss = 1.0 - Roughness; // Convert roughness to gloss
- float specPow = exp2( gloss * 10.0+1.0);
- ////// Specular:
- float NdotL = max(0, dot( normalDirection, lightDirection ));
- float LdotH = max(0.0,dot(lightDirection, halfDirection));
- float3 specularColor = 0.0;
- float specularMonochrome;
- float depth = saturate((sceneZ-partZ)/_Depth);
- float RimAllphaMultiply = ((saturate((sceneZ-partZ)/_RimDistance)-pow(saturate((sceneZ-partZ)/_RimSize),_Rimfalloff))*_RimColor.a); // Control rim opacity with color alpha
- float node_2352 = WaveSpeed;
- fixed2 rimTiling = (Tiling*_Rimtiling);
- fixed2 rimPanningU = (rimTiling+node_2352*float2(0.5,0.1));
- float4 rimU_Tex = tex2D(_Shadermap,rimPanningU);
- fixed2 rimPanningV = (rimTiling+node_2352*float2(0,1));
- float4 rimV_Tex = tex2D(_Shadermap,rimPanningV);
- float Intersection = saturate((RimAllphaMultiply+(RimAllphaMultiply*(1.0 - (rimU_Tex.b*rimV_Tex.b))*_RimColor.a)));
- float2 node_5626 = ((Tiling*_WaveSize)+(WaveSpeed*0.5)*float2(0,1));
- float4 HeightmapTex = tex2D(_Shadermap,node_5626);
- float3 Color = saturate((lerp(lerp(_FresnelColor.rgb,lerp(lerp(_WaterColor.rgb,(_WaterColor.rgb*(1.0 - _Depthdarkness)),depth),_RimColor.rgb,Intersection),(1.0 - (pow((1.0-max(0,dot(i.normalDir, viewDirection))),_Fresnelexponent)*_FresnelColor.a))),float3(1,1,1),SurfaceHighlights)-(HeightmapTex.g*_Wavetint)));
- float3 diffuseColor = Color; // Need this for specular when using metallic
- diffuseColor = DiffuseAndSpecularFromMetallic( diffuseColor, specularColor, specularColor, specularMonochrome );
- specularMonochrome = 1.0-specularMonochrome;
- float NdotV = max(0.0,dot( normalDirection, viewDirection ));
- float NdotH = max(0.0,dot( normalDirection, halfDirection ));
- float VdotH = max(0.0,dot( viewDirection, halfDirection ));
- float visTerm = SmithJointGGXVisibilityTerm( NdotL, NdotV, 1.0-gloss );
- float normTerm = max(0.0, GGXTerm(NdotH, 1.0-gloss));
- float specularPBL = (NdotL*visTerm*normTerm) * (UNITY_PI / 4);
- if (IsGammaSpace())
- specularPBL = sqrt(max(1e-4h, specularPBL));
- specularPBL = max(0, specularPBL * NdotL);
- float3 directSpecular = attenColor*specularPBL*FresnelTerm(specularColor, LdotH);
- float3 specular = directSpecular;
- /////// Diffuse:
- NdotL = max(0.0,dot( normalDirection, lightDirection ));
- half fd90 = 0.5 + 2 * LdotH * LdotH * (1-gloss);
- float nlPow5 = Pow5(1-NdotL);
- float nvPow5 = Pow5(1-NdotV);
- float3 directDiffuse = ((1 +(fd90 - 1)*nlPow5) * (1 + (fd90 - 1)*nvPow5) * NdotL) * attenColor;
- float3 diffuse = directDiffuse * diffuseColor;
- /// Final Color:
- float3 finalColor = diffuse + specular;
- float node_8832 = Intersection;
- float Opacity = saturate(( (_Transparency+node_8832) > 0.5 ? (1.0-(1.0-2.0*((_Transparency+node_8832)-0.5))*(1.0-depth)) : (2.0*(_Transparency+node_8832)*depth) ));
- fixed4 finalRGBA = fixed4(finalColor * Opacity,0);
- UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
- return finalRGBA;
- }
- ENDCG
- }
- }
- FallBack "Unlit/Transparent"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement