我已经阅读了很多关于稀疏体素八叉树在未来图形引擎中的潜在用途。
但是我无法找到有关它们的技术信息。
我理解体素是什么,但我不知道稀疏体素八叉树是什么,或者它们如何比现在使用的多边形技术更有效。
有人可以向我解释或指出对此的解释吗?
答案 0 :(得分:26)
以下是关于id Software on this subject.
的摘录中找到更多信息id Tech 6将使用更先进的技术,该技术建立在MegaTexture理念的基础上,并虚拟化几何体和纹理,以获得相当于纹理元素的独特几何体:稀疏体素八叉树(SVO)。
它通过光线投影存储在八叉树中的体素(而不是三角形)表示的几何体。
目标是能够将部分八叉树流式传输到视频内存中,沿着树向下进一步向下移动以获得更多细节,并为更多物体使用更高级别的更大体素,从而实现自动化同时具有几何和纹理的细节(LOD)系统。
嗯,单独的体素并不那么有趣,因为对于任何相当详细的模型,你需要极大量的体素(如果使用均匀的网格)。
因此,需要一个分层系统,它将我们带到八叉树。八叉树是一种非常简单的空间数据结构,它将每个节点细分为8个同样大的子节点。
稀疏八叉树是八叉树,其中大多数节点都是空的,类似于离散化微分方程时得到的稀疏矩阵
答案 1 :(得分:18)
一个八叉树有8个邻居,因为如果你想象一个正方形,那就被切成4个相等的四分之一
______________
| | |
| | |
|_____|______|
| | |
| | |
|_____|______|
那么它将是一个“四”(四)树。
但是在3个维度中,你有自己,一个立方体,而不是一个正方形,所以水平,垂直和沿着Z轴切割它,你会发现8个块,而不是4个像这样
_____________
/ / / |
/-----/-----/ |
/_____/_____/ | |
| | | |/|
|-----|-----|/| |
| | | |/
|_____|_____|/
希望自从......
SVO的独特之处在于它存储体素信息,这是空间中的一个点,具有颜色,法线等属性。
SVO背后的想法是忽略三角形和纹理的需要,将它们放在一个包含体素三角形壳体(模型)的单个SVO中,并将其表面纹理集中在一个对象中。这里需要八叉树的原因是,否则统一的网格结构将需要很多内存来供现有的显卡处理..
因此使用SVO可以实现一种Mip-Mapped 3D纹理..
MipMapping基本上是相同的图像,但是在不同的尺度上,一个具有更多细节,一个具有最少的细节(但从远处看起来非常相似)
靠近物体的方式可以从SVO流出更多的细节,而更多的物体以更少的细节流动..也就是说,如果你使用的是Ray-Casting ..光线远离相机,我们挖的越少进入我们的Mega-Texture / SVO
但是,如果你认为盒子外面像“Euclideon”这样的“无限细节”,你只需使用视锥体切片和平面/ aabb交点,用我们切片广告牌的投影UV来找到每个纹素上的颜色。屏幕,与宽度相对*高度像素,射出光线,与nvidia的天真“光束优化”。
PS(排序主题):对于那些不了解欧几里得怎么做的人,我相信这是最实用的解决方案,我有理由支持它(他们不使用光线投射)他们拥有的最大的谜团,不是渲染,而是存储他们的数据.RLE根本不会削减它......因为一些体积/体素数据可能更随机,而且RLE无用的“固体”更少对我来说,压缩也通常需要至少5个字节。他们说他们通过压缩输出了大约一半的内容。所以他们使用2.5个字节,这与现在的Triangle大致相同
答案 2 :(得分:8)
nVidia白皮书非常详细地描述了〜 http://www.nvidia.com/object/nvidia_research_pub_018.html
答案 3 :(得分:3)
实际上,1.15位让我怀疑他们只是以一种非常简单的方式顺序存储事物。也就是说,如果它们只存储体数据而不存储颜色或纹理数据等。
这样想:1个体素只需要1位:它存在还是不存在? (成为或不成为,换句话说:P)。它所在的八叉树节点由8个体素组成,还有一个用于存储物体是否包含任何东西的位。这是每个体素一位加一每8. 1 + 1/8 = 1,125。添加另一个父节点与7个兄弟姐妹,你得到1 + 1/8 + 1/8/8 = 1,140625。可疑地接近他们提到的1.15。虽然我可能会离开,但它可能会给某些人一些线索。
答案 4 :(得分:1)
你甚至可以简单地光栅所有的点,你现在需要光线追踪或光线投射,因为显卡可以投射淫秽的点数。你使用八叉树,因为它是一个立方体形状,不断分割制作越来越小的立方体。 (体素)我现在有一个引擎,使用光栅技术,看起来不错。对于那些说你不能动画体素的人,我认为他们真的没有考虑过这个话题,当然也有可能。正如我所看到的那样,让世界变得像“无限的3d外套”,所以查看3d外套,水平设计将与该程序的工作方式非常相似。主要缺点是流速不够快,光线追踪或光栅不能达到60 fps,并且绘制实际体素对象的计算成本非常高,目前我可以在大约12秒内绘制1024x1024x1024球体,但所有这些问题可以补救,这是一个令人兴奋的未来。我目前的最大世界规模是一个兆字节的兆字节,但我实际上可能比它大8倍。当然,实际上相当严重的另一个问题是即使在压缩之后也需要大约100mc来存储8192x8192x8192字符,因此环境甚至会比这更多。尽管如此,与我们今天在游戏中看到的相比,你说你将拥有角色8192x8192x8192是完全荒谬的...整个世界曾经是8192x8192x8192:)
如何通过仅存储每个指针位来执行此操作是指针在运行时在视频内存中构建...了解一下你可以拥有自己的引擎。 :)