动画和实例演出

时间:2013-03-14 03:29:46

标签: animation directx game-engine skinning

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

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

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

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

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

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

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

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

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

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

任何解决方案/想法?

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

=>现在我只需要第一个问题的答案,第二个 已解决(但如果有人想提供任何其他建议,那么)

1 个答案:

答案 0 :(得分:2)

我能想到的最好的例子和我亲自使用的一个例子是NVidia称为Skinned Instancing。该示例描述了渲染同一骨骼网格的许多实例的方法。还有代码和白皮书:)

Skinned Instancing by NVidia