* 介绍

Unity中,有两种GI的技术:烘焙(Baked)和预计算实时(Precomputed Realtime)全局光照,这篇是讲预计算实时部分的

目录

  • 如何决定光图分辨率
  • 光图中的Charts是如何影响预计算时间的
  • 如何开始预计算
  • 使用光照探针(Light Probes)减小预计算时间
  • 预计算生成自动展UV的优化
  • 簇(Clusters)是什么以及它们如何用于全局照明的照明
  • 使用Lightmap Parameters来做物件粒度的光照调整

(文章说通过优化将几个小时的预计算时间缩短到了几分钟)

* 实时分辨率(Realtime Resolution)

当搭建完场景,准备预计算时,第一件要做的事情就是决定光图的分辨率,它的单位是纹素(texel)/单位(unit)Window>Lighting>Scene设置目录是这个

具体设置如图,先在Realtime打上勾,然后修改尺寸

** 选择合适的分辨率

demo场景的比例是1unit=1m,更方便模拟现实。这个比例会影响光图的细节,如果比例比较大,比如1unit=5m,或者比例小5unit=1m那么场景物件的精度就会发生变化。另一个影响因素是室内和室外,室内的物件更多,更精细,而室外或地形则精度要求没这么高,所以精度高反而浪费了内存和计算开销,下面是一个1unit=1m比例的参考值

参考值

预计算需要的实时分辨率值比传统烘焙光图的低上许多,因为预计算只需要捕捉间接光,间接光都是低强度、低频。在预计算时,清晰的阴影都是由实时光提供的

传统烘焙光在1unit=1m的比例下推荐值是30texels/unit,如果用这个值

** 理解Charts

unity预计算中,一个chart就是物体映射到光图上对应uv大小的一块区域。用于计算的光照信息储存在这个小块里,信息由辐照(irradiance)方向(directionality)组成

当预计算生成后,每一个纹素的光照信息就被包含在Chart中。所以Chart的大小和数量是决定预计算时间的重要因素

图示是一个4x4纹素大小的Chart,Lightmap UV强制扩大了半个纹素,以防止颜色渗透(Bleeding)

https://docs.unity3d.com/Manual/ProgressiveLightmapper-UVOverlap.html​docs.unity3d.com

无论物体有多小,Chart默认的最小值是4x4。Unity在图表边缘至少需要4个纹素,以便在找到相应的缝合伙伴之前对其进行唯一标识

注意预计算不需要padding,因为Unity强制在导入Mesh阶段给了Chart一个半纹素的边界。也就是说Chart可以紧挨着彼此并且仍然是双线性插值而没有叠加渗色,从而节省了宝贵的光照贴图空间

如果我们有1个物体,拥有50个Chart,800个纹素。所以数量对于纹素的增加是个致命伤,更多的纹素数量就意味着更多的光照计算和数据压缩、存储,这大大增加了预计算时间开销。所以减少Charts是缩短预计算时间的重要手段(特别是小物件造成很多自动生成的边界,十分浪费)

* 开始预计算过程

开始条件是场景中必须有物体标记为Lightmap Static,物件右上角的Static打上勾,里面有很多的类别。GameObjects的层级结构可以更快更好的选中和调整整体类别。demo中的场景部分层次结构

可以对相同类型的对象进行分组

标记整个Environment节点下所有子节点都为Static,然后在Lighting Window窗口开始预计算(快速迭代过程中建议勾上Auto按钮)

* 光照探针(Probe Lighting)

减少charts数量可以减少预计算时间,使用探针就是一种可以去掉部分物件的方式。这些物件会使用探针来接收间接光信息。适用的类型是小物件,它们对场景中的间接光作用不大

** 探针是什么

光照探针是一种用于实时渲染中类似光照计算的快速的技术。它通常用于在游戏世界中照明角色和其他非静态(动态)对象。 探头照明在运行时非常高效,并且可以快速预计算

探针的原理是对空间中某点的入射光进行采样,并使用球谐(Sphere harmonics)函数对此信息进行编码。它的系数存储占用很少,并且可以在游戏中快速的解码用于shader中的近似表面光照的计算

使用限制

  • 是很难在不增加阶数的情况下表现出高频或者变化频繁的光照,而增加的代价又太大了,所以我们只会使用低阶的球谐函数
  • 由于仅有一个球形表示光照,所以不适合用于大型物体,大型物体上有太多的光照变化
  • 球谐编码不适合大型平面物体或具有明显凹度的物体

选择使用探针的物体

最适合物体的特征是小,凸,demo中Environment/Props节点及其子节点都是一些、作为装饰物的物体,并且数量很大,对场景中的间接光作用不大。它们在光图中作uv展开十分的浪费边界,所以全部取消Static选项,使用探针来处理

这么做以后,等预计算结束会发现场景中没有进行预计算的非静态物体跟场景中的其他物体有很大的区别,因为我们还没放上探针,这时候他们表面只有环境光(Ambient Probe)。用户不可见,但是会采样Lighting Window中设置的环境光源

探针的放置

非静态物体接收光基于与附近探针的距离。探针直接相互连接组成四面体,物体从哪一个探针读取光照信息决定于它落在哪个四面体中。为了形成四面体,探针放置时需要注意位置,要包围住物体

虽然探针在运行时相对低耗和快速,但出于性能优化的考虑,还是有值得注意的地方的。密集网格排布虽然快速,但是很多的探测器采样出来的差异不是很大,很浪费。更好的办法是在光线明显变化的区域更大密度的放置探针,比如从光到阴影的过渡区域,或者可能存在由光反射形成的强烈色差的区域

步骤1

  • 创建Light Probe Group (GameObject > Light > Light Probe Group)
  • 选中新创建的Group,点击Edit Light Probes
  • 留下一个探针,其他的都删掉,并把它放在Terrian上方,然后ctrl+D复制两份
  • 按W移动,一个y坐标增加2,另一个增加5

创建一个垂直排列的原因是我们可以采样从地面弹射的间接光照,在头部高度附近以及在空中的光照。当我们在场景周围复制这些探针来创建包围体的时候,我们想确保任何位置的物体都会落在四面体中,探针之间有品红色的线可以看到

步骤2

  • 选中刚刚创建的三个探针,然后ctrl+D复制,并移动到附近合适的区域

合适的区域就是比如阴影区域,或者有明显地表材质变化的区域附近。为了保证增加探针而造成的消耗是有价值的,我们要确保它在采样一些有明显光线变化的区域。我们需要保证包含进项目的每一个项都能有收益

步骤3

  • 重复步骤2,在变化大的区域以更大密度放置探针,直到创建了一个稀疏的牢笼布局包含了所有的区域
  • 在摆放探针时,确认最靠近地面的是否在地面之上

demo中有两组探针组,一组用于人口密度大的村庄区域,另一个用于村外的稀疏区域。离开第一组区域后依旧会被第二组区域包围,稀疏区域不需要跟村内相同的密度,垂直方向只需要两个即可

拆分探针组更有利于定位探针,可以启用或者禁用单个组,用于清晰的调整。这些组在运行时自动合并到一块儿,并会删除重叠的探针

结束之后再次Lighting Build,现在场景中Props节点下在场景下看起来更加和谐了。在场景中不要看见探针,只要不选中探针组就行了。这就是摆放探针来获得间接光,并且节约了很多的光图Charts和计算、内存的消耗。

最后附上文章链接:

https://learn.unity.com/tutorial/precomputed-realtime-gi-global-illumination#5c7f8528edbc2a002053b557​learn.unity.com

(其实翻译了这么多里面具体怎么算的却一点没看!啊啊啊啊啊啊啊)

unity 200.8m yoy_【Unity文档】Realtime GI介绍(一)相关推荐

  1. unity 200.8m yoy_专场分享会|大会最新Unity、中创文旅专场预告来啦!

    北京国际游戏创新大会将于9月25日-27日分别在中华世纪坛发布厅.中华世纪坛剧场.京都信苑国际厅.京都信苑欧式厅.京都信苑圣马可厅.京都信苑第三会议室,6大场馆举办129场游戏行业主题分享,之前小编已 ...

  2. unity 200.8m yoy_没错,Unity双十一来了

    Unity调价通知发布后,Unity官方微信后台收到不少关于Unity双十一的咨询.今年不仅有双十一,还将持续一整个月! 本次"双十一活动"是调价前最后一次软件授权优惠,可以说是购 ...

  3. 如何离线安装Unity并添加离线帮助文档

    在学习和工作中,可能由于某些原因所用的电脑无法联网,这时相信很多朋友为如何离线安装Unity发愁,本文根据个人经验针对如何离线安装Unity进行详细的阐述. 步骤1:登陆Unity官网下载指定版本的安 ...

  4. 源代码文档生成 Doxygen介绍(转载)

    源代码文档生成 Doxygen介绍(转载) 收藏 Doxygen介绍 一.Doxygen介绍 在项目开发过程中最重要的是如何和团队中其它成员沟通,如何在项目完成后减低维护成本,随着公司的人员流动,怎样 ...

  5. 文档中没有介绍的SQL Server DBCC命令

    文档中没有介绍的SQL Server DBCC命令 http://www.searchdatabase.com.cn/showcontent_11822.htm http://www.searchda ...

  6. 文档理解最新技术介绍 | DAS 2020 Keynote Speech

    DAS 2020 (Document Analysis System,文档分析系统研讨会) 于 7月26-29日在武汉召开,本次研讨会中有不少精彩的内容,昨天向大家推荐了来自华南理工大学金连文老师和 ...

  7. 掘金量化—Python SDK文档—5.API 介绍(2)

    Python SDK文档 5.API介绍 5.6通用数据函数(免费) python 通用数据 API 包含在 gm3.0.148 版本及以上版本,不需要引入新库 get_symbol_infos - ...

  8. Unity各个版本的离线文档下载和配置方法

    Unity各版本离线文档的下载链接: Unity2020.2版本的英文离线文档 Unity2020.1版本的中文离线文档 Unity2019.4版本的中文离线文档 Unity2019.3版本的中文离线 ...

  9. Unity 读取和修改XML文档

    1.Unity 读取XML文档 (1) 创建一个无继承实体类Class01,一个纯C#无继承的实体类Class02. (2) Class01根据XML文档中的内容设置具体的字段,并且设置get/set ...

最新文章

  1. Java学习笔记45:Java 线程与主线程之间的变量关系
  2. 产业|MIR睿工业:2018年机器人市场分析报告
  3. HTML5基础01-网页的构造块
  4. mysql sleep连接过多的问题解决
  5. jq之fadeIn()
  6. ffmpeg 为取经而来_伊力特的英雄情结从何而来?
  7. 最多分成多少块(51Nod-2502)
  8. chord协议模拟实现_VB.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...
  9. [Java] 蓝桥杯ADV-155 算法提高 上帝造题五分钟
  10. 转贴:23种设计模式的有趣见解
  11. asp.net 提取html div,asp.net – 将div固定在html中的某一点
  12. 虚拟蜜罐-honeyd安装部署
  13. 电脑连手机热点DNS服务器无响应,电脑连接手机热点无法上网解决方法有哪些
  14. 2019主流的前端框架
  15. OpenCV 学习笔记(mean shift 算法)
  16. 文献检索——Web of Science|CSDN创作打卡
  17. 一切要靠自己努力去争取!!!
  18. 正则匹配里面的(.*?)
  19. 微信小程序云开发之云数据库查询及动态输入
  20. android 网络运营商名称显示规则(锁屏界面,下拉列表)

热门文章

  1. 苏州市计算机音乐学会地点,苏州市音乐家协会小提琴学会成立
  2. linux 安装x11 apt-get,Mac 安装apt-get
  3. 系统重装后 Endnote 不能和Word联用的解决方法
  4. 2022.3.27彩叶草
  5. Codeforces 1284E New Year and Castle Building (计算几何)
  6. 电脑重启后python导入的库不见_为什么python不会在启动时自动导入每个模块?
  7. matlab optimization terminated,求助Optimization terminated. 的问题
  8. asp向不同的用户发送信息_ASP.NET Core 中的那些认证中间件及一些重要知识点
  9. C++程序代码优化的方法
  10. Kubernetes 1.6新特性