到目前为止,在渲染我的场景时,在遍历场景图时,每个节点的模型矩阵都是根据父节点的模型矩阵和场景节点的姿态来计算的。这非常简单,并且已经将矩阵乘法的次数减少到每个节点和帧的一个乘法。
但是,所有这些矩阵乘法都必须在CPU和每个帧上完成,以便能够非常快地执行(多个连续的)场景节点移动。然而,GPU可能更适合执行大量矩阵乘法,所以我考虑将多个部分模型矩阵发送到顶点着色器,而不是计算CPU上的所有内容。
将每个部分(因此每个节点的位置)发送到GPU可能没有多大意义,因为在这种情况下,所有的计算都是针对每个顶点而不是每个节点进行的,这实际上会降低性能。但是,也许场景节点有很多子节点,或者只有不移动的子节点(相对于其父节点)可以拆分模型矩阵并将乘法转移到着色器。
那么,何时将部分模型矩阵发送到着色器并将乘法移到GPU更好呢?还是说这只是个坏主意?
发布于 2015-08-26 05:11:33
用制服做数学是一种着色器,通常不会比在CPU上做它更能获得任何性能。在矩阵运算方面,CPU并不比GPU慢,只是在结构上不能并行地做大量的数学运算。但你必须做大量的数学才能取得胜利。向GPU发送额外的数据,只为了让GPU将两个矩阵相乘在一起,很少会给您带来任何影响。
现在,假设您有一个剥皮矩阵的缓冲区。无论您是将它们转换为CPU上的世界空间,还是将一个额外的模型到世界空间矩阵传递给GPU,都可能会变得重要。但即便如此,它也取决于你的顶点和骨头的比例。
发布于 2015-08-28 04:03:06
很少,如果有的话。你在你自己的问题中回答了它:一个顶点着色器每个顶点运行一次,一个片段着色器每片段运行一次。如果你没有做一些对顶点或片段来说是独一无二的事情,那么每次你调用一个着色器时,你都在做同样的事情。对我来说这听起来不太有效。
https://computergraphics.stackexchange.com/questions/346
复制相似问题