如何制作逼真的烟雾光照?VFX Graph中的六面光照帮你解决!
CG世界 14896 0
实名

通过了实名认证的内容创造者

发布于 2023-4-28 11:35:39

您需要 登录 才可以下载或查看,没有账号?注册

x

bb8d64eda3937e6f96339bf5c69866ea.jpg
由于光线的相互作用和变化十分复杂,实时模拟和渲染烟雾与爆炸一直都是行业的难题。尽管有越来越多的技术支持体积流体模拟和渲染,但大部分的性能开销过大,很难广泛应用到游戏中。所以,和其他渲染问题一样,问题的关键就是用最少的成本做出最为写实的效果。2022.2 Tech Stream 推出了一个完整的端到端工作流(从 DCC 数字内容创作工具到 Unity),让用户能用预计算的模拟逼真地渲染出烟雾。这个工作流可扩展至任意平台,适应任何光照条件。此外,这个解决方案还包括一个随取随用、预先烘焙好的贴图库,让任何人都能实现更为清晰的烟雾效果。六面光照[micxp_wxonkey]wxv_2791798493274472452[/micxp_wxonkey]不同光照条件下使用六面光照贴图游戏里渲染的烟雾经常使用带纹理的精灵(sprite)完成,因为运算完全体积化的光照对实时项目来说太过昂贵。然而使用精灵经常伴随着一个问题:怎样才能在扁平的 2D 形状上为烟雾打光?实际上方法还不少,比如贴上法线或在贴图上烘焙好颜色。但这些方法要么缺乏逼真度,要么缺乏可扩展性,或者两方面都不行。而六面光照就是解决该问题的另一种方法。它所采用的一套光照贴图储存了烟雾对六个方向射来的光照所做出的反应。这些贴图会被预先合并成两张纹理,并带有一个阿尔法(alpha)通道和一张可选的发光遮罩。
4a82c7ecc3a277eafdf826b2700d6205.gif
六面光照贴图图示有了这些纹理,烟雾效果便能根据不同的光照条件动态上色。烟雾同时还能展现出体积光的特性,如光线从后方投射时产生的自投影或轮廓光,此类效果用其他技术是无法达到的。[micxp_wxonkey]wxv_2792098391932829697[/micxp_wxonkey]不同太阳光方向下的六面光照贴图用户还可以控制颜色、吸收率、渐变发光,或重贴光照贴图,用相同一套纹理制作多种效果。这样一来,同样的资产就可以被应用到更多的场景中。这项技术有许多名称,如六面光照(6-way lighting)、六点光照(6-point lighting)、6D光照贴图(6D lightmaps)、六点光照贴图(6-point lightmaps)、烟雾光照(smoke lighting)等等。而且它已在多款 3A 大作中亮过相过,《骷髅与骸骨》(Skull & Bones)的前 VFX 技术总监就专门介绍过这项技术。这项技术的主要优点包括:1、实时渲染复杂的光线相互作用效果,比如多次弹射的光散射,效果可直接从模拟烤到光照贴图上。2、提高图像质量,更好的光照意味着烟雾能更好地融入世界,比如,烟雾在加入场景之后可以适应任意数量和种类的动态光(即方向光、点光、区域光),以及间接(即光照探针)和氛围光。因此,同样的资产可以更好地融入不同的周遭环境。3、低成本,高质量。相比于传统的受光精灵,烟雾效果渲染起来要更具性价比。4、节省磁盘和纹理内存。翻页书动画纹理会占用大量内存,但六面光照支持重复使用同一批纹理。根据应用的变量(颜色、吸收率等等)和周围的光照条件不同,最终的烟雾效果可产生极大变化。为了节省内存,用户可以利用 Motion Vector(运动向量)来降低帧数(Tuatara的 TFlow 就是一款非常实用的工具)。[micxp_wxonkey]wxv_2792099676178382849[/micxp_wxonkey]所有烟雾和近处的云朵都采用了六面光照,但它们其实只是四个VFX Graph资产的实例该技术的一个缺点在于扁平感。尽管高度清晰的光照可以营造出一种体积感,但该效果仍只是一套纹理,而非 3D 的体积效果。因此,它最适用于背景或装饰性效果,比如蒸汽或爆炸。要想加入更多深度,用户就需要把这个效果应用到更多的粒子上,或结合体积效果使用(比如高清渲染管线的局部体积雾或体积材质)。这里有几种常见用法:1、白天:模拟太阳和天空的光线穿过烟雾2、夜晚:用静态或运动的点光照或聚光来点亮烟雾3、高清烟雾4、尘埃5、蒸汽6、体积云:在主云朵上应用六面光照7、传送门、沙尘暴或龙卷风等高级效果[micxp_wxonkey]wxv_2791802489489883137[/micxp_wxonkey]用多张六面光照贴图制作的高级传送门效果创建和处理六面光照贴图导出程序Unity有不少工具来辅助光照贴图的生成。用户可以在 VFXToolbox 库里找到对应的 Houdini 和 Blender 导出程序,其他工具还有 Image Sequencer(图片序列创建程序),可用于重新打包六面光照贴图的翻页动画,或调整效果的色彩强度。Unity VFX Graph到Houdini的六面光照贴图导出器关于工具安装等说明可在 Readme.txt 文件中找到。注意,该工具分为两种。一种位于对象环境(Object Context),基于 OpenGL 渲染节点制作,运行非常快。
第二种位于舞台环境(Stage context),是围绕 Karma 渲染器制作的。两者都能渲染光照贴图、发光效果和翻页动画的导出文件。Blender插件

折叠起来的Blender导出器菜单用户可以按照标准流程为 Blender 安装本插件。在偏好(Preferences)菜单安装 unity_6way.py 文件,再启用插件。之后,用户就能在 3D 视图的 Unity 类别下找到面板了。插件支持渲染光照贴图、发光通道,完成基本的构图,或用一段光照贴图序列创建翻页动画。所有任务都可以同时或分开进行,每一阶段都有单独的设定来控制最终成果。

Blender导出器的各个阶段设置其他工具

EmberGen图表设置示例部分 DCC 工具可能已经有官方或社区自创的六面光照贴图导出工具和插件。比如,用户可以在 EmberGen 的渲染节点上使用“ Six point ”选项。请注意,该工作流并未受 Unity 官方支持,并不能控制贴图上的光照强度。不过,用户依旧可以手动调整参数。当然,用户也能用自己的工具来创建六面光照贴图。请按照以下步骤和格式打包纹理。烘焙光照贴图在烘焙时,同一个物体需要在不同的光线下渲染六次。系统在每次渲染时都会改变白色方向光的方向:相对于摄像机分别为上、下、左、右、前、后。发光信息,比如火焰,不属于光照贴图,但可以在随后渲染到另一张纹理上,或打包到贴图的另一条通道里。光照贴图纹理的格式六面光照贴图的数据被打包在了两张 RGBA 纹理中,每张贴图的方向则被储存在纹理的颜色通道里(red、green 和 blue)。另外,第一张纹理的阿尔法通道包含了透明度,而第二张纹理的阿尔法通道就空了出来。目前,用户可以选择将发光性质储存到这条通道内。

光照贴图A:右侧、顶部和背后的光照贴图+透明度

光照贴图B:左侧、底部和前方的光照贴图+一条额外通道用户可以在 Unity 编辑器选择纹理,到预览窗口检查每条通道。其他工具在生成光照贴图时可能会以不同的顺序打包通道信息。Unity 检视器具备通道重新排序的基本功能,但要将一张纹理的通道转移到另一张,图片编辑软件是不可少的。烟雾光照渲染

夜晚爆炸的定格画面烟雾的打光是直接整合进HDRP光照循环的,意味着烟雾可以受任何数量的光照影响。而且,光照越多,运算就越繁重(可利用光照图层缓解)。所有的方向光(Directional)、点光(Point)、聚光(Spot)、长方形光(Rectangular)和线性光(Linear Lights)都会被渲染。管线还能在烟雾内生成高质量的光照效果,产生闪电、电火花、耀斑、萤火虫等等光效。

六面烟雾内的动态光照对于单条光线,我们必须确定光线相对于烟雾粒子的方向,使用这个方向来混合两张光照贴图。对区域光,Unity 使用了最近似点(Most Representative Point)方法,找出距离最近的光照点来计算出方向。

同样的烟雾效果出现在不同的光照条件下——左上:方向光与环境光;右上:环境光、探针体积和方向光;左下:环境光与探针;右下:点光源和探针烟雾粒子还会受间接光照影响,特指光照探针(Light Probes)、自适应探针体积(Adaptive Probe Volumes,APV)、环境光探针(Ambient Probes)和光照探针代理体(Light Probe Proxy Volumes,LPPV)。要实现最高的性能,用户可以启用仅环境光模式(ambient only mode)来跳过光照循环,执行成本极低的光照运算。

自适应探针体积与六面烟雾光照出于性能的考虑,探针的影响经过顶点着色器估算后才会被插入像素着色器内。如果输出的是四边面,只有四个角会估算探针的作用。对于在空间中不规则的探针,比如 APV,部分顶点可能会出现在墙的一边,而其余的在另一边。此时,探针对光线的作用可能出错,并产生图像瑕疵。这里的一个解决方案是使用划分更细的网格,增加顶点数量。此类问题一般不会在户外场景出现。在 Unity 的模型里,烟雾可以完全散射光线,因此其镜面间接光会被忽视。所以,反射探针并不会影响使用六面烟雾照亮的粒子。Unity 还提供了两种烟雾上色方式:一种是在光照贴图修改每条颜色通道的光线吸收率(用来形成更为逼真的烟雾),另一种是简单的相乘(成本最低)。

对比烟雾上色的相乘和吸收率方式

六面光散射的估算即双向散射分布函数(BSDF)VFX Graph 渲染出的六面光照可借助控制选项来定制效果外观,用同样的贴图制作出不同的效果。颜色与吸收率属性

通过修改颜色(color)与吸收(absorption)强度,用同一张光照贴图制作不同的烟雾、蒸汽和云朵重贴光照贴图

控制效果的密度与风格,重贴光照贴图发光性

用两种发光渐变色把烟雾转变为爆炸如何上手用户只要花几分钟即可为项目添加这些美观的六面烟雾。请安装 Unity 2022.2 及以上版本引擎,并下载 VFX Graph 和 HDRP。Unity 已经创建了一个随取随用的贴图库来帮用户上手。库中既有可用 VFX Toolbox 处理和打包的高清资产,也有用于游戏的压缩轻量版。

免费六面烟雾贴图示例请按照以下步骤来用贴图和六面光照创建效果:1、将贴图拖放至 Unity 的 Asset 文件夹。2、新建并打开一份 VFX Graph 资产。3、新建并选中 Particle Lit Output(受光粒子输出)节点。4、在检视器的 Material Type(材质类型)下拉菜单中选取 Six Way Smoke Lit。

选中6 Way Smoke Lit后的检视器5、将 Output 位置的 Positive 和 Negative Axes Lightmap 设为刚刚导入的贴图。6、用不同的光照条件进行测试。要想进一步了解 VFX Graph,请访问 Unity 的网站,并参阅电子书“ The definitive guide to creating advanced visual effects in Unity ”。网站链接:
https://unity.com/visual-effect-graph未来计划未来几代的六面光照将围绕着 Shader Graph 整合与通用渲染管线(URP)支持开发。Unity 还打算解决技术本身固有的局限(接收阴影时效果会变得扁平,粒子的局部光照贴图不会受到附近物体的遮挡等等)。Unity也正在为 VFX Graph 添加 Volumetric Fog输出,让视觉效果也能生成体积雾。该功能可与六面光照组合生成更优秀的烟雾效果。该功能目前已登陆2023.1.a25 版本。当然,Unity 仍期待着真正的体积流体模拟、播放和渲染。只要有了这一整套技术,用户就能根据自己的目标平台和预算渲染出美观且逼真的烟雾效果。欢迎访问Unity的论坛帖留下你的反馈与疑问。如果你想请求新功能,或为待定功能投票,请查看 Unity 公开的渲染路线图。论坛链接:
https://developer.unity.cn/ask

全文完
内容主要涵盖影视特效,CG动国,前沿CG技术,作品欣賞
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表