本文主要介绍深度学习在渲染方面的相关应用与进展。
首先分享一下我个人对深度学习的浅薄理解,第一,深度学习在数学上是基于梯度的优化策略,而梯度则要求可微(differentiable);第二,深度学习是基于样本数据的训练优化,是一种基于贝叶斯概率的经验主义推断;第三,深度学习是一种计算能力,只要有价值,可以应用在任何领域。
Neural Rendering CVPR2020
我们再看一下渲染和深度学习之间的关联。如上图所示,渲染的缺点是模型的人工成本高,渲染时间久,优点是可以完全控制整个场景下的所有参数,比如相机,灯光,几何对象以及材质等。
Neural Rendering CVPR2020
针对渲染的两个缺点,自然会想到,深度学习是否能在渲染性能和建模(3D重建)两个方面有所建树。渲染和3D重建是互逆关系,如上图,渲染是从左到右的过程,而3D重建则是从右到左的过程。
DLSS
在渲染上,英伟达的DLSS技术就是基于深度学习,经过大量数据的训练,掌握了基本的规律,然后基于这些经验,将一个低分辨率的图形转为一副高分辨率的图形,从而提高了渲染的效果和效率。
Neural Importance Sampling
深度学习也可以在采样和材质方面提升渲染效率。如上图,我们需要在场景中寻找贡献最大的光路,在点X处BSDF最大的贡献来自粉色区域,如果考虑光源的位置,以及场景中的遮盖关系,最终点X处的光路贡献分布是很难获取的。Path Guiding技术会在渲染的过程中构建一个SD-tree,实时管理场景表面任意点的radiance来源分布,随着样本数的增加,这个分布也就越接近真实情况,采样的效果也就越好。Neural Path guiding的思路是用神经网络来取代这个SD-tree,采样的光路同时作为一个训练数据来优化该神经网络,获取一个更准确,平滑的分布。
Neural Layered BRDF
最近两年,深度学习也尝试解决材质中计算量大的问题。既然BRDF函数的计算量大,Neural BRDF就设计一个神经网络,基于已有的材质库来训练该网络,取代传统的BRDF函数。这样,神经网络基于数据训练,拥有了记忆BRDF函数的能力,依靠自己的推理能力来获取BRDF的返回值,避免了大量的计算。NeuMIP则基于深度学习来解决纹理采样的问题,解决复杂纹理在不同比例下的材质效果展现。今年SIGGRAPH的论文‘Neural Layered BRDF’,思路是引入深度学习,优化多层材质的效果,如上图。整体来看,传统渲染是一个白盒,种瓜得瓜,给一个参数就有一个对应的结果,但计算量感人,而引入的深度学习是一个黑盒,结果取决于训练效果,是一个拍脑门的过程,但避免了昂贵的计算。因此,深度学习的结果是有偏的,而训练的目的是保持一致性。
另一个问题是3D重建,微分渲染(differentiable rendering)和神经渲染(neural rendering)都属于深度学习在该领域的结合。微分渲染在之前的文章中有系统介绍,这里主要介绍neural rendering中的NeRF。
GAN
神经渲染的基础是生成对抗网络(GAN),如上图,这里有两个神经网络,一个生成器Generator,一个判别器Discriminator。前者负责造假币,后者则用来辨别假币,我们不断训练这两个神经网络,造假币和识别假币的技术都不断提高,而我们也得到了足够以假乱真的假币。
Neural Rendering CVPR2020
GAN中的生成器输出的结果是一张2D图片,对应上图的绿色模块,其他部分不做要求,而橙色模块则是对应的神经网络,蓝色模块对应的是渲染模块和场景属性。
GauGAN:基于语义和风格化参数生成图片
GauGAN是基于2D空间的,而GAN的应用自然也会从2D延伸到3D空间,比如人体,建筑物等方面,下面,则是目前异常火热的卷中之王---NeRF。
Understanding NeRF: Neural Radiance Fields
NeRF是一种基于体素Voxel的结构,每一个点的属性包括空间位置(X, Y, Z)和视角(θ, Φ),这些参数输入到函数F中,获取该点对应的颜色和透明度,然后通过我们的体渲染生成2D图片。在这个流程中,我们利用现有的图片训练这个生成器,优化函数F,实现任意角度的效果展现。
NeRF的效果非常好,因此取得了巨大的关注。首先,NeRF是基于voxel的体渲染模型,这保证了空间中任意点都是连续的,不需要考虑几何对象复杂的拓扑关系,也不需要考虑边界带来的不连续问题,这些特性让NeRF易于优化,避免了陷入局部最优解的问题;其次,是通过MLP神经网络的训练,获取每个体素的参数值。但NeRF本身也有很明显的问题,首先,它没有记录材质属性,光源信息,只能还原静态场景,不支持relighting,其次,NeRF支持的分辨率很小,仅适合小场景,再次,不支持动态场景,再再次,如何加速NeRF,提高实时的能力,最后,NeRF的这种体素结构和传统的3D数据结构区别很大,尽管可以较好的还原渲染效果,但不容易获取准确的几何信息,比如法线等。
人们希望NeRF可以解决一切问题,因此才会发现它的诸多不足,也有不少论文提出了方法来弥补上述的不足。Google尝试将NeRF与自己的地理空间数据结合。
Block NeRF
Block NeRF是Waymo与Google Research一起,基于280万张谷歌街景图片,创建了一个NeRF场景,能够渲染整个旧金山。Block,顾名思义,就是将场景分块单独训练,从而实现了大场景的重建能力。而要实现该能力,首先,需要解决不同图片拍摄角度和距离不同,拍摄环境不同带来的差异,以及场景交接部分的融合。相比传统的街景体验,这种方式可以让我们以任意角度浏览任意区域,同时,可以展现不同环境下相同场景的效果,如上图。
更进一步,在几天前的Google IO大会上,Google将该技术应用到全球街景数据中,推出了称为immersive view的体验,同步推出了ARCore GeoSpatial API,提供基于地理空间的AR体验。目前,该服务已经在洛杉矶,伦敦,纽约,旧金山以及东京等城市上线,后续会提供其他城市。一项新技术能够在如此短的时间大范围应用到工业界,足见这项技术巨大的潜力和无限可能。
真实感渲染系列到此结束了,心中难免有些伤怀,仿佛失去了什么,即便自己不曾拥有过。渲染行业涵盖了诸多技术和领域,很幸运能够成为其中的一员。无论我用双手渲染了无数的场景,最难忘的画面,是用双眼记录那瞬间的心动。此刻的窗外,灯光熄灭,若你是那颗可望不可及的星辰,我便是那眺望的眼神。