- 蓝框框是什么?
场景中心创建一个1x1x1的Cube,
Smallest Occluder调整为0.25,
Bake后可以见到蓝框框
可以看出0.25基本对应unity中1个单位
把Cube沿x方向移动0.5,
Bake之后观察蓝框框的变化
可以猜测,系统以最少的方格数(0.25,即1个unity单位)包裹住Cube(遮挡体)并且这些方格是从场景中心向八方衍生的。
场景中放两个Cube,一个在中心,另一个距离中心不到4个单位,
bake后,直至此刻,SmallestHole一直维持0.25。
如果把左边的Cube稍微向左拉,使其右侧占用的蓝格不到一半,Bake以后
注意到有一段的方格合并成一个大格子了。
如果把右边那个也向右靠靠,bake后是这样
又有一部分框框合并了。
我们可以试想,系统把遮挡物的边界扩大了0.5个单位,就可以解释上面的框框合并或者分割情形了。
这0.5个单位的猜想来自于Smallest Holde = 0.25
前面猜测过,遮挡系统0.25为Unity的1个单位,那么smallestHole为0.25,也就是说系统会考虑遮挡物里面或遮挡物之间小于1个单位的空隙是看不穿的,换言之,就是这样的空隙是不透明的,相当于遮挡物的一部分了。遮挡物里面这种空隙图示中没有,但遮挡物于遮挡物之间的这种空隙,系统就把遮挡物扩大一半的空隙量来处理了,这一半的空隙量就是0.5个单位。
我们还原成一个Cube在原点,另一个Cube在x轴上偏移4的情景,然后把SmallestHole设置为小于0.25的任何值,哪怕是0.24,这也就意味着遮挡物会被扩大不到0.5,因此遮挡物被扩大后,也不会超出当前的包围框框,所以中间的大框框就没有被分割,或者说中间的小框框合并了。
遮挡系统
调整了下场景,bake后
图中太阳是原点,
更夸张的场景调整后,
可以发现系统对于如何分割空间,如何布置蓝框框是有一定讲究的,一时我也推测不出来,如有了解者,请留言。
下面简单猜测一下蓝框框的用途:
- 框框把世界分割了
- 视线能接触到的框框,框框里面的物体会作为潜在可见物体,否则一定是不可见物体
- 框框越多,占用的存储资源越多,同时检测可见性消耗的资源越多,所以框框还是不要太多为好(这就是为啥系统会对某些部分的框框进行合并)
现在来看看黄框框
再检测遮挡效果可视化开启后
就会发现之前的蓝框框显示为一个整体的黄框框了。
但这也有个前提,就是相机的近裁剪面得处于框框范围内才能看到黄框框
只有相机处于黄框框内,才会运作遮挡裁剪功能,下面看看裁剪效果
先把相机移出框框,然后放置一组常规(动态)对象
可看到包括遮挡物在内,所有物体都显示,但黄框框没了
下面把相机仅仅移进框框一点点刚让黄框显示的位置
可以发现,所有物体依旧显示,观察近景能看到相机周围有一小圈灰框框。把相机拉近遮挡物一些,能看到另外一批灰框框,并且这个时候发现遮挡剔除起作用了,遮挡物后面的物体都不显示了。
仔细看的话,灰框其实是把蓝框框(SO=0.25)又二分了。为啥是二分不是四分或八分?这个其实由SH/2决定,现在SH是0.24,一半的话也近似是0.25的一半,所以就二分了。
把SH改成0.1,看看
把SH改成0.05再看看
再看看0.025、0.0125、0.00625(0.005也行)
总之,SH越小,就越在更小的粒度上二分蓝框框。当在不同SH下拖动相机可以发现,确实SH越小,遮挡就越精确。这样的话,设置成0岂不是最好?
结果是,效果与SH=0.025一样的。
把遮挡系统的参数设置为默认看看
当前相机没有处于遮挡物相交的灰框框里,遮挡未生效
相机近裁剪面进入遮挡物相交的灰框框,遮挡生效,周边灰框消失。
稍微移动相机,让近裁剪面超出一点当前的灰框框,
发现之前的灰框框们都显示出来了,而且遮挡效用不那么彻底了。
再次通过上面两张图,可以发现,相机只有在遮挡物最近的灰框里才能发挥裁剪作用
如果这样的话,岂不是遮挡系统没多大存在意义了?
下面我们实验一个封闭空间
封闭空间的8个面作为遮挡物,测试中的封闭空间是5x5x5。采用默认遮挡参数,烘培后
遮挡效果完美
但如果不是封闭空间,比如去掉相机背面的面,遮挡效果就大大折扣了,只要比较靠近直接遮挡面的时候,遮挡效果才比较好。
离远一点儿,特别是快要脱出直接遮挡面所在灰框时,效果就开始下降了。
如此看来,封闭空间,或者说比较封闭的空间是适合遮挡系统发挥的。
经过多次实验,对于5x5x5这种半封闭空间,SO在2.7到0.4都能得到比较满意到效果,这样到话当然选择2.7,它生成网格大,因此少,占用存储好计算消耗都少,取个整,我们选2.5吧。5x5x5对应2.5,那么1x1x1是否就对应0.5呢,是否有这个潜在最优比例呢?实验了一把,貌似还真是这样。
(待续~欢迎随时讨论)