Unlit Shader 的数据流:
Object Data -> appdata Struct -> Vertex Shader -> v2f Struct -> Fragment Shader -> Final Color
Vertex Data Structure
第一个结构体是 appdata,它对应于输入组装阶段。为了刷新记忆,这个 appdata 来自于最后一个 shader:
struct appdata
{
float4 vertex : POSITION;
};
:POSITION是一个着色器语义,它是一个附加到着色器数据结构的字符串,传递关于成员预期用途的信息。通过将语义添加到appdata中,我们告诉输入程序集阶段我们想要的数据是什么。
在这种情况下,我们只要求顶点位置,这是您总是要求的最低点。 如果模型具有纹理,则可以请求更多数据,例如处理纹理的UV信息或顶点颜色。 语义和数据类型必须匹配。 如果你要给它一个POSITION语义的单个浮点数,那么float4的值会被无声地截断以浮动。
数据类型选择变量的“形状”,但语义选择它内部的内容。 多种语义可以填充float4,但是如果我们错误地选择了我们想要的语义,着色器会在运行时中断,可能会以微妙的方式破坏。 当着色器变得复杂时,微妙的着色器破坏是追踪最糟糕的问题之一,所以要小心。
这是收集每个顶点更改数据的唯一方法,但您可以从属性和全局属性中传递其他数据,这些数据不会在每个顶点变化。 OpenGL将这些每个顶点值调用得非常适当,并且可以变化,并且可以全局传递或者着色器中的属