查看动画网格的截头体剔除



我在系统中实现了截头体剔除,它测试了每个对象的边界球体上的截头体平面,效果很好。(我发现PlaneVsAabb检查不必要)

然而,网格的边界球体会根据其绑定姿势进行调整,因此当网格开始移动时(例如,玩家用剑攻击),一些顶点可能会离开球体。

这通常会导致网格被剔除,尽管有一些顶点应该被渲染(例如玩家的剑离开了球体)。

我可以想出两种可能的解决方案:

  1. 对于每个帧中的每个网格,根据骨骼变化计算其新的边界球体。(我不知道该怎么开始……)这会不会太低效了?

  2. 为每个球体半径添加固定偏移(可能基于整个网格大小?),这样即使在设置动画时,网格也不会被剔除。

(1)在实时yes中效率会很低。然而,通过静态地计算最大可能的边界球,也就是当你加载它时,你可以同时计算两者。在(2)中使用它可以保证比你弥补的一些任意偏移更好的结果。

(1)您可以将定位器添加到关键元素(例如剑尖上的假骨头),并在设置动画时变换其原点。您可以在每次更新时在CPU上完成,然后计算边界框或边界球体。或者,可以脱机为动画的每一帧预先计算边界体积。Doom3使用第二种方法。

最新更新