HDRP光照系统讲解

Abstact

场景中的GameObejct挂载Volume组件,生成对应的Profile资源,生成的资源文件会被自动放在Scene路径下与场景名相同的文件夹中。为了使得HDRI Sky和阴影配置真正生效,需要在Light界面中将 Scene Settings Profile 这个Volume资源与之关联。

Volume

Directional Light

平行光灯的Mode为Realtime,所以它提供直接照明。只有光线照到之处才变亮。因为没有间接光照信息。ReflectionHDRP 中 的反射层级先后顺序是:先看场景中有没有Screen Space Reflection(简称SSR,屏幕空间反射),如果没有再找Reflection Probe(反射探针),如果还没有就反射天空。

Ambient Occlusion

通过明暗(光影变换)表示几何细节
c2cf9d78072781eb5db20b4055aa7d61.png
2f6fdb8fd17b1c798280345947236d70.png

环境光遮蔽针对当前镜头中全屏画面进行计算。通过计算场景中的灯光和物体周围环境,让裂缝,孔洞和物体之间交接处等区域的颜色变得更黑。在真实世界中,这些地方通常因为受到周围物体的遮蔽而变得更黑。

Anti-Aliasing

在HDRP中,我们可以使用Camera组件为画面添加抗锯齿效果。FXAA对性能的消耗少画面会变糊,其次是TAA,性能消耗最大的是SMAA(Enhanced Subpixel Morphological Antialiasing)抗锯齿效果最好的是TAA,其次是SMAA(对静态锯齿效果很好),抗锯齿效果最差的是FXAA。

Physical Light Units and Intensities

Visual Environment 组件中选择了HDRI作为天空的类型

Lux光照强度模式,此处的“光强”可以理解为整个场景的明暗,和直接光照导致的高光、暗部是有区别的。

Lux 50000:

9dee749b5fd822c3a38634ea79c95fbb.png

Lux 10000:

54bb782be1a213c6cc7a1488d263113f.png

Lux 1000 + Directional Light

b9bb9307d901fde73d660ac611b36c66.png

Lux 5000 + Directional Light + Indirect Multiplier > 1

6ac525aec2a04ab7e897678176f7415c.png

Lux光照单位表示的光照信息只有方向没有强度衰减信息,也就是说此单位适合用于表示太阳光这一类对于地球来说只有角度变化,没有强度变化的光照信息。

Light Probe

光照探针被认为是一种价廉物美,为动态物体提供间接光照信息和生成动态阴影的高性能解决方案

Bake

确保所有的静态物体被标记为Static

d196d81482cdb93b85c8ea6ef4923e58.png

对于光照烘培来说,只要确保勾选Contribute GI(贡献全局关照)和 Reflection Probe Static 选项即可。

Environment(HDRP)

可以指定所用的环境光Volume,并指定相关联的Sky作为环境光的来源。

Mixed Lighting

要想烘培全局光照,必须在这里勾选Baked Global Illumination(烘培的全局光照) 选项,然后选择光照模式: Baked Indirect 或者 Shadowmask

Baked Indirect:仅仅烘培间接光照信息

Shadowmask

  • 提供最逼真的阴影效果。不仅烘培间接光照信息,也会在Lightmap(光照贴图)中把阴影烘培进去。

  • 适用于远处存在可见物体的场景,比如在高端机器上运行的开放世界游戏。

Lightmapping Settings

Filtering

可以选择一种Denoiser(降噪算法),可以分为Direct Denoiser、Indirect Denoiser和Ambient Occlusion Denoiser选择不同的降噪算法。

一般建议是根据不同的GPU平台为这三项选择同一种降噪算法。

NVIDIA :Optix

AMD:Radeon Pro

Intel:OpenImageDenoise,基于CPU的降噪算法,可适用于所有平台。

Lightmap Padding

控制光照贴图中,按照UV分开的光照贴图区域之间的间隔太小。

如果此间隔太小,有可能造成光照贴图边缘的颜色渗透。

但是如果间隔太大,又会浪费光照贴图空间,增加贴图数量,导致光照贴图在内存中的占用增大。

Indirect Lighting Controller of Volume

间接光照信息被烘培进光照贴图中后,可以使用此Override增强整个场景的间接光照强度。

Indirect Diffuse Intensity 间接光漫反射强度

HDRP将会由烘培获得的光照贴图和光照探针上的数据乘以这个值。‘

如果值为0,那么

IDI = 4 ISI = 1551d8ea8b610f375ac4db13b9ce24126.pngValue = 16 ISI = 1ee8062c2fc3e5aec87042648581efc43.png

Indirect Specular Intensity 间接光高光强度

HDRP会将任何类型(Baked、Custom或者Realtime)的反射探针(Reflection Probe)上的数据乘以这个值。

IDI = 16 ISI = 1(same as above one)ee8062c2fc3e5aec87042648581efc43.png

IDI  =16 ISI = 104316863f946868cdff2b03003ddc6ce9.png

IDI = 0 ISI = 0

该画面中没有任何来自间接光照的漫反射和高光,没有被平行光找到的地方漆黑一片。9199da6a2fe393974a58302059e378af.png

IDI = 0 ISI = 1

该画面中只有来自间接光照的高光,没有漫反射。

d6c0d281c4393b981101c601e0de04c9.png

IDI = 1 ISI = 0

该画面中只有来自间接光照的漫反射,没有高光。

047cd7d712df383557a4a5cde4f694bf.png

IDI = 1 ISI = 1

该画面中只有来自间接光照的漫反射,也有高光。

b454a52aa49bac9b8c93ba787bda6005.png

处理阴影与环境光遮蔽

Directional Light

Volume 框架

Abstract

Volume 框架是HDRP最重要的组成部分之一,其作用如下:

  • 为场景设置来自天空盒的环境光照

  • 设置各种阴影效果,包括场景中的Contact Shadow 和 Micro Shadow

  • 设置场景中的雾效

  • 设置基于屏幕空间的反射(SSRelection)和折射(SSRefraction)、环境光遮蔽(Ambient Occlusion)

  • 设置后处理效果

  • 设置实时光线追踪

在同一个场景中可以添加多个带Volume组件的GameObject。每个Volume的模式可以按照需要设置成Global 或是 Local

Global意味着这个Volumn针对整个场景生效。不管相机朝向哪里,Global模式的Volumn都会被计算在内。

Local模式的Volumn则只能在它的碰撞体作用区域内生效。一般Box Collider即可满足碰撞体需要。

Exposure

曝光指的是相机感光元器件接受的光线强度。曝光的数值越高,相机接受的光线强度越大。

参数说明

Exposure重载包括四种模式:Fixed、Automatic、Curve Mapping 和 Use Physical Camera

Fixed 固定曝光

用于曝光变化不大的场景,也就是场景中的各个区域有类似的曝光强度。

可以使用多个被设置为Local模式的Volume,通过Blend Distance(混合距离)来融合切换不同的Volume的曝光。

由于HDRP的光照系统是完全基于物理的,所以可以参考物理世界真实的曝光值。

5cfd281ebd4bad3543fc5a737f12e351.png

Automatic 自动曝光

根据当前相机的位置信息和相关场景信息来自动调节曝光。非常适用于曝光随位置不同而发生变化的场景,例如从光照强烈的户外进入阴暗的室内或者从山洞中移动到山洞外

可以模拟现实中人眼适应不同曝光的情况。

Limit Min & Limit Max

分别用于控制场景自动曝光的最小值和最大值。可以用这两个值分别调节当相机处于场景的暗部和亮部时整体的曝光。

99b37196985c18f0e7285b3578469b4e.png

当画面靠近场景中的亮部,周围的环境会变暗,但是环境也许不应该“那么”暗。此时可以将Limit Max 调低,以提升整个画面的曝光。f688c683062bbe0c79c0bb2e09b5814d.png

当画面处于场景的暗部,比如在黑暗的角落朝外看,那么外部环境会变亮,可能导致画面亮部曝光过度(月光即使很亮也不应该像白天)此时可以将LImit Min 调高,降低整个画面的曝光。

Curve Mapping 曲线控制曝光

X轴代表目前场景的曝光

Y轴代表我们想要的曝光

专家使用。

Use Physical Camera 物理相机控制曝光

通过物理相机的Iso、Shutter Speed 和 Aperture 参数来控制曝光。

Volume 界面中只剩下Compensation(补偿)这一项。

Metering Mode

用于控制如何采样用于曝光的计算场景中的灯光。

  1. Average 针对整个画面进行采样,结果稳定

  2. Post 针对画面中央区域采样。如果画面中央的采样区域较暗,整个画面可能曝光过度。

  3. Center Weighted

Visual Environment

Intro to HDRP & DXR

Abstarct

从2018版本开始,Unity Editor中共有三套渲染管线。

HD Render Pipeline Asset

HDRP配置文件(HD Render Pipeline Asset)管理HDRP项目的所有渲染功能。HDRP会用这个配置文件生成一个HDRP渲染管线的实例,而这个渲染管线的实例包含用于渲染的中间资源。

为了满足项目开发中不同的需求,HDRP还提供了另外两种渲染方式。

针对不同平台使用不同的HDRP配置文件

在同一个HDRP项目中可以创建多个HDRP配置文件,针对不同的计算平台应用不同的HDRP配置文件。

要针对不同的平台使用不同的设置,需要将对应的HDRP配置文件关联到不同的质量等级上。

质量设置里面的HDRP配置文件会覆盖默认的配置文件。

Frame Settings

帧设置针对的是场景中的Camera、Baked or Custom Reflection 和 Realtime Reflection 的相关设置。后面两个反射相关的设置应用在Reflection Probe上

帧设置的优先级低于HDRP配置文件,也就是说,如果在HDRP配置文件中没有打开某项功能,那么帧设置中对应的功能就会自动被禁用。

帧设置可以让我们为不同的相机和反射探针启用/禁用不同的HDRP功能组合。

Volume 框架

Volume 的作用是通过调整各项HDRP功能的参数,影响相机所看到画面的最终渲染效果。

dd003dc04f47c381deb98503587eb575.png

  • 每个HDRP项目中可以有多个HDRP配置文件

    每个配置文件对应不同的画质或目标平台。但是HDRP项目每次只能使用一个HDRP配置文件,也无法在运行时切换HDRP配置文件。

  • HDRP会为Camera(相机),Backed or Custom Reflection(烘培或自定义反射)和Realtime Reflection(实时反射)提供一套默认的帧设置。如果在HDRP配置中没有被启用,就会在帧设置里被禁用。

  • 注意,在HDRP配置文件中已经启用的功能,也要确保默认帧设置中启用了相关功能。即在HDRP配置文件中启用了某个功能,但是没有在帧设置中启用它,那么在项目中也是无法使用它。

  • 可以为场景中一个(或者多个)相机和反射探针自定义帧设置。 如果在这些自定义帧设置中启用某个功能(前提是在HDRP配置文件中已经启用),那么自定义帧设置中的配置信息会覆盖(Override)默认帧设置中的配置信息。

  • 可以为同一个场景这创建多个Volume。这些Volume的模式可能是全局(Global)的或者是本地(Local)的。如果在当前活跃相机的帧设置(如果没有启用自定义帧设置,就使用默认帧设置)中没有启用某个功能,比如Fog,那么在与此相机相关的Volume中调整Fog参数值就没有意义。

HD Render Pipeline Asset中的7类参数

Rendering

  1. Color Buffer Format

    出于对性能的考虑,HDRP默认使用R11G11B10格式(不包含Alpha通道)

    如果要把HDRP渲染的画面合成到另外的图片上,就需要包含Alpha通道,这时就要选择R16G16B16A16格式。带有Alpha通道的格式会对性能造成一定的影响。

    如果需要将R16G16B16A16格式作为最终渲染输出的格式,那么在Post Processing的Buffer Format中也要选择相同的格式。

  2. Lit Shader Mode

    Lit Shader 是HDRP材质使用的默认着色器。可以选择以下三种模式:

    1. Forward:Lit Shader仅使用前向渲染

    2. Deferred:Lit Shader会使用延迟渲染,一些高级材质还会使用前向渲染。

    3. Both:延迟和前向渲染都可用

      选择Both模式可以通过自定义帧设置为相机选择Deffered或者Forward渲染。不过此模式会让HDRP为两种渲染方式都编译相关的着色器变体。

      如果选择前向渲染或Both模式,则可以选择MSAA

  3. Motion Vector

    HDRP可以在屏幕空间反射和运动模糊中使用运动矢量。通过Camera组件启用的TAA必须使用运动矢量才能工作。如果禁用此选项,则运动模糊和TAA功能将不会正常工作,屏幕空间反射则会用低质量渲染模式。

  4. Runtime Debug Display

    启用该选项后可以在运行时显示灯光和材质的属性信息。正式出包时建议禁用。

  5. Dithering Cross-fade 平滑转换

    这是与Game Object的LOD转换相关的功能。启用该选项后可以让HDRP在做LOD转换时进行平滑的转换。

  6. Terrain Hole 地形洞

    启用该选项后可以显示地形上的凹陷孔洞。如果禁用此选项,则地形上的孔洞不会显示。

  7. 如果你的场景中没有使用透明材质或者没有在Lit材质中使用相关选项,则可以禁用以下选项以减少构建时间。

    1. Transparent Backface 透明背面
    2. Transparent Depth Prepass 透明深度预处理
    3. Transparent Depth Postpass 透明深度后处理

    4e7db5f02099684052b94ad28a7b96ec.png

  8. Custom Pass 自定义通道

    如果没有使用Custom Pass 功能,禁用此功能可以节约内存。

  9. Realtime Raytracing 实时光线追踪

    如果要在HDRP项目中使用实时光线追踪功能,则需要先启用此选项。

  10. LOD Bias LOD 偏差

    场景中的相机会使用此数值来计算LOD偏差。

  11. Maximum LOD Level 最大LOD级别

    用于设置相机支持的最大LOD级别。

  12. Decals 贴花

    1. Draw Distance 用于定义相机离开物体多远以后不再渲染贴花。

    2. Atlas Width和Atlas Height 用于设置纹理图集的宽度和高度。这个纹理图集用于保存场景中所有投射在透明表面上的贴花。

    3. Metal and Ambient Occlusion Properties 启用该选项后,贴花能够影响材质上的金属高光和环境光遮蔽。

    4. Maximum Clustered Decals on Screen 屏幕上能够同时显示的贴花数量(这些贴花影响的是透明表面)。
      e9609527dd29619d4590b419e98c8923.png

  13. Dynamic Resolution 动态分辨率

  14. Low res Transparency 低分辨率透明

    启用该选项后使用低分辨率的透明效果。

Lighting

  1. SSAO(Screen Space Ambient Occlusion)启用此选项后可以为场景添加基于屏幕空间计算的环境光遮蔽效果。可以在Volume中的Ambient Occlusion Override中对效果进行调整。

  2. Volumetrics 体积光

    为场景中的灯光和雾效增加体积光效果。

  3. Light Layers 光照层可以

    在这里启用/禁用光照层(Light Layers)功能。此功能可以让场景中的光源只照亮指定的物体,忽略无关的物体。在HDRP Global Settings -> Layers Names 中可以见到对应层

  4. Cookies 光线遮罩

  5. Reflections 反射
    9494534745278471e7e3a3217ea91803.png

  6. Sky 天空
    2524c9d6c97cc60d8bb2ac333a2fe060.png

    1. Reflection 当场景中没有如何反射探针可以用于计算物体表面的反射信息时,HDRP会使用天空盒Cubemap来计算反射信息。Reflection Size可以控制用于计算反射信息的天空盒Cubemap的分辨率。此分辨率斌不会影响天空盒本身的质量。

    2. Lighting Override Mask 可以让环境光照和天空背景进行分离。如果在此指定了一个Layer而不是使用默认的Nothing,那么HDRP会在场景中寻找与此Layer相关联的Game Object,如果找到的GameObject中包含Volume组件而且可以对当前相机产生影响,那么HDRP就会使用这些Volumn中的信息来计算环境光照。

  7. Shadow 阴影
    d1b2413c2a758ae18a76e6a00215c0a2.png

    1. Shadowmask

      控制Shadowmask光照模式(Shadowmask Lighting Mode)的启用/禁用。

    2. Maximum Shadows on Screen 同屏显示最大阴影数量

      超过这里设定的阴影数量之外的阴影将不被渲染。

    3. Filtering Quality 过滤质量

      选择高质量可以提升阴影质量,减少阴影边缘的锯齿。在Forward模式和Both模式下,可以选择Low,Medium和High三档质量。在Deferred模式下,只能使用Medium质量。

    4. Screen Space Shadows

      启用该选项后,HDRP会在一个单独的通道中计算基于屏幕空间的阴影。

    5. Use Contact Shadows 使用接触阴影

      此处可以选择Low、Medium、High质量。然后在Light组件中可以选择可用的接触阴影质量。

      如果在HDRP配置文件中不勾选上述任何一项,那么只能在Light组件中选择Custom选项。

      要使用接触阴影,需要在Default Frame Settings中启用Contact Shadows选项。

Lighting Quality Settings

光照质量的相关设置,配合Lighting中的参数使用,调整相应数值以达到质量与性能的平衡。

Material

  1. Available Material Quality Levels 可用材质质量等级

    默认所有材质质量都可以使用

  2. Default Material Quality Level 默认材质质量等级

  3. Distortion 变形

  4. Subsurface Scattering 次表面散射

    可以很好的表示光在材质内多次反弹折射等等效果,玉石、翡翠等应用此效果明显。

  5. Fabric BSDF Convolution                             

    若启用此选项,则在使用Fabric材质时,HDRP会单独为织物着色器(Fabric Shader)计算一份反射探针数据,用于生成更准确的光照效果。不过这样做会导致项目中存在两份光照数据,也会导致目前可见的反射探针数量减少一半。

  6. Diffusion Profile List 漫射配置文件列表

    在此保存用于控制次表面散射效果和半透明效果的Diffusion Profile。一个HDRP配置文件最多可以保存15个Diffusion Profile。

Post-processing

  1. Grading LUT Size & Grading LUT Format

    Size用于控制颜色分级时所用的LUT(Lookup Texture)的大小。默认数值32提供了比较平衡的速度和质量表现。

    Format用于设置LUT的编码格式。可以选择R11G11B10R16G16B16A16或者R32G32B32A32格式。精度越高的格式颜色越精准。

Post-processing Quality Settings 后处理质量设置

与光照质量设置类似,可以为后处理效果设置采样值。

e21c555d3500b554ee4bec37f8590f04.png

目前可以设置Depth of Field、Motion Blur、Bloom、Chromatic Aberration(色差)

XR设置

HDRP在特定的平台上输出VR应用

PC需要DX11支持

Ray Tracing

Unity 支持的光追是基于HDRP的,一个光追的Unity项目,首先是一个HDRP项目