我将按照unity烘焙的发展来讲述,这样更容易理解。
在早期Unity中,所有模型的间接光,只能靠天光提供。如果是室内环境的灰墙房间,依然会因为天光照得发亮。
现阶段,模型就像分成了Baked和Realtime两个Layer,互相不能影响对方。
小球没有房子的间接光
房子阴影无法投射到小球上
房子没有实时高光
在那个蛮荒年代,甚至于有人烘焙max的灯光贴图,强行贴回到Unity模型上。(瞎搞)
“不要求精度,我只想把原本错误效果修正到勉强正确。”
Subtractive是第一个混合模式,相比之前,多了三个东西:
每个光照探头会记录它自己是否在阴影内,如果在则小球不会被直接光照亮。
但这也有个问题,光照探头的阴影不精准,房子没法投影到小球上。
平行光下的小球,可以投影到地面上,并且可以自定义阴影的颜色。但阴影不能正确混合。
房子依然无高光
同等Lightmap分辨率下,计算量是三种Mixed灯光里最低的
只能投射一个平行光的阴影,能改阴影颜色,但阴影不能正确混合
效果不真实,但是很适合风格化场景
Lightmap分辨率精度不能低
“我只是想要在全实时的基础效果上,加入间接光。”因这个想法诞生了Baked Indirect模式
这个模式如字面意思,只会烘焙间接光,光照贴图里只有天光的蓝色和墙面的红色。
所有模型的亮部和阴影还是实时计算。(所以柱子有高光)
Baked Indirect光照探头的间接光效果和Subtractive一样。
原本该有的渲染计算一个没少,还要多计算一张Lightmap和光照探头。
Lightmap分辨率可以很小(才64*64,Subtractive用了512*512)
实时高光,实时阴影
Baked Indirect看似美好,其实有一个问题。
当Shadow Distance很小,阴影到远处建筑就没了。
所以就有了Shadowmask这个模式。(Distance Shadowmask)
在Baked Indirect的基础上, 多烘焙了一张Shadowmask贴图。
在超出Shadow Distance后,模型就会从实时阴影切换到贴图阴影。
Shadowmask的每个通道对应一盏灯光,也就是一张图最多可以存四个灯光。(这也是为什么偏红)
烘焙间接光只需要低精度 + 远处的阴影只需要低精度
这两个需求正好一致,所以低分辨率Lightmap也能保证好效果。
远处烘焙模型也能有阴影。
远处实时物体的阴影走Subtractive那套。
低分辨率Lightmap即可保证好效果。
有实时高光
多了一张Shadowmask图,一张图能存四盏灯的影子
Shadowmask默认是Distance Shadowmask,可以在Quality中切换成全局Shadowmask模式。
效果就是,Shadow Distance等于0时候的Distance Shadowmask。
有实时的高光与亮面
房子无法投影小球(和Subtractive一样)
Lightmap分辨率要求高(和Subtractive一样)
实时阴影和烘焙阴影能正确混合。
说实话完全不知道这个模式的使用场景在哪。
下面是我的artstation地址:
https://www.artstation.com/luteli
https://www.zhihu.com/people/lute-li/posts