场景图让您可以推断它们的位置 -> 如果不需要渲染一个节点,则该节点的子节点也不需要渲染。
但是,如果场景中的对象不断改变位置,这似乎不是最好的方法,所以你总是必须更新你的场景图。
我想知道是否有完全不同的方法来降低场景复杂性?
场景图让您可以推断它们的位置 -> 如果不需要渲染一个节点,则该节点的子节点也不需要渲染。
但是,如果场景中的对象不断改变位置,这似乎不是最好的方法,所以你总是必须更新你的场景图。
我想知道是否有完全不同的方法来降低场景复杂性?
如果一个节点不需要渲染,该节点的子节点也不需要渲染。
这不是真的。考虑一个父节点只是稍微不在视线范围内,但一个子节点显然在视线范围内。
场景图不是可见/不可见几何确定的工具。场景图管理对象之间的几何、转换层次结构。星系→恒星→行星→卫星,等等。
您实际上想到的不是场景图,而是边界体积层次(BVH),这是一个完全不同的概念。是的,您可以将 BVH 与 Scenegraph 数据混合使用,而且通常会这样做,但它们的使用方式不同。
但是,如果场景中的对象不断改变位置,这似乎不是最好的方法,所以你总是必须更新你的
场景图BVH。
情况确实如此。因为 BVH 结构是一个持续研究的主题,主要集中在自适应 BVH 修改上,您不必重建整个 BVH 只是一个子集更改。但是 BVH 本质上是搜索树结构,要使搜索高效,您必须平衡搜索树,这本身可能是一项昂贵的操作。
因此,需要在重建整棵树的成本或平衡它的成本之间进行权衡。
从好的方面来说,曾经非常需要完美的无形表面识别,而软件光栅化时代所需要的这一点早已不复存在。
我们现在生活在一个 GPU 有大量过度绘制储备的时代,“越差越好”的方法通常会产生良好的结果。一个非常好的方法是让 GPU 和 CPU 协作遍历一个非常简单的、仅松散连接的 BVH,基于轴对齐边界框(AABB),其中树节点重叠并且子体积的可见性可以通过将 AABB 边界面发送到用于不产生像素的干运行渲染的 GPU,但会收集统计数据,如果实际绘制了任何边界体积,则它会收集多少。这是现在非常流行的一种方法,它产生了非常好的效果。