how to combine these two shader Code (JavaScript): Shader "fluids"{ Properties { _Color ("Main Color", Color) = (1,1,1,1) _WaveScale ("Wave scale", Range (0.0002,0.0007)) = .07 _ColorControl ("Reflective color (RGB) fresnel (A) ", 2D) = "" { } _BumpMap ("Waves Normalmap ", 2D) = "" { } WaveSpeed ("Wave speed (map1 x,y; map2 x,y)", Vector) = (19,9,-16,-7) _ColorControlCube ("Reflective color cube (RGB) fresnel (A) ", Cube) = "" { TexGen CubeReflect } _MainTex ("Fallback texture", 2D) = "" { } } CGINCLUDE // ----------------------------------------------------------- // This section is included in all program sections below #include "UnityCG.cginc" uniform float4 _Color; uniform float4 WaveSpeed; uniform float _WaveScale; uniform float4 _WaveOffset; struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; }; struct v2f { float4 pos : SV_POSITION; float2 bumpuv[2] : TEXCOORD0; float3 viewDir : TEXCOORD2; }; v2f vert(appdata v) { v2f o; float4 s; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); // scroll bump waves float4 temp; temp.xyzw = v.vertex.xzxz * _WaveScale / unity_Scale.w + _WaveOffset; o.bumpuv[0] = temp.xy * float2(.5, .5); o.bumpuv[1] = temp.wz; // object space view direction o.viewDir.xzy = normalize( ObjSpaceViewDir(v.vertex) ); return o; } ENDCG // ----------------------------------------------------------- // Fragment program Subshader { Alphatest Greater 0 Tags {Queue=Transparent} Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest sampler2D _BumpMap; sampler2D _ColorControl; half4 frag( v2f i ) : COLOR { half3 bump1 = UnpackNormal(tex2D( _BumpMap, i.bumpuv[0] )).rgb; half3 bump2 = UnpackNormal(tex2D( _BumpMap, i.bumpuv[1] )).rgb; half3 bump = (bump1 + bump2) * 0.5; half fresnel = dot( i.viewDir, bump ); half4 water = tex2D( _ColorControl, float2(fresnel,fresnel) ); half4 col; col.rgb = water.rgb; col.a = _Color.a; return col; } ENDCG } } Fallback "Diffuse" } & Code (JavaScript): Shader "Fog"{ Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Alphatest Greater 0 Tags {Queue=Transparent} Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma surface surf Lambert vertex:myvert sampler2D _MainTex; uniform half4 unity_FogStart; uniform half4 unity_FogEnd; struct Input { float2 uv_MainTex; half fog; }; void myvert (inout appdata_full v, out Input data) { UNITY_INITIALIZE_OUTPUT(Input,data); float pos = length(mul (UNITY_MATRIX_MV, v.vertex).xyz); float diff = unity_FogEnd.x - unity_FogStart.x; float invDiff = 1.0f / diff; data.fog = clamp ((unity_FogEnd.x - pos) * invDiff, 0.0, 1.0); } void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = lerp (0, 1, IN.fog); } ENDCG } FallBack "Diffuse" }
Code (JavaScript): CGPROGRAM #pragma surface surf Lambert vertex:myvert sampler2D _MainTex; uniform half4 unity_FogStart; uniform half4 unity_FogEnd; struct Input { float2 uv_MainTex; half fog; }; void myvert (inout appdata_full v, out Input data) { UNITY_INITIALIZE_OUTPUT(Input,data); float pos = length(mul (UNITY_MATRIX_MV, v.vertex).xyz); float diff = unity_FogEnd.x - unity_FogStart.x; float invDiff = 1.0f / diff; data.fog = clamp ((unity_FogEnd.x - pos) * invDiff, 0.0, 1.0); } void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = lerp (0, 1, IN.fog); } ENDCG need to separate this part for pass shader, also