用于实时渲染的云层环境体积神经阴影技术
《Proceedings of the ACM on Computer Graphics and Interactive Techniques》:Environmental Volumetric Neural Shading of Clouds for Real-Time Rendering
【字体:
大
中
小
】
时间:2026年07月06日
来源:Proceedings of the ACM on Computer Graphics and Interactive Techniques 3.1
编辑推荐:
摘要
我们提出了一种高性能方法,用于实时重新渲染高保真体积云。在“可重光照神经资产”框架的基础上,我们进行了关键改进,使得在基于光栅化的管线中也能对体积云现象进行神经网络着色。具体而言,我们引入了逐像素厚度参数来捕捉与视角相关的透明度,并用天空照明模型替代单一光源,从而使网络
摘要
我们提出了一种高性能方法,用于实时重新渲染高保真体积云。在“可重光照神经资产”框架的基础上,我们进行了关键改进,使得在基于光栅化的管线中也能对体积云现象进行神经网络着色。具体而言,我们引入了逐像素厚度参数来捕捉与视角相关的透明度,并用天空照明模型替代单一光源,从而使网络能够学习复杂的大气散射效应。为实现实时性能,我们放弃了基于密度场的体积渲染方式,转而使用网格表示结合三平面特征编码。这种方式实现了完全由光栅化驱动的解决方案,无需进行光线追踪或体积积分即可再现体积效果。我们还描述了将体积云资产转换为通过路径追踪监督训练得到的神经网络表示的完整流程。通过消融实验,我们从图像质量和运行时间两方面评估了该方法的效果。我们的改进将重建质量从18.13分贝提升至22.32分贝,同时每帧的渲染时间可低至3.7毫秒。这些结果表明,我们的方法能够实现高质量、可重光照的云渲染,适用于实时应用及对性能要求较高的场景。
AI总结(实验性)
该总结是由自动化工具生成的,并非由文章作者撰写或审核。它旨在帮助读者发现相关内容、评估文章相关性,以及让相关领域的读者理解本文内容。它是对作者提供的摘要的补充,而作者提供的摘要仍是论文的核心总结。全文仍是权威版本。点击此处了解更多信息。点击此处对该总结的准确性、清晰度及实用性发表意见,您的反馈将有助于优化未来的生成版本。要查看此AI生成的通俗语言总结,您需要高级访问权限。
图1. 我们方法的概述。体积云被转换为网格,并在Blender中渲染,以在不同的观看和光照条件下生成训练数据。通过正反面渲染来估算逐像素厚度,从而让模型能够捕捉体积效果。所得数据集用于训练基于“可重光照神经资产”的神经网络着色模型,该模型采用多层感知器结构,能够学习复杂的光线散射效果。在运行时,云会在光栅化管线中实时渲染,利用训练好的模型对网格进行着色,从而在不进行显式体积渲染的情况下呈现出体积效果。
1 引言
在追求实时图形更高视觉真实度的过程中,渲染体积云始终是一个具有挑战性的问题。现代游戏引擎依赖多种近似方法,从静态天空盒和广告牌模型[Maciel和Shirley 1995]到伪影技术和动态密度场[Schneider 2023]。虽然密度场方法能呈现更真实的云效果,但它们需要复杂的体积渲染,计算成本较高。
实时体积渲染通常依赖于光线追踪,由于需要沿视线方向反复采样,因此计算成本很高。为了实现交互式性能,现有系统往往以牺牲图像质量为代价来提升速度,例如通过降低分辨率或对远处区域采用稀疏采样[Hillaire 2016;Schneider 2023]。因此,实时云渲染常常会出现模糊现象,细节丢失,如何在性能与视觉真实度之间取得平衡是一大难题。
近年来,神经渲染技术在实时模拟复杂光传输方面展现出巨大潜力[Mullia等人2024;Zeltner等人2024]。不过,这些方法主要针对表面,侧重于反射率和次表面散射,未能直接处理如云这样的完全体积现象。
在本研究中,我们对“可重光照神经资产”[Mullia等人2024]进行了改进,使其能够在基于光栅化的管线中实现体积云的实时渲染。我们的方法用神经网络着色模型替代了显式的体积渲染,从而在网格几何体上再现体积效果。为此,我们将体积云资产转换为网格,并利用Blender中的路径追踪真实渲染结果生成训练数据。该数据集涵盖了在不同观看和光照条件下的云效果,还包括基于物理原理的天空模型所模拟的大气散射效果。虽然“可重光照神经资产”能够泛化各种光相互作用,但我们的模型在训练过程中会将单一天空照明模型作为固定部分纳入。
由此产生的神经网络模型能够学习并近似复杂的 Light传输效果,可在渲染时通过标准光栅化输出进行评估。通过利用网格表示,我们可以无缝集成到光栅化管线中,同时利用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]在此基础上进一步发展,引入了源自辐射传输方程的基于物理的特征,包括透射率、相位和反照率特征,并将这些特征与更轻量的神经网络架构相结合,从而减少了所需网络规模,提升了推理性能,使神经网络体积多次散射技术得以应用于实时场景。该研究报告了交互式性能,其中在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不同,RNA会在单次渲染中对每个像素设置不同的光照条件,而标准的Blender渲染流程则需要为每种光照条件分别进行渲染。为了解决这个问题,我们生成了1000帧图像(而RNA仅为400帧),以此增加观测和光照条件的多样性。表1.场景类型正面背面可见性使用的集合体积效果表面效果表面效果摄像机位置正面正面背面正面光源Nishita无无太阳输出颜色位置位置直射光漫反射Blender场景的渲染设置及对应的输出缓冲区。3.3 数据集处理在开始训练之前,需要先对生成的数据进行处理,使其符合神经模型的输入要求。位置归一化和厚度计算。利用云层的边界框,所有世界空间位置都会被归一化到统一的坐标范围之内。为了计算每像素的厚度,我们会将背面摄像机捕捉到的位置进行镜像反射,然后计算其与正面位置之间的差值。这样得到的厚度值就能大致反映沿视图方向累积的密度情况。视图方向。与RNA[Mullia等人,2024]不同,我们的模型并不将视图方向作为输入参数。不过,为了便于比较,我们还是会存储每一帧图像的摄像机位置。我们假设云层是在一定距离外被观测的,因此可以认为整个图像中的视图方向是恒定的。这与RNA的做法不同,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 GPU上进行的,整个训练过程大约需要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格式),我们最初考虑过一些针对HDR格式的指标,比如mPSNR [Munkberg等人,2006年]和FLIP-HDR [Andersson等人,2021年]。不过,这类指标依赖于多个曝光级别,而在我们的案例中,过度曝光和欠曝光样本会导致数值不稳定。为此,我们采用了固定曝光值,并将数值限制在[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.50 | 0.30
4×32 | 是 | 21.80 | 30.06 | 23.50 | 0.33
4×64 | 是 | 22.315 | 0.059 | 3.70 | 0.41
4×128 | 是 | 22.749 | 0.056 | 5.21 | 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.50 | 0.31
3×64 | 是 | 21.842 | 0.064 | 3.60 | 0.36
4×64 | 是 | 22.315 | 0.059 | 3.70 | 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.70 | 0.41
4×64 | 否 | 18.133 | 0.066 | 3.70 | 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架构、三平面编码的米普映射层级为4以及经过平滑处理的厚度参数生成的。我们的方法能够在保持实时渲染性能的同时,生成具有真实光照效果的体积感云朵图像。值得注意的是,该方法完全避免了传统的体积积分运算,却依然保留了诸如柔和的自阴影效果以及随视角变化的视觉特性。更多结果,包括低多边形网格模型以及动态序列渲染结果,详见补充材料。
图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中所用的云资源则由塞缪尔·克鲁格制作。
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号