首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一个着色器中的大量纹理中获取多个纹理?

如何从一个着色器中的大量纹理中获取多个纹理?
EN

Computer Graphics用户
提问于 2018-05-09 09:11:41
回答 4查看 449关注 0票数 3

我正在开发一种基于光探针的GI解决方案,目前正在处理由于位于墙壁对面的探头之间的插值而导致的光泄漏。我想要解决这个问题,通过加入分配给每个探针的预先计算的阴影映射来确定哪些探针被遮挡,因此哪些探针需要对片段着色器中的当前片段进行插值。

问题是,我如何存储数以万计的阴影地图,并访问它们的碎片阴影?

也许可以将它们连续存储在巨大的缓冲纹理中?嗯,或者把它们打包成一个巨大的纹理地图集?这也让我想知道哪种方法会提供更好的缓存行为。

EN

回答 4

Computer Graphics用户

回答已采纳

发布于 2018-05-31 10:56:45

我想补充一下在这种特殊情况下对我起作用的方法作为一个答案。

我的“立方体地图”很小,脸只有10×10像素,正因为如此,我才能把数千个立方体地图塞进一个大的2D纹理地图集。在破片着色器中按顺序排列人脸,计算图谱偏移量。

票数 2
EN

Computer Graphics用户

发布于 2018-05-09 13:23:02

好吧,10,000个cubemaps不太可能被放入内存中(以每像素128 x128x4字节,10,000个cubemaps将需要4GB以上的RAM)。但就使用大量这类纹理的机制而言,这是相当容易的。你有两个选择。

广泛可用的选项是使用cubemap阵列纹理。您为数组cubemap分配存储空间,其中包含所需的cubemaps数量* 6。每组6个数组图层面都是一个cubemap。在你的着色器中,你只为你想要的图层(不是图层)提供一个数组索引。

另一种选择是使用无绑定纹理。您需要创建多少个cubemaps,然后将它们作为64位整数句柄的SSBO数组提供给着色器。根据需要对这个数组进行索引,并在获取之前将句柄转换为一个采样值。

票数 6
EN

Computer Graphics用户

发布于 2018-06-01 08:17:56

我再加入另一种可能性。Mcguire光场探测论文使用四面体映射代替立方体映射,并声称带宽增加了4倍。基本上,立方体地图在角落里效率很低。他们还使用了地图集的布局。考虑到您的脸是10×10,但在您的情况下可能不会有太大的差别。

麦圭尔“使用预先计算的光场探针的实时全球照明”p.2 (图二)。2) http://research.nvidia.com/sites/default/files/pubs/2017-02_Real-Time-Global-Illumination/light-field-probes-final.pdf

原始映射来自Cigollep.9 http://jcgt.org/published/0003/02/01/

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/7599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档