↑ 返回顶部

简介 链接到标题

总结一下 Unity 烘焙的基本流程操作和相关基础概念

No.1 基础概念-认识 Unity 中的四种光源 链接到标题

Unity Light 一共有四种不同的光源:Directional Light, Spot Light , Point Light 和 Area Light,除了 Area Light 只能被烘焙后才能起作用以外,其他的光源都有三种模式(RealTime 实时显示效果/Backed 烘焙后才能显示效果/Mixed 二者混合)可以选择

四种光源的大致选择 链接到标题

Directional Light 链接到标题

创建场景时会默认出现的光源,控制整个场景内的光线方向

Spot Light 链接到标题

类似于手电筒的光源,聚光灯

Point Light 链接到标题

顾名思义点光源

Area Light 链接到标题

一整个区域都会发光,发光方向为蓝色的轴,点击 Area Light 光源查看的时候也会有一个蓝色线条指向发光方向,通常在大屏幕/窗户等物体上面使用, Area Light 仅能在 Baked 后显示

注意:Area Light 只会朝一个方向发光,背对的地方是不会发光的

光源的参数调整 链接到标题

这里先以 Directional Light 的参数为例:

General参数:

Type:选择光源类(也就是上面四种光源之中选一个)

Mode:RealTime/Baked/Mixed

Emission 中可以通过调整 Light Appearance (Color/Filter and Temperature)

Directional Light 参数参考

No.2 基础概念-渲染管线 链接到标题

渲染管线简单来说就是把各种图形处理后输出到屏幕上显示的过程

Unity 内置的渲染管线有三种:Build-in (默认渲染管线,功能齐全但无法脚本化渲染流程) , URP (性能较好同时可脚本化), HDRP (可脚本化,通常用于高端硬件显示高清高保真图像)

Build-in 管线可以通过插件 Universal RP (PackageManager 中可以直接搜索到安装) 将项目中的材质等全部转为 URP 管线可用的材质,但是这是一个不可逆的步骤,建议备份

No.3 基础概念-Material材质和Shader渲染算法 链接到标题

这里先介绍一些比较常用的参数,先来看一下选择了对应材质后的 Inspector 面板:

Material面板

在 build-in 管线中的 3d 模型导入后默认都是采用 Standard (标准着色器) Shader

Rendering Mode 链接到标题

此处以 build-in 管线中的材质的 Rendering Mode 为例 (在 URP 管线中略有不同)

Rendering Mode

Rendering Mode 默认为 Opaque (不透明),官方文档中的解释是适用于没有透明区域的普通固体

Cutout (裁切丢弃) 会根据 Cutout Threshold 阈值来判断哪些像素应该是透明的,小于阈值的部分不会被渲染,会被直接裁切丢弃,适合用于制作类似于树叶/草丛之类的需要硬镂空的场景,另外几种渲染模式中,alpha=0 的部分仍然会照常参与渲染,同时这部分的深度也不会被写进深度缓冲

Cutout

顺带一提,在 URP 管线中,材质里不再有 Cutout 的选项了,但是可以使用 Alpha Clipping 代替的样子


这里先引入一下深度的概念:深度 (depth) 表示像素距离相机的远近,是全局遮挡系统,深度缓冲 (Z-buffer) 主要判断物体之间的遮挡关系,用于记录深度值,深度测试是用于决定当前物体是否会被绘制,它通过比较当前片元深度和深度缓冲已记录值来决定片元是否通过,通过后再进行深度写入,深度写入决定绘制后会不会遮挡其他物体。不透明物体 (opaque) 通常需要写入深度,这样才能正确判断其遮挡关系;镂空 (Cutout) 的情况需要根据阈值具体判断,被保留的像素等同于不透明物体需要写入深度,被丢弃的像素则不写;半透明或透明材质 (Fade/Transparent) 通常测试深度之后不会写入深度

在 Unity 中应该是最后绘制透明物体,如果这个时候不采用 Cutout 模式进行渲染,Fade 和 Transparent 模式不管遇到的是需要镂空还是不需要镂空的部分都不会记录深度,这样就会在绘制时造成一些穿插的问题,再细讲会延伸到计算机图形学的部分便暂时不做另外的展开


下面两种模式通常用于处理带透明效果(但不需要镂空)的物体

Fade (淡入淡出) 会让整个材质一起淡入淡出,包括高光和反射,通常用在需要让整个物体隐身/幽灵之类的效果上

Transparent (透明) 适用于有透明效果的物体,会保留高光和反射效果,适用于玻璃/塑料等透明但需要保留反射效果的物体

Main Maps 部分常用参数 链接到标题

Albedo (反照率) 控制材质的底色和透明度,可以设置纹理

Metallic (金属率) 控制材质的金属度,值越大,该物体的漫反射越明显,同时反照率颜色将越模糊,通常采用接近0或者1的值

Smoothness (平滑度) 控制材质的光滑程度表现,参数值越高物体的镜面反射越明显

Secondary Maps 次级贴图 链接到标题

次级贴图似乎会用于性能优化和增加细节上,暂不做展开


补充

漫反射 (Diffuse) 使入射光向各方向进行散射,比如像黑板就是漫反射强镜面反射弱

镜面反射 (Specular Reflection) 入射光反弹更有方向性,主要体现在高光/环境倒影等上面,像金属球/电子屏幕之类的就是镜面反射强漫反射弱


Normal Map (法线贴图) 可以为物体增加凹凸表面细节,用来存储每个高度面的朝向

Height Map (高度贴图) 存储每个点的高度

No.4 光照探针和反射探针 链接到标题

Light Probe (光照探针) 主要适用于表现动态物体受到的光照影响,使用这个方法可以替代实时光照从而减小开销,使得动态物体能受到静态光的影响

关于光照探针推荐教程HIGH QUALITY LIGHTING using Light Probes - Unity Tutorial

Reflection Probe (反射探针) 最主要用于在开销不会很大的同时模拟比较好的反射效果,一个场景内也可以根据情况放置多个反射探针从而对不同物体实现不同的反射,反射探针也可以选择实时表现/烘焙后才能表现/自定义的模式。反射探针中的重要参数:Box Projection 会使当前探针根据盒体范围做视差修正,也就是仅对这个盒体内部做反射,所以一般来讲,在烘焙室内场景的时候需要勾选并将整个室内场景包裹在盒体内,这样就能得到较好的效果(不过有些情况似乎也会在室外场景开启 Box Projection,视情况决定吧,我还没这么烘焙过室外场景暂不做展开,但不得不说这个在作用于室内场景的屏幕或者玻璃等反射较强的物体上时效果很好)

No.5 LightMap 光照贴图 链接到标题

使用 light map 可以生成光照贴图,该贴图数据不会直接修改物体原本的材质,而是会在运行时叠加在材质上,这样可以减少静态场景的实时光照开销

Lighting 设置相关参数:

Scene相关参数

第一次打开项目的 Lighting 界面时要先在 Lighting Settings 中点击新建一个 Lighting Settings Asset 才能进行其余 Scene 参数的配置

Realtime Lighting 仅在有光源是 Realtime 模式时才有作用

Scene相关参数2

Environment相关参数

Realtime Lightmaps 和Baked Lightmaps 中可以查看对应模式的贴图

可参考教程Interior Lighting in URP (Universal Render Pipeline) | Unity 2020.2

过程非常详细,可作为 URP 管线室内场景光源烘培的典型参考,里面也提到了如何将 Build-In 管线的素材转为 URP管线(注意:这个操作是不可逆的,建议在更换渲染管线之前进行备份)

油管的字幕自动翻译过于诡异的话b站也有好心up搬运并附带双语字幕版Unity室内烘焙URP管线

基本流程:

1,修改场景中默认的光线影响,如有必要可以去掉天空盒的光源

2,增加必要的光源,比如场景内的灯光/窗户外面的光(即使已经有了 Directional Light 也最好增加,让效果看起来好一些)等

3,增加反射探针,包裹整个场景(没有反射探针的话,烘焙的效果会显得比较奇怪)

4,可以先调低各项烘焙参数查看大致的烘焙效果,确定后再调至高参数烘焙

5,烘焙结束后,可适当增加后处理效果提升画面效果

几个重要的点:

1,每次重新烘焙的时候一定要把上一次烘焙的数据清除,以免上一次烘焙的效果影响本次烘焙

2,烘焙室内场景中使用反射指针需要开启 Box Projection 选项,,同时反射指针要包含整个场景。Box Projection 这个选项主要是增加"视差修正",也就是在观察位置变化时反射内容也会变化,这样对于室内场景的表现更加真实

3,部分屏幕/电视/玻璃等可以反射些许画面的这种物体需要反射探针和材质配合使用就可以实现,build-in 管线和 URP 管线中实现方式会有所不同

4,反射探针的默认 Type 类型是 Baked,如果想要实时查看探针的反射效果需要修改为 RealTime,如果需要自定义反射贴图可选择 Custom

5,反射探针的 Box Size 框住的部分代表着反射区域,如果特定区域反射的内容不太一样建议使用多个反射探针用来控制不同区域的反射

No.6 插件 Bakery Lightmapper 链接到标题

Bakery Lightmapper 可以显著地提升烘焙灯光的速度(据说)

官方使用手册中文版

注意:经过测试,1.96 的插件版本由于使用的是 OptiX 6.0.0,同时官方使用手册中提及了需要使用Game-Ready(标准)驱动程序,而 NVIDIA 驱动程序从 R590 分支开始就去除了对 OptiX 6.0.0 的支持,也就是说,驱动程序版本号在 59x 的就无法使用 1.96 版本的插件了

目前简单总结的使用方法(由于我当前的设备无法使用插件,未能实际测试,因此该总结可能有误):在场景内的所有灯光上添加对应的脚本并导入灯光数据(比如 Directional Light 需要添加 Bakery Direction Light ,Area Light 需要添加 Bakery Light Mesh 等),之后在菜单栏中选择 Bakery 选项设置对应数据后烘培即可