XGundam05 发表于 2021-12-9 14:33

Unity——Shader学习22——From庄懂(场景篇)烘焙 ...

第二十二课(场景篇)

庄懂的技术美术入门课(美术向)-直播录屏-第22课
课程计划


本课任务:

认识LightMap

[*]场景搭建
[*]烘焙LightMap:混合光照设置
[*]合批渲染
<hr/>LightMap

Lightmap:作为记录光照结果或部分光照结果的一种载体方式,常用来替代实时渲染中性能昂贵的计算部分
<hr/>一、场景搭建

1.准备美术资产:场景+天空球


2.指认天空材质:材质已经将天空球当作CubeMap采集


3.场景搭建:启用ProGrids插件(注意:Unity2020之后的版本是没有此插件的,Unity内置了网格对齐功能),使物体在场景摆放能够吸附到网格上,便于场景搭建


Unity内置的网格对齐功能:Unity官方文档
打开网格对齐窗口:Edit->Grid and Snap Settings,调节网格尺寸,应用物体移动(快捷键Ctrl+ \ )




https://www.zhihu.com/video/1438574541069443072
4.启用吸附网格功能-搭建场景-搭建完后存为Prefab(预设)


5.新建场景,将Profab导入场景,将Profab的根节点设为静态(默认为动态,动态需要实时更新,消耗大)

[*]Contribute GI :响应全局光照:包括LightMap,GI等
[*]Occlunder/Occludee Static:遮挡剔除,遮挡预计算
[*]Batching Static:渲染批次相同的合并起来,如:同材质,同材质参数的,就可以静态合批
[*]Navigation Static/Off Mesh Link Generation:创建导航网格
[*]Reflection Probe Static:响应反射探头,渲染进反射探头


6.设置静态Static:搭建好场景后,点击“根物体”(我这里的根物体是空物体),勾选静态Static(或者下拉勾选),所有子物体都变为静态


7.场景打光:设置好静态后(不设置为静态则烘培无效果),进行场景打光
自发光:要将模式设置为Bake,才能像灯光一样被烘焙进LightMap
光源:Directional Light可以将模式Mode设置为Bake,因为场景中全都是静态物体,没有动态的
反射探头Reflection Probe:将类型Type设置为Bake(默认为Bake),让反射探头覆盖整个场景
(注:反射探头是不那么精确的光照反射,开启SSR才精确,但是SSR很消耗性能)
(“盒型映射反射探头”:对完全四方的场景可以做到很好的反射,但是本场景有圆弧角,所以用盒型映射不太好)






一些概念:

[*]烘培LightMap时,会将反射探头、光探头等一起烘培
[*]环境光(如skybox)、自发光等设为Bake模式后,会作为GI(global illumination全局光照),Bake到LightMap
[*]间接光照:经过反射的光(区别于光源的直接光照)
[*]静态物体BakeLightMap后,其光影就固定死了,相当于贴在模型上的亮片和影子片一样,没法改变
<hr/>二、烘焙LightMap:混合光照设置




左边:Light光源模式;右边:混合光找模式

Light灯光的3种模式:

[*]RealTime:不会作用到静态物体的光照烘培(混合光设为Baked indirect 除外),对动态物体有效
[*]Mixed:既可以作用到静态物体的光照烘培,对动态物体又有实时的光照效果,动态物体的影子会与静态物体的光照结果混合叠加
[*]Baked:只对静态物体光照烘培有效,对动态物体无任何光照效果
Mixed Lighting混合光的3种模式:

[*]Baked indirect :只烘焙间接光,且直接光照是实时的(对静态物体也是实时的)。灯光为Mixed模式时,不会烘培直接光;灯光为Baked模式时,会烘培直接光
[*]Subtractive:可烘焙间接光,灯光为Mixed模式时,可以为静态物体烘培直接光,(但是动态物体的影子对静态物体的混合有问题(如动态物体影子的颜色不对)
[*]ShadowMask:(需要在 Edit->Project Settings->Quality->Shadowmask Mode->切换成Shadowmask),解决了Subtractive模式下动态物体影子颜色的问题,缺点是会1套LightMap会Bake出2张贴图,一张LightMap,一张ShadowMask(即单独渲染了一张ShadowMask);可以和动态物体的影子更好的融合



ShadowMask模式下烘培出LightMap+ShadowMask

具体的设置解释:每个混合光模式和光照模式组合后的结果


混合光照的设置,效果也与光源模式有关
感官上Debug烘培效果:可以开启或不开启“只显示LightMap烘焙作用”来进行感官Debug



从Shaded切换到Baked LightMap显示

混合光照模式的常用搭配组合:


[*]全实时光照:所有物体设为动态,无Bake,对机器性能有极大要求
[*]全实时直接光照:用Bake Indirect(只烘焙间接光照模式),直接光照是实时的,间接光不实时
[*]对静态物烘培,动态物实时(最常用):Subtractive / ShadowMask(效果好,开销大些,一般开发不让用),至少主光设置为Mixed模式。
光源模式的常用设置:


[*]有些光源作为场景里的补光,不想作用于动态模型,可以设为Baked模式,Bake完之后甚至可以删除
[*]其他光源既想Bake静态,又想作用于动态物体,可以和主光一样设为Mixed,但是性能要求大,URP默认同时支持4个
[*]特效自发光需要全实时的
烘焙LightMap:

设置参数:




课程场景渲染结果:



课程场景渲染效果

<hr/>三、关于合批渲染


[*]Unity种将物体设置为静态,会默认提供静态合批
[*]SRPBatching:SRP管线支持的合批。需要在Shading里些
[*]GPU Instancing:StandardShade材质可以开启。适合模组化适合(如大量相同的地板),能同时渲染多个物件。
[*]手动合批:将多个模型手动合并成一个(包括材质等),如下图的右小角将房子的墙、地板等全融合,就单独的一个房子模型,其Frame Debug步骤极少
注:SRPBatching和GPU Instancing 需要消耗CPU的计算来帮忙判断是否满足合并的条件,即用CPU来感受渲染速度。


<hr/>第二十二课总结


[*]Lightmap:作为记录光照结果或部分光照结果的一种载体方式,常用来替代实时渲染中性能昂贵的计算部分
[*]场景搭建好后一般是不会动的,将场景物体设置为Static静态,用于烘焙光照
[*]场景中的skybox和自发光材质可以设置为baked,会作为GI渲染到LightMap。
[*]在场景中加入反射探头,会在Bake LightMap时会一起进行反射探头的Bake
[*]光源模式和混合光照模式的设置对Bake结果有影响。常见的组合是主光源设为Mixed,混合光照模式设置为Subtractive 或 ShadowMask,既可以Bake静态,又对动态物体产生实时光照
[*]合批可以将多个物体合起来渲染,增加渲染速度
<hr/>参考资料

庄懂的技术美术入门课(美术向)-直播录屏-第22课
Unity官方文档——网格对齐

七彩极 发表于 2021-12-9 14:35

我大学也是这个专业现在再转[捂脸]

ainatipen 发表于 2021-12-9 14:43

专业不对口是真的很难受,我现在全靠一口气撑着
页: [1]
查看完整版本: Unity——Shader学习22——From庄懂(场景篇)烘焙 ...