用于实时渲染的云层环境体积神经阴影技术
《Proceedings of the ACM on Computer Graphics and Interactive Techniques》:Environmental Volumetric Neural Shading of Clouds for Real-Time Rendering
【字体:
大
中
小
】
时间:2026年07月13日
来源:Proceedings of the ACM on Computer Graphics and Interactive Techniques 3.1
编辑推荐:
摘要
我们提出了一种高性能方法,用于实时重新渲染高保真体积云。在“可重光照神经资产”框架的基础上,我们进行了若干关键改进,使得基于光栅化的渲染流程中也能对体积云现象进行神经网络着色处理。具体而言,我们引入了逐像素厚度参数来捕捉与视角相关的透明度,并用天空照明模型替代单一光源,
摘要
我们提出了一种高性能方法,用于实时重新渲染高保真体积云。在“可重光照神经资产”框架的基础上,我们进行了若干关键改进,使得基于光栅化的渲染流程中也能对体积云现象进行神经网络着色处理。具体而言,我们引入了逐像素厚度参数来捕捉与视角相关的透明度,并用天空照明模型替代单一光源,从而使网络能够学习复杂的大气散射效应。为实现实时性能,我们放弃了基于密度场的体积渲染方式,转而采用网格表示结合三平面特征编码的方法。这种方法完全基于光栅化,无需进行光线追踪或体积积分即可再现体积效果。我们还描述了一套完整的流程,可将体积云资产转换为通过路径追踪监督训练得到的神经网络表示。通过消融实验,我们从图像质量和运行时间两个方面评估了该方法的效果。我们的改进将重建质量从18.13 dB提升至22.32 dB,同时每帧的渲染时间可低至3.7毫秒。这些结果表明,我们的方法能够实现高质量、可重光照的云渲染,适用于对实时性和性能要求较高的应用场景。
AI生成的总结(实验版)
此总结是由自动化工具生成的,并非由文章作者撰写或审核。它旨在帮助读者发现相关内容、评估文章相关性,以及让相关领域的读者理解该研究工作。它是对作者提供的摘要的补充,而作者提供的摘要仍是论文的核心总结。完整文章才是最具权威性的版本。点击此处了解更多信息。点击此处对该总结的准确性、清晰度及实用性发表意见,您的反馈将有助于优化未来的生成版本。要查看此AI生成的通俗语言总结,您需要拥有高级访问权限。
图1. 我们方法的概览。体积云被转换为网格,然后在Blender中渲染,以在不同的视角和光照条件下生成训练数据。通过正面和背面的渲染结果来估算逐像素厚度,从而让模型能够捕捉到体积效果。所得数据集用于训练基于“可重光照神经资产”的神经着色模型,该模型采用多层感知器结构,能够学习复杂的灯光散射效应。在运行时,云朵通过光栅化流程实时渲染,利用训练好的模型对网格进行着色,从而在不进行显式体积渲染的情况下呈现出体积效果。
1 引言
在追求实时图形更高视觉真实度的过程中,渲染体积云仍然是一个具有挑战性的问题。现代游戏引擎依赖于多种近似方法,从静态天空盒和广告牌模型[Maciel和Shirley 1995]到伪物体和动态密度场[Schneider 2023]。虽然密度场方法能够生成更逼真的云效果,但它们需要体积渲染,而这在计算上成本很高。
实时体积渲染通常依赖光线追踪,由于需要沿视线方向反复采样,这一过程会带来较高的计算成本。为了实现交互式性能,现有系统往往会在图像质量和速度之间做出权衡,例如通过降低分辨率或对远处区域采用稀疏采样来进行渲染[Hillaire 2016;Schneider 2023]。因此,实时云渲染往往会出现模糊现象,细节也会丢失,这在性能与视觉真实度之间形成了微妙的平衡。
近年来,神经渲染技术的发展展现了在实时模拟复杂光传输方面的巨大潜力[Mullia等人2024;Zeltner等人2024]。不过,这些方法主要针对表面,侧重于反射率和次表面散射,并未直接处理如云朵这样的全体积现象。
在本研究中,我们对“可重光照神经资产”[Mullia等人2024]进行了改进,使其能够在基于光栅化的渲染流程中实现体积云的实时渲染。我们的方法用神经着色模型替代了显式的体积渲染,从而在网格几何体上再现体积效果。为此,我们将体积云资产转换为网格,并利用Blender中的路径追踪真实渲染结果来生成训练数据。该数据集涵盖了在不同视角和光照条件下的云朵情况,其中还包括考虑了大气散射效应的物理驱动型天空照明模型。虽然“可重光照神经资产”能够泛化各种光相互作用,但我们的模型在训练过程中会将单一的天空照明模型作为固定部分纳入其中。
由此产生的神经网络能够学习并近似复杂的光传输效应,可在渲染时通过标准的光栅化输出结果进行评估。通过利用网格表示,我们可以无缝集成到光栅化流程中,同时还能利用G缓冲区和深度等信息。这种设计无需进行光线追踪,却依然能够保持体积效果,相比传统的实时体积渲染方法,它能呈现更清晰的细节,也比基于广告牌模型的方法具有更高的视角依赖性真实度。
本文的主要贡献包括:
• 我们提出了一种受“可重光照神经资产”启发的神经着色模型,可用于实现具有真实光照效果的体积云的实时渲染。
• 我们介绍了一种将体积云资产转换为适合神经网络训练的网格表示的工作流程。
• 我们展示了如何将该模型集成到光栅化流程中,从而在不进行显式体积渲染的情况下渲染出具有体积效果的云朵。
本文的其余结构如下:第2节回顾相关研究;第3节详细介绍所提出的方法,包括数据生成、模型架构以及与渲染流程的整合方式;第4节通过消融实验和性能分析给出定性和定量评估结果;第5节讨论存在的局限性与未来研究方向;第6节对全文进行总结。
2 相关工作
计算机图形学中的云研究通常从建模、动画和渲染三个互补的角度展开[Goswami 2021]。在计算机图形学中,渲染领域长期以来以基于物理的方法为主,这类方法通过显式模拟光传输来实现高真实度效果。尽管这些方法具有坚实的物理基础和较高的预测精度,但它们的计算成本较高,尤其是对于云朵这样的体积现象。相比之下,近期的基于机器学习的方法,包括神经渲染技术,旨在通过数据来近似光传输,从而在运行时实现高效计算,同时还能捕捉那些难以通过解析方法建模的复杂视觉效果。
基于这一范式转变,我们的工作将“可重光照神经资产”[Mullia等人2024]的应用扩展到了体积云渲染领域。因此,本节将重点介绍他们工作中未充分涉及的补充文献,同时在文中适当处指出两者之间的关键相似点与差异。
2.1 实时云渲染
目前用于渲染云朵的方法种类繁多,从启发式近似方法到基于物理的方法都有。要想获得高保真效果,通常需要模拟光在介质中的传播过程,而这在计算上成本很高。在实际应用中,实时渲染方法多采用近似策略,通常将计算限制在单次散射范围内,或使用简化的多次散射模型。
基于广告牌模型的方法[Maciel和Shirley 1995]通过带纹理的多边形来近似云朵,具有出色的性能,已被广泛用于实时应用[Dobashi等人2000;Harris和Lastra 2001;Wang 2003],能够生成视觉上较为逼真的效果。不过,这类方法在处理与视角相关的效果以及光照交互方面存在固有局限性。而我们的基于网格的表示方法则能够实现完整的视差效果,并且在视角变化时能提供更一致的光照效果。
基于物理的实时云渲染通常是通过在密度场上进行光线追踪来实现的。例如,Hillaire [2016]和Schneider [2023]分别提出了用于天空、大气和云朵渲染的成熟系统,这些系统都依赖于体积光线追踪。虽然这些方法能够实现高视觉真实度,但其高昂的计算成本迫使人们采用降低分辨率和稀疏采样等优化手段,这往往会导致渲染结果出现模糊现象。而我们的方法则完全避免了光线追踪,而是通过将神经网络应用于网格几何体,来学习体积光传输的效果。
Duarte和Gomes [2017]提出了一种基于仿真的流程,将密度场转换为网格,但这些网格并不会直接用于渲染。相反,它们会被离散化为体素,用来生成体积场,最终的渲染仍依赖于多次散射光线追踪。我们的方法则有所不同,它直接以网格作为主要的渲染单元。
在离线渲染方面,Kallweit等人[2017]展示了用于预测大气云中辐射强度的神经网络方法,虽然能获得高质量的结果,但代价是性能较低。Hu等人[2023]在此基础上进一步发展,他们从辐射传输方程[Kajiya和Von Herzen 1984]中提取出具有物理意义的特征,包括透射率、相位和反照率特征,并将这些特征与更轻量级的神经网络架构相结合。这样一来,所需的网络规模得以减小,推理性能也得到了提升,从而使神经网络实现的体积多次散射技术进入了实时应用领域。该论文报告了交互式性能,其中在1024×1024分辨率下,渲染时间约为25毫秒。
Hofmann等人[2021]结合了多种技术,包括神经网络去噪,以加速体积路径追踪,使其接近实时渲染水平。不过,这些方法仍然依赖于体积积分,无法完全消除其计算成本。
2.2 神经渲染
除了“可重光照神经资产”[Mullia等人2024]之外,神经渲染技术也被广泛用于模拟外观和光传输。神经辐射场[NeRF][Mildenhall等人2020]通过将体积场景编码到神经网络中,实现了高质量的新视图合成。不过,基于NeRF的方法仍然依赖于在密度场上进行光线追踪,而且通常会将光照信息直接嵌入到表示结构中,这就限制了其重光照能力。虽然有一些扩展方法试图解决重光照问题[Toschi等人2023;Xu等人2023;Zhao等人2024],但它们仍然保留着体积渲染的高昂成本。Stadter等人[2024]在基于NeRF的方法基础上,加入了用于路径追踪的神经体积细节层次表示,通过根据距离调整分辨率来提高效率。尽管这些方法效果不错,但它们仍然依赖于体积表示和基于光线的整合方式。
Condor等人[2025]提出将散射体和发射体体积表示为紧凑的三维高斯或Epanechnikov体积 primitives,然后通过光线追踪来对其进行渲染。不过,他们的方法并非主要面向实时渲染应用。
神经网络还被用于替代或增强光线追踪中的基于BVH的结构查询方式。Weier等人[2024]在类似BVH的层级结构中引入了神经节点,可以通过这些节点查询可见性、交点深度、法线以及外观属性。Fujieda等人[2025]则同样引入了针对每个对象的神经交点函数,用以替代底层的BVH遍历过程。这些工作主要着眼于几何体压缩和光线-几何体交点查询,而非学习复杂的着色效果或可重光照的光传输机制。
与以往的神经网络和体积渲染方法不同,我们的方法将神经着色模型与基于网格的光栅化技术相结合,从而能够在不进行显式体积积分的情况下,实现具有体积效果的云朵的实时渲染。
3 方法
我们的方法包含三个阶段:数据集生成、模型训练以及实时渲染(见图1)。其核心是一个神经着色模型,该模型能够学习并近似云朵内部的复杂光散射现象,以及它们与大气照明的相互作用。该模型以场景相关的特征作为输入,通过由全连接层构成的多层感知器来预测最终的像素颜色。通过这种方式,就可以在网格几何体上通过学习到的着色效果来再现体积效果。关于该神经模型的详细信息将在后续章节中介绍。
为了训练模型,我们使用Blender[Blender Online Community 2025]生成带有监督信息的训练数据。这些数据包括在不同视角和光照条件下通过基于物理原理的路径追踪得到的云朵渲染结果,以及作为神经模型输入所需的辅助场景信息。此外,还利用Blender从云朵资产的体积密度场中提取出网格表示。生成这样的数据集需要精心设计的渲染设置,具体细节将在下文中进行说明。
生成后的数据会被进一步处理,转化为一种针对每个资产进行标准化处理且不受Blender特定特性影响的表示形式。这样就能确保在实时渲染器中,使用相同的输入数据即可重新生成相应的渲染结果。处理后的数据集会被用于在PyTorch[Paszke等人2019]中训练神经模型。虽然我们的实现方案在很大程度上遵循了“可重光照神经资产”[Mullia等人2024]的设计思路,但我们也为体积云的特点做了一些针对性的修改,具体内容将在后文详细介绍。
最后,经过训练的模型以及提取出的网格会被集成到基于Vulkan实现的实时渲染器中。在运行时,渲染器会重新构建所需的输入特征(如几何信息和光照信息),并在光栅化流程中对每个像素调用神经模型进行计算,从而无需进行显式的体积积分,即可高效地渲染出具有体积效果的云朵。
以下各小节将详细介绍这三个阶段的具体内容。
3.1 神经模型
我们的神经模型基于Mullia等人[2024]的研究成果,但对其进行了部分修改,以更好地适应体积云的特性。虽然他们的模型能够处理次表面散射现象,但它最初是为表面设计的。为了更准确地捕捉云朵的体积特性,我们引入了一个厚度参数,该参数能够提供关于光在给定点和方向上穿过云层的距离的额外信息。此外,我们还将透明度作为模型的输出特征,以此更准确地表现云朵的半透明特性。该模型的其他输入和输出与原始RNA模型类似,仅法线方向和视图方向有所不同。RNA模型以法线方向作为输入,而我们的模型则不采用这一方式,因为对于云层而言这并无实际意义。尽管可以从网格中提取法线信息,但它并不会影响光子进入云层时的散射情况。视图方向也被省略了,其影响会在结果部分进行说明。我们神经网络的完整架构如图2所示。阴影点p通过三平面表示法进行编码:将该点投影到三个正交平面上,然后通过双线性插值从每个平面采样出FXY、FYZ和FXZ特征,最后将它们相加[Chan等人,2022]。虽然Mullia等人[2024]使用3D向量来表示光线方向,但我们则采用球面坐标系中的θ和?来对半球面进行2D参数化,其中θ表示方位角,?表示仰角。这些角度可映射到天空模型中的太阳方向,该方向将成为阴影计算的光源。这与仅考虑单一定向光源的RNA模型不同。模型的最终输入是厚度参数δ,即点p处云层沿视图方向的厚度。这些输入会被拼接起来,传递给一个多层感知器,该感知器会输出两种RGB颜色cD和cI。颜色cD代表阴影点在直接受到光源照射时的颜色,而cI则表示阴影点被光源遮挡时的间接阴影颜色。这与Mullia等人[2024]采用的方法相同。不过,我们还会输出一个透明度值α,用以表示在给定视图方向下该阴影点的云层透明度。在激活函数方面,所有隐藏层都采用了修正线性单元,即ReLU函数。在输出层,则采用了Zeltner等人[2024]提出的带偏移量的指数型激活函数,即g(x) = ex ? 3。图2.我们提出的神经网络模型。给定一个3D位置p,我们首先将其投影到三个正交平面上,从而得到2D坐标(pXY, pYZ, pXZ)。接着,通过双线性插值从对应的三平面特征图中采样出FXY、FYZ和FXZ特征。这些特征会与太阳方向(θ, ?)以及厚度参数δ结合在一起,随后传递给多层感知器,该感知器会输出两种颜色cD和cI以及透明度α。在第4节中,我们将通过一项消融研究来证明厚度参数、分离式的RGB输出(cD和cI)以及多层感知器网络的不同配置的重要性。3.2 数据集生成为了训练这个神经网络阴影模型,我们需要生成一个与模型所需输入和输出相匹配的数据集。我们使用Blender 4.5.3 LTS及其Python API来自动化这一过程。与依赖定制版Blender Cycles的RNA模型[Mullia等人,2024]不同,我们使用的是Blender的官方版本。虽然我们展示了如何利用Blender生成数据集,但任何能够输出表1中所列缓冲区的体积渲染器都可以使用。网格提取。我们首先将体积云资产转换为网格格式。云资产通常以密度场的形式提供;在我们的案例中,我们使用了OpenVDB格式[Museth,2013]。从体积数据到网格的转换是通过Blender的“体积转网格”修改器来实现的,该修改器内部依赖于OpenVDB工具包。虽然存在多种提取等值面的方法[Kobbelt等人,2001;Lorensen和Cline,1987;Schaefer等人,2007],但本研究的重点并非探讨这一过程的细节。根据输入的密度场以及所使用的算法,生成的网格可能具有很高的细节程度。在我们的数据集中,提取出的网格包含大约510万个三角形。为了研究性能上的权衡,我们还使用Blender的“简化”修改器生成了一个简化版本,该版本的网格三角形数量减少到了83,995个。神经网络是使用高分辨率网格进行训练的,而两种版本的网格都会在运行时进行评估。这表明,只要低分辨率网格能够近似相同的几何结构并具备一致的位置特征(例如厚度和三平面编码),就可以对其进行推理运算。渲染设置。训练数据是通过在不同的光照条件下从多个视角渲染网格来生成的。我们利用Blender的“视图层”和“渲染通道”功能来获取真实图像以及诸如世界空间位置之类的辅助场景信息。为了同时捕捉体积效果和基于表面的特征,我们在不同的集合中维护了多个具有不同材质的云层网格实例。在真实渲染过程中,我们使用“原理体积”着色器来模拟体积光传输效果;而在特征提取过程中,则使用漫反射表面材质(原理BSDF)来获取几何信息。多场景配置。我们采用了三个独立的场景,在单个渲染流程中获取所有所需数据:•前面场景:使用Nishita天空纹理[Nishita等人,1993]作为照明源来渲染体积云,同时输出颜色信息和表面位置信息。•后面场景:从相反的视角捕捉表面位置,以便计算每像素的厚度。这是通过将摄像机围绕一个共同的旋转点进行镜像反射来实现的(见图1)。•可见性场景:使用定向的太阳光源来计算直射光的可见性,输出“直接漫反射”渲染通道。在此场景中,天空照明会被关闭,以便单独分析直射光效果。数据提取。整个设置流程总结在表1中。所有场景的输出都会通过Blender的合成器功能整合在一起,然后以1024×1024分辨率、32位浮点精度的OpenEXR图像形式存储下来。除了每像素的输出数据外,我们还会记录包括网格边界框、摄像机位置以及太阳方向在内的全局参数。对于每一帧图像,摄像机的朝向和光照条件都会被随机设置,以确保覆盖范围的多样性。摄像机位置是在云层周围的球面上均匀采样的,而太阳的仰角和方位角则分别在[-5°, 90°]和[0°, 360°]范围内采样。由于光照强度不足,我们会避免使用仰角低于-5°的情况。数据集规模。与RNA模型不同,后者会在单次渲染中为每个像素调整光照条件,而标准的Blender渲染流程则要求为每种光照条件分别进行渲染。为了解决这个问题,我们生成了1,000帧图像(而RNA模型仅为400帧),以此增加观测和光照条件的多样性。表1.场景类型前面场景后面场景可见性场景集合体积效果表面效果表面效果摄像机位置前面前面后面前面光源Nishita无无太阳输出颜色位置位置直接漫反射Blender场景的渲染设置以及相应的输出缓冲区。3.3 数据集处理在开始训练之前,需要对生成的数据进行处理,使其符合神经模型的输入要求。位置归一化和厚度计算。我们利用云层的边界框将所有的世界空间位置归一化到统一的坐标范围内。为了计算每像素的厚度,我们会将后面摄像机捕捉到的位置进行镜像处理,然后计算其与对应的前方位置之间的差值。这样就能得到一个近似表示沿视图方向累积密度的厚度值。视图方向。与RNA模型[Mullia等人,2024]不同,我们的模型并不将视图方向作为输入参数。不过,出于比较的目的,我们还是会记录下每一帧的摄像机位置。我们假设云层是在一定距离外被观察的,因此可以认为图像中的视图方向是恒定的。这与RNA模型中按每个像素定义视图方向的方式有所不同。这一假设不应会带来任何问题,因为该参数仅用于评估视图方向的影响,而且我们还可以控制评估数据集中不包含任何近距离拍摄的图像。可见性判断。可见性场景中的直接漫反射通道用于判断一个点是被直接照亮还是被间接照亮,这一结果对应着cD和cI这两个输出值。在RNA模型中,可见性是通过光线追踪来计算的。而在我们的模型中,渲染得到的直接漫反射通道包含连续的数值和颜色信息,因此并不适合直接用于二值的可见性分类。为了解决这个问题,我们采用亮度法将直接漫反射通道转换为灰度图像。得到的灰度值随后会通过平滑步函数(三次赫米特插值)进行处理,从而得到较为平滑的可见性数值。我们通过实验将这两个阈值的数值分别设定为0.0和0.1。这样的处理方式能够实现cD和cI之间的平滑过渡,这对于那些阴影边界较为模糊的云层来说尤为重要。数据过滤。最后,我们会从数据集中删除完全透明的像素,因为这类像素无法为模型训练提供有效信息。所有的数据处理步骤都是使用NumPy和PyTorch库来实现的。3.4 训练我们使用PyTorch框架[Paszke等人,2019]来训练这个神经网络阴影模型。对于每一个样本,其3D位置p都会通过三平面表示法进行编码,然后通过双线性插值从中提取出特征向量。这些特征向量会与太阳方向(θ, ?)以及厚度参数δ相结合,共同构成输入数据,送入多层感知器中进行处理。该网络会预测出两个RGB值,即cD和cI,分别代表被直接照亮和被间接照亮的区域,同时还会预测出一个透明度值α。在三平面特征图中,这些特征是以可在PyTorch中学习的参数张量形式存在的。我们利用预先计算好的可见性值,在cD和cI之间进行插值,从而得到最终的预测颜色c~。然后将预测得到的输出结果(c~,α)与真实的RGBA值进行比较,以此计算训练损失。与RNA模型[Mullia等人,2024]的做法一致,我们在计算?2损失之前,会对预测值和真实值都应用对数变换log?(x + 1),这样做有助于稳定训练过程,并提升对高动态范围数值的重建精度。我们使用Adam优化器进行训练,初始学习率为10?3,每隔50个训练周期就会将学习率减半。训练时的批量大小设置为10242个样本,这一数值大致相当于一帧训练数据的分量(但由于去除了完全透明的像素,实际数值并非完全精确)。训练是在NVIDIA A100显卡上进行的,整个训练过程大约需要20分钟时间。3.5 渲染器实时渲染是通过一个自定义的Vulkan框架来实现的,该框架利用一系列渲染通道来完成渲染工作。首先,会渲染出所有不透明物体以及Nishita天空模型,这样做是为了确保渲染结果与训练数据保持一致。虽然也可以使用其他的天空模型,但那样就需要重新训练模型,才能保证训练结果和推理结果的一致性。在渲染出基础场景之后,还需要通过一系列处理步骤来重建神经模型所需的输入数据,进而通过在光栅化流程中应用神经网络技术来实现阴影效果。3.5.1 神经模型与推理。经过训练的神经模型会被集成到Vulkan系统中,借助协作向量扩展功能,从而能够在任意着色器阶段所在的张量核心上运行[The Khronos Group, Inc.,2024]。多层感知器的权重则以16位浮点精度存储,这一精度要求是出于张量核心运算的需要。三平面编码数据则以32位浮点精度的RGBA纹理形式存储。每个纹理负责存储四个特征通道,由于有三个平面(XY、XZ、YZ),且每个平面上有八个特征,因此总共需要六个纹理,它们的分辨率均为512×512。使用纹理格式的好处在于,在查找特征时可以进行高效的双线性插值,这一做法与训练时的设置是一致的。在运行时,系统会为每个片段重新构建所需的输入数据,然后将这些数据传递给多层感知器,该感知器会在片段着色器中直接进行计算,从而得出颜色和透明度值。3.5.2 云层渲染通道。云层渲染的流程如图3所示。该流程包括若干预处理阶段,之后才是最终的阴影计算阶段。图3.用于为阴影模型获取输入参数以及执行最终阴影计算的各个渲染通道的概览。背面位置预处理阶段。为了计算厚度参数,我们首先会渲染云层网格的背面。在这一预处理阶段,会使用正面剔除机制以及大于深度测试来捕捉最远的可见表面。处理得到的位置信息会被存储在一个16位RGB格式的附件中,这些数值会按照云层的边界框进行归一化处理。正面深度预处理阶段。由于神经网络只会对可见表面进行阴影渲染,因此我们需要先进行正面深度预处理,这一阶段同样会使用背面剔除机制,但采用的是小于或等于深度测试。这样一来,只有在最终阴影计算阶段,最靠近观察者的表面才会被纳入计算范围,因为该阶段会使用同一个深度缓冲区来进行对比。阴影预处理阶段。为了解析直接照明和间接照明现象,我们会根据Nishita天空模型所定义的太阳方向来生成阴影贴图。多层感知器会输出两种颜色,即cD和cI,它们分别代表被直接照亮和被间接照亮的区域。我们会采用百分比接近度过滤算法[Reeves等人,1987]来计算阴影系数,该算法能够实现这两种输出值之间的平滑过渡,这一处理方式与训练阶段所采用的平滑可见性计算方法类似。最终阴影计算阶段。云彩颜色传递技术通过神经网络实现阴影计算与图像合成。通过将深度测试设置为相等值,仅对先前识别出的正面表面进行阴影处理。正面位置在顶点着色器中重建并归一化到边界框内。厚度则通过正面与背面位置之间的差值来计算。归一化后的位置会被投影到XY、XZ和YZ平面上,从而得到三平面特征的纹理坐标。这些特征会被采样、组合,连同厚度和光照参数一起传递给多层感知网络。该网络输出颜色和透明度信息,随后与背景混合以生成最终图像。
4 结果
我们通过一系列消融实验来评估该方法,同时分析模型设计与渲染性能。定量结果以图像质量指标和帧时间为依据。图像质量在PyTorch环境中通过将预测图像与保留的测试集进行对比来评估。这种设置能够确保预测结果与真实值在像素级上完全对齐,而这在基于Vulkan的渲染器中很难实现。因此,所报告的图像指标仅反映神经网络的性能,不包含光栅化或网格近似带来的误差。由于真实数据为路径追踪生成的HDR图像(OpenEXR格式),我们最初考虑过诸如mPSNR [Munkberg等人,2006]和FLIP-HDR [Andersson等人,2021]这类针对HDR的指标。不过,这些指标依赖于多级曝光,而在我们的案例中,过度曝光和欠曝光样本会导致数值不稳定。于是我们采用固定曝光值,并将数值限制在[0,1]范围内,之后再使用PSNR和FLIP-LDR [Andersson等人,2020]作为评估指标。对于FLIP,由于缺乏Alpha通道支持,推断出的图像会被叠加在黑色背景上。
在我们的Vulkan渲染器中,性能是通过GPU时间戳来划分不同管线阶段的。所有帧时间均以毫秒为单位,保留两位有效数字。实验是在配备NVIDIA GeForce RTX 4080显卡和AMD Ryzen 9 5950X处理器的系统上进行的(操作系统为Windows 11,NVIDIA显卡驱动版本为581.80,Vulkan版本为1.4.328)。
4.1 消融研究
我们测试了多种多层感知网络架构,改变了隐藏层的深度(2–4层)和宽度(16–512个神经元)。实验结果汇总于表2中。架构用H × N表示,其中H为隐藏层数量,N为每层的神经元数量。所有实验中三平面编码的参数保持不变(分辨率512 × 512,8个特征)。
我们发现,增加模型容量能提升图像质量,但超过4 × 128后提升效果逐渐减弱。尤其是从4 × 256升级到4 × 512,虽然性能提升微乎其微,却带来了显著的性能成本。网络规模和网格复杂度都会对性能产生重要影响。更大的多层感知网络会带来较大的寄存器压力,导致神经元数量超过128时帧时间急剧上升。此外,网格分辨率也对性能有重大影响,高多边形网格始终会占据较高的渲染成本。
基于这种权衡,4 × 64架构在图像质量(22.315 dB PSNR)和性能(3.7毫秒)之间取得了最佳平衡,因此在后续实验中采用了这一架构。与RNA [Mullia等人,2024]相比,我们去掉了模型输入中的视角方向参数。实践表明,这样做能略微提升效果(4 × 64架构的PSNR从22.141 dB提升到22.315 dB),同时降低模型复杂度,这说明在我们的应用场景中,显式的视角方向参数对云朵外观的影响并非至关重要。不过,由于厚度参数的计算方式,它仍然与视角有关。
表2. 多层感知网络参数对比
厚度 PSNR(dB)↑ FLIP↓ 帧时间(毫秒)↓
高多边形 低多边形
4 × 16 是 20.94 40.06 83.5 0.30
4 × 32 是 21.80 30.06 23.5 0.33
4 × 64 是 22.315 0.059 3.7 0.41
4 × 128 是 22.749 0.056 5.2 1.1
4 × 256 是 22.916 0.055 10.2 3.1
4 × 512 是 22.911 0.056 190 77
2 × 64 是 21.028 0.070 3.5 0.31
3 × 64 是 21.842 0.064 3.6 0.36
4 × 64 是 22.315 0.059 3.7 0.41
上表为多层感知网络架构的消融研究结果,PSNR值越高越好,FLIP误差值越低越好,帧时间越短越好。
4.1.1 厚度参数
我们研究了所提出的厚度参数的影响,这一参数正是该模型与RNA的区别所在。实验结果见表3。加入厚度参数后,所有测试架构的图像质量都有显著提升(例如4 × 64架构的PSNR从18.133 dB提升到22.315 dB),这体现了其在呈现体积效应方面的重要性。如果没有厚度参数,模型就无法正确处理沿视角方向累积的密度,从而导致不同视角下的透明度不一致。
图4展示了没有厚度参数时的模型表现,会出现错误的半透明区域,且这些异常在不同视角下依然存在。这些缺陷表现为异常的暗带以及密集区域的透明度降低。尽管厚度参数能大幅改善效果,但我们发现云朵内部的透明度并未充分饱和,这在与背景合成时会导致明显的轮廓伪影。为解决这一问题,我们在推理前对厚度参数应用了平滑阶跃函数。如图5所示,这样处理后透明度表现更佳,视觉一致性也得到了提升。
表3. 带厚度参数与不带厚度参数的多层感知网络参数对比
厚度 PSNR(dB)↑ FLIP↓ 帧时间(毫秒)↓
高多边形 低多边形
4 × 64 是 22.315 0.059 3.7 0.41
4 × 64 否 18.133 0.066 3.7 0.41
4 × 512 是 22.911 0.056 190 77
4 × 512 否 17.674 0.067 190 77
上表为厚度参数影响的消融研究结果。
图4. 厚度参数的影响。上排为彩色渲染结果,下排为Alpha通道的色谱图(颜色越亮表示透明度越高)。彩色图像是通过Alpha通道叠加在黑色背景上的。(a,d)为参考图像,(b,e)为加入厚度参数后的结果,(c,f)为未加入厚度参数的结果。
图5. 对厚度参数应用平滑阶跃函数后的效果。(a)为参考Alpha通道,(b)为应用平滑阶跃处理后的Alpha通道。平滑阶跃的边界值设为0.0和0.4。
4.1.2 可见性参数
遵循RNA [Mullia等人,2024]的做法,我们研究了一种可见性机制,该机制可分别为直接受光和间接受光区域生成独立的RGB输出。与RNA不同,我们的可见性检测不依赖光线追踪,而是适配于我们基于光栅化的渲染流程。如果没有可见性参数,模型难以再现自阴影效果,会导致阴影过渡过于平滑,细节丢失。引入可见性参数后,阴影区域的重建效果得到改善,局部对比度也有所提升,如图6所示。从定量上看,加入可见性参数仅带来轻微的提升(4 × 64架构的PSNR从22.134 dB提升到22.315 dB),但从定性上看,效果更为明显。不过在某些情况下仍存在问题,尤其是在阴影过渡较为柔和的区域,这说明二进制可见性公式在处理高度漫反射介质时存在局限性。
图6. 可见性测试的评估结果。从左到右依次为:评估数据集中的参考图像、未启用可见性参数的渲染结果,以及启用可见性参数的渲染结果。
4.2 三平面编码
与RNA类似,三平面编码用于捕捉云朵的几何特征。但我们发现,三平面表示中的高频成分可能会在最终渲染中引入噪声。为减轻这一问题,我们对三平面特征应用了米普映射滤波。这种方法能够在渲染过程中高效地、借助硬件手段控制特征的平滑程度。
如图7所示,提高米普映射级别可以减少高频伪影,使渲染结果更加平滑。虽然这种滤波会降低PSNR值(4 × 64架构的PSNR从22.315 dB降至20.031 dB),但视觉质量却有所提升,这反映出传统指标与感知真实度之间存在差异。这一现象与先前的研究[Sun等人,2024]一致,说明对学习得到的特征进行适度平滑处理有助于提升视觉质量。
图7. 对三平面特征图进行模糊处理的效果。上排展示了三平面表示中的一个特征通道(蓝色表示负值,橙色表示正值)。下方为对应的实时渲染结果,可见模糊处理减少了最终渲染中的高频噪声。
4.3 最终渲染
图8和图9展示了在不同光照和观察条件下的实时渲染结果。这些结果采用了4 × 64架构、三级米普映射的三平面编码方式,以及经过平滑处理的厚度参数。我们的方法能够在保持实时性能的同时,生成具有真实光照效果的体积感云朵。值得注意的是,该方法完全避免了体积积分操作,但仍保留了诸如柔和自阴影和依赖视角的外观特征等关键视觉特性。更多结果,包括低多边形网格和动态序列的内容,详见补充材料。
图8. 不同光照条件下云朵的多个视角截图。
图9. 使用其他云朵模型的额外结果。(a)至(e)展示了同一模型在不同光照条件下的效果。(d)和(e)为近距离视角下的结果,但光照条件不同。(f)展示的是另一种几何结构更为复杂的云朵模型。
5 讨论
我们的研究结果表明,尽管没有采用显式的体积积分方法,所提出的方法依然能够在保持竞争力图像质量的同时实现实时渲染,适用于体积感云朵的渲染。尤其是每帧仅3.7毫秒的渲染时间,凸显了基于光栅化的渲染方法相较于依赖昂贵光线追踪的传统体积渲染方法的效率优势。通过消融实验我们发现,增加模型容量只能在一定程度上提升图像质量,超过一定限度后,虽然计算成本大幅上升,但质量提升效果却变得很弱。尤其是更宽的网络结构会带来较大的寄存器压力,导致帧时间急剧上升,如表2所示。4 × 64架构则在图像质量和实时性能之间取得了最佳平衡。厚度参数是我们方法的核心组成部分,对于呈现体积效应至关重要。如果没有这一参数,模型就无法正确表达透明度和累积密度,从而导致Alpha通道及整体图像质量严重下降。这凸显了在神经网络阴影模型中融入依赖视角的体积信息的重要性。
虽然我们发现,不使用显式的视角方向参数时模型表现更好,但随着参考渲染器中使用的体积着色器不同,这一情况也可能发生变化。我们在Blender Cycles中使用了原理体积着色器,但如果是为渲染高度各向异性的体积而设计的d着色器,可能也需要视角方向作为输入参数。
关于三平面编码,我们发现定量指标与视觉感知质量之间存在差异。虽然平滑处理三平面特征会降低PSNR值,但它通过抑制高频伪影提升了视觉连贯性。这表明,在当前场景下,传统的逐像素损失函数不足以衡量感知质量,未来需要引入基于感知或频率意识的损失函数。在三平面表示中出现的噪声,可能是由于特征冲突导致的:沿观察方向的多个点可能在某个平面(如XY平面)上投影到相同的坐标位置,迫使网络在共享特征中编码相互矛盾的信息。这种不确定性会在学习得到的表示中产生高频伪影。潜在的解决方案包括增加特征维度、采用其他编码方式,或引入依赖视角的特征。
虽然我们的方法针对的是基于光栅化的渲染,但它也可以扩展到光线追踪领域。位置信息可以直接从主交点获取,而厚度参数则可以通过追踪光线上的进入点和离开点来计算(例如通过任意命中着色器实现)。同样,可见性参数也可以通过光线追踪来计算;不过对于云朵而言,采用柔和的可见性公式可能比RNA中使用的二进制方法更为合适,这意味着有必要整合柔和阴影技术。
5.1 局限性与未来工作
我们方法的一个主要局限在于其对网格复杂度的依赖。正如实验结果所示,过高的三角形数量会显著影响性能。虽然我们证明了可以在运行时使用低分辨率网格而无需重新训练,但未来仍需进一步优化资产生成过程,同时兼顾性能要求。
我们还观察到某些区域会出现边缘生硬、接缝明显等问题。这些问题可能是由于cD和cI之间的可见性混合不连续,以及三平面编码的突变所导致的。要解决这些问题,可能需要改进混合策略或采用更平滑的特征表示方式。
目前,厚度参数是将沿观察方向的累积密度进行近似的手段,但它假设密度是均匀的,这本身存在局限性。此外,厚度参数实际上是指从第一个表面到最后一个表面的几何距离,这也可能导致一些错误结果。例如,如果体积中有两个相距较远但都与观察方向对齐的小区域,那么即使它们的累积密度应该很低,计算出的厚度却可能仍然很高。
我们的训练流程还受到无法使用RNA [Mullia等人,2024]中所采用的修改版Blender Cycles渲染器的限制。因此,我们不得不依靠效率较低的数据生成方式,这不仅需要更大的数据集,还难以精确控制每个像素的光照变化。提高数据利用效率或实现更灵活的渲染控制,将是未来的重要发展方向。
最后,我们的评估仅限于单个静态云朵模型。虽然将该方法扩展到多个模型相对简单,但生成所需的路径追踪训练数据却十分耗时。未来的工作可以探索更具可扩展性的数据生成方法,以及扩展到动态或连续的云场景,从而实现对不断变化的体积现象进行时间上连贯的神经网络渲染。6 结论在本文中,我们提出了一种神经网络着色方法,无需传统的体积渲染技术即可实时渲染体积云。我们的方法表明,可以在网格几何体上有效模拟体积效果,从而在保持云朵关键视觉特性的同时实现高效渲染。我们还介绍了一套完整的流程,用于将体积云资源转换为神经网络表示形式,包括通过路径追踪监督进行数据生成,以及将其集成到基于光栅化的渲染流程中。这证明了“可重光照神经网络资产”框架不仅可以应用于原有的光线追踪场景,还能成功用于支持实时光栅化渲染。我们的研究结果强调了在神经网络模型中融入体积特征的重要性。尤其是所提出的厚度参数,在捕捉与视角相关的透明度方面起着关键作用,显著提升了半透明云朵的渲染质量。总体而言,我们的工作表明,神经网络着色为云朵的传统体积渲染提供了实用且高效的替代方案,为实时应用带来了新的可能性。致谢本研究的计算工作得到了隆德大学科学和技术计算中心LUNARC提供的资源支持。此外,该研究还获得了ELLIIT战略研究环境的资助。本研究所使用的云资源来自华特迪士尼动画工作室(CC BY-SA 3.0许可)。图9中所使用的云资源则由Samuel Krug制作。
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号