【Unity Shader编程】之GPU编程前言
之前一直不懂,为什么写一个shader代码,然后整个模型就会动,因为之前都是cpu编程思路,比如说cpu控制一个人物行走,就是控制一个人物,要控制10个人物,就要循环10次,分别控制他们,但是在gpu不一样,因为gpu编程是并行性,你写完gpu的编程,写完shader,是直接挂在单一物体上,这个时候,我们控制的是这个物体,但是控制的是这个物体的什么呢?
1,顶点
顶点着色器 v2f vert (appdata v) {},以前的误解,一物体引用了该shader之后,这个不是应该只执行一次吗?只执行一次,也没看到它控制所有顶点进行变换,为什么模型会产生那么大的变换?(这个就是妥妥的cpu编程思维了,困扰了我好久),在shader编程中,顶点着色器对应的是该附着的模型的所有顶点,例如,一个模型有100个顶点,那么该shader脚本里面的顶点着色器
v2f vert (appdata v) {}就会执行100次,而结构体v传入的数据是shader自动去赋值的。然后gpu有几万,几十万个计算线程,就可以快速的去计算,因而这就是gpu和cpu的不同,gpu并行,高速计算,渲染。cpu复杂计算,单一,和用户交互,内存交互等等,拥有各自不同的功能。
**
并行架构设计
CPU和GPU的设计目标不同。CPU注重低延迟和复杂逻辑处理,而GPU注重高吞吐量和数据并行。因此,编程模型上,CPU通常使用多线程(如OpenMP),而GPU使用大规模并行线程(如CUDA)。