GigaVoxels是一个开放的库,用于基于GPU的实时质量渲染非常详细和宽泛的对象和场景(编码为SVO - 稀疏体素八叉树 - 但不一定模糊或透明:参见历史)。它可以很容易地与普通的OpenGL对象和场景混合。
它的秘密在于惰性求值:数据块(即,块)仅在被证明对于图像是必要的并且仅在必要的分辨率下被加载或生成。然后,它们被保存在GPU上的LRU高速缓存中用于下一帧。因此,隐藏数据对管理,存储和渲染没有任何影响。类似地,如果高细节小于像素大小,则高细节对成本和混叠没有影响。
GigaVoxels允许轻松地做简单的事情,也允许引擎的渐进暴露取决于您需要的定制。它提供了大量的例子来说明可能性和变体,并通过复制粘贴来简化您的测试和原型。
在最基本的用法,你已经很高兴与其中一个例子(对你有好处:没有代码!)
最基本的编程用法包括编写GigaVoxels渲染器将在最后一刻调用的回调生成器函数,以获取给定分辨率的给定空间立方体的数据。此功能可以有一部分在CPU侧和一部分在GPU侧。你可能只想将数据从CPU传输到GPU,或者可能在GPU一侧解压缩或放大。您还可以从程序上生成它(例如,体积Perlin噪声),或者从已经存在于GPU存储器(例如,VBO网格)中的另一形状结构转换所请求的数据块[1]。
您可能还需要添加一个用户定义的体素着色器来调整外观(view-dep BRDF,但也可能是材质颜色,而不是存储在体素中),甚至可以即时调整数据。事实上,这取决于您在CPU,GPU生产者或在体素着色器中的生成(或预先存储),这取决于您在存储,性能和即时需求之间的首选平衡更改。例如,如果要让用户使用颜色LUT或密度传递函数,或调整超文本纹理参数,则应在体素着色器中进行以获得即时反馈 - 否则所有已生成的图块都应取消。但是一旦这些参数是固定的,如果数据在生产者中被全部烹饪并且在高速缓存中保持准备使用,则渲染将更快。
您可能想要处理非RGB值(多光谱,X射线…),或不是一个简单的方法(极化,HDR)。 GigaVoxels让您轻松定义体素数据的类型。您还可以自定义前置和后置渲染任务(例如,与OpenGL场景混合),各种早期测试,提示和优先行为的标志(例如,在严格的时间预算应用程序中的创建优先级策略)。
基本的GigaVoxels依赖于空间的八叉树动态分区,其中节点对应于体素块 - 如果空间不为空。但实际上,您可以偏好另一个空间分区方案,例如N ^ 3-tree,k-d树,甚至BSP-树。您还可以选择在本地数据块中存储除了体素之外的其他东西,例如三角形,点,过程参数,简化更新或细分的内部数据,以避免从头开始重建
GigaVoxels和GigaSpace是一样的事情。 GigaSpace是查看工具的一般方式。 GigaVoxels的基本用途是使用八叉树作为树,体素块作为数据块,并使用体积锥跟踪作为访问者,因此这种命名优先于SVO社区。但我们提供了许多其他示例显示其他选择,因为潜在的使用比SVO大得多。