我有两个想法:
1)使用低分辨率和低多边形数模型(甚至仅使用诸如立方体或球体的边界体积)将场景渲染到不可见的缓冲区。然后检查缓冲区以了解可见或不可见。在渲染低分辨率场景之前,可以应用一些视锥剔除,以尽可能多地移除对象。
2)在静态地图上运行一个工具,该工具将执行复杂(因此较慢)的光线跟踪,以了解地图上的某些3d位置,哪些是可见的,哪些不是。然后,所有这些信息都以一种有效的方式存储,以后可以在运行时供用户使用(例如:八叉树)。该解决方案仅适用于静态网格物体(例如:建筑物)而不是移动对象。
我有两个想法:
1)使用低分辨率和低多边形数模型(甚至仅使用诸如立方体或球体的边界体积)将场景渲染到不可见的缓冲区。然后检查缓冲区以了解可见或不可见。在渲染低分辨率场景之前,可以应用一些视锥剔除,以尽可能多地移除对象。
2)在静态地图上运行一个工具,该工具将执行复杂(因此较慢)的光线跟踪,以了解地图上的某些3d位置,哪些是可见的,哪些不是。然后,所有这些信息都以一种有效的方式存储,以后可以在运行时供用户使用(例如:八叉树)。该解决方案仅适用于静态网格物体(例如:建筑物)而不是移动对象。
Answers:
Jovan的回答很好,但只是想补充一点,有时会提供硬件支持来询问“此几何图形实际上是否渲染了像素吗?”这一问题。(你的想法#1),这些被称为遮挡查询-这是一个不错的GPU精粹文章关于他们在这里
这与您的想法1非常相似,不同之处在于您不需要隐形缓冲区,并且比检查缓冲区更有效或更简单。链接的文章在深入了解硬件遮挡查询的工作方式方面做得很好。
除了其他技术(例如视图视锥剔除和预先计算遮挡了哪些静态几何体)之外,虚幻引擎还利用了支持它的平台上的硬件遮挡查询。
至少前两个Quake游戏使用策略2;我不知道idTech引擎是否仍在使用它。可到达的世界被划分为以树数据结构(“二进制空间分区”)组织的凸空间,并且对于树中的每个节点,都有一个位向量表示从该节点可见的其他节点(“潜在可见集合”)。