表面着色器的一些问题

发布时间 2023-07-26 18:21:58作者: terrificia
问题①:在表面着色器中修改顶点信息——
#pragma surface surf Lambert vertex:vert
/***********/
void vert(inout appdata_full v, out Input o)  
{
    UNITY_INITIALIZE_OUTPUT(Input, o);  
    /**********/
} 

appdata_full是unity给我们的输入结构体,另外还有一些unity给我们的结构体,可以在UNITYCG.CGINC里面看到

 

问题②:在描边着色器中使用第二套UV

struct Input 
{
    float2 uv_MainTex;
    float2 secondUV;
};
void vert(inout appdata_full v, out Input o)  
{
    UNITY_INITIALIZE_OUTPUT(Input, o);  
    secondUV = v.texcoord1.xy;
    /**********/
} 

不写的话默认是采样到第一套UV的,所以要在顶点函数里面主动赋值上,

另外在Input结构体中新开的通道名字是不能使用与第一个UV相似的名字,比如我这里并没有声明为uv_MainTex2,而是用了secondUV,使用了uv_MainTex2并不能采样到第二套UV,不清楚原因