作者:荷丹满 | 来源:互联网 | 2023-09-18 16:13
原文地址:http:blog.csdn.netu011416077articledetails47692555雪地shadar效果收藏一下:ShaderCustom
原文地址:http://blog.csdn.net/u011416077/article/details/47692555
雪地shadar效果收藏一下:
Shader "Custom/XueDiShader" {
Properties{
_MainTex("基本材质", 2D) = "white" {}
_Bump("法线图", 2D) = "bump" {}
_Snow("积雪等级", Range(0,1)) = 0
_SnowColor("积雪颜色", Color) = (1.0,1.0,1.0,1.0)
_SnowDirection("积雪方向", Vector) = (0,1,0)
_SnowDepth("积雪深度", Range(0,0.2)) = 0.1
_Wetness("水润度", Range(0, 0.5)) = 0.3
}
SubShader{
Tags{ "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert vertex:vert
sampler2D _MainTex;
sampler2D _Bump;
float _Snow;
float4 _SnowColor;
float4 _SnowDirection;
float _SnowDepth;
float _Wetness;
struct Input {
float2 uv_MainTex;
float2 uv_Bump;
float3 worldNormal; INTERNAL_DATA
};
void vert(inout appdata_full v)
{
float4 sn = mul(UNITY_MATRIX_IT_MV, _SnowDirection);
if (dot(v.normal, sn.xyz) >= lerp(1,-1, (_Snow * 2) / 3))
{
v.vertex.xyz += (sn.xyz + v.normal) * _SnowDepth * _Snow;
}
}
void surf(Input IN, inout SurfaceOutput o) {
half4 c = tex2D(_MainTex, IN.uv_MainTex);
o.Normal = UnpackNormal(tex2D(_Bump, IN.uv_Bump));
half difference = dot(WorldNormalVector(IN, o.Normal), _SnowDirection.xyz) - lerp(1,-1,_Snow);
difference = saturate(difference / _Wetness);
o.Albedo = difference*_SnowColor.rgb + (1 - difference) *c;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}