这很容易做到。使用八叉树,您只需将世界分成越来越小的部分,直到达到所需的细节水平。例如,这可能是一粒沙的大小。认为《我的世界》达到了极限。
那你渲染什么?如果细节足够小,则可以考虑渲染块-八叉树的叶子节点。其他选项包括球体甚至几何图元。颜色和法线可以存储在每个节点上,对于降低的LOD,可以在树的更高级别存储复合信息。
您如何管理这么多数据?如果树是实际的数据结构,则可以有多个指针引用相同的子树,就像重用纹理一样,但是它也包含几何。诀窍是在所有级别上获得尽可能多的重用。例如,如果将所有四面体排列的4个八分圆都连接到所有级别的同一子节点,则几乎不使用内存就可以制作非常大的3d sierpinsky分形。当然,真实场景会更大。
问题在于它仅适用于静态几何图形,因为真正的动画需要每帧都对所有数据进行操作。但是,渲染(尤其是使用可变LOD渲染)没有问题。
如何渲染这样的事情?我是射线追踪的忠实拥护者,无论有没有GPU,它都能很好地处理此类问题。
当然,所有这些都是推测。对于您正在谈论的案件,我没有具体信息。现在针对一些相关但又不同的东西:
呈现大量数据
编辑这是我所做的,但是我故意更改了法线以使盒子更明显:
斯坦福兔子的体素
该帧速率位于单个核心IIRC上。将树的深度加倍通常将帧速率降低一半,而使用多核则可以很好地扩展。通常,我在八叉树中保留图元(三角形等),但是对于这种笑容,我决定在这种情况下渲染树本身的叶节点。当然,如果围绕特定方法进行优化,则可以实现更好的性能。
在ompf上的某个地方,有一辆用体素制成的汽车真的很棒-除了它是静态的。似乎现在找不到...