最近有点忙,所以好久都没写东西了,但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值赋予传入的变量值。
效果图
后记
Surface Shader入门系列暂时到此为止,接下来如果有时间会侧重片段着色器和相关渲染知识的介绍。小伙伴有任何问题都可留言或私聊,共同学习进步。