Unity 先后推出的《Sherman》《异教徒》《Windup》等作品的质量,都充分证明了实时 3D 创作平台完全可以用于创作影院级品质的内容。

    不管是经验丰富的 CG 光照专业人员还是初级 3D 美术师,都可以使用 Unity 为动画项目创造丰富、细腻的光照。在大家正式开启实时渲染学习之前,掌握常见的实时光照概念可以帮助你更顺利地展开学习。本文将一一解读这些概念,并引导你在 Unity 中完成一些常见的动画光照配置,实现的影院级画质。

    文末还有超实用的 “实时光照词汇大汇总”,欢迎大家参考学习。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图1

    动画短片《Sherman》中的镜头

    以下是可以帮助你在使用 Unity 时,让创作流程更顺畅的四种方法。

    01**首先选定渲染管线 **

    不同管线的操作也不一样,如果在项目中切换到不同的管线,之前的操作可能会完全不适用。选择管线的标准因项目而异。如果想要实现最高的影院级画质,推荐使用 Unity 高清渲染管线(HDRP),本文以下的讲解,也是以 HDRP 为例。

    02 使用体积(Volumes)组织工作

    在 HDRP 中,许多渲染和后期处理属性是由体积框架驱动的(并存储在体积的相关配置文件中)。你的设置实际上将按照创建和添加图形特征的体积类别进行组织,从而驱动从世界中给定位置查看的整个渲染的参数。你为每个体积指定优先级和权重值,它们决定了体积在屏幕图像渲染中的处理方式,使得体积对于完善按不同规模(全局、局部或每个镜头)处理场景的工作流程大有帮助。

    此外,体积非常适合进行实验:你可以复制体积配置文件资源,尝试各种配置,并且随时可以轻松恢复为原始体积。

    03**协作开发 **

    使用 Unity 进行实时制作的一个最重要的优势是:负责处理同一场景中的不同部分的多个人员可以同时工作,而不必等待前一个任务完成。

    04**使用预制件节省时间 **

    预制件可以对需要多次重复使用的对象进行分组。借助预制件,你可以修改组中的对象并让所有实例都自动更新,同时,还可以有选择地轻松恢复所做的任何演变,或将其应用到原始预制件并即时传送更改。仅此一项就可节省数小时的镜头处理时间。

    现在我们来介绍在 Unity 中如何运用以下常见原理实现光照:全局光照、反射和直接光照。

    在离线渲染器中,一般要通过代价很大的路径追踪来实现光散射。为了在实时渲染中实现类似的效果,引擎会通过构建近似值、对场景中的静态元素执行初始光反射(即全局光照)来模拟这种效果。

    Unity 的烘焙全局光照系统通过以下方式来优化光照:对于静态对象,将间接漫射光照的计算结果存储到光照贴图中,对于动态对象,则存储到光照探针中,然后将所有间接镜面反射光照的计算结果存储到反射探针中。这样一来,你就可以在烘焙间接(Baked Indirect)光照模式下以较低的分辨率简化光照计算,以此缩短烘焙时间,同时保持逐镜头进行定向小范围修正的灵活性。

    01**光照贴图(Lightmapping)**

    光照贴图是一种表面缓存形式。在这种形式下,虚拟场景中的表面光照是预先计算的,并存储在纹理贴图中供以后使用。大多数传统的 DCC 软件都有光照贴图生成工具,因此大家对这个概念应该都很熟悉了。

    在 Unity 中,光照贴图是渲染引擎的一个组成部分,直接影响任何给定场景中的光照质量 — 从阴影平滑度到明暗区域的混合。借助光照贴图,你将配置获取光照信息所需的光照样本数量以及贴图本身的分辨率。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图2

    烘焙(间接漫射)光照贴图的视图

    02**光照探针(Light Probes)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图3

    间隔一米的光照探针阵列

    建立环境光照和光照贴图设置后,可以使用光照探针组或阵列照亮其他道具和动态对象。此处的场景在内院中使用了一个探针阵列,探针间隔一米,紧贴墙壁(并确保没有探针伸入任何对象内部)。

    你可以使用多组光照探针进行试验,看看它们对效果有何影响。通过使用光照探针代理体,较大的对象(例如草坪斑块)会因为更精细的探针光照而受益。在这种情况下,一个对象可以被许多局部探针样本照亮,而不是单一结果。

    03**环境光遮挡(Ambient Occlusion)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图4

    屏幕空间环境光遮挡(SSAO)

    你已经了解了如何生成出色的局部环境光。下一个概念是环境光遮挡。环境光遮挡用于使紧邻折痕线、孔洞、相交和平行表面的地方变暗。在现实世界中,这些区域往往会阻隔或遮挡环境光,因此会显得更暗。你可以使用自己喜欢的 DCC 工具为某些对象制作环境光遮挡贴图(例如狗屋内或浣熊的嘴里)。

    接下来,为了将所有元素 “粘合” 在一起,可以使用一种名为屏幕空间环境光遮挡(SSAO) 的后期处理效果。这可避免因多个重叠对象具有各自的光遮挡设置而造成过度遮挡,从而提供远超在光照贴图中设置环境光遮挡的结果。

    选择光照模式并添加光照探针后,接下来引入间接镜面反射光照,也就是反射。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图5

    基于对象的烘焙环境光遮挡

    01**实时反射(Real-time Reflections)**

    最耗费处理器计算能力的属性是实时反射。实时反射会导致帧率严重下降,给在编辑器中的工作造成困难,因此要仔细规划。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图6

    间接镜面反射光照(左)、环境反射和烘焙反射相结合(右)

    02**平面反射(Planar Reflections)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图7

    平面反射效果示例

    平面反射就是镜面。它们非常适合平坦表面,但也可以用于更复杂的情况,例如浣熊和充气之间的部分。

    反射越复杂,成本越高昂 — 不仅在内存方面,它们还会增加渲染时间,因为渲染将以平面反射的分辨率执行额外的时间。

    03**实时反射探针(Real-time Reflection Probes)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图8

    一个将碗笼罩在其中的小型实时球形探针,展示即将破裂的充气软管

    实时反射探针是另一类元素,可以有策略地放置,以显示光源反射和遮挡的重要细节。反射探针的行为跟摄像机一样:它们会捕获周围的景象并存储起来,这样当视角发生变化时,具有反射属性的材质就可以准确地动态展示这种变化。与每个对象计算各自的反射纹理相比,在探针中捕获多个对象的反射可以提高性能。

    04**静态(烘焙)反射(Static (baked) Reflections)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图9

    烘焙反射探针需要完全覆盖该场景

    根据实际经验,首要原则是将捕获点放置在捕获摄像机影像的平均高度。如果仔细观察,会发现某些反射探针是特定于阴影区域的。使用更多的局部反射探针可确保更高的间接反射精度。在这些情况下,它们将在不太开阔的区域提供更精确的天空遮挡。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图10

    直接光照会在整个场景中投射出阴影

    现在该放置实时直接光照了。在 HDRP 中,光照可达到物理级准确度。直射光包含方向光和精准光源两大类别,具有以特定方式实时处理的两种属性:镜面反射和阴影。下面是一些在 Unity 中对它们进行配置的控件和设置。

    01**控制直接镜面反射光照(Direct Specular Lighting)**

    镜面反射光照会模拟光源从其照亮的任何对象上得到的反射,它有一个非常重要的设置,其影响远远大于其他设置:半径。

    半径会影响镜面高光的大小、漫射光照衰减以及烘焙阴影、光线追踪阴影和 PCSS 阴影的柔和度。半径会影响许多其他特性(及其效果),因此务必要留意每个光源的半径设置,尤其在使用非常强的反射光时。

    02**适度的阴影(Shadows)**

    阴影可以针对每个光源进行控制,但代价高昂。Unity HDRP 的 Shadow Atlas 系统让你可以同时拥有大量阴影投射光源。出于展示影院品质光照的目的,示例场景使用了尽可能多的阴影图集,但请记住,虽然大阴影图集可以显著提高质量,但也会耗用更多的计算时间。使用更大的阴影图集最终会使编辑器变得卡顿。而减小阴影图集虽然可以提高性能,但也会减少可放入的阴影贴图数量。

    简而言之,管理阴影质量是一个复杂的过程,可以不断对其进行微调来达到性能与质量的平衡。Unity 中有很多可以实时调整的参数,而且有一个非常好用的调试模式,可帮助你逐步找到适合场景的最佳选择。

    例如,为了在示例项目中获得特定的画面效果,所使用的每个光源都投射了阴影。这也是此处不建议使用区域光源的原因。但其他项目就不一定了。例如,你可以使用补充光照进行不投射阴影的光照调整。试验各种不同的设置,你就能找到窍门。

    • 方向光(Directional Light)

    HDRP 方向光使用级联阴影贴图(CSM)。

    阴影级联有助于解决所谓透视锯齿(Perspective Aliasing)的问题,在这种问题中,方向光产生的实时阴影在靠近摄像机时会出现像素化。使用的级联越多,透视锯齿对阴影的影响就越小。

    这自然会增加渲染开销,但仍然低于在整个阴影中使用高分辨率贴图的情况。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图11

    调整百分比接近软阴影 (PCSS) 可改变光源的半影或外侧阴影区域

    • 接触阴影(Contact Shadows)

    接触阴影是光线在深度缓冲区内的屏幕空间中行进造成的阴影。使用接触阴影的目的是捕获常规阴影贴图无法捕获的小细节。

    它们没有经过过滤,这意味着它们在模糊的阴影上会显得非常刺眼,并留下点状瑕疵。但在 Unity 中,你可以使用 Accumulation Motion 模糊来过滤它们(通过使用非常低 / 颗粒状的设置来让这些噪点累积起来)。

    03**掌握体积光照(Volumetric Lighting)**

    当需要在场景中创造深度时,大气效果将是你的实时制作资源中的重要工具。HDRP 高质量的体积光效提供了一个可靠的解决方案。

    可以在每个光源的检视面板中启用体积光效,并在体积视觉环境的雾组件(Fog Component)中使用体积雾(Volumetric Fog)。该效果可逼真地模拟场景中透过元素散射的微妙光芒和光束。你可以通过雾体积重写(Fog Volume Override)的高级选项来最大限度提高效果的质量。

    为了获得最佳的局部效果,可以使用逐镜头放置的密度体积(Density Volumes)完全控制其外观,就像在示例项目中那样;或者,也可以将它们放置在场景中的关键位置(针对所有镜头,只需放置一次)。这些体积还可以利用 3D 纹理实现局部密度的变化。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图12

    使用体积光照效果营造深度

    04**光源层(Light Layers)**

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图13

    向眼睛添加专门的眼神光

    在 HDRP 中,可以将实体分配到特定的光源层。这项技术有很多用途,例如,通过手动添加眼神光让浣熊的眼睛看起来更加鲜活有趣。你可以通过光源层管理任何不可预见的镜面高光,例如用于填充光照和边缘光照的多个精准光源造成的高光。此外,也可以使用它们来防止精准光源对水效果产生干扰。

    设置场景、放置光源并使用所需的光照效果处理对象后,就可以逐镜头将整个序列连接起来。

    01**Unity 时间轴(The Unity Timeline)**

    你可以将时间轴看作是协调和组织每个镜头的管理中心:从摄像机到音频,再到光源移动和动画。这是排序器,你对场景所做的一切工作(照亮的对象、放置到场景中的所有资源和光源)都将在此变成现实。

    如果曾经使用媒体编辑器剪切和拼接视频和音频剪辑,那么肯定会对 Unity Timeline 感到熟悉。在这里,你可以编排、重新排列和确定场景中每个组件在每个镜头中的动画处理时间。

    为了优化场景动画以方便实时制作,你可以使用激活轨道来确定对象在场景中处于激活还是非激活状态。这样可以更轻松地管理专用于镜头的资源组,而不必逐个镜头对光照装置的所有组件进行动画处理。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图14

    Unity 时间轴

    02**预制件(Prefabs)**

    如果使用时间轴(Timeline)对场景进行动画处理,你就会开始使用预制件。预制件是 Unity 专门的模板,用于对需要多次重复使用的对象进行的分组处理。

    Unity 还支持嵌套预制件。该设置是快速迭代光照装置的完美工具。例如,这是一个示例动画样本的光照预制件结构。你可以看到由激活轨道驱动的逐镜头结构。因为仅显示拍摄过程中存在的光照对象,所以所有其他对象都隐藏了起来。

    使用预制件的一大好处是,在场景中实例化对象后,你不必在源代码控制中让该场景保持签出状态就可以继续进行光照处理。这意味着团队的其他成员可以同时对该场景进行处理。

    在 Unity 中,后期处理是在生成最终渲染前基于现有渲染场景应用的一系列渲染效果。这意味着你可以即时获得所选效果的视觉反馈,而不必添加后续完成步骤,因此可在不改变现有内容的情况下大幅改善场景。

    创作影视级画质内容,这些实时光照概念你都 Get 了吗? - 哔哩哔哩专栏 - 图15

    颜色分级前 / 后的 Sherman

    在任何制作过程中,尤其是在电影项目中,颜色分级(Color grading)是非常重要的一个环节。在 Unity 中,只需进行简单设置,就可以获得令人印象深刻的效果。下面列出了一些调整设置。

    01**色调映射 **(Tonemapping)

    因为整个渲染过程是在 HDR 线性空间中进行的,所以将最终的图像值重新映射到适合在屏幕上显示的范围内至关重要。该项目设置为使用学院色彩编码系统(ACES)色调映射器和颜色空间进行分级。它可为你提供具有强烈暗色调的高对比度图像。为了实现示例项目中令人振奋的调色板,可以尝试对伽玛进行调整 - 这是一个非常重要的参数,大多数采用这种色调映射样式的电影都是这样做的。

    02**阴影、中间调、高光(Shadows, Midtones, Highlights)**

    Unity 平台将高度可控的轨迹球融入到了 UI 中。如果你以前从事过光照方面的工作,肯定对轨迹球控制非常熟悉 — 它们很容易操作,深受光照专家的欢迎。

    03**颜色曲线(Color Curves)**

    虽然一次只能显示一条,但有很多分级曲线可供选择。该项目使用了 “Hue vs Sat”、“Satvs Sat” 和“Lum vs Sat”。

    04**景深(Depth of Field)**

    景深(DoF)不仅仅是快速镜头的副产品,也是推动故事焦点的重要工具。动画场景中图像的移动速度很快,因此必须小心地引导人们的注意力。Unity 中的 Cinemachine 虚拟摄像机工具还有一个非常有用的选项,可以追踪场景中的焦点。

    05**渐晕(Vignette)**

    渐晕是一种强大的效果,但很容易被过度使用。它能够模仿通过镜头拍摄时的瑕疵,在视觉上表现为镜框角落处的光线损失。为了增加真实感,该效果应始终使用圆形。

    06**泛光(Bloom)**

    泛光是因强光渗入摄像机传感器或脏污镜头造成的美丽瑕疵。你可以在 Unity 中模拟这种效果,但是,和许多其他效果一样,微妙的细节至关重要,因此应适度使用这项技术。

    07**抖动(Dithering)**

    这是一种摄像机效果,旨在消除在输出到 8 位显示器时轻微渐变上的条纹问题。

    激活轨道(Activation Track):Unity Timeline Editor 中的轨道,包含剪辑中的动画。用于将单个动画添加到 Timeline 中,在序列中的指定位置播放或激活。

    相较于逐个镜头对光照装置的所有组件进行动画处理,统一管理和激活一个镜头中的资源组会更容易一些。

    环境光遮挡贴图(Ambient Occlusion Map):灰度图像,当应用于表面时,指明应遮挡(阻隔)环境光以让其显得更暗的区域。用于模拟相邻的折痕线、孔洞和表面中出现的柔和阴影。

    它可以通过近似计算应投射在这些较暗细节表面上的环境光量,来增加光照的真实感。

    烘焙全局光照(Baked Global Illumination,GI):烘焙成称为光照贴图的纹理以及光照探针的光照。用于在预计算过程中(而不是在 Unity 中)离线生成传统的光照贴图纹理时。

    由于这些资源不是在渲染时进行计算,即使使用保真度极高的纹理也能实现更好的性能。

    眼神光(Catchlight):当对象眼睛反射光源时,眼睛里出现的明亮亮点。用于每当角色被可用的光(包括天空、窗户或其他可用的光源)照亮时。

    眼神光可以增加真实感,使角色显得活灵活现,或创造出一种戏剧性的效果(例如揭示有角色隐藏在暗处或阴影中)。

    Cinemachine:Unity 的智能化无编码摄像机套件,让美术师可以实时调整、迭代、试验和创建摄像机行为。用于在动画设置过程中,确定场景中的目标和焦点时,或是否使用移动台车并像物理摄像机一样进行跟踪。

    Cinemachine 的虚拟摄像机让你可以实时迭代新想法,而不必费时费力开发摄像机逻辑(或浪费渲染时间)。

    全局光照(Global Illumination,GI):对直接和间接光照进行建模以提供逼真光照效果的一组技术。用于在场景中生成间接光照,主要作为直接光照的函数。

    GI 能够给场景带来更加真实、平衡和连贯的画面质感,与局部光照在各个对象上产生的效果相比,它需要的工作更少,效果也更真实。

    高清渲染管线(High Definition Render Pipeline,HDRP):HDRP 是 Unity 预先构建的可编程管线,用于使用基于物理学的光照和高级视觉效果来创作影院品质的项目。用于当你为需要使用高端硬件来呈现逼真视觉效果的项目进行高级渲染和着色时。

    Unity 中的 HDRP 让动画工作室能够在其作品中实现图形保真度和视觉真实感。

    光源层(Light Layers):将光源分配到不同的层并分别进行配置的功能。可以使同一场景中的对象根据需求仅对某些独特的光源做出反应。

    让你能够微调光源及不同对象对于光源的反应,从而营造高端的细节和效果。

    光照探针(Light Probes):光照探针是场景中测量(探测)光线的位置点,用于在渲染过程中为动态场景对象提供间接光照值。可用在对象之间,也就是光线穿过场景中空隙的区域。

    光照探针是为场景中的移动对象提供高质量光照(包括间接反射光)的重要工具。

    光照贴图(Lightmaps):一种预渲染纹理(覆盖在场景几何体的顶部),包含光源对场景中静态对象产生的效果。当使用 Unity 的烘焙全局光照系统提供逼真的光照效果时使用。

    光照贴图使得大部分光照可以完全预先计算,从而避免实时性能受到影响。

    Lightmapper:Unity 的基础系统,它通过发射光线、计算光线反射并将产生的光线应用到纹理来生成光照贴图和光照探针的数据。仅用于当表面由面积和角度误差较小的非重叠 UV 组成且图表之间有足够的填充时。

    不同的 Lightmapper 通常会产生不同的光照画面质感,因为它们可能依赖不同的技术来生成光照数据。

    多场景编辑(Multi-scene Editing):Unity 编辑器的一项功能,可同时在编辑器中打开多个场景,让多人能够通过无缝的工作流程在一个场景中同时进行协作。用于当配置影响多个场景的设置时,或当有多人(例如光照美术师和环境美术师)需要修改场景时。

    当多名美术师需要同时访问同一场景时,实时协作是节省时间的重要方法。

    物理级准确度(Physically Accurate):在 Unity 中,坎德拉(candela)、流明(lumen)、勒克斯(lux)和 EV 等物理光单位(PLU)的控制方式与真实的摄影光照相同。用于你想要模拟真实的光测量,就像在灯泡包装或摄影测光表上看到的单位一样。

    能够实现高度逼真的效果是 HDRP 的一个主要原则,其中包括物理级准确度的光照、材质和摄像机交互。

    预制件(Prefabs):一种 Unity 工作流程系统,让你可以创建、配置和存储对象的属性,将其用作可重复使用的资源。每当你需要在场景中的多个位置或项目的多个场景中重复使用某个对象的配置时(这可避免每次都重新创建新的对象),都可以使用。

    通过对资源设置的单一实例的复制、修改、试验和即时传送更改,节省大量镜头处理时间。

    精准光源(Punctual Lights):如果从单个点发光,则认为是精准光源。每当你放置聚光灯或点光源时,使用的就是精准光源。

    可用于创建不需要在场景中具备严格物理精确性的针对性强、极为独特的光照效果。

    光线追踪(Ray Marching):一种先进的光线追踪算法,该算法不仅计算光线与实体表面相交的位置,还将在光线穿过空间时对其进行采样和修改。当场景中包含接触阴影以捕获常规阴影贴图算法无法实现的小细节时使用。

    对于在光线难以找到实体表面的渲染很有用,因为它能够显示阴影中的较小细节。

    反射探针(Reflection Probes):反射探针可捕获周围环境的景象并存储起来,然后将结果用于对象以产生其周围环境的精确反射。帮助场景中的对象创建准确的反射材质和逼真的反应性视觉效果。

    微妙而准确的反射,与对覆盖区域和细节的控制保持平衡,在不影响性能的情况下最大限度提高场景的可信度。

    反射探针捕获点(Reflection Probe Capture Point):反射探针相对于其镜像场景的位置。用于在布局中放置反射探针和设置局部及世界属性时。

    确保反射角度和位置描绘出精准的景象。

    阴影级联(Shadow Cascades):将阴影贴图按距离摄像机的远近分割成多个区域,以减少近处阴影的像素化。当你使用覆盖场景大部分区域的方向光,导致近处的阴影像素出现可见锯齿时使用。

    与在整个阴影中使用高分辨率贴图相比,使用级联管理阴影对性能的影响较小。

    可编程渲染管线(Scriptable Render Pipeline,SRP):可编程渲染管线让你能够通过 C# 脚本控制渲染,从而获得高度的自定义灵活性。Unity 中有两个预先构建的系统:高清渲染管线 (HDRP) 和通用渲染管线 (URP),它们可以根据目标平台定制渲染过程,使项目能够针对特定硬件进行优化。HDRP 可为项目提供影院品质的图形,特别是针对高端硬件的高保真视觉效果。在不需要影院级保真度,但又希望获得比内置渲染管线更高的灵活性和扩展性,并在广泛的用例中获得高质量图形时,推荐使用 URP。

    从一开始就选好渲染管线,你不必编写代码就能以可视化的方式创建和编辑复杂的管线工具。

    体积框架(Volume Framework):体积框架的作用是让你能够将场景划分为全局或局部区域,从而更精细地控制光照和效果,而不必调整整个场景。它可以根据需要为场景添加任意数量的体积,创建不同的空间,然后单独为它们设置光照以获得逼真的效果。

    让你可以对环境设置进行精细的逐场景控制(例如雾颜色和密度),从而在计算最终渲染时更改场景的氛围。

    体积光效(Volumetrics):一种光照效果,可让观看者看到穿过环境的似有形体或深度的光线。当你想要在场景中添加大气雾的画面质感时使用。

    提供光线与雾相互作用的逼真模拟,以符合物理学的方式渲染辉光和光束,但可能会严重影响性能。
    https://www.bilibili.com/read/cv10854041