我实现了一个物理基础的路径跟踪后,研究PBRT的M.法尔和G.汉弗莱。现在,我正在尝试使用OpenGL ES (在iPhone应用程序中)将基于物理的渲染应用于实时图形。
我想开始使用奥伦-纳亚尔和库克-托伦斯作为漫射和镜面BRDF,但我有一个问题:我如何模拟间接照明?
在路径追踪器(如pbrt中所包含的光)中,间接/环境光是由路径跟踪算法“自动”给出的,因为它遵循光线的路径,同时考虑到直接和间接的照明。
如何在以OpenGL ES编写的基于物理的渲染中对间接照明进行建模,从而使用实时计算机图形?
发布于 2016-09-06 00:11:17
这是在实时CG中主要的“困难”问题,并且有很多研究正在进行中以解决这个问题。
最大的障碍是,在光栅图形中,场景的每个组件都是“在真空中”呈现的--每个三角形都是在不引用场景中的任何其他三角形的情况下呈现的,像素也是如此,而不是光线跟踪方法,即每条射线都可以访问内存中的整个场景。因此,实时程序员需要使用黑客技巧来做像反射和阴影这样的事情,同样也适用于全局照明。
一种廉价的运行时方法是使用烤光地图,首先运行一些缓慢但令人敬畏的东西,比如辐射度或路径跟踪,然后保存照明信息和常规的顶点数据。这对于静态几何是很好的,但一旦添加移动对象,就会出现问题。米哈尔·伊万尼基( Michal )做了一个很好的介绍性,讲述了他们是如何为“最后的我们”(The)解决这个问题的。
游戏引擎中经常使用球面谐波来表示间接光。它们基本上是一个穿过球面的傅里叶变换,通过丢弃高频成分,你可以得到视觉上令人愉悦的,大部分是精确的环境照明,每种颜色只有9个系数。例如,统一使用S.H.在场景中的各个点烘焙“光探针”,然后移动的物体可以在附近的探测器之间插入,以得到间接光在它们的位置的近似。罗宾格林的纸基本上是圣经关于这一技术,但它是相当沉重的工作。
目前最热门的技术似乎是Voxel追踪,它不涉及任何预烘烤步骤。我自己并不太熟悉它,但据我所知,它涉及到把你的场景变成一个低分辨率的“我的世界”,把体素放在一个像八叉树一样的可快速遍历的空间结构中,然后从每个点投射出几条宽射线(圆锥形),并检查它们击中哪个体素来收集光线。NVidia目前正在大力推进这一进程,而且这里和这里也有关于它的文件。
希望有帮助:)
发布于 2016-09-05 14:34:44
路径跟踪是一种计算量很大的算法,不适合实时跟踪.PBRT的体系结构也不适合于实时性,PBRT的主要目标是利用无偏蒙特卡罗积分求解绘制方程。有关更多信息,请参见https://en.wikipedia.org/wiki/Unbiased_渲染。
如果没有大量的优化和约束,我怀疑您是否能够在移动设备上获得良好的性能。
无论如何,路径跟踪可以在OpenGL中实现,我建议查看非常强大的计算着色器。与桌面GL相比,OpenGL ES 3.1支持带有一些小限制的计算着色器。
阅读此页面以获得更多信息:https://github.com/LWJGL/lwjgl3-wiki/wiki/2.6.1.-Ray-tracing-with-OpenGL-Compute-Shaders-(Part-I)
祝你好运!
https://computergraphics.stackexchange.com/questions/3955
复制