GMa*_*cci 13
两种方式都可以正常工作:如果您的目标是更多地利用GPU,那么在顶点着色器中进行转换,否则您可以使用CPU.但请记住,如果检查碰撞,则需要CPU侧的数据....
在本质上:
在GPU上进行操作意味着您只需要发送一次网格数据,然后您可以发送矩阵变换以对其进行变形或动画处理.这是理想的,因为它大大降低了CPU-> GPU之间数据传输的带宽.它也可能意味着您只需将网格的一个副本上传到GPU并对网格的许多不同实例应用变换以实现不同但相似的模型(即,发送到GPU的熊网格可以实现规模*2比例*1和Daddy bear,Mummy bear和Baby bear的比例*0.5,然后发送一个Goldilocks网格,现在你有2个网格在内存中获得4个不同的模型).
然而,转换的网格在CPU端不能立即可用,因此网格完美的碰撞检测将更加密集.
在CPU上进行动画制作意味着您可以访问转换后的网格,主要需要注意的是,每个帧和每个实例都需要将整个网格上传到GPU:CPU和GPU两侧使用的工作量更多,数据更多,占用的内存更多.
利用边界框(根据您的喜好对齐轴或非轴对齐):这允许小数据集在CPU侧表示模型(每个框8个点,而不是每个网格数百万个点).如果边界框碰撞,则从GPU - > CPU传输网格并进行精细计算以获得精确网格到网格碰撞检测.这为两个世界提供了最好的开销.
由于GPU的性能可能比处理网格时的CPU高几十,几百甚至几千倍,因此很快就会明白为什么在这个区域尽可能多地将性能编码归于GPU.
希望这可以帮助:)
根据平台和 OpenGL 版本,您可以通过直接更改顶点缓冲区中的数据(软件动画)或通过将顶点组与相应的动画矩阵相关联(硬件动画)来完成动画。
如果您选择第二种方法(在可能的情况下推荐),您可以将这些矩阵中的一个或多个作为制服发送到顶点着色器,也许为每个矩阵关联一些“权重”因子。
请记住,当顶点数量非常多时,软件动画将使 CPU 过载,而硬件动画几乎是免费的,您只需将顶点与正确的矩阵相乘,而不是着色器中的模型-视图-投影矩阵。此外,GPU 针对数学运算进行了高度优化,并且与 CPU 相比速度非常快。
| 归档时间: |
|
| 查看次数: |
5888 次 |
| 最近记录: |