Unity手册-光照相关

全局光照(GI)是对直接和间接光照进行建模以提供逼真光照效果的一组技术。Unity 有两个全局光照系统,结合了直接光照和间接光照。

烘焙全局光照系统包括光照贴图、光照探针和反射探针。所有渲染管线均支持烘焙全局光照 (Baked Global Illumination) 系统。

光源模式

  1. Realtime
    实时光源投射不超过__阴影距离 (Shadow Distance)__ 的阴影。
    默认情况下,实时光源仅为场景提供实时直接光照。
    为实时光源执行运行时计算可能成本很高,尤其是在复杂场景中或低端硬件上。
    由于实时光源在默认情况下仅为场景提供直接光照,因此阴影看起来完全是黑色的,并且没有任何间接光照效果(例如颜色反弹)。这可能会导致场景中的光照不真实。
  2. Mixed
    混合光源整合了实时光照和烘焙光照的元素。使用混合光源可以将动态阴影与来自同一光源的烘焙光照结合起来,或者在希望光源提供直接实时光照和烘焙间接光照时,也可以使用混合光源。
    场景中所有混合光源的行为取决于 Lighting 窗口中的 Lighting Mode 设置。不同的光照模式具有非常不同的性能特征和不同级别的视觉保真度。
    可在运行时更改混合光源的属性。这样做将更新光源的实时光照,但不会更新烘焙光照。进行此操作时,请注意避免不必要的视觉效果。
    混合光源的性能成本因光照模式而异。但是,由于混合光源始终至少结合了一些实时光照和一些烘焙光照,因此混合光源始终比完全烘焙光照需要更多的运行时计算,并且比完全实时光照使用更多的内存。
    果在场景中禁用了 Baked Global Illumination,Unity 会强制使混合光源表现得就像已将其 Mode 设置为 Realtime 一样
  3. Baked
    Unity 在 Unity Editor 中为烘焙光源执行计算,并将结果作为光照数据保存到磁盘中。这一过程称为烘焙。在运行时,Unity 将加载烘焙的光照数据,并使用这一数据来照亮场景。由于复杂的计算是预先执行的,因此烘培光源可以减少运行时的着色成本,并减少阴影的渲染成本。
    Unity 将直接光照和间接光照从烘培光源烘焙到光照贴图中。
    Unity 将直接光照和间接光照从烘培光源烘焙到光照探针中。
    无法在运行时更改烘培光源的属性。
    烘焙光源不影响镜面反射光照。
    动态游戏对象不会接收来自烘焙光源的光线或阴影。

GI和光源模式的关系
在不同的GI情况下,不同模式光源会产生不同的效果

  1. Realtime GI 和 Baked GI 都不勾选(静态物体无lightmap)
    Realtime 实时渲染时:静态物体和动态物体都会计算该光源
    Mixed 无法选择该模式
    Baked 无法选择该模式
  2. 只勾选Realtime GI(静态物体有 realtime lightmap)
    Realtime 烘焙时:静态物体的realtime lightmap会计算接受到该光源的间接光
                   实时渲染时:静态和动态物体都会计算该光源
    Mixed 无法选择该模式
    Baked 无法选择该模式
  3. 只勾选 Baked GI (静态物体有 baked lightmap)
    Realtime 烘焙时:静态物体的baked lightmap不会计算该光源
                   实时渲染时:静态和动态物体都会计算该光源
    Mixed 烘焙时:静态物体的baked lightmap会计算接受到该光源的间接光信息
               实时渲染时:静态和动态物体都会计算该光源
               注:不同的Lighting Mode设置会有不同的效果,文章的后面详细描述(当前为默认的shadowmask模式)
    Baked 烘焙时:静态物体的baked lightmap会计算接受到该光源的直接光和间接光信息
               实时渲染时:静态和动态物体都不会计算该光源

在bakedGI下,若场景只有realtime光源,则不会有lightmap,动态物体和静态物体的阴影都需要实时计算。若只有baked光源,则静态物体会烘焙好阴影,但是动态物体却不受该光源的影响,无法产生阴影。若你想把静态物体烘焙成lightmap,同时同一个光源又对动态物体产生影响,可以形成动态阴影,那就需要mixed光源的帮助了。

我们接下来看看Lighting设置中Mixed Lighting的三个设置:

  1. baked Indirect
    只烘培静态物体的受到的间接光照,直接光以及阴影进行实时计算。只减少间接光照的实时计算,适合对光照要求较高的场景,内存消耗小,当然性能的消耗也大。这种光照模式提供逼真的光照和合理的阴影保真度,适用于中档硬件。
    ①混合光源照亮的动态游戏对象将接收:
        实时直接光照。
        烘焙间接光照(使用光照探针)。
        动态游戏对象的阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
        静态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
    ②混合光源照亮的静态游戏对象将接收:
        实时直接光照。
        烘焙间接光照(使用光照贴图)。
        静态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
        动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
  2. shadowmask
    除了烘焙静态物体受到的光照,同时也会把静态物体受直接光照产生的阴影烘培到ShadowMask中,动态物体不受影响。内存中多了一份Shadowmask,减少了静态物体阴影的计算,占用性能小了一点。这是最真实但也是最耗费资源的光照模式,这种光照模式适用于高端或中档硬件。
    ①混合光源照亮的动态游戏对象将接收:
        实时直接光照。
        烘焙间接光照(使用光照探针)。
        动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
        静态游戏对象的烘焙阴影(使用光照探针),不超过以及超过阴影距离 (Shadow Distance)。
    ②混合光源照亮的静态游戏对象将接收:
        实时直接光照。
        烘焙间接光照(使用光照贴图)。
        动态游戏对象的实时阴影(使用阴影贴图),不超过阴影距离 (Shadow Distance)。
        静态游戏对象的烘焙阴影(使用阴影遮罩),不超过以及超过阴影距离 (Shadow Distance)。
    关于Distance Shadowmask这里不再说明,请查看官方文档。
  3. subtractive
    烘焙静态物体受到的直接光和间接光的信息(包含阴影,如同baked光源),性能消耗最小,这种光照模式不能提供特别逼真的光照效果,适合于风格化的艺术效果或低端硬件。
    ①混合光源照亮的动态游戏对象将接收:
        实时直接光照
        烘焙间接光照(使用光照探针)
        主方向光照亮的动态游戏对象的实时阴影,使用阴影贴图,不超过阴影距离 (Shadow Distance)
        静态游戏对象的实时阴影(使用光照探针)
    ②混合光源照亮的静态游戏对象将接收:
        烘焙直接光照(使用光照贴图)
        烘焙间接光照(使用光照贴图)
        静态游戏对象的烘焙阴影(使用光照贴图
        主方向光照亮的动态游戏对象的实时阴影,使用阴影贴图,不超过阴影距离 (Shadow Distance)

以上部分转自:https://blog.csdn.net/wangjiangrong/article/details/100096586
光照贴图
渐进光照贴图程序 (Progressive Lightmapper) 是一种基于路径追踪的光照贴图系统,提供了能在 Editor 中逐渐刷新的烘焙光照贴图和光照探针,目前unity只支持渐进光照贴图程序

Meta Pass 是一个着色器通道 (Shader Pass),可为渐进光照贴图 (Progressive Lightmapper)提供反照率值和发光值,以便它们可以正确地从该游戏对象计算间接光照。要使某个游戏对象能够使用光照贴图,该游戏对象必须使用一个在着色器中包含 Meta Pass 的材质。Unity 的所有内置材质都具有 Meta Pass,并且标准着色器也包含 Meta Pass。如果使用了它们,则无需执行任何操作便会启用 Meta Pass。如果使用的是自定义着色器,您可以添加自己的 Meta Pass。

注意:在支持烘焙光照的场景中使用 Unity 的 LOD 系统时,该系统会将细节级别组 (LOD Group) 中细节级别最高的模型按照普通静态模型的方式照亮,要确保 LOD 较低的模型在烘焙光源下看起来正确无误,必须将光照探针置于模型周围

光照探针
光照探针有两个主要用途:
光照探针的主要用途是为场景中的移动对象提供高质量的光照(包括间接反射光,静态游戏对象的阴影等)。
光照探针的次要用途是在静态景物使用 Unity 的 __LOD(细节级别)系统__时提供该景物的光照信息。

要在移动的游戏对象上使用光照探针 (Light Probes),必须正确设置该移动游戏对象上的__网格渲染器 (Mesh Renderer)__ 组件。Mesh Renderer 组件具有 Light Probes 设置,此设置在默认情况下设为 Blend Probes。这意味着,在默认情况下,所有游戏对象都将使用光照探针,并在场景中改变位置时在最近的探针之间进行混合。
光照剪影和反射探针
用得比较少,这里就不说明了,可以看官方文档

关于Distance Shadowmask和Shadowmask
Distance Shadowmask 静态对象在阴影距离范围内使用实时阴影,在阴影距离范围外使用烘焙阴影
Shadowmask 静态对象全部使用烘焙阴影
详见这里

注:1、实时光照是通过环境反射模型和漫反射模型实时算出来的,实时阴影是通过渲染shadowMap(RenderTexturre)采样获得的。
2、烘焙光照是通过烘焙lightMap采样获得,烘焙阴影是通过采样shadowMask的RGBA通道获得

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值