用于实时渲染的云层环境体积神经阴影技术

《Proceedings of the ACM on Computer Graphics and Interactive Techniques》:Environmental Volumetric Neural Shading of Clouds for Real-Time Rendering

【字体: 大 中 小 】 时间:2026年07月18日 来源: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体积元素,然后通过光线追踪来渲染这些元素。不过,他们的方法并非以实时渲染为目标。

神经网络还被用来替代或增强光线追踪中的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渲染流程要求针对每种光照条件分别进行渲染。为了解决这个问题,我们生成了1000帧图像(而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算法,由于缺乏阿尔法通道支持,推断出的图像会被叠加在黑色背景上。

在我们的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分贝PSNR值)与性能(3.7毫秒帧时间)之间取得了最佳平衡,因此被用于后续实验。与RNA[Mullia等人,2024年]的方法相比,我们不再将视图方向作为模型输入。实践表明,这样做能略微提升效果(4 × 64架构的PSNR值为22.315分贝,而RNA方法为22.141分贝),同时还能降低模型复杂性,这说明在我们的应用场景中,显式的视图方向输入对云的外观影响并非那么关键。不过,由于厚度参数的计算方式,它仍然依赖于视图方向。

表2. 多层感知网络参数对比
厚度 PSNR(分贝)↑ 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分贝提升至22.315分贝),这体现了该参数在呈现体积效应方面的重要性。如果没有厚度参数,模型就无法准确体现沿视图方向积累的密度变化,从而导致不同视角下的透明度不一致。

图4展示了没有厚度参数时的模型效果,会出现错误的半透明区域,且这些区域在不同视角下依然存在。这类缺陷表现为异常的暗带以及密集区域的透明度降低。尽管厚度参数能大幅改善效果,但我们发现云内部的透明度并未充分饱和,这在与背景合成时会导致明显的轮廓伪影。为解决这一问题,我们在推理前对厚度参数应用了平滑阶跃函数。如图5所示,这种方法能改善透明度表现,提升视觉一致性。

表3. 不同厚度参数下的多层感知网络性能对比
厚度 PSNR(分贝)↑ 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. 厚度参数的效果展示。上排为彩色渲染结果,下排以颜色图谱形式展示阿尔法通道的值(数值越亮表示透明度越高)。彩色图像是通过阿尔法通道叠加在黑色背景上的。(a,d)为参考图像,(b,e)为加入厚度参数后的结果,(c,f)为未加入厚度参数时的结果。

图5. 对厚度参数应用平滑阶跃函数后的效果。(a)为参考阿尔法通道,(b)为应用平滑阶跃处理后的阿尔法通道。此处平滑阶跃的边界值设为0.0和0.4。

4.1.2 可见性参数
借鉴RNA[Mullia等人,2024年]的方法,我们研究了一种可见性机制,该机制能为直接受光和间接受光区域分别生成RGB输出。与RNA方法不同,我们的可见性检测不依赖光线追踪,而是适配于基于光栅化的渲染流程。如果没有可见性参数,模型难以再现自阴影效果,导致阴影过渡过于平滑,细节丢失。引入可见性参数后,阴影区域的重建效果得到改善,局部对比度也有所提升,如图6所示。从量化角度来看,加入可见性参数仅带来小幅提升(4 × 64架构的PSNR值从22.134分贝升至22.315分贝),但从视觉效果上看,改进更为明显。不过在一些情况下仍存在问题,尤其是在阴影过渡较为柔和的区域,这表明二进制可见性模型在处理高度漫反射介质时存在局限。

图6. 可见性测试的效果评估。从左到右依次为:评估数据集中的参考图像、未应用可见性参数的渲染结果,以及应用了可见性参数后的渲染结果。

4.2 三平面编码
与RNA方法类似,三平面编码用于捕捉云的几何特征。但我们发现,三平面表示中的高频成分可能会在最终渲染中引入噪声。为解决这一问题,我们对三平面特征应用了米普映射过滤技术,这样可以在渲染过程中高效地、通过硬件手段控制特征的平滑度。

如图7所示,提高米普映射级别可以减少高频伪影,使渲染结果更加平滑。虽然这种过滤会降低PSNR值(4 × 64架构的PSNR值从22.315分贝降至20.031分贝),但视觉质量却有所提升,这反映出传统量化指标与人类视觉感知之间的差异。这一现象与先前的研究[Sun等人,2024年]一致,说明对学习到的特征进行适度平滑处理有助于提升视觉质量。

图7. 对三平面特征图进行模糊处理的效果展示。上排展示了三平面表示中的单个特征通道(蓝色表示负值,橙色表示正值),下方为对应的实时渲染结果,可见模糊处理有效降低了最终渲染中的高频噪声。

4.3 最终渲染
图8和图9展示了在不同光照和观看条件下的实时渲染结果。这些结果采用了4 × 64架构、三级米普映射的三平面编码方案,以及经过平滑处理的厚度参数。我们的方法能够在保持实时性能的同时,生成具有真实光照效果的体积感云朵图像。值得注意的是,该方法完全避免了传统的体积积分运算,但仍能保留软自阴影和依赖视图方向的视觉特性。更多结果,包括低多边形网格和动态序列的渲染结果,可在补充材料中找到。

图8. 不同光照条件下云朵的多个视角截图。

图9. 使用其他云朵模型得到的额外渲染结果。(a)至(e)展示了同一模型在不同光照条件下的效果。(d)和(e)为近距离视角下的渲染结果,但光照条件不同。(f)展示的是另一种几何结构更为复杂的云朵模型。

5 讨论
我们的研究表明,所提出的方法能够在避免传统体积积分运算的情况下,实现实时渲染,并保持具备竞争力的图像质量,可用于生成具有体积感的云朵图像。尤其是每帧仅3.7毫秒的渲染时间,充分体现了基于光栅化的渲染方法相较于依赖昂贵光线追踪技术的传统体积渲染方法的效率优势。通过消融实验我们发现,增加模型容量只能在一定程度上提升图像质量,超过一定程度后,虽然性能提升不明显,但计算成本却会显著上升。尤其是当网络规模较大时,会给处理器带来较大负担,导致帧时间急剧增加,如表2所示。4 × 64架构则在图像质量与实时性能之间取得了最佳平衡。厚度参数是我们方法的核心组成部分,对于呈现体积效应至关重要。如果没有该参数,模型就无法正确表现透明度与密度变化,从而导致阿尔法通道及整体图像质量大幅下降。这凸显出在神经网络阴影模型中融入依赖视图方向的体积特征的重要性。

尽管我们发现,不将视图方向作为输入时模型的表现更好,但随着参考渲染器中所使用的体积着色器不同,这一情况也可能发生变化。我们在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号