动画和实例化表演

标签 animation directx game-engine skinning

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

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

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

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

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

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

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

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

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

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

有什么解决方案/想法吗?

  • 我正在使用 directX,但我认为这也适用于其他系统

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

最佳答案

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

Skinned Instancing by NVidia

关于动画和实例化表演,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400674/

相关文章:

c# - WPF:触发动画 - 沿 Y 轴向下移动控件

ios - 标签或 TextView 中的动画字母

multithreading - 等待线程仍会占用CPU时间吗?

android - 在 Android 上运行游戏时在 AndEngine GLES 2 中显示 webview

javascript - jQuery 动画在开始完成之前不会等待

animation - FFmpeg:高质量的动画 GIF?

c# - WPF 和 Flex 之间的区别

visual-studio-2010 - Visual Studio 2010 中对 DirectX 程序集的引用在哪里

compression - 我认为 *.DDS 文件是为了快速加载?

algorithm - 计算和应用摩擦力