docs.unity3d.com
    显示 / 隐藏目录

    基于物理的天空 (Physically Based Sky)

    基于物理的天空可以模拟具有两部分大气的球形行星,其中大气的密度会相对于高度呈指数递减。这意味着高于海平面越高,大气密度就越小。有关此天空类型的实现方式的信息,请参阅实现详细信息。

    模拟是作为预处理过程运行的,这意味着只会运行一次,而不是在每个帧上运行。模拟会计算光线和视角所有组合的大气散射,然后将结果存储在多个 3D 纹理中,Unity 在运行时对纹理进行重新采样。预计算是与场景无关的,并且仅取决于基于物理的天空的设置。

    基于物理的天空的大气由两种类型的粒子组成:

    • 具有 Rayleigh 散射的空气粒子。
    • 具有各向异性 Mie 散射的气溶胶粒子。您可以使用气溶胶为污染、高度雾或雾气建模。

    您可以使用基于物理的天空来模拟白天和晚上的天空。一天中的时间可以在运行时任意更改,而不会产生任何额外成本。以下各图显示了 Unity 的 Fontainebleau 演示中提供的基于物理的天空。有关 Fontainebleau 演示的更多信息,以及有关如何自行下载和使用该演示的说明,请访问 https://github.com/Unity-Technologies/FontainebleauDemo。请注意,在 2019.3 版中,可用的 Fontainebleau 演示仅使用基于物理的天空进行日间设置。

    使用基于物理的天空

    基于物理的天空使用体积 (Volume) 框架。要启用和修改基于物理的天空属性,必须将基于物理的天空覆盖添加到场景中的体积。要向体积添加基于物理的天空,请执行以下操作:

    1. 在 Scene 视图或 Hierarchy 视图中,选择一个包含 Volume 组件的游戏对象以在 Inspector 中查看该游戏对象。

    2. 在 Inspector 中,导航到 Add Override > Sky,然后选择 Physically Based Sky。

    接下来,请设置体积以使用基于物理的天空。体积使用的天空类型由视觉环境 (Visual Environment) 覆盖进行控制。在视觉环境覆盖中,导航到 Sky 部分,然后将 Type 设置为 Physically Based Sky。HDRP 现在会为此体积所影响的任何摄像机渲染基于物理的天空。

    要更改大气对光的衰减程度,可以更改大气中空气和气溶胶分子(参与介质)的密度。您还可以使用气溶胶模拟现实世界中的污染或雾气。

    属性

    要编辑任何 Volume 组件覆盖中的属性,请启用属性左侧的复选框。这也告诉 HDRP 使用您为 Volume 组件指定的属性值而不是使用默认值。如果禁用该复选框,HDRP 将忽略您设置的属性,并改用该属性在 Volume 组件中的默认值。

    Planet

    属性 描述
    Earth Preset 指示 HDRP 是否应简化 Inspector 并仅显示适合于模拟地球的属性。
    Spherical Mode 启用 Spherical Mode。在 Spherical Mode 下,您可以指定行星的位置。否则,行星将始终位于世界空间 x-z 平面中并在摄像机下方。
    Planetary Radius 行星的半径(以米为单位)。半径是从行星中心到海平面的距离。仅在 Spherical Mode 下可用。
    Planet Center Position 行星中心在世界空间中的位置(以米为单位)。这不会影响预计算。仅在 Spherical Mode 下可用。
    Sea Level 行星海平面在世界空间中的 y 坐标(以米为单位)。在 Spherical Mode 下不可用。
    Planet Rotation 行星的方向。
    Ground Color Texture 指定一个表示行星表面的纹理。
    Ground Tint 指定 HDRP 用于为 Ground Color Texture 着色的颜色。
    Ground Emission Texture 指定一个表示行星表面发射区域的纹理。
    Ground Emission Multiplier 一个由 HDRP 应用于 Ground Emission Texture 的乘数。

    Space

    属性 描述
    Space Rotation 空间的方向。
    Space Emission Texture 指定一个表示空间发射区域的纹理。
    Space Emission Multiplier 一个由 HDRP 应用于 Space Emission Texture 的乘数。

    Air

    要使此部分可见,请禁用 Earth Preset。

    属性 描述
    Air Maximum Altitude 从海平面到大气层(由空气粒子组成)的深度(以米为单位)。此属性可以控制基于高度的密度衰减率。HDRP 假定在此高度的空气密度很小,几乎可以忽略不计。
    Air Density R 观察者正上方天空位置(天顶)空气的红色通道不透明度。这直接影响天顶处的空气颜色。
    Air Density G 观察者正上方天空位置(天顶)空气的绿色通道不透明度。这直接影响天顶处的空气颜色。
    Air Density B 观察者正上方天空位置(天顶)空气的蓝色通道不透明度。这直接影响天顶处的空气颜色。
    Air Tint 空气分子的单个散射反照率(每个颜色通道)。值为 0 会产生吸收分子,而值为 1 会产生散射分子。

    Aerosols

    属性 描述
    Aerosol Maximum Altitude 从海平面到大气层(由气溶胶粒子组成)的深度(以米为单位)。此属性可以控制基于高度的密度衰减率。HDRP 假定在此高度的气溶胶密度很小,几乎可以忽略不计。
    Aerosol Density 观察者正上方天空位置(天顶)气溶胶的不透明度。这直接影响天顶处的气溶胶颜色。
    Aerosol Tint 气溶胶分子的单个散射反照率(每个颜色通道)。值为 0 会产生吸收分子,而值为 1 会产生散射分子。
    Aerosol Anisotropy 指定各向异性的方向:
    • 将此值设置为 1 表示前向散射。
    • 将此值设置为 0 可使各向异性几乎各向同性。
    • 将此值设置为 -1 表示后向散射。
    对于较高的各向异性值:
    • 如果光路和视图方向对齐,您将看到明亮的大气/雾效果。
    • 如果它们未对齐,则会看到昏暗的大气/雾效果。
    • 如果各向异性为 0,不论视角如何,大气和雾看起来都相似。

    Artistic Overrides

    属性 描述
    Color Saturation 控制天空颜色的饱和度。
    Alpha Saturation 控制天空不透明度的饱和度。
    Alpha Multiplier 一个由 HDRP 应用于天空不透明度的乘数。
    Horizon Tint 指定 HDRP 用于为地平线天空着色的颜色。
    Horizon Zenith Shift 控制 HDRP 如何在 Horizon Tint 和 Zenith Tint 之间混合。如果将此值设置为 -1,则 Zenith Tint 会向下扩展到地平线。如果将此值设置为 1,则 Horizon Tint 会向上扩展到天顶。
    Zenith Tint 指定 HDRP 用于为观察者正上方天空位置(天顶)着色的颜色。

    Miscellaneous

    属性 描述
    Number Of Bounces 散射事件的数量。这不仅可以提高天空视觉效果的质量,还会增加预计算时间。
    Intensity Mode 使用下拉选单选择 HDRP 计算天空强度的方法:
    • Exposure:HDRP 根据 EV100 中的曝光值计算强度。
    • Multiplier:HDRP 通过单位乘数计算强度。
    - Exposure HDRP 作为环境光应用于场景的曝光。HDRP 使用 2 的幂次方(指数为 Exposure 值)来计算场景中的环境光。
    - Multiplier HDRP 作为环境光应用于场景的乘数。HDRP 将场景中的环境光乘以此值。要使此属性可见,请将 Intensity Mode 设置为 Multiplier。
    Update Mode HDRP 更新天空环境的速率(使用环境探针和反射探针):
    • On Changed:当其中一个天空属性发生变化时,HDRP 更新天空环境。
    • On Demand:HDRP 等待,直到您从脚本手动调用天空环境更新。
    • Realtime:HDRP 按照 Update Period 定义的定期间隔更新天空环境。
    - Update Period HDRP 更新天空环境的周期(以秒为单位)。如果希望 HDRP 每帧都更新天空环境,请将值设置为 0。仅当 Update Mode 设置为 Realtime 时,才显示此属性。
    Include Sun In Baking 指示为天空生成的光照探针和反射探针是否包含太阳圆盘。有关为何此属性很有用的详细信息,请参阅环境光照。

    实现详细信息

    这种天空类型是论文《预计算的大气散射》(Precomputed Atmospheric Scattering)(作者 Bruneton 和 Neyret,2008 年)中所述方法的实际实现。

    此方法假定您始终从行星表面上方观看场景。这意味着,如果去到行星表面下方,天空将呈现黑色。行星表面的位置取决于您是启用还是停用 Spherical Mode:

    • 如果启用 Spherical Mode,则由 Planetary Radius 和 Planet Center Position 属性定义表面的位置。在此模式下,表面与 Planet Center Position 中设置的位置之间的距离为 Planetary Radius 中设置的距离。
    • 否则,由 Sea Level 属性定义表面的位置。在此模式下,表面在 xz 平面上无限延伸,并由 Sea Level 设置其世界空间高度。

    两种模式下的默认值都能使行星的表面在场景原点的 y 轴上处于 0 位置。由于 Spherical Mode 的默认值模拟地球,因此半径极大,以至于在创建场景环境时可以认为表面是平坦的。如果您希望场景环境中的某些区域低于当前表面高度,则可以垂直偏移场景环境以使最低区域在 y 轴上高于 0,或者减小表面高度。要采取后一种方法,请执行以下操作:

    • 如果在 Spherical Mode 下,请减小 Planetary Radius,或向下移动 Planet Center Position。

    • 如果不在 Spherical Mode 下,请降低 Sea Level。

    参考列表

    • Bruneton、Eric 和 Fabrice Neyret。2008 年。“Precomputed Atmospheric Scattering”。Computer Graphics Forum 27,编号 4 (2008):1079–86。https://doi.org/10.1111/j.1467-8659.2008.01245.x。
    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)