确认了,3.3 和 3.4 的 Light 类都没有 cullingMask 属性,灯光是挂在 Scene3D 的全局队列上的,无法按 layer 过滤。
在 3.3 中,如果需要多个 RT 使用独立光照,可以创建多个 Scene3D 实例,每个 Scene3D 有自己独立的灯光队列(_directionLights、_pointLights、_spotLights),各自用独立的 Camera 渲染到各自的 RT,光照就互不影响了。
3.4 的 Bridge3DSprite 本质上也是这个原理——每个 Bridge3DSprite 内部会创建一个独立的 Bridge3DScene3D(继承自 Scene3D),灯光自然隔离。所以如果你的场景适合用 Bridge3D,升级到 3.4 用它是更方便的方案。
在 3.3 上的做法大致是这样:
// 为每个 RT 创建独立的 Scene3D + Camera + Light
const scene1 = new Laya.Scene3D();
const cam1 = scene1.addChild(new Laya.Sprite3D()).addComponent(Laya.Camera);
cam1.renderTarget = rt1;
// scene1 里加的灯光只影响 scene1 的物体
const scene2 = new Laya.Scene3D();
const cam2 = scene2.addChild(new Laya.Sprite3D()).addComponent(Laya.Camera);
cam2.renderTarget = rt2;
// scene2 里加的灯光只影响 scene2 的物体
至于光照组件本身加 cullingMask 这个需求,目前引擎确实不支持,是否后续会加需要看规划。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。