UnityShader水波效果

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ww1351646544/article/details/89063699

话不多说,先上图! 安罩小米8测试没有问题。

最近没上班在家学习,做了这个带点恐怖的密室逃脱类游戏弄了这个水波效果,和大家分享一下。在之前的例子里进行修改的,没看的同学可以点这里看下代码。传送门:

https://blog.csdn.net/ww1351646544/article/details/88605093

其实也很简单只是在原来的基础上多加了一个Pass来接受灯光效果,代码如下:

Pass {
			Tags{ "Lightmode" = "Forwardadd" }  
			Blend one one
			CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#include "lighting.cginc"
				#include "autolight.cginc"
		
				//阴影主要来源于这句
				#pragma multi_compile_fwdadd_fullshadows
				
				fixed4 _SpecularColor;
				float _SpecularScale;
				sampler2D _MainTex;
				float4 _MainTex_ST;
				float4 _Diffuse;

				struct a2v
				{
				    float4 vertex : POSITION;
				    float3 normal:NORMAL;
					float4 tangent:TANGENT;
				    float2 texcoord : TEXCOORD0;
				};

				struct v2f{
				    float4 pos:SV_POSITION;
				    float4 wpos:TEXCOORD0;
					float4 uv:TEXCOORD1;
					fixed3 wNormal:TEXCOORD2;
				    SHADOW_COORDS(3)
				};

				//顶点着色器
				v2f vert(a2v v)
				{
				    v2f o;
					o.pos=UnityObjectToClipPos(v.vertex);
					o.uv.xy=v.texcoord.xy*_MainTex_ST.xy+_MainTex_ST.zw;

					float3 worldNormal = UnityObjectToWorldNormal(v.normal);

					o.wpos = mul(UNITY_MATRIX_M,v.vertex);
					o.wNormal = worldNormal.xyz;

				    TRANSFER_SHADOW(o)

					return o;
				}
		
				fixed4 frag(v2f i) :COLOR
				{
					float3 worldPos= i.wpos.xyz;
				    float3 worldNormal = i.wNormal.xyz;
				    float3 worldLight = normalize(_WorldSpaceLightPos0).xyz;
				    UNITY_LIGHT_ATTENUATION(atten, i, worldPos)

					float3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos));
					float3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos));

					//取主图的颜色*影响色
					fixed3 albedo=tex2D(_MainTex,i.uv).rgb;//*_Color.rgb;
					//环境光颜色*albedo
					fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz*albedo;
					//灯光一颜色*环境色*亮度
					fixed3 diffuse=albedo*max(0,dot(worldNormal,lightDir));

					//中线:点到灯光方向+点到摄像机方向:取的是中线
					fixed3 halfDir = normalize(lightDir+viewDir);
					//中线与法线越相似则越亮
					fixed3 specular =_LightColor0.rgb*_SpecularColor.rgb*pow(max(0,dot(worldNormal,halfDir)),_SpecularScale);
		
				    return float4((diffuse+specular)*atten,1);
				}
		
            ENDCG
        }

欢迎大家加我QQ一起学习指正:262319244

猜你喜欢

转载自blog.csdn.net/ww1351646544/article/details/89063699