美文网首页
Physically Based Sky 基于物理的天空盒

Physically Based Sky 基于物理的天空盒

作者: 暴走TA | 来源:发表于2021-03-11 09:48 被阅读0次

    简介:三种天空功能中的一种,基于物理的天空可以模拟具有两部分大气的球形行星,其中大气的密度会相对于高度呈指数递减。这意味着高于海平面越高,大气密度就越小。
    模拟是作为预处理过程运行的,这意味着只会运行一次,而不是在每个帧上运行。模拟会计算光线和视角所有组合的大气散射,然后将结果存储在多个 3D 纹理中,Unity 在运行时对纹理进行重新采样。预计算是与场景无关的,并且仅取决于基于物理的天空的设置
    版本:Unity2019.4.12f1 HDRP 7.5.1

    准备


    • 在体积组件中添加 VisualEnvironment 和 Physically Based Sky 功能。
    • 将 VisualEnvironment 的type 指定为 Physically Based Sky ,激活 Physically Based Sky功能,这样可以方便我们观察效果
    • 物理天空盒参数比较多,需要一些耐心开完,总体分为六个部分
      1. Planet 星球,可以理解为地球设置
      2. Space 空间,可以理解为天空盒纹理设置
      3. Air 空气颜色设置,在关闭 EarthPreset 后显示出来
      4. Aerosols 气溶胶,可以理解为雾霾
      5. ArtisticOverrdes 艺术化处理,就是修改一些本来很科学的东西,满足艺术家们的需求,如果追求真实,不建议修改,或大改这里的参数。
      6. Miscellaneous 杂项,就是不好归类的属性都放这了
    物理天空盒参数

    详细参数介绍

    Planet 星球模块 - 天空盒地表设置


    • 主要处理星球表面的效果,可以简单理解为水平线以下的天空盒的效果
    星球模块参数
    • EarthPreset 勾起后会自动使用一些地球预设参数,并且面板会隐藏一些属性,简化操作,一般不做奇葩效果建议勾起,这样可以简化操作
      1. 勾起后会自动根据地球预设设置星球半径,并隐藏 PlanetaryRadius 属性
      2. 勾起后会自动根据地球预设设置 大气颜色,并隐藏整个Air 模块
    • PlanetaryRadius ,设置星球的半径,关闭 EartHPreset 后显示出来。在球形模式(SphericalMode)下这个值有个范围600万到8亿之间
      1. 最小也得600万起,不然看不见星球,因为你已经在大气层外了
      2. 太大了也会出现问题,测试设置为8亿时会出现错误
      3. 地球默认值为 6378100 ,在实现其它星球时可以做参考
    580万,星球还是很小的,地平线都是圆的
    8亿时地平线会出现奇怪的分界线
    • SphericalMode 球形模式,这个属性一般默认即可,没有特殊效果需求不需要修改。
      1. 开启时需要设置球心位置,一般是 半径的复数,例如 地球的球心位置就是 -6378100
      2. 关闭时为海平面模式,需要设置海平面的位置,默认为 0
    • PlanetCenterPosition 球形中心位置 ,开启 SphericalMode 球形模式时,本属性会显示出来。
    球形模式时的球心位置
    • SeaLevel 海平面高度,关闭 SphericalMode 球形模式时,本属性显示出来
    海平面模式
    • GroundColorTexture 地面纹理贴图,采样一个很低的mipmap 等级来给天空着色,主要控制天空的色相,会对烘焙产生影响。
    • Ground Tint 星球地面纹理混合的颜色,混合 模式正片叠底,对烘焙产生影响。
      为了方便观察天空盒变化 我们关闭了场景的自动曝光,并将两盏灯的亮度调整到5,天空的亮度和主光是关联的,可以把主光理解为太阳
    赋予了地面纹理和
    地面颜色调整为暖色并烘焙
    • GroundEmissionTexture 地面发光贴图,一般使用和GroundColorTexture 一致的就可以了。与GroundColorTexture 是叠加模式。
    赋予地面发光并烘焙
    • GroundEmissionMultiplier 设置地面发光强度
    增强地面发光强度并烘焙

    *PlanetRotation 星球旋转,这里只会影响星球的朝向,通过激活GroundColorTexture 和 GroundEmissionTexture 可以看出区别,这个旋转并不影响 Space 中的天空盒纹理旋转。实测X和Z轴旋转变化较大,Y轴旋转没有变化。一般不建议修改这个值。

    不旋转的天空和地面的颜色,烘焙后生效
    旋转了的天空和地面颜色,烘焙后生效

    Space 空间 - 水平面以上天空盒设置


    • SpaceEmissionTexture 天空盒贴图,这里直译是发光贴图,表示的时这张天空盒贴图和 Planet 的设置的天空是一个叠加关系。当 Planet 天空太亮时,再经过曝光矫正,这张贴图的纹理就会越弱。
    主光设置为 1 时,关闭曝光,天空盒效果显著
    参数未变,将主光调到20,关闭曝光,天空盒效果弱化
    • SpaecRotation 旋转天空盒纹理,这个是可见的。这个旋转可以将天空侧翻
    旋转值为0
    X轴旋转45度
    Y轴旋转45度
    Z轴旋转25度
    • SpaceEmissionMultipiler 天空盒发光强度,这个值可以在灯光强度很强的时候,提升天空盒亮度,然后再经过曝光,可以提升天空盒纹理的占比。


      天空盒强度为2

    Aerosols 气溶胶 - 理解为雾霾效果就好了


    • 这个雾霾效果只影响天空盒,不会影响渲染然的物体,渲染的物体的雾效和体积雾效是通过 体积内的雾效功能来实现的。
    • Aerosol Maximum Altitude 雾霾的最高高度,从地面到这个高度,雾霾逐渐变得稀薄。值太小会引起泛白雾的现象
    8200米高的雾霾
    100米高的雾霾
    • AreosolDensity 雾霾的浓度,为一时就看不见天空了
    雾霾浓度调整到0.63
    • AerosolTint 雾霾颜色设置
    设置雾霾的颜色
    • AerosolAnisotropy 控制光的散射分布,值为0时,光会均匀的分散到雾中,值为1时,光会集中在灯光朝向上,也可以简单的理解为太阳的位置,值为-1时,光会集中在灯光朝向的反向上,也可以简单的理解为太阳照射的方向上。值完全为1或-1时 由于集中的范围较小,高亮可能就看不见了
    较高的聚散值

    ArtisticOverrides 风格化处理


    • 调整天空的颜色,不包括space内的天空盒颜色
    • ColorSaturation 色彩饱和度
    饱和度为 1
    饱和度为 0,可以看到雾霾颜色变了,天空盒颜色没有变
    • AlphaSaturation 控制天空的透明通道饱和度
    透明通道饱和度为 1
    透明通道饱和度为 0
    • AlphaMultiplier 天空不透明度倍乘系数
    系数为 1
    系数为 0,天空色没了
    • HorizonTint 地坪线处的天空颜色混合 混合模式正片叠底
    指定为红色
    • HorizonZenithShift 控制 HDRP 如何在 Horizon Tint 和 Zenith Tint 之间混合。如果将此值设置为 -1,则 Zenith Tint 会向下扩展到地平线。如果将此值设置为 1,则 Horizon Tint 会向上扩展到天顶。
    • ZenithTint 指定 HDRP 用于为观察者正上方天空位置(天顶)着色的颜色
    HorizonZenithShift 为 0
    HorizonZenithShift 为 -1
    HorizonZenithShift 为 1

    Miscellaneous 杂项

    • NumberOfBounces 散射事件的数量。这不仅可以提高天空视觉效果的质量,还会增加预计算时间。
    设置弹射数量为7
    • IntensityMode 天空盒强度模式 分为 Exposure和Multiplier 模式,都是值越大天空盒越亮

    • UpdateMode 更新模式,分为三种,OnChange 、OnDemand 、Realtime
      1. OnChange 当属性有变化更新
      2. OnDemand 从脚本调用更新事件时更新
      3. Realtime 实时更新

    • IncludeSunInBaking 指示为天空生成的光照探针和反射探针是否包含太阳圆盘。

    相关文章

      网友评论

          本文标题:Physically Based Sky 基于物理的天空盒

          本文链接:https://www.haomeiwen.com/subject/wgyuqltx.html