DirectX世界观矩阵乘法 - GPU还是CPU处理?

3
我对directx还不太熟悉,但我惊讶地发现大多数示例中,世界矩阵和视图矩阵是在顶点着色器中相乘的,而不是由CPU相乘并将结果传递给着色器。
对于刚性物体,这意味着你需要为对象的每个顶点相乘同样的两个矩阵。我知道GPU可以在许多顶点上并行执行此操作(不太清楚具体有多少个),但这真的很低效吗?或者我可能只是缺少一些知识。我还是个新手,不太了解。
2个回答

5
一般来说,您希望在CPU上完成此操作。然而,DirectX 9有“preshaders”的概念,这意味着这个乘法将会在CPU上提前完成。这已经被新的API移除了,但它可能与您正在查看的示例非常相关。
此外,与内存访问相比,现代GPU在ALU操作方面非常快。拥有一个适度复杂的顶点着色器(可能带有纹理获取)意味着执行矩阵乘法所需的数学运算是免费的,因此作者可能甚至没有费心去做这件事。
无论如何,最佳实践是在CPU上预先乘以所有常量。如果三角形中的某些内容在全局上都是常量,则同样适用于将工作从像素着色器移到顶点着色器中(不要对每个像素计算它)。

1

嗯,对我来说这一点也不像是无头苍蝇,你完全正确!

我不知道你一直在看哪些例子,但一般来说,你应该尽可能地传递预先计算好的矩阵,这就是像WORLDVIEW(甚至更适合简单着色器的WORLDVIEWPROJECTION)这样的语义存在的原因。

除非shader代码也需要访问各个分离的矩阵(但即使这样,我通常也会传递合并后的矩阵),或者那些只是为了说明矩阵乘法的例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接