每次写片元着色器的时候都会忘记写“SV_TARGENT”,归根到底还是基本功不扎实,没有明白底层原理,现在就来总结归纳一下
1、语义绑定
首先要明白的是两者的属性,这两个都是语义绑定(semantics binding)。什么是语义绑定呢?语义绑定可以理解为关键字,我们都知道图形渲染是按照一步一步地进行的,又叫做渲染管线。那么为什么是要一步一步地进行呢?因为GPU的架构与CPU非常不同,cpu更像是人的大脑,可以同时思考不同的问题,而GPU则相当于计算机,通过有特定的输入,通过计算得到最终的输出。GPU没有像CPU一样的堆栈来存取变量与值,所以通过语义绑定将一个计算好的值放在一个物理存储位置,再用的话就利用语义绑定去特定物理位置取出,这也是GPU不能像CPU一样工作的原因之一吧。
有兴趣的同学可以去看一些关于GPU架构的基础的知识,对理解Shader底层有很大的帮助
2、工作流程
SV_前缀的变量代表system value的意思,在DX10+的语义绑定中被使用代表特殊的意义,SV_POSITION在用法上和POSITION是一样的,区别是 SV_POSTION一旦被作为vertex函数的输出语义,那么这个最终的顶点位置就被固定了,不得改变。DX10+推荐使用SV_POSITION作为vertex函数的输出和fragment函数的输入,而vertex函数的输入还是使用POSITION。也就是说推荐你在片元着色器前完成对顶点的位置转换(注意不是说在顶点着色器完成全部的顶点位置转换,有些着色器中会在