1. 程式人生 > >Unity3D Shader落雪效果

Unity3D Shader落雪效果

pragma shader obj 分享 imc ges rim pass main

技術分享

Shader "Custom/Snow" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _RimColor("Rim Color", Color) = (1,1,1,1)
        _SnowPower ("Snow Power",range(0,1)) = 0.2//邊緣強度
        _SnowRang("Snow Range",range(0,1)) = 0.1
    }

    SubShader {


        Pass
        {
        
        CGPROGRAM

        #include 
"UnityCG.cginc" struct v2f { float4 vertex:POSITION; float2 uv:TEXCOORD0; float3 normal:TEXCOORD1; float rim:COLOR; }; sampler2D _MainTex; float4 _RimColor; float _SnowPower; float _SnowRang; v2f vert(appdata_base v) { v2f o; o.uv
= v.texcoord; float3 sn = mul((float3x3)_World2Object, float3(0,1,0)); o.normal = normalize(mul((float3x3)_Object2World,v.normal)); float diff = saturate(dot(v.normal,sn)); if( 1-diff<_SnowRang) { v.vertex.xyz
+=normalize(diff*sn+(1-diff)*v.normal)*_SnowPower; } o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); return o; } fixed4 frag (v2f IN):COLOR { fixed4 c = tex2D(_MainTex, IN.uv); float diff = saturate(dot(float3(0,1,0),IN.normal)); if(1-diff<_SnowRang) { float range = (diff/0.8)*(diff/0.8); //c.rgb = _RimColor.rgb*range+c.rgb*(1-range); c.rgb = _RimColor.rgb; } return c; } #pragma vertex vert #pragma fragment frag ENDCG } } FallBack "Diffuse" }

Unity3D Shader落雪效果