diff --git a/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.blend b/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.blend index 7ef3d69aed..778c1676d9 100644 Binary files a/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.blend and b/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.blend differ diff --git a/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.glb b/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.glb index 1ff4541b72..c6106f7a9c 100644 Binary files a/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.glb and b/packages/frontend/assets/room/objects/wood-ring-floor-lamp/wood-ring-floor-lamp.glb differ diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index 4c92dd78d9..c1db88415e 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -406,6 +406,7 @@ export class RoomEngine { private envMapOutdoor: BABYLON.CubeTexture; private reflectionProbe: BABYLON.ReflectionProbe; private roomLight: BABYLON.SpotLight; + public lightContainer: BABYLON.ClusteredLightContainer; private enableReflectionProbe = false; private xGridPreviewPlane: BABYLON.Mesh; private yGridPreviewPlane: BABYLON.Mesh; @@ -439,10 +440,6 @@ export class RoomEngine { //this.scene.autoClearDepthAndStencil = false; this.scene.skipPointerMovePicking = true; - if (_DEV_) { - new BoundingBoxRenderer(this.scene); - } - const skybox = BABYLON.MeshBuilder.CreateBox('skybox', { size: 100000/*cm*/ }, this.scene); const skyboxMat = new BABYLON.StandardMaterial('skyboxMat', this.scene); skyboxMat.backFaceCulling = false; @@ -547,6 +544,8 @@ export class RoomEngine { this.shadowGeneratorForSunLight.usePoissonSampling = true; this.shadowGeneratorForSunLight.getShadowMap().refreshRate = 60; + this.lightContainer = new BABYLON.ClusteredLightContainer('clustered', [], this.scene); + this.turnOnRoomLight(); if (USE_GLOW) { @@ -707,7 +706,8 @@ export class RoomEngine { public async init() { await this.loadRoomModel(); await this.loadEnvModel(); - await Promise.all(this.roomState.installedObjects.map(o => this.loadObject({ + // beamLampがあるとなぜかclustered lightがエラーになる + await Promise.all(this.roomState.installedObjects.filter(o => o.type !== 'beamLamp').map(o => this.loadObject({ id: o.id, type: o.type, position: new BABYLON.Vector3(...o.position), diff --git a/packages/frontend/src/utility/room/objects/beamLamp.ts b/packages/frontend/src/utility/room/objects/beamLamp.ts index 4e3aea39e2..56fc47eb8b 100644 --- a/packages/frontend/src/utility/room/objects/beamLamp.ts +++ b/packages/frontend/src/utility/room/objects/beamLamp.ts @@ -14,14 +14,15 @@ export const beamLamp = defineObject({ default: {}, }, placement: 'top', - createInstance: ({ root, scene }) => { + createInstance: ({ room, root, scene }) => { return { onInited: () => { - const light = new BABYLON.PointLight('beamLampLight', new BABYLON.Vector3(0, 10/*cm*/, 0), scene); + const light = new BABYLON.PointLight('beamLampLight', new BABYLON.Vector3(0, 10/*cm*/, 0), scene, true); light.parent = root; light.diffuse = new BABYLON.Color3(1.0, 0.5, 0.2); light.intensity = 300; light.range = 100/*cm*/; + room.lightContainer.addLight(light); }, interactions: {}, }; diff --git a/packages/frontend/src/utility/room/objects/lavaLamp.ts b/packages/frontend/src/utility/room/objects/lavaLamp.ts index 38353b76ce..121a8fa334 100644 --- a/packages/frontend/src/utility/room/objects/lavaLamp.ts +++ b/packages/frontend/src/utility/room/objects/lavaLamp.ts @@ -13,14 +13,15 @@ export const lavaLamp = defineObject({ default: {}, }, placement: 'top', - createInstance: ({ scene, root }) => { + createInstance: ({ room, scene, root }) => { return { onInited: () => { - const light = new BABYLON.PointLight('lavaLampLight', new BABYLON.Vector3(0, 11/*cm*/, 0), scene); + const light = new BABYLON.PointLight('lavaLampLight', new BABYLON.Vector3(0, 11/*cm*/, 0), scene, true); light.parent = root; light.diffuse = new BABYLON.Color3(1.0, 0.5, 0.2); light.intensity = 300; light.range = 100/*cm*/; + room.lightContainer.addLight(light); const sphere = BABYLON.MeshBuilder.CreateSphere('lavaLampLightSphere', { diameter: 4/*cm*/ }, scene); sphere.parent = root; diff --git a/packages/frontend/src/utility/room/objects/woodRingFloorLamp.ts b/packages/frontend/src/utility/room/objects/woodRingFloorLamp.ts index 0bb704896d..de193a2376 100644 --- a/packages/frontend/src/utility/room/objects/woodRingFloorLamp.ts +++ b/packages/frontend/src/utility/room/objects/woodRingFloorLamp.ts @@ -26,7 +26,7 @@ export const woodRingFloorLamp = defineObject({ }, }, placement: 'floor', - createInstance: ({ options, model }) => { + createInstance: ({ room, scene, options, model }) => { const shadeMaterial = model.findMaterial('__X_SHADE__'); const applyShadeColor = () => { @@ -45,6 +45,16 @@ export const woodRingFloorLamp = defineObject({ applyBodyColor(); + const lamps = model.findMeshes('__X_LAMP__'); + for (const lamp of lamps) { + const light = new BABYLON.SpotLight('', new BABYLON.Vector3(0/*cm*/, 0/*cm*/, 0), new BABYLON.Vector3(0, -1, 0), Math.PI / 1, 2, scene, true); + light.parent = lamp; + light.diffuse = new BABYLON.Color3(1.0, 0.5, 0.2); + light.intensity = 5000; + light.range = 150/*cm*/; + room.lightContainer.addLight(light); + } + return { onOptionsUpdated: ([k, v]) => { applyShadeColor();