实时光线追踪技术它可能出现在当前的次世代主机上吗?多年搞各种实时、离线渲染,我来说说看法。我的看法是当前次世代主机真不可能。未来3-5年也许一些内基于光线追踪的非全局光照算法出现,例如镜面反射等,主要用来弥补或者增强现有算法的缺陷。光线追踪的真正普及则会是一个漫长的过程,要整个industry一起努力。至于真正的无偏的全局光照,要做到实时所需要的计算量在可预见的未来都还是太大。
一提到光线追踪,许多人第一反应就是图形渲染的圣杯,实现以后游戏的画面就会和好莱坞大片一样震撼。这其实是很不实际的主观假设。
误点1:把光线追踪等价于全局光照,甚至一系列牛逼的特效例如焦散,云雾,次表面散射,基于物理着色。
其实光线追踪单纯就是指的计算出三维空间中一个给定射线和一群三角形中的焦点的过程。这是一个逻辑上非常简单的操作。基于这个操作,我们可以衍生出许多全局光照的算法。为什么这个操作如此有用的本质原因是因为渲染方程
是一个表面法线周围半球上的积分。这个半球方向上的东西无论是光源还是各种奇怪形状,材质的其他东西都会对这个表面上的颜色有影响。在不知道这个半球方向范围内有什么办法的情况下,发射光线去对周围采样是最通用,但是很低效的方法,如下图。但是光线追踪本身除了用来采样场景也可以用在碰撞检测,寻路等和渲染无关的地方。
误点2:认为有了光线追踪游戏画面就电影化了,并认为基于光栅化的方法就是做不好光照计算,需要被推翻。
这简直是忽视了过去20年图形学界和游戏开发者们所积累的各种技术,技巧和优化。我先举两个例子。下面的图片是用虚幻引擎4制作的建筑可视化。对于这种静态场景来说,光照贴图(Light Map)就一下把最难搞的漫反射部分通过预计算搞定了,运行时没任何overhead。UE4用Photon Mapping算Light Map,这是个一致的全局光照算法,也就是说最后的结果加上SSR和Probes做镜面部分的话和你离线渲染结果就基本没有什么差别了,小场景60Fps跑起来无压力。
另一个例子是Unreal的风筝demo它使用的地形是Epic在新西它使用的地形是Epic在新西兰实地扫描的,目标大概是要创造Pixar类型的电影化体验。这个Demo我不能说他有上面那个那么精确兰实地扫描的,目标大概是要创造Pixar类型的电影化体验。这个Demo我不能说他有上面那个那么精确兰实地扫描的,目标大概是要创造Pixar类型的电影化体验。这个Demo我不能说他有上面那个那么精确CPU跑起来都不能60Fps么,任务管理器是各种爆满的。
所以我想说的是,视觉上看到的无偏全局光照是体验的重要部分,但是基于光栅化的程序也能在一些特定情况下提供这种体验,并且光照并不是和电影唯一的差距。电影和游戏的可用资源的巨大差距和两种媒介体验的本质差距等综合因素都是游戏画面电影化的障碍!资源的差距包括一帧画面计算的时间资源(1/60秒和数小时),计算资源(普通CPU+GPU和一个渲染农场),美术素材资源(几十万个三角形和过分细分到比像素还多的三角形)还有物理模拟的精度等等。体验的本质差别则是电影的是线性的。导演,特效师只需要保证所有的画面在一个角度,一个时间达到完美即可。而游戏则是可交互式的方式。所以光线追踪真不是最终的救命稻草。实时程序就是一个要把及其珍贵的时间和软硬件资源合理的分配到不同的因素里去。
当然我不是保守派,光线追踪作为一个最基本的采样场景的操作来说,通用且直观,如果性能跟的上,必然会带来许多渲染技术的发展。但是高效的实现难度就是很大,前面许多回答也都多少分析了些原因,我就总结和补充一下。
难点1:计算量大。
如果拿一个4K分辨率的游戏要做全局光照算法,例如路径追踪,假设每个像素要1000个样本噪点才收敛(这是非常非常保守的数字),每个样本的路径长度是5次反射(也是非常短的1000个样本噪点才收敛(这是非常非常保守的数字),每个样本的路径长度是5次反射(也是非常短的2000000 * 60 = 2488320000000。也就是说一秒钟要射出2500G跟光线,这个数字大概目前最快的渲染器也慢了至少一万倍。讽刺的是对于电影级的画质来说求交的过程和着色相比只是非常小的一部分。离线渲染的最前沿的研究我也了解且实现过不少,有许多提高采样效率的方法。但是无论怎么部分。离线渲染的最前沿的研究我也了解且实现过不少,有许多提高采样效率的方法。但是无论怎么本数量的做法在实时应用里真的没什么希望。要怪就怪1/60秒的要求是在太苛刻。但我不想显得过分悲观,上面10000倍的差距也只是真正要做一个无偏路径追踪的需求,实际上就算是离线渲染也有许多trick能减少noise,biased去加快收敛速度,所以如果真的应用到游戏里肯定能用一些其他biased方法去cheat away这么大的计算量。
难点2:现代GPU已经将基于光栅的管线性能优化的将近极致了。
榨干了最后的性能,一方面是光栅化算法的确相比于光线追踪更容易被集成进硬件,三角形可以在不同管线阶段Stream,另一方面光栅化大规模流行了20年,厂商已经有太多的时间和经验积累经得起考验的优化。在NV每次多深入了解一些GPU架构都会感叹原来在底层还有那么多的硬件上的各种优化。于此同时,基于光栅的渲染算法也有GPU架构都会感叹原来在底层还有那么多的硬件上的各种优化。于此同时,基于光栅的渲染算法也有以说要从头发展,当然肯定有新的东西可以搞,只不过也真的需要人来做这个工作。
难点3:现代基于光栅的图形管线已经烙印到GPU里,接口暴露在API里,大量现成的算法实现在游戏引擎里和游戏开发者的脑子里。
所以光线追踪的加入意味着图形管线的改变,是否以为着有一种新的引擎里和游戏开发者的脑子里。所以光线追踪的加入意味着图形管线的改变,是否以为着有一种新的引擎里和游戏开发者的脑子里。所以光线追踪的加入意味着图形管线的改变,是否以为着有一种新的里发射光线呢,还是像compute shader那样一次运行很多光线然后批量返回呢,场景的加速结构是要在API Level提供支持呢,还是交给开发者?在性能还跟不上做一致的全局算法的情况下,有什么其他效果、算法我们可以尝试呢?等这些都跟上了,又要等多久市面上的游戏才会逐渐开始普及。所以我认为就算性能跟上之后,光线追踪的普及也会是个缓慢逐渐的过程,并且需要整个industry的一起努力。
最后我想说我不同意光线追踪没有需求这个观点。需求是自己创造的。要么被自己淘汰,要么被别人淘汰。