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值赋予传入的变量值。

效果图

图7-1 左图_IsSphere值为1,右为0

后记

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容