Megatexture如何工作?


21

我一直在考虑开发一个小型引擎,不仅可以开发小型实验游戏,而且还可以作为测试各种渲染技术和类似东西的基础。现在,我一直在思考如何处理纹理并迷失在大型纹理上,但这有些令人困惑。有很多传言说它要比传统方法更好,可以围绕一堆纹理并根据需要加载它们,但是超大纹理如何避免这种情况,我已经读到它们使用流式传输,您可以流式传输而不是分别加载每个纹理,但是这如何提供更好的性能,而不仅仅是耕作的另一种形式吗?

在着色器中如何采样这种纹理,如何将其一部分流式传输到内存中然后进行处理。我看过Rage的最新视频,其质感确实很棒,但这仅仅是伟大的艺术家的产物还是这项技术发挥了作用。

总结一下,它是如何工作的,为什么它很棒,我该如何做类似的事情。

Answers:


15

巨型纹理的基本思想是使用纹理图集,您可以将所有不同的纹理打包成一个大的纹理,并使用UV将其索引到该图像中。需要良好的试探法,以根据在屏幕上看到的内容来了解​​需要从磁盘流式传输的纹理的哪一部分。好处是您可以在整个游戏世界中拥有完全独特的纹理,并且仅将可见数据保留在RAM中。需要一个良好的流和缓存系统来使其负担得起。

我建议仔细阅读本页上的材料,以获取有关一种方法的更多详细信息:http : //silverspaceship.com/src/svt/


4

检查裁剪映射以获取预先存在的SGI硬件实现。

最近,Megatexture被用作稀疏虚拟纹理(SVT)的公共名称。

SVT渲染一个小分辨率的摄像机视图,并指出需要哪种纹理和mipmap。然后,CPU例程向磁盘系统发出负载,以将那些纹理/纹理块带入内存(如果不在内存中),然后将已加载的纹理块放入大型纹理图集的一部分(通常为128x128的块)

当引入纹理块时,将更新重定向纹理(虚拟页面图),该模型采用模型所需的纹理并将其重定向到实际存储大纹理的特定部分。


这就解释了很多。我想知道,如果仅进行流式处理,那么它们如何设法以足够快的速度在HDD或磁盘中流式传输如此庞大的纹理块,中间的图集能否很好地回答这一问题。现在我也可以看到为什么它比传统方法更有效地利用内存。我将四处寻找有关SVT的更多信息(Flawe的链接似乎是一个很好的起点)
Daemoniorum 2010年

1

您可以将Megatexture视为一种“流式”纹理。需要显示一幅巨大的,非常详细的纹理图像(简单输入),将其作为部分读取。我敢肯定,除此以外,还有很多其他事情,例如LOD / mipmapping,加载和资源管理等显而易见的事情。

维基百科上有一篇文章


2
我之前已经读过这篇文章,但是在细节上有些许了解。获取有关该技术的实际细节有些困难。我希望ID可以
写成
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.