主题:1.膨胀效果;2.surface shader实际生成的代码;
o(︶︿︶)o 粘贴复制代码易,理解透彻代码难...
一:膨胀效果
1.在#pragma 编译指令里添加vertex:vert以告知进行vertex的处理;在VertexShader最前;
#pragma surface surf Lambert vertex:vert
2.本次膨胀即依据normal方向进行vertex的worldspace下的扩充:
void vert (inout appdata_full v) {
v.vertex.xyz += v.normal * _Amount;
}
二:点击u3d编译器中"show generated code"
发现:surface shader的vert()在VS最上面,surf()在PS的最上面,
// vertex shader
v2f_surf vert_surf (appdata_full v) {
v2f_surf o;
vert (v); //此 surface里我们使用的vert函数,来操作worldSpace下的膨胀效果
....
} // fragment shader
fixed4 frag_surf (v2f_surf IN) : SV_Target { SurfaceOutput o; surf (surfIN, o);
...
}