Advertisement
Guest User

Water Shading

a guest
Jan 19th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2.  
  3. // Shader created with Shader Forge v1.38
  4. // Shader Forge (c) Neat Corporation / Joachim Holmer - http://www.acegikmo.com/shaderforge/
  5. // Note: Manually altering this data may prevent you from opening it in Shader Forge
  6. /*SF_DATA;ver:1.38;sub:START;pass:START;ps:flbk:,iptp:0,cusa:False,bamd:0,cgin:,lico:0,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,imps:True,rpth:0,vtps:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:False,tesm:0,olmd:1,culm:0,bsrc:3,bdst:7,dpts:2,wrdp:False,dith:0,atcv:False,rfrpo:True,rfrpn:Refraction,coma:15,ufog:True,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:False,atwp:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False,fnsp:False,fnfb:False,fsmp:False;n:type:ShaderForge.SFN_Final,id:9361,x:35942,y:31973,varname:node_9361,prsc:2|normal-3007-OUT,custl-6326-OUT,alpha-6819-OUT,refract-5113-OUT,disp-1849-OUT,tess-5431-OUT;n:type:ShaderForge.SFN_DepthBlend,id:9071,x:33493,y:32938,varname:node_9071,prsc:2;n:type:ShaderForge.SFN_ViewVector,id:8669,x:32990,y:32678,varname:node_8669,prsc:2;n:type:ShaderForge.SFN_Dot,id:2252,x:33227,y:32710,varname:node_2252,prsc:2,dt:0|A-8669-OUT,B-1231-OUT;n:type:ShaderForge.SFN_Vector3,id:1231,x:32971,y:32868,varname:node_1231,prsc:2,v1:0,v2:1,v3:0;n:type:ShaderForge.SFN_Multiply,id:9704,x:34002,y:32647,varname:node_9704,prsc:2|A-2252-OUT,B-9071-OUT,C-2510-OUT;n:type:ShaderForge.SFN_Add,id:8294,x:34002,y:32784,varname:node_8294,prsc:2|A-9704-OUT,B-9071-OUT;n:type:ShaderForge.SFN_Slider,id:2510,x:32931,y:33068,ptovrint:False,ptlb:UpViewForce,ptin:_UpViewForce,varname:node_2510,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0,max:3;n:type:ShaderForge.SFN_Color,id:912,x:34367,y:31851,ptovrint:False,ptlb:Water Color,ptin:_WaterColor,varname:node_912,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.3474265,c2:0.7000254,c3:0.75,c4:1;n:type:ShaderForge.SFN_LightVector,id:2922,x:33284,y:31829,varname:node_2922,prsc:2;n:type:ShaderForge.SFN_NormalVector,id:9763,x:33295,y:31978,prsc:2,pt:True;n:type:ShaderForge.SFN_Dot,id:7794,x:33621,y:31977,varname:node_7794,prsc:2,dt:3|A-2922-OUT,B-9763-OUT;n:type:ShaderForge.SFN_Tex2d,id:7722,x:34353,y:31503,varname:node_7722,prsc:2,ntxv:3,isnm:True|UVIN-2268-UVOUT,TEX-8656-TEX;n:type:ShaderForge.SFN_Add,id:653,x:34607,y:31983,varname:node_653,prsc:2|A-912-RGB,B-5295-OUT;n:type:ShaderForge.SFN_Append,id:2892,x:34234,y:32298,varname:node_2892,prsc:2|A-7722-R,B-7722-G;n:type:ShaderForge.SFN_Multiply,id:5113,x:34528,y:32629,varname:node_5113,prsc:2|A-2892-OUT,B-6819-OUT,C-7167-OUT;n:type:ShaderForge.SFN_Slider,id:7167,x:34077,y:32464,ptovrint:False,ptlb:Refraction,ptin:_Refraction,varname:node_7167,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0,max:1;n:type:ShaderForge.SFN_Multiply,id:6819,x:34528,y:32802,varname:node_6819,prsc:2|A-8294-OUT,B-4920-OUT;n:type:ShaderForge.SFN_Slider,id:4920,x:33863,y:33076,ptovrint:False,ptlb:Depth Force,ptin:_DepthForce,varname:node_4920,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0,max:1;n:type:ShaderForge.SFN_Power,id:1017,x:33809,y:32130,varname:node_1017,prsc:2|VAL-7794-OUT,EXP-5590-OUT;n:type:ShaderForge.SFN_Slider,id:6496,x:33112,y:32146,ptovrint:False,ptlb:Specular Definition,ptin:_SpecularDefinition,varname:node_6496,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0,max:1;n:type:ShaderForge.SFN_Exp,id:1354,x:33489,y:32092,varname:node_1354,prsc:2,et:0|IN-6496-OUT;n:type:ShaderForge.SFN_Multiply,id:5590,x:33489,y:32252,varname:node_5590,prsc:2|A-1354-OUT,B-6099-OUT;n:type:ShaderForge.SFN_Vector1,id:6099,x:33175,y:32248,varname:node_6099,prsc:2,v1:4;n:type:ShaderForge.SFN_Panner,id:2268,x:33922,y:31480,varname:node_2268,prsc:2,spu:1,spv:1|UVIN-49-OUT,DIST-1761-OUT;n:type:ShaderForge.SFN_Time,id:5400,x:33377,y:31683,varname:node_5400,prsc:2;n:type:ShaderForge.SFN_Slider,id:4468,x:32969,y:31703,ptovrint:False,ptlb:Waves Speed,ptin:_WavesSpeed,varname:node_4468,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0.5,max:1;n:type:ShaderForge.SFN_Multiply,id:1761,x:33665,y:31570,varname:node_1761,prsc:2|A-4468-OUT,B-5400-T;n:type:ShaderForge.SFN_Tex2dAsset,id:8656,x:33920,y:31246,ptovrint:False,ptlb:WaterNormal,ptin:_WaterNormal,varname:node_8656,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,ntxv:3,isnm:True;n:type:ShaderForge.SFN_Slider,id:6053,x:33413,y:32472,ptovrint:False,ptlb:Specular Power,ptin:_SpecularPower,varname:node_6053,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:1,cur:1,max:10;n:type:ShaderForge.SFN_Multiply,id:2063,x:34055,y:32099,varname:node_2063,prsc:2|A-1017-OUT,B-6053-OUT;n:type:ShaderForge.SFN_Tex2d,id:4564,x:34454,y:31691,varname:node_4564,prsc:2,ntxv:0,isnm:False|UVIN-4203-OUT,TEX-8656-TEX;n:type:ShaderForge.SFN_Panner,id:4590,x:33886,y:31667,varname:node_4590,prsc:2,spu:0.33,spv:0.256|UVIN-49-OUT,DIST-1761-OUT;n:type:ShaderForge.SFN_NormalBlend,id:3007,x:34873,y:31816,varname:node_3007,prsc:2|BSE-7722-RGB,DTL-4564-RGB;n:type:ShaderForge.SFN_LightAttenuation,id:9331,x:34488,y:32251,varname:node_9331,prsc:2;n:type:ShaderForge.SFN_Multiply,id:6326,x:34766,y:32109,varname:node_6326,prsc:2|A-653-OUT,B-9331-OUT;n:type:ShaderForge.SFN_Vector1,id:9413,x:33886,y:31826,varname:node_9413,prsc:2,v1:0.5;n:type:ShaderForge.SFN_Multiply,id:4203,x:34182,y:31683,varname:node_4203,prsc:2|A-4590-UVOUT,B-9413-OUT;n:type:ShaderForge.SFN_FragmentPosition,id:9662,x:32928,y:31340,varname:node_9662,prsc:2;n:type:ShaderForge.SFN_Append,id:49,x:33175,y:31348,varname:node_49,prsc:2|A-9662-X,B-9662-Z;n:type:ShaderForge.SFN_Posterize,id:5295,x:34296,y:32099,varname:node_5295,prsc:2|IN-2063-OUT,STPS-2560-OUT;n:type:ShaderForge.SFN_Vector1,id:2560,x:34036,y:32239,varname:node_2560,prsc:2,v1:2;n:type:ShaderForge.SFN_Slider,id:5431,x:35799,y:32695,ptovrint:False,ptlb:Tesellation,ptin:_Tesellation,varname:node_5431,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:1,cur:1,max:20;n:type:ShaderForge.SFN_Tex2d,id:6117,x:34994,y:32349,varname:node_6117,prsc:2,ntxv:0,isnm:False|UVIN-2268-UVOUT,TEX-3643-TEX;n:type:ShaderForge.SFN_Append,id:1849,x:35643,y:32398,varname:node_1849,prsc:2|A-4616-OUT,B-6872-OUT,C-4616-OUT;n:type:ShaderForge.SFN_Vector1,id:4616,x:35643,y:32346,varname:node_4616,prsc:2,v1:0;n:type:ShaderForge.SFN_Tex2dAsset,id:3643,x:34659,y:32426,ptovrint:False,ptlb:Wave Foam,ptin:_WaveFoam,varname:node_3643,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Tex2d,id:7873,x:32344,y:33904,ptovrint:False,ptlb:Normal_copy,ptin:_Normal_copy,varname:_Normal_copy,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,tex:dc9196df32ffdc04da99f757b6873f1a,ntxv:3,isnm:True|UVIN-4287-UVOUT;n:type:ShaderForge.SFN_TexCoord,id:4287,x:31858,y:33813,varname:node_4287,prsc:2,uv:0,uaff:False;n:type:ShaderForge.SFN_Slider,id:1971,x:35025,y:32725,ptovrint:False,ptlb:Waves Strength,ptin:_WavesStrength,varname:node_1971,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:0,cur:0.1,max:1;n:type:ShaderForge.SFN_Add,id:4709,x:35423,y:32482,varname:node_4709,prsc:2|A-6117-R,B-5374-R;n:type:ShaderForge.SFN_Multiply,id:6872,x:35423,y:32604,varname:node_6872,prsc:2|A-4709-OUT,B-1971-OUT;n:type:ShaderForge.SFN_Tex2d,id:5374,x:34994,y:32506,varname:node_5374,prsc:2,ntxv:0,isnm:False|UVIN-4590-UVOUT,TEX-3643-TEX;proporder:2510-912-7167-4920-6496-4468-8656-6053-5431-3643-1971;pass:END;sub:END;*/
  7.  
  8. Shader "IdealGf/Water Shader" {
  9.     Properties {
  10.         _UpViewForce ("UpViewForce", Range(0, 3)) = 0
  11.         _WaterColor ("Water Color", Color) = (0.3474265,0.7000254,0.75,1)
  12.         _Refraction ("Refraction", Range(0, 1)) = 0
  13.         _DepthForce ("Depth Force", Range(0, 1)) = 0
  14.         _SpecularDefinition ("Specular Definition", Range(0, 1)) = 0
  15.         _WavesSpeed ("Waves Speed", Range(0, 1)) = 0.5
  16.         _WaterNormal ("WaterNormal", 2D) = "bump" {}
  17.         _SpecularPower ("Specular Power", Range(1, 10)) = 1
  18.         _Tesellation ("Tesellation", Range(1, 20)) = 1
  19.         _WaveFoam ("Wave Foam", 2D) = "white" {}
  20.         _WavesStrength ("Waves Strength", Range(0, 1)) = 0.1
  21.         [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
  22.     }
  23.     SubShader {
  24.         Tags {
  25.             "IgnoreProjector"="True"
  26.             "Queue"="Transparent"
  27.             "RenderType"="Transparent"
  28.         }
  29.         GrabPass{ }
  30.         Pass {
  31.             Name "FORWARD"
  32.             Tags {
  33.                 "LightMode"="ForwardBase"
  34.             }
  35.             Blend SrcAlpha OneMinusSrcAlpha
  36.             ZWrite Off
  37.            
  38.             CGPROGRAM
  39.             #pragma hull hull
  40.             #pragma domain domain
  41.             #pragma vertex tessvert
  42.             #pragma fragment frag
  43.             #define UNITY_PASS_FORWARDBASE
  44.             #include "UnityCG.cginc"
  45.             #include "Lighting.cginc"
  46.             #include "Tessellation.cginc"
  47.             #pragma multi_compile_fwdbase
  48.             #pragma multi_compile_fog
  49.             #pragma only_renderers d3d9 d3d11 glcore gles
  50.             #pragma target 5.0
  51.             uniform sampler2D _GrabTexture;
  52.             uniform sampler2D _CameraDepthTexture;
  53.             uniform float _UpViewForce;
  54.             uniform float4 _WaterColor;
  55.             uniform float _Refraction;
  56.             uniform float _DepthForce;
  57.             uniform float _SpecularDefinition;
  58.             uniform float _WavesSpeed;
  59.             uniform sampler2D _WaterNormal; uniform float4 _WaterNormal_ST;
  60.             uniform float _SpecularPower;
  61.             uniform float _Tesellation;
  62.             uniform sampler2D _WaveFoam; uniform float4 _WaveFoam_ST;
  63.             uniform float _WavesStrength;
  64.             struct VertexInput {
  65.                 float4 vertex : POSITION;
  66.                 float3 normal : NORMAL;
  67.                 float4 tangent : TANGENT;
  68.             };
  69.             struct VertexOutput {
  70.                 float4 pos : SV_POSITION;
  71.                 float4 posWorld : TEXCOORD0;
  72.                 float3 normalDir : TEXCOORD1;
  73.                 float3 tangentDir : TEXCOORD2;
  74.                 float3 bitangentDir : TEXCOORD3;
  75.                 float4 projPos : TEXCOORD4;
  76.                 UNITY_FOG_COORDS(5)
  77.             };
  78.             VertexOutput vert (VertexInput v) {
  79.                 VertexOutput o = (VertexOutput)0;
  80.                 o.normalDir = UnityObjectToWorldNormal(v.normal);
  81.                 o.tangentDir = normalize( mul( unity_ObjectToWorld, float4( v.tangent.xyz, 0.0 ) ).xyz );
  82.                 o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w);
  83.                 o.posWorld = mul(unity_ObjectToWorld, v.vertex);
  84.                 o.pos = UnityObjectToClipPos( v.vertex );
  85.                 UNITY_TRANSFER_FOG(o,o.pos);
  86.                 o.projPos = ComputeScreenPos (o.pos);
  87.                 COMPUTE_EYEDEPTH(o.projPos.z);
  88.                 return o;
  89.             }
  90.             #ifdef UNITY_CAN_COMPILE_TESSELLATION
  91.                 struct TessVertex {
  92.                     float4 vertex : INTERNALTESSPOS;
  93.                     float3 normal : NORMAL;
  94.                     float4 tangent : TANGENT;
  95.                 };
  96.                 struct OutputPatchConstant {
  97.                     float edge[3]         : SV_TessFactor;
  98.                     float inside          : SV_InsideTessFactor;
  99.                     float3 vTangent[4]    : TANGENT;
  100.                     float2 vUV[4]         : TEXCOORD;
  101.                     float3 vTanUCorner[4] : TANUCORNER;
  102.                     float3 vTanVCorner[4] : TANVCORNER;
  103.                     float4 vCWts          : TANWEIGHTS;
  104.                 };
  105.                 TessVertex tessvert (VertexInput v) {
  106.                     TessVertex o;
  107.                     o.vertex = v.vertex;
  108.                     o.normal = v.normal;
  109.                     o.tangent = v.tangent;
  110.                     return o;
  111.                 }
  112.                 void displacement (inout VertexInput v){
  113.                     float node_4616 = 0.0;
  114.                     float4 node_5400 = _Time;
  115.                     float node_1761 = (_WavesSpeed*node_5400.g);
  116.                     float2 node_49 = float2(mul(unity_ObjectToWorld, v.vertex).r,mul(unity_ObjectToWorld, v.vertex).b);
  117.                     float2 node_2268 = (node_49+node_1761*float2(1,1));
  118.                     float4 node_6117 = tex2Dlod(_WaveFoam,float4(TRANSFORM_TEX(node_2268, _WaveFoam),0.0,0));
  119.                     float2 node_4590 = (node_49+node_1761*float2(0.33,0.256));
  120.                     float4 node_5374 = tex2Dlod(_WaveFoam,float4(TRANSFORM_TEX(node_4590, _WaveFoam),0.0,0));
  121.                     v.vertex.xyz += float3(node_4616,((node_6117.r+node_5374.r)*_WavesStrength),node_4616);
  122.                 }
  123.                 float Tessellation(TessVertex v){
  124.                     return _Tesellation;
  125.                 }
  126.                 float4 Tessellation(TessVertex v, TessVertex v1, TessVertex v2){
  127.                     float tv = Tessellation(v);
  128.                     float tv1 = Tessellation(v1);
  129.                     float tv2 = Tessellation(v2);
  130.                     return float4( tv1+tv2, tv2+tv, tv+tv1, tv+tv1+tv2 ) / float4(2,2,2,3);
  131.                 }
  132.                 OutputPatchConstant hullconst (InputPatch<TessVertex,3> v) {
  133.                     OutputPatchConstant o = (OutputPatchConstant)0;
  134.                     float4 ts = Tessellation( v[0], v[1], v[2] );
  135.                     o.edge[0] = ts.x;
  136.                     o.edge[1] = ts.y;
  137.                     o.edge[2] = ts.z;
  138.                     o.inside = ts.w;
  139.                     return o;
  140.                 }
  141.                 [domain("tri")]
  142.                 [partitioning("fractional_odd")]
  143.                 [outputtopology("triangle_cw")]
  144.                 [patchconstantfunc("hullconst")]
  145.                 [outputcontrolpoints(3)]
  146.                 TessVertex hull (InputPatch<TessVertex,3> v, uint id : SV_OutputControlPointID) {
  147.                     return v[id];
  148.                 }
  149.                 [domain("tri")]
  150.                 VertexOutput domain (OutputPatchConstant tessFactors, const OutputPatch<TessVertex,3> vi, float3 bary : SV_DomainLocation) {
  151.                     VertexInput v = (VertexInput)0;
  152.                     v.vertex = vi[0].vertex*bary.x + vi[1].vertex*bary.y + vi[2].vertex*bary.z;
  153.                     v.normal = vi[0].normal*bary.x + vi[1].normal*bary.y + vi[2].normal*bary.z;
  154.                     v.tangent = vi[0].tangent*bary.x + vi[1].tangent*bary.y + vi[2].tangent*bary.z;
  155.                     displacement(v);
  156.                     VertexOutput o = vert(v);
  157.                     return o;
  158.                 }
  159.             #endif
  160.             float4 frag(VertexOutput i) : COLOR {
  161.                 i.normalDir = normalize(i.normalDir);
  162.                 float3x3 tangentTransform = float3x3( i.tangentDir, i.bitangentDir, i.normalDir);
  163.                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
  164.                 float4 node_5400 = _Time;
  165.                 float node_1761 = (_WavesSpeed*node_5400.g);
  166.                 float2 node_49 = float2(i.posWorld.r,i.posWorld.b);
  167.                 float2 node_2268 = (node_49+node_1761*float2(1,1));
  168.                 float3 node_7722 = UnpackNormal(tex2D(_WaterNormal,TRANSFORM_TEX(node_2268, _WaterNormal)));
  169.                 float2 node_4590 = (node_49+node_1761*float2(0.33,0.256));
  170.                 float2 node_4203 = (node_4590*0.5);
  171.                 float3 node_4564 = UnpackNormal(tex2D(_WaterNormal,TRANSFORM_TEX(node_4203, _WaterNormal)));
  172.                 float3 node_3007_nrm_base = node_7722.rgb + float3(0,0,1);
  173.                 float3 node_3007_nrm_detail = node_4564.rgb * float3(-1,-1,1);
  174.                 float3 node_3007_nrm_combined = node_3007_nrm_base*dot(node_3007_nrm_base, node_3007_nrm_detail)/node_3007_nrm_base.z - node_3007_nrm_detail;
  175.                 float3 node_3007 = node_3007_nrm_combined;
  176.                 float3 normalLocal = node_3007;
  177.                 float3 normalDirection = normalize(mul( normalLocal, tangentTransform )); // Perturbed normals
  178.                 float sceneZ = max(0,LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)))) - _ProjectionParams.g);
  179.                 float partZ = max(0,i.projPos.z - _ProjectionParams.g);
  180.                 float node_9071 = saturate((sceneZ-partZ));
  181.                 float node_6819 = (((dot(viewDirection,float3(0,1,0))*node_9071*_UpViewForce)+node_9071)*_DepthForce);
  182.                 float2 sceneUVs = (i.projPos.xy / i.projPos.w) + (float2(node_7722.r,node_7722.g)*node_6819*_Refraction);
  183.                 float4 sceneColor = tex2D(_GrabTexture, sceneUVs);
  184.                 float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
  185. ////// Lighting:
  186.                 float attenuation = 1;
  187.                 float node_2560 = 2.0;
  188.                 float3 finalColor = ((_WaterColor.rgb+floor((pow(abs(dot(lightDirection,normalDirection)),(exp(_SpecularDefinition)*4.0))*_SpecularPower) * node_2560) / (node_2560 - 1))*attenuation);
  189.                 fixed4 finalRGBA = fixed4(lerp(sceneColor.rgb, finalColor,node_6819),1);
  190.                 UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
  191.                 return finalRGBA;
  192.             }
  193.             ENDCG
  194.         }
  195.         Pass {
  196.             Name "ShadowCaster"
  197.             Tags {
  198.                 "LightMode"="ShadowCaster"
  199.             }
  200.             Offset 1, 1
  201.             Cull Back
  202.            
  203.             CGPROGRAM
  204.             #pragma hull hull
  205.             #pragma domain domain
  206.             #pragma vertex tessvert
  207.             #pragma fragment frag
  208.             #define UNITY_PASS_SHADOWCASTER
  209.             #include "UnityCG.cginc"
  210.             #include "Lighting.cginc"
  211.             #include "Tessellation.cginc"
  212.             #pragma fragmentoption ARB_precision_hint_fastest
  213.             #pragma multi_compile_shadowcaster
  214.             #pragma multi_compile_fog
  215.             #pragma only_renderers d3d9 d3d11 glcore gles
  216.             #pragma target 5.0
  217.             uniform float _WavesSpeed;
  218.             uniform float _Tesellation;
  219.             uniform sampler2D _WaveFoam; uniform float4 _WaveFoam_ST;
  220.             uniform float _WavesStrength;
  221.             struct VertexInput {
  222.                 float4 vertex : POSITION;
  223.                 float3 normal : NORMAL;
  224.                 float4 tangent : TANGENT;
  225.             };
  226.             struct VertexOutput {
  227.                 V2F_SHADOW_CASTER;
  228.                 float4 posWorld : TEXCOORD1;
  229.             };
  230.             VertexOutput vert (VertexInput v) {
  231.                 VertexOutput o = (VertexOutput)0;
  232.                 o.posWorld = mul(unity_ObjectToWorld, v.vertex);
  233.                 o.pos = UnityObjectToClipPos( v.vertex );
  234.                 TRANSFER_SHADOW_CASTER(o)
  235.                 return o;
  236.             }
  237.             #ifdef UNITY_CAN_COMPILE_TESSELLATION
  238.                 struct TessVertex {
  239.                     float4 vertex : INTERNALTESSPOS;
  240.                     float3 normal : NORMAL;
  241.                     float4 tangent : TANGENT;
  242.                 };
  243.                 struct OutputPatchConstant {
  244.                     float edge[3]         : SV_TessFactor;
  245.                     float inside          : SV_InsideTessFactor;
  246.                     float3 vTangent[4]    : TANGENT;
  247.                     float2 vUV[4]         : TEXCOORD;
  248.                     float3 vTanUCorner[4] : TANUCORNER;
  249.                     float3 vTanVCorner[4] : TANVCORNER;
  250.                     float4 vCWts          : TANWEIGHTS;
  251.                 };
  252.                 TessVertex tessvert (VertexInput v) {
  253.                     TessVertex o;
  254.                     o.vertex = v.vertex;
  255.                     o.normal = v.normal;
  256.                     o.tangent = v.tangent;
  257.                     return o;
  258.                 }
  259.                 void displacement (inout VertexInput v){
  260.                     float node_4616 = 0.0;
  261.                     float4 node_5400 = _Time;
  262.                     float node_1761 = (_WavesSpeed*node_5400.g);
  263.                     float2 node_49 = float2(mul(unity_ObjectToWorld, v.vertex).r,mul(unity_ObjectToWorld, v.vertex).b);
  264.                     float2 node_2268 = (node_49+node_1761*float2(1,1));
  265.                     float4 node_6117 = tex2Dlod(_WaveFoam,float4(TRANSFORM_TEX(node_2268, _WaveFoam),0.0,0));
  266.                     float2 node_4590 = (node_49+node_1761*float2(0.33,0.256));
  267.                     float4 node_5374 = tex2Dlod(_WaveFoam,float4(TRANSFORM_TEX(node_4590, _WaveFoam),0.0,0));
  268.                     v.vertex.xyz += float3(node_4616,((node_6117.r+node_5374.r)*_WavesStrength),node_4616);
  269.                 }
  270.                 float Tessellation(TessVertex v){
  271.                     return _Tesellation;
  272.                 }
  273.                 float4 Tessellation(TessVertex v, TessVertex v1, TessVertex v2){
  274.                     float tv = Tessellation(v);
  275.                     float tv1 = Tessellation(v1);
  276.                     float tv2 = Tessellation(v2);
  277.                     return float4( tv1+tv2, tv2+tv, tv+tv1, tv+tv1+tv2 ) / float4(2,2,2,3);
  278.                 }
  279.                 OutputPatchConstant hullconst (InputPatch<TessVertex,3> v) {
  280.                     OutputPatchConstant o = (OutputPatchConstant)0;
  281.                     float4 ts = Tessellation( v[0], v[1], v[2] );
  282.                     o.edge[0] = ts.x;
  283.                     o.edge[1] = ts.y;
  284.                     o.edge[2] = ts.z;
  285.                     o.inside = ts.w;
  286.                     return o;
  287.                 }
  288.                 [domain("tri")]
  289.                 [partitioning("fractional_odd")]
  290.                 [outputtopology("triangle_cw")]
  291.                 [patchconstantfunc("hullconst")]
  292.                 [outputcontrolpoints(3)]
  293.                 TessVertex hull (InputPatch<TessVertex,3> v, uint id : SV_OutputControlPointID) {
  294.                     return v[id];
  295.                 }
  296.                 [domain("tri")]
  297.                 VertexOutput domain (OutputPatchConstant tessFactors, const OutputPatch<TessVertex,3> vi, float3 bary : SV_DomainLocation) {
  298.                     VertexInput v = (VertexInput)0;
  299.                     v.vertex = vi[0].vertex*bary.x + vi[1].vertex*bary.y + vi[2].vertex*bary.z;
  300.                     v.normal = vi[0].normal*bary.x + vi[1].normal*bary.y + vi[2].normal*bary.z;
  301.                     v.tangent = vi[0].tangent*bary.x + vi[1].tangent*bary.y + vi[2].tangent*bary.z;
  302.                     displacement(v);
  303.                     VertexOutput o = vert(v);
  304.                     return o;
  305.                 }
  306.             #endif
  307.             float4 frag(VertexOutput i) : COLOR {
  308.                 SHADOW_CASTER_FRAGMENT(i)
  309.             }
  310.             ENDCG
  311.         }
  312.     }
  313.     FallBack "Diffuse"
  314.     CustomEditor "ShaderForgeMaterialInspector"
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement