我们都知道摄像机可以拍摄不同分组的渲染节点,那么如果我们的让不同分组的节点进行了嵌套,然后使用多台摄像机各自拍摄,会得到怎样的结果呢?如果同时存在多台摄像机同时拍摄同一个分组的节点,是否节点会被渲染多次?如果是个按钮,按钮点击位置在哪?
通过设置测试用例,我得出了一个结论,节点结构与摄像机渲染无关(分组a节点的父节点是分组b,如果场景中只有一台摄像机,只拍摄a分组,那么a节点会被渲染,而它的父节点因为是分组b不会被渲染):示例1。但是default分组被引擎特殊处理,会自动向上遍历,与父节点分组保持一致:示例2。
多台摄像机同时拍摄同一节点,节点会被渲染多次。但是节点逻辑响应区域只与层级较低(意味着引擎遍历节点树时最先处理)的并且拍摄本节点分组的摄像机的渲染区域关联:示例3。
下面看下我的测试用例。
首先,我们设置3个分组
示例1:
节点树结构如下
label节点的文字与分组与节点名保持一致,我们让不同分组之间的节点进行了嵌套
然后让camera1拍摄new分组,camera2拍摄test分组。关闭camera1节点
这样子运行之后,得到的结果如下
可以看到,确实只渲染出了test分组下的节点。即使test节点的父节点是new,也没有收到影响,也就是说节点树的结构与摄像机渲染是分开的。但是如果我们的分组中包含default分组,就会有其他的情况
示例2:
节点树结构如下,与示例1保持一致,仅仅是把new分组改成了default分组
label节点的文字与分组与节点名保持一致
然后让camera1拍摄default分组,camera2拍摄test分组。关闭camera1节点
这样子运行之后,得到的结果如下
可以看到,除了渲染出test分组的节点之外,还多渲染出来了个default分组的节点,这与示例1是不一样的。对比之后,我做出猜测,引擎组应该是对default分组做了特殊的处理,使得default分组会自动向上遍历,与父节点分组保持一致。
示例3:
层级结构如下
同时设置两个camera去同时拍摄同一个按钮,设置如下
设置camera2的摄像机深度depth为0,让它比camera1后渲染,设置camere2的摄像机缩放比例为0.5.让它渲染出来的物体与camera1有偏差。运行后结果如下
可以看到,同一个按钮,会被不同的摄像机多次渲染。这个时候我们尝试点击大按钮(camera1渲染)发现可以点击,并且大小两个按钮都会发生变化。然后尝试点击小按钮(camere2渲染)。发现点击无效,根本没有点击区域,也就是说小按钮上没有绑定逻辑处理。一开始我以为是因为摄像机深度影响的,先渲染的摄像机会绑定逻辑处理,但是当我将摄像机1的摄像机深度改为1,让它晚渲染,结果依然一样,只有大按钮可以点击,小按钮无法点击。
然后我猜测可能是由于摄像机节点层级导致的,于是我调整层级结构如下,让camera2在camera1上面
分别修改下camera的设置,让camera2的摄像机深度依然比camera1摄像机深度高,这样就晚渲染。
此时点击小按钮(camera2渲染),响应区域与渲染区域一致,发现点击有效。而大按钮此时点击无效。
所以我总结得出一个猜测,节点逻辑响应区域是与层级较低(意味着引擎遍历节点树时最先处理)的并且拍摄本节点分组的摄像机的渲染区域关联。















