Opengl 除了风景画,还有别的选择吗?

Opengl 除了风景画,还有别的选择吗?,opengl,directx,graphic,scene,scenegraph,Opengl,Directx,Graphic,Scene,Scenegraph,场景图使您可以对其位置进行推理->如果不需要渲染一个节点,则该节点的子节点也不需要渲染 但是,如果场景中的对象不断改变位置,那么这似乎不是最佳方法,因此您必须始终更新场景图 我想知道是否有一种完全不同的方法来降低场景复杂度 如果一个节点不需要渲染,则该节点的子节点也不需要渲染 事实并非如此。想象一下,父节点只是稍微离开视图,而子节点显然在视图中 场景图不是确定可见/不可见几何体的工具。场景图管理对象之间的几何变换层次结构。星系→ 星星→ 行星→ 月亮之类的 实际上,您所想到的不是场景图,而是边界

场景图使您可以对其位置进行推理->如果不需要渲染一个节点,则该节点的子节点也不需要渲染

但是,如果场景中的对象不断改变位置,那么这似乎不是最佳方法,因此您必须始终更新场景图

我想知道是否有一种完全不同的方法来降低场景复杂度

如果一个节点不需要渲染,则该节点的子节点也不需要渲染


事实并非如此。想象一下,父节点只是稍微离开视图,而子节点显然在视图中

场景图不是确定可见/不可见几何体的工具。场景图管理对象之间的几何变换层次结构。星系→ 星星→ 行星→ 月亮之类的

实际上,您所想到的不是场景图,而是边界体积层次(BVH),这是一个完全不同的概念。是的,您可以将BVHs与场景图数据混合,通常都是这样,但它们的使用方式不同

但是,如果场景中的对象不断改变位置,那么这似乎不是最佳方法,因此您必须始终更新场景图BVH

事实确实如此。因为BVH结构是一个正在进行的研究主题,主要集中在适应性BVH修改上,在这里您不必重建整个BVH,而只是一个子集更改。然而,BVH本质上是搜索树结构,为了使搜索有效,您必须平衡搜索树,这本身可能是一项成本高昂的操作

因此,在重建整棵树的成本和平衡这棵树的成本之间需要进行权衡

好的一面是,软件光栅化器时代曾经迫切需要的完美的不可见表面识别早已不复存在


我们现在生活在这样一个时代:GPU有大量的透支储备,而“越差越好”的方法通常会产生好的结果。一种非常好的方法是,让GPU和CPU协作遍历一个非常简单、仅松散连接的BVH,该BVH基于轴对齐边界框(AABB),其中树节点重叠,可以通过将AABB边界面发送到GPU进行干运行渲染来测试子体积的可见性,该渲染不产生像素,但收集统计信息,如果实际绘制任何边界体积,则为多少。现在这是一种非常流行的方法,它产生了非常好的结果。

“想想父节点只是稍微离开视图,而子节点显然在视图中。”-我不相信。如果父对象只是部分地看不见,那么它将被认为是可见的,因此它的子对象也是可见的。你能澄清一下你的确切意思吗?@miloszmaki:想象一个范围为(-1,-1),(1,1))的矩形,让我们称之为视口。现在想象一个对象,其边界由一个矩形((1.05,0.5),(1,0.95))构成。很明显,后面的矩形位于视口之外,但不太远。现在,以(-0.5,0)的相对位置对其作为父对象的对象进行成像;该对象将再次位于视口的边界内。我认为子节点应该完全由其父节点包围,不是吗?@miloszmaki:不是。场景图描述了模型之间的转换层次,而不是它们的空间体积占用率。边界体层次结构(BVH)是独立于场景图构建的。如果它们基于场景图之间的关系,BVH树将很快变得不平衡,因此遍历效率低下。