书中第二章实现了一个办公室的场景,由于本文写于第二章学习的完成时,因此没有详细的过程图可供展示。
前置准备
在进行HDRP的光照之前,按照书中的说明,需要完成以下前置条件:
1. 模型导入和拼装(教材配套的工程文件的预制件模型没有碰撞器,可以给它们添加网格碰撞器)
2. 兼容HDRP材质
(书中此处还有两个步骤,但那不重要)
3. 确保包管理器中安装了HDRP的包
4. 生成一个HDRP Asset配置文件,并且关联到【项目设置 -- 图形】中的默认渲染管线上
5. 检查【窗口 -- HDRP向导】中的兼容性(Unity6的话,每次打开项目都会弹出这个界面)
全局Volume
全局光照
删掉场景中的平行光(如果有),因为接下来使用HDRP天空来提供光照,因此需要一个兼容HDRP的天空盒子(免费的HDRP天空盒子,来源于unity官方资产商店)
在场景中,新建一个空物体,添加一个【Volume】组件,确保模式为全局,再新建一个Profile配置文件(其默认名字是“‘这个空物体的name’ Profile”,所在目录为当前场景所在的目录下的同名文件夹中,若该目录不存在,会新建目录)
· 点击这个全局Volume或者刚刚生成的配置文件,都可以检视面板中添加各种效果(Add Override,专业来说是添加覆盖)
1. 添加虚拟环境(Visual Environment)和HDRI 天空,配置如下
背景云开不开无所谓,但是环境模式要选择静态。可以切换一下环境模式看看,在目前看来【动态】的效果会比【静态】的效果好很多,这是因为没有配置光照环境(【窗口 -- 渲染 -- 光照 -- 环境】中配置静态光照天空)
注意曝光补偿【Exposure Compensation】,值为0的效果如下:
值为4的情况如下(这也是教程推荐的数值):
大概就是一些缝隙可以透光了,显得更真实一点(具体为啥,就不清楚了)
2. 添加阴影
3. 配置光照【窗口 -- 渲染 -- 光照 -- 环境】
然后就基本完成了全局光照的配置。值得一提的是,教材是19版的,光照窗口和unity6的不一样。
后处理Post Processing
同样新建一个空物体,并且添加Volume组件,生成Profile配置文件。当然,这个Volume和全局光照的Volume拼成一个Volume也是没问题的,但是出于功能内聚性的角度考虑,分开来配置的话更方便后期调试、修改、扩展等。
添加覆盖如下
1. 色调映射【后处理 -- Tonemapping】:选择ACES
2. 曝光【Exposure】
数值可以自己调整看看效果,上面的数值是书中写的,除了补偿,书中是1.5.
抗锯齿
这个是在主摄像机中进行设置
按照书中的说明:
性能消耗排序:FXAA < TAA < SMAA
效果排序:FXAA < SMAA < TAA
光源、光照探针、反射探针
这些工作都是大工作量的内容,教材的工程项目都配置好了,可以直接使用。
光源
(以下来源于Chat GPT)
在Unity中,光源的类型主要有三种:实时光源(Real-time Light)、混合光源(Mixed Light)、和烘焙光源(Baked Light)。它们的区别和用途如下:
1. 实时光源(Real-time Light)
- 定义:实时光源是每帧都会计算和更新光照的光源。这意味着光源的位置、强度和颜色等属性可以动态变化,实时影响场景中的物体。
- 用途:适用于需要动态光照效果的场景,特别是那些物体或光源位置不断变化的游戏。例如,角色手中的火把,汽车的前灯,或者敌人发出的激光。
- 性能消耗:实时光源会消耗更多的计算资源,因为它需要每帧进行计算,因此在性能要求较高的情况下要谨慎使用。
2. 混合光源(Mixed Light)
- 定义:混合光源是结合了实时光源和烘焙光源的特点。部分光照是实时计算的,而另一些光照则是预计算(烘焙)的。这种光源既能提供动态的光照效果,又能通过烘焙减少性能开销。
- 用途:适用于既需要动态光照效果,又希望在大多数光照计算上节省性能开销的场景。比如,在一些不经常移动的环境中使用烘焙光源,但对于玩家角色或动态物体使用实时光源。
- 性能消耗:比纯实时光源要节省性能,因为一部分光照已经预先计算好了。实时光源仅用于影响动态物体的部分。
3. 烘焙光源(Baked Light)
- 定义:烘焙光源是预计算并将光照信息存储在光照贴图中的光源。烘焙过程会计算场景中所有静态物体的光照信息,并将其储存为纹理(光照贴图),这些贴图会在运行时直接被使用。
- 用途:适用于静态场景和物体,比如建筑、地形等不动的部分。烘焙光源能为静态物体提供精确的光照效果,常用于室内场景和大部分环境光照。
- 性能消耗:烘焙光源在运行时性能消耗几乎为零,因为光照已经预先计算并存储。唯一的消耗是烘焙时的计算过程,通常这在开发过程中进行,而不是在游戏运行时。
总结
- 实时光源:动态计算,适用于需要实时变化的光照效果(如移动光源、动态物体)。
- 混合光源:结合了实时光源和烘焙光源的特点,适用于既有动态又有静态元素的场景。
- 烘焙光源:预计算并存储光照信息,适用于静态物体,性能消耗低,但无法动态变化。
选择使用哪种光源类型主要取决于场景的需求以及对性能的要求。
在【窗口 -- 渲染 -- 光照浏览器】中可以查看所有场景中的光源,集成配置光源类型(点光源、聚光灯、平行光)、光照模式(上述三种)等属性。
探针
(还是来源于Chat GPT)
在Unity中,光照探针(Light Probe)和 反射探针(Reflection Probe)都是为了提升渲染效果而设计的工具,它们用于补充和优化场景中的光照和反射,尤其是在使用烘焙光源和实时光源时。它们的作用如下:
1. 光照探针(Light Probe)
- 定义:光照探针是用于捕捉和存储场景中环境光照信息的点。这些探针被放置在场景中,用来采样环境光照的颜色和强度,从而为不直接接受光照的动态物体提供光照数据。
- 作用:
- 动态物体的光照计算:对于动态物体(如移动的角色或物体),它们无法直接利用静态场景的烘焙光照。光照探针可以提供环境光照的估算,帮助这些动态物体获得更自然的光照效果,避免因动态物体与静态物体之间的光照差异产生突兀感。
- 环境光照补充:光照探针用于捕捉场景中不同位置的光照信息(如方向光、环境光等),并将其存储为预计算数据。动态物体可以根据其位置选择最近的光照探针,获得适当的光照数据。
- 用途:
- 主要用于为动态物体提供环境光照。
- 在场景中需要有多个光照探针时,通常会将它们放置在玩家或动态物体的活动区域,以保证光照平滑过渡。
- 性能消耗:光照探针本身对性能的影响较小,因为它们只存储光照数据,并不会像实时光源那样每帧计算。
2. 反射探针(Reflection Probe)
- 定义:反射探针是用于捕捉场景中环境反射的工具。它通过捕捉场景的反射环境图像并将其存储在一个纹理中,从而为场景中的物体提供更真实的反射效果。反射探针类似于一个虚拟的“镜子”,它通过反射场景的背景和周围环境来增强物体表面的反射效果。
- 作用:
- 环境反射:反射探针能够模拟反射在物体表面的表现,尤其是在需要反射效果的表面(如金属、玻璃等)上。它通过将场景中不同角度的环境反射捕捉到一个反射贴图中,然后将该贴图应用到物体上,增强视觉效果。
- 动态物体反射:对于动态物体,反射探针提供了一个环境反射的预计算图像。实时渲染中,反射探针的反射贴图会随着物体的位置和角度变化而适当调整,从而提供准确的反射效果。
- 用途:
- 主要用于为物体提供实时反射效果,尤其适用于金属、玻璃等光滑的表面。
- 对于静态物体,通常使用烘焙反射探针来提高性能。
- 对于动态物体,可以通过实时更新反射探针来获取准确的反射。
- 性能消耗:反射探针的性能消耗取决于它的类型(实时或烘焙)以及更新频率。实时反射探针会增加计算负担,而烘焙反射探针则在游戏运行时几乎不消耗性能。
总结
- 光照探针:用于捕捉和提供场景的环境光照数据,主要用于动态物体,帮助它们获得更自然的光照。
- 反射探针:用于捕捉和提供场景的环境反射数据,主要用于物体表面的反射效果,尤其适用于需要反射的物体(如金属、玻璃等)。
烘焙光照贴图
ctrl + 9(字母上方的数字9,而不是数字键那边的9)可以快捷打开光照窗口,或者【窗口 -- 渲染 -- 光照】,在【场景】窗口中配置
最后点击生成照明,然后等20个小时就可以了……
最后效果
这个小人儿是官方HDRP示例的小人,我整理(重构)了一下代码,然后给迁移到这个项目来了。
可以发现,光照贴图烘焙完成前和完成后的效果是截然不同的,甚至天壤之别。
评论记录:
回复评论: