Unity Shader 入门(七)顶点变换

最近有点忙,所以好久都没写东西了,但Surface Shader入门系列还少个重要的部分没介绍——顶点变换。还是先看下代码:

Shader "Demo/Diffuse Vertex"{
    Properties{
        _MainTex("MainTex", 2D) = ""{}
        _IsSphere("IsSphere", int) = 1
    }
    SubShader{
        Tags{"RenderType"="Opaque"}
        LOD 200
        CGPROGRAM
        #pragma surface surf Lambert vertex:vert

        sampler2D _MainTex;
        bool _IsSphere;
        struct Input {
            float2 uv_MainTex;
        };

        void vert(inout appdata_full v) {
            if (!_IsSphere) {
                v.vertex.y = 0;
            }
        }

        void surf(Input IN, inout SurfaceOutput o) {
            half4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }

        ENDCG
    }
    FallBack "Diffuse"
}

直接说明与之前介绍代码不同的部分:

#pragma surface surf Lambert vertex:vert

vertex:vert 声明一个自定义的vert函数来改变顶点。

        void vert(inout appdata_full v) {
            if (!_IsSphere) {
                v.vertex.y = 0;
            }
        }

将当前顶点的本地坐标的Y值赋予传入的变量值。

效果图

Unity Shader 入门(七)顶点变换_第1张图片
图7-1 左图_IsSphere值为1,右为0

后记

Surface Shader入门系列暂时到此为止,接下来如果有时间会侧重片段着色器和相关渲染知识的介绍。小伙伴有任何问题都可留言或私聊,共同学习进步。

你可能感兴趣的:(Unity Shader 入门(七)顶点变换)