我目前正在升级和重组 OpenGL 渲染引擎。该引擎用于可视化建筑数据的大型场景(带有内部的建筑物),并且对象的数量会变得相当大。与任何建筑物一样,墙壁内有很多被遮挡的物体,您自然只能看到与您在同一房间内的物体,或者如果您在外面,则只能看到外部。这留下了大量应该通过遮挡剔除和截锥剔除来遮挡的对象。
同时有很多重复的几何体可以在渲染批处理中进行批处理,也有很多对象可以通过实例渲染进行渲染。
在我看来,很难以最佳方式结合渲染批处理和剔除。如果在同一个 VBO 中批处理太多对象,则很难在 CPU 上剔除对象以跳过渲染该批处理。同时如果你跳过cpu上的剔除,很多物体会在不可见的情况下被GPU处理。如果您完全跳过批处理以便更轻松地剔除 CPU,则会出现大量不必要的渲染调用。
我已经对现有技术和理论进行了一些研究,以了解如何在现代图形中解决这些问题,但我一直无法找到任何具体的解决方案。一个同事和我想出的一个想法是将批次限制在彼此相对靠近的物体上,例如房间内的所有椅子或 n 个会面半径内的所有椅子。这可以通过使用八叉树来简化和优化。
有没有人对最先进的现代图形引擎中用于场景管理、剔除、批处理等技术的任何指示?