2

谈论模型和动画的存储和加载,这对于游戏引擎来说会更好:

1 - 每个模型都有一个网格和一个骨骼,都在同一个文件中,每个骨骼系统都有 10~15 个动画。(所以每个模型都有自己的动画)

2 - 有很多网格和少量骨骼,但是文件彼此分开,并且相同的骨骼(动画也是)可以用于多个网格,每个骨骼集可以有很多动画。(请注意,在这种情况下,使用相同的骨骼集和相同的动画会导致唯一性丢失)。

现在,如果我需要在每帧中显示 120~150 个模型(由 GPU 动画和蒙皮),其中 40 个是相同类型的,更好:

1 - 为游戏中的所有模型使用实例化系统,即使每种类型只需要一个模型。

2 - 检测需要实例化的模型(如果它们重复多次)并使用不同的渲染系统(其他着色器程序),对其他模型使用非实例化。

3 - 不要使用实例化,因为对于这个数量的模型,“增益”会非常低。

这里谈到的所有“模型”都是动画模型,目前我使用带有 GPU 蒙皮但没有实例化的 MD5 文件,我会知道是否有更好的方法来完成所有动画过程。

如果有人知道一个好的教程或者可以让我上路...我不知道如何创建一个插值骨架并使用实例化,让我解释一下..:

我可以压缩一个简单纹理中所有帧的所有动画的所有骨骼变换(矩阵)并将其发送到顶点着色器,然后为每个模型的每个顶点读取相应的动画/帧变换。没关系,我可以在这里使用实例化,因为我总是会为相同的模型类型发送相同的数据,但是,当我需要使用插值骨架时,我是否也应该在顶点着色器上进行插值?(来自纹理的更多负载可能会导致一些性能损失)。无论如何,我也需要计算 CPU 上的插值骨架,因为我需要它来进行碰撞...

任何解决方案/想法?

  • 我使用的是directX,但我认为这适用于其他系统

=> 现在我只需要第一个问题的答案,第二个问题就解决了(但如果有人想提出任何其他建议也可以)

4

1 回答 1

2

我能想到的最好的例子,我个人使用过的一个例子是 NVidia 的一个叫做 Skinned Instancing。该示例描述了一种渲染同一骨骼网格的多个实例的方法。也有代码和白皮书 :)

NVidia 的皮肤实例化

于 2013-03-14T04:58:18.080 回答