首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路径跟踪-实现问题

路径跟踪-实现问题
EN

Computer Graphics用户
提问于 2018-06-23 20:32:13
回答 1查看 417关注 0票数 4

因此,我目前正在为我的学士论文实现一个路径跟踪器。到目前为止,我已经理解并绘制了程序的一般流程,除了两件事。请注意,我使用的是OpenCL,并将使用OpenCL互操作来呈现由openGL创建的窗口的路径跟踪图像。

好的,这是我的问题。

( 1)首先,我知道与CPU相比,GPU内存是相当有限的,这也是我们在电影业等专业行业看不到GPU路径跟踪器的原因之一。

我感兴趣的是,有没有办法知道可用内存的确切数量?

我将加载模型文件并将整个模型数据发送到GPU,可能是在数据结构(K树等)中。现在这些模型可能包含数百万个三角形。How应该存储这么多数据吗?或者还有其他有效的方法吗?

其次,我还看到,如果同时对工作组中的全局内存进行访问,则可以合并/合并它们。所以我正在考虑使用一个内存屏障,一旦所有的工作项都到达了它,我就可以将整个K树从全局复制到本地内存,以获得更快的处理速度。

Again本地内存能容纳这么多的数据吗?

2)我混淆的第二部分是,您通常听到打开路径跟踪器并离开它几分钟,随着样本的增加,图像逐渐变得越来越好。

我还不明白,从编码的角度来看,我应该如何实现这个特性。

据我所计划,将有一个主内核在图像上循环(在openGL和openCL之间共享),每个像素发送固定数量的射线(假设8条)。在这个内核完成执行之后,我可以将opengl渲染到默认的位置,或者在四块上绘制纹理,无论哪个速度更快。

But --所有这些只是一个实例。如何通过增加样本(1,2,4,8,16.)逐步改善我的形象每次将FBO刷新到默认的FB?

现在我唯一能想到的就是重新启动内核,为指定的像素计算一个新的颜色值,然后取这个新像素和旧像素的平均值。这是否可行,还是有更好的方法?

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2018-06-25 04:52:25

我不是路径追踪方面的专家,也许有更多经验的人能想出一个更好的答案,但我会尝试回答你的问题。

首先,对于一个大学项目规模的路径追踪器来说,VRAM容量不应该是一个真正的问题.一个具有位置、法线、切线和UV的顶点符合48个字节,所以使用一个GB的缓冲区,你可以容纳2000万个顶点,当然不包括索引缓冲区和kd-树的空间。即使是我糟糕的5岁的中档笔记本电脑卡也有2GB,现代卡有更多,所以我怀疑你是否会用模型数据耗尽VRAM。

对于局部记忆问题,简短的回答是否定的。组共享内存的着色器核心是很小的,你不应该分配超过几KB的每个着色组,所以你不可能得到你的加速结构在那里。

路径跟踪的主要问题之一是一致性,这是GPU难以实现的原因之一。由于光线方向是随机选择的,处理附近一组像素的每一组着色器都可以采样场景中完全不同的部分,从而产生内存。如果不小心处理,这可能会导致很多分支和缓存丢失,并否定了在GPU上运行的许多优点。

目前最先进的生产路径追踪器可能是迪斯尼的Hyperion。这是一个CPU路径跟踪器,运行在绝对巨大的场景上(想想“大英雄6”中的旧金山),这些场景可能太大,甚至连主RAM都无法容纳,并且需要按需从磁盘中传输(“外核”渲染)。它们首先产生大量光线,然后将它们排列成具有相似位置和方向的束,从而缓解了相干问题,因此连续射线解决方案很可能触及场景的同一部分并利用高速缓存。即使如此,它们仍然受到内存和I/O速度的束缚,而不是计算能力。很好的写在上面的这里,包括一个技术PDF。

对于你的第二个问题,这或多或少是这样做的。您只需将连续传递的光线累积到您的颜色缓冲器上,然后除以通过次数来实现标准化--您可能希望为此使用32位浮点颜色通道。朴素的路径追踪器(这可能是您要开始构建的),只需选择一个真正随机的样本分布,并按其概率对每个样本进行加权。更聪明的方法将抽样偏向于更重要的方向,然后在加和颜色时消除偏差。例如,对于漫射表面,你可以(a)在半球中选择真正随机的方向,用$N.L$对每个样本进行加权,或者(b)用余弦分布的样本(法线周围更多的样本,地平线周围的更少的样本),并对每个样本施加全部权重。

如果您还没有看到它,雷·特蕾西的博客有一些很好的教程来优化GPU的路径跟踪。祝你的项目好运。

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

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

复制
相关文章

相似问题

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