- Home /
 
               Question by 
               chirpywiz711 · Dec 29, 2018 at 11:56 PM · 
                shaderswaterfogvertex shader  
              
 
              Water Shader Reflection & Transparency Distance
I have a vertex shader and I would like to add a reflection, but only within a certain distance (like a fog, but only shown on the reflection) like this: 
I would also like it if you could only see so far into the water(again, like a fog, but contained inside the mesh) like this:  This is my code
 This is my code
 // Per pixel bumped refraction.
 // Uses a normal map to distort the image behind, and
 // an additional texture to tint the color.
 
 Shader "Chirpy/Water" {
     Properties{
         _BumpAmt("Distortion", range(0,128)) = 10
         _Albedo("Tint Color", color) = (1,1,1,1)
         _MainTex("Texture (RGB)", 2D) = "white" {}
         _BumpMap("Normalmap", 2D) = "bump" {}
     }
 
         Category{
 
         // We must be transparent, so other objects are drawn before this one.
         Tags { "Queue" = "Transparent" "RenderType" = "Opaque" }
 
 
         SubShader {
 
         // This pass grabs the screen behind the object into a texture.
         // We can access the result in the next pass as _GrabTexture
         GrabPass {
             Name "BASE"
             Tags { "LightMode" = "Always" }
         }
 
         // Main pass: Take the texture grabbed above and use the bumpmap to perturb it
         // on to the screen
         Pass {
             Name "BASE"
             Tags { "LightMode" = "Always" }
 
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 #pragma multi_compile_fog
 #include "UnityCG.cginc"
 
 struct appdata_t {
     float4 vertex : POSITION;
     float2 texcoord: TEXCOORD0;
 };
 
 struct v2f {
     float4 vertex : SV_POSITION;
     float4 uvgrab : TEXCOORD0;
     float2 uvbump : TEXCOORD1;
     float2 uvmain : TEXCOORD2;
     UNITY_FOG_COORDS(3)
 };
 
 float _BumpAmt;
 float4 _Albedo;
 float4 _BumpMap_ST;
 float4 _MainTex_ST;
 
 v2f vert(appdata_t v)
 {
     v2f o;
     o.vertex = UnityObjectToClipPos(v.vertex);
     o.uvgrab = ComputeGrabScreenPos(o.vertex);
     o.uvbump = TRANSFORM_TEX(v.texcoord, _BumpMap);
     o.uvmain = TRANSFORM_TEX(v.texcoord, _MainTex);
     UNITY_TRANSFER_FOG(o,o.vertex);
     return o;
 }
 
 sampler2D _GrabTexture;
 float4 _GrabTexture_TexelSize;
 sampler2D _BumpMap;
 sampler2D _MainTex;
 
 half4 frag(v2f i) : SV_Target
 {
     #if UNITY_SINGLE_PASS_STEREO
     i.uvgrab.xy = TransformStereoScreenSpaceTex(i.uvgrab.xy, i.uvgrab.w);
     #endif
 
 // calculate perturbed coordinates
 half2 bump = UnpackNormal(tex2D(_BumpMap, i.uvbump)).rg; // we could optimize this by just reading the x & y without reconstructing the Z
 float2 offset = bump * _BumpAmt * _GrabTexture_TexelSize.xy;
 #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5)
     i.uvgrab.xy = offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(i.uvgrab.z) + i.uvgrab.xy;
 #else
     i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
 #endif
 
 half4 col = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(i.uvgrab));
 half4 tint = tex2D(_MainTex, i.uvmain)*_Albedo;
 col *= tint;
 UNITY_APPLY_FOG(i.fogCoord, col);
 return col;
 }
 ENDCG
         }
     }
 
         // ------------------------------------------------------------------
         // Fallback for older cards and Unity non-Pro
 
         SubShader {
             Blend DstColor Zero
             Pass {
                 Name "BASE"
                 SetTexture[_MainTex] {    combine texture }
             }
         }
     }
 
 }
 
 
                 
                waterfog.png 
                (26.8 kB) 
               
 
                
                 
                waterrefl.png 
                (25.2 kB) 
               
 
              
               Comment
              
 
               
              Your answer
 
 
             Follow this Question
Related Questions
Shader Graph Water Vertex Manipulation, 0 Answers
[SOLVED] Turning Fog On in Shader Turns Object Pink! 0 Answers
'vert': output parameter 'o' not completely initialized 2 Answers
Single pass rendering + Custom fragment shader with lightmaps & reflection probes? 0 Answers
Can you specify both Surface and Vertex/Fragment shaders? 3 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                