目录

  • Baked GI
  • Lightmap和Light Probe
  • Precomputed Real-time GI

Unity的全局光照系统采用Enlighten解决方案,包含Baked GI和Precomputed Real-time GI系统。在不开启全局光照时,Unity的光源只产生直接光照的效果,没有任何间接光照。

Baked GI

Baked GI
Baked GI采用一个离线的烘焙过程,将静态物体接收到的光照信息存入Lightmap中储存。由于烘焙是离线的过程,可以耗费时间来计算复杂的间接光照,将结果存入纹理供运行时直接采样。
使用
要使用Baked GI,需要在Lighting面板中勾选Baked Global Illumination选项。Lighting面板的右下方有一个Generate Lighting的按钮,就是我们的烘焙按钮。勾选左侧的Auto Generate(默认)则会自动进行烘焙,但对于较大的场景,最好不勾选Auto Generate,通过手动点击Generate Lighting按钮来进行烘焙。在烘焙前,我们需要确保场景中的静态物体勾选为static(至少是Lightmap Static),因为烘焙过程只考虑静态物体。如果场景中有Light Mode为Baked或Mixed的光源,其光照信息也会被烘焙,具体见下节。准备完成后进行一次烘焙(Generate Lighting)即可,可以在Lighting面板的Baked Lightmaps选项卡中看到所有的Baked Lightmap。
Light Mode、Mixed Light、Lighting Mode
Light Mode:Light组件的属性,有Realtime、Baked、Mixed三种选项。

  • Realtime:实时光源,在不开启Precomputed Real-time GI的情况下,只产生实时的直接光照和阴影,不参与烘焙,无间接光照效果;
  • Baked:烘焙光源,在开启Baked GI的情况下,烘焙间接光照、直接光照和阴影;
  • Mixed:混合光源,具有三个子类型,在Lighting面板中的Lighting Mode选项设置,不同的子类型具有不同的表现。

Lighting Mode:Lighting面板中的属性,决定场景中所有Mixed光源的表现。有Baked Indirect、Shadowmask、Subtractive三种选项。(?)

  • Baked Indirect:只烘焙间接光照,产生实时的直接光照和阴影;
  • Shadowmask:烘焙间接光照和阴影,产生实时的直接光照,并将实时阴影与烘焙阴影进行混合,是表现最好且开销最大的Lighting Mode;
  • Subtractive:烘焙间接光照和直接光照,只为场景中的一盏平行光产生实时阴影,是表现最差且开销最小的Lighting Mode。

Lightmap和Light Probe

在上节中,只有静态物体(static)可以参与Lightmap的烘焙。但往往我们希望场景中的动态物体(非static)也能够拥有全局光照的效果,这时我们就需要用到Light Probe(光照探针)。

与Lightmap十分相似,Light Probe也能够记录光照信息,不同的是Lightmap记录的是打在物体表面的光照信息,而Light Probe记录的是光线经过场景中的空间的信息(store information about light passing through empty space in your scene)。另外,Lightmap用纹理来记录光照信息,而Light Probe使用球谐光照技术来记录。Light Probe中光照信息的更新与Lightmap一样,在烘焙(Generate Lighting)的过程中进行。
要创建Light Probe,可以在Hierarchy面板中右键-Light-Light Probe Group,可以创建出一个包含多个Light Probe的组。之后我们同样需要进行一次烘焙(Generate Lighting),场景中的baked模式光源就会将直接与间接光照信息记录到Light Probe中,mixed模式的光源就会将间接光照信息(如果Lighting Mode为Subtractive,则直接光照也会被记录)记录到Light Probe中。
有了Light Probe之后,场景中的动态物体会从附近的Light Probe获取光照信息,从而能够 接受 到附近静态物体贡献的间接光照。需要注意的是,动态物体能够通过Light Probe接受到间接光照和烘焙光,但不会 贡献 任何间接光照,即不考虑那些打在动态物体上之后反射到其他物体上的光线。

Precomputed Real-time GI

原理
Baked GI能够为我们的场景提供较好的全局光照效果,但如果我们尝试着移动烘焙光源,我们会发现场景中的光照效果并没有随之改变,只有再次烘焙(Generate Lighting)之后,才会得到正确的效果。这也是Baked GI具有的限制:烘焙光源无法在运行时进行移动、旋转或是变换强度、颜色。
Unity的Precomputed Real-time GI(预计算实时全局光照)可以为我们解决这个问题。之前说到Realtime模式的光源只能够提供实时的直接光照,无法参与间接光照的计算。在离线烘焙(Generate Lighting)时,mixed和baked模式的光源参与Lightmap和Light Probe的计算,计算结果在运行时不产生变化。但如果开启了Precomputed Real-time GI,场景中Realtime模式的光源便能够将自身产生的 间接光 信息存入Light Map和Light Probe中,并且不像Baked GI中只离线烘焙一次,而是在 运行时 动态地更新,即系统将耗费资源在运行时动态地对Realtime光源的间接光进行烘焙。那么Realtime光源便能够在移动、旋转、改变强度和颜色的同时仍然产生正确的光照效果。
但是开销如此大的烘焙过程怎么能实时地进行呢?这其中主要有三点原因。

  • Real-time Lightmap只需要记录间接光照信息,而间接光的变化往往是柔和、低频的,即不会产生高频突变,相比可能需要记录直接光照信息的Baked Lightmap,Real-time Lightmap可以大幅降低分辨率(这里的分辨率指的是为场景单位长度分配多大的像素区域,可以看看Lighting面板的Indirect Resolution和Lightmap Resolution两个参数)。
  • 计算被分配到多帧进行。试着快速改变Realtime光源的属性,比如突然关闭光源,可以看到其间接光效果并不会随之立即消失,而是有一个渐变的过程,说明计算并没有在一帧内完成,每帧只需要完成一部分运算。这种做法优化了性能开销,但也会导致一些视觉效果的问题。对于一个缓慢旋转的光源(如场景中的主平行光,模拟日照效果缓慢旋转),多帧运算造成的问题并不明显;但如果我们需要做一个不停明灭闪烁的灯泡的效果,无法突变的间接光照就成了问题。但一些后处理方法也可以解决这一问题。
  • 预计算加速数据。这也是为什么这项技术有Precomputed前缀。预计算的过程在烘焙(Generate Lighting)中进行,所以Precomputed Real-time GI技术也需要进行离线烘焙。预计算会记录下场景中静态物体之间光线传播的信息,这些数据能够加速实时的光照运算。

使用
要开启Precomputed Real-time GI,在Lighting面板中勾选Realtime Global Illumination选项,再进行一次烘焙(Generate Lighting)即可。场景中的所有Realtime光源现在都能够产生实时的间接光照效果,可以在Lighting面板的Realtime Lightmaps选项卡中看到所有的Realtime Lightmap。如果需要关闭某一盏Realtime光源的间接光效果,只要把它的Indirect Multiplier设置为0即可。
另外,Precomputed Real-time GI和Baked GI并不冲突,可以同时使用。比如将静态的光源设置为Baked模式使用Baked GI,为动态的实时光源开启Precomputed Real-time GI。关于更多的场景设置和参数设置技巧,可以参考Unity官方教程。

Unity全局光照/Bake GI/Precomputed Real-time GI/Lightmap/Light Probe相关推荐

  1. 在自定义Shader中应用Unity全局光照

    目录 从一个简单的Diffuse Shader开始 接受间接光照--使用内置函数 贡献间接光照--meta pass 结果 上一篇是关于Unity全局光照系统的介绍和使用方法,但是用于测试效果的场景物 ...

  2. Unity Global Illumination(Unity 全局光照 ) 官方手册笔记系列之Enlighten

    Enlighten 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处. 文章中涉及到的操作都是基于Unit ...

  3. 全局光照技术:Precomputed Radiance Transfer

    1. 介绍 物体在不同光照下的表现不同,PRT(Precomputed Radiance Transfer)是一 个计算物体在不同光照下表现的方法.光线在一个环境中,会经历反射,折射, 散射,甚至还会 ...

  4. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  5. Unity 5 中的全局光照技术详解

    简介 全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算. ...

  6. Unity5 全局光照

    转载自:Unity 5 中的全局光照技术详解 简介 全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度 ...

  7. 实时高清渲染:全局光照(Global Illumination)[1]

    目录 基础知识: Radiance: Irradiance: Radiant flux: Radiant Intensity: Solid Angle: Lambertian surface: Lam ...

  8. Unity中Light Probe详解

    本文节选自洪流学堂公众号专栏<郑洪智的Unity2018课>,未经允许不可转载. 洪流学堂公众号回复光照探头,获取本文对应的视频实战教程. 洪流学堂,让你快人几步.你好,我是郑洪智. Un ...

  9. Unity官方图形教程 学习笔记(二) -- Precomputed Realtime GI(实时全局光照)

    原文链接:https://unity3d.com/cn/learn/tutorials/s/graphics 1 介绍 当使用Baked GI的时候,会在预计算阶段,离线创建一张lightmap纹理贴 ...

最新文章

  1. 脚本路径问题_dirname
  2. Android AudioPolicyService和AudioPolicyManager
  3. OpenJudge/Poj 2001 Shortest Prefixes
  4. 最深刻最通俗的HTTPS 原理详解,图文并茂
  5. python查看方法作用_python学习笔记1,新手小白也能看得懂
  6. RDS最佳实践(三)—如何制定相关的流程来规范RDS的使用
  7. 【操作】鼠标hover效果——元素凸起并产生阴影
  8. Unity图片优化神器 - dither算法究极进化方案
  9. 牛客题霸题目及题解汇总
  10. 405: HTTP method GET is not supported by this URL
  11. hadoop伪分布式搭建 java_hadoop2.2.0伪分布式搭建
  12. Linux Crontab内环境变量与Shell环境变量的关系及解决问题的办法
  13. Atitit. Dwr 抛出异常error解决方案
  14. oracle 卸载(手动,无universal installer)
  15. 各自然带代表植被_十种常见自然带所对应的植被 十种常见自然带所对应的气候类型...
  16. OpenWrt固件编译、软件包Ipk的编译详解
  17. 宝塔安装RSSHub订阅服务
  18. linux 服务器远程开机,详解使用Ubuntu系统中实现远程开机的方法
  19. 【接口测试基础】第五篇 | 接口用例设计详解
  20. ROS学习笔记六:action-server/action-client

热门文章

  1. halcon的长度和角度测量
  2. 瓶子破碎的最高安全楼层
  3. js设计模式与开发实践(读书笔记)
  4. SAP ABAP ME23N 采购订单打印输出
  5. 工控机常见问题与解决方法
  6. emq Node emq@ not responding to pings.
  7. EMC测试(1)——辐射发射测试
  8. 操作系统 -- pcb
  9. C#模拟银行转账系统
  10. 企业微信单点登陆流程