UnityShader源码2017---学习笔记与自我拓展034

源自AlphaTest-SoftEdgeUnlit.shader

这个shader的作用,注释说的很明确。

简单的翻译一下。

Renders doubled sides objects without lighting. 
Useful for grass, trees or foliage.

This shader renders two passes for all geometry,
one for opaque parts and one with semitransparent details.

This makes it possible to render transparent objects 
like grass without them being sorted by depth.

无光照双面渲染物体,用于草,树,叶子的渲染。

使用这个shader的物体都会有两个pass(两个pass意味着什么?不能动批,每一个物体两个dc),一个pass用于不透明物体的渲染,一个pass用于半透明细节部分的渲染。

这个shader可以让像草这种本来不能按照depth排序的透明物体正常地渲染

这个Shader没有什么特别的功能,我只提炼一下他的概框。

Shader "ShaderStore/UnitShader2017/Legacy Shaders/Transparent/Cutout/Soft Edge Unlit"
{
Properties {****}

SubShader {
    Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" }
    Lighting off

    //双面渲染
    Cull Off

    Pass {
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            v2f vert (appdata_t v){}

            fixed4 frag (v2f i) : SV_Target
            {
                half4 col = _Color * tex2D(_MainTex, i.texcoord);
                //alpha大于_Cutoff的就不在渲染
                clip(col.a - _Cutoff);
                return col;
            }
        ENDCG
    }

    Pass {
        Tags { "RequireOption" = "SoftVegetation" }

        //上一个pass已经write z了,所以这个就不要再次写入
        ZWrite off

        //因为这个pass是处理半透细节,所以blend还是要开启的
        Blend SrcAlpha OneMinusSrcAlpha

        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            v2f vert (appdata_t v){}

            fixed4 frag (v2f i) : SV_Target
            {
                half4 col = _Color * tex2D(_MainTex, i.texcoord);
                //这里要注意一下,这次要保留的部分是上个pass丢弃的部分
                clip(-(col.a - _Cutoff));
                return col;
            }
        ENDCG
    }
}

}

猜你喜欢

转载自blog.csdn.net/u012871784/article/details/81100890
今日推荐