1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-14 09:55:38 +02:00
This commit is contained in:
syuilo
2026-05-01 17:53:40 +09:00
parent 09d133242d
commit 4e149a642d
4 changed files with 32 additions and 7 deletions

View File

@@ -858,8 +858,11 @@ export class RoomEngine extends EventEmitter {
this.shadowGeneratorForSunLight?.addShadowCaster(m); this.shadowGeneratorForSunLight?.addShadowCaster(m);
//if (m.material) (m.material as BABYLON.PBRMaterial).ambientColor = new BABYLON.Color3(1, 1, 1); //if (m.material) (m.material as BABYLON.PBRMaterial).ambientColor = new BABYLON.Color3(1, 1, 1);
if (m.material) { if (m.material) {
(m.material as BABYLON.PBRMaterial).reflectionTexture = this.envMapIndoor; if ((m.material as BABYLON.PBRMaterial).metadata?.disableEnvMap) {
//(m.material as BABYLON.PBRMaterial).ambientColor = new BABYLON.Color3(0.5, 0.5, 0.5); (m.material as BABYLON.PBRMaterial).ambientColor = new BABYLON.Color3(0.5, 0.5, 0.5);
} else {
(m.material as BABYLON.PBRMaterial).reflectionTexture = this.envMapIndoor;
}
(m.material as BABYLON.PBRMaterial).useGLTFLightFalloff = true; // Clustered Lightingではphysical falloffを持つマテリアルはアーチファクトが発生する https://doc.babylonjs.com/features/featuresDeepDive/lights/clusteredLighting/#materials-with-a-physical-falloff-may-cause-artefacts (m.material as BABYLON.PBRMaterial).useGLTFLightFalloff = true; // Clustered Lightingではphysical falloffを持つマテリアルはアーチファクトが発生する https://doc.babylonjs.com/features/featuresDeepDive/lights/clusteredLighting/#materials-with-a-physical-falloff-may-cause-artefacts
} }
} }
@@ -1426,6 +1429,11 @@ export class RoomEngine extends EventEmitter {
if (!forInit) this.sr.disableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意 if (!forInit) this.sr.disableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意
this.roomLight.intensity = 18 * WORLD_SCALE * WORLD_SCALE; this.roomLight.intensity = 18 * WORLD_SCALE * WORLD_SCALE;
this.envMapIndoor.level = 0.6; this.envMapIndoor.level = 0.6;
for (const m of this.scene.materials) {
if (m.metadata?.disableEnvMap) {
m.ambientColor = new BABYLON.Color3(0.5, 0.5, 0.5);
}
}
if (!forInit) { if (!forInit) {
// workerで実行される可能性がある // workerで実行される可能性がある
// eslint-disable-next-line no-restricted-globals // eslint-disable-next-line no-restricted-globals
@@ -1439,6 +1447,11 @@ export class RoomEngine extends EventEmitter {
this.sr.disableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意 this.sr.disableSnapshotRendering(); // このメソッドは参照カウント方式な点に留意
this.roomLight.intensity = 0; this.roomLight.intensity = 0;
this.envMapIndoor.level = 0.025; this.envMapIndoor.level = 0.025;
for (const m of this.scene.materials) {
if (m.metadata?.disableEnvMap) {
m.ambientColor = new BABYLON.Color3(0.025, 0.025, 0.025);
}
}
// workerで実行される可能性がある // workerで実行される可能性がある
// eslint-disable-next-line no-restricted-globals // eslint-disable-next-line no-restricted-globals
setTimeout(() => { setTimeout(() => {

View File

@@ -117,6 +117,7 @@ export class SimpleHeyaManager extends HeyaManager<SimpleHeyaOptions> {
}; };
const wallMaterial = findMaterial(this.meshes[0], '__WALL__'); const wallMaterial = findMaterial(this.meshes[0], '__WALL__');
//wallMaterial.metadata.disableEnvMap = true;
this.wallMaterials = { this.wallMaterials = {
n: wallMaterial.clone('wallNMaterial'), n: wallMaterial.clone('wallNMaterial'),
s: wallMaterial.clone('wallSMaterial'), s: wallMaterial.clone('wallSMaterial'),
@@ -125,6 +126,7 @@ export class SimpleHeyaManager extends HeyaManager<SimpleHeyaOptions> {
}; };
const beamMaterial = findMaterial(this.meshes[0], '__BEAM__'); const beamMaterial = findMaterial(this.meshes[0], '__BEAM__');
//beamMaterial.metadata.disableEnvMap = true;
this.wallBeamMaterials = { this.wallBeamMaterials = {
n: beamMaterial.clone('wallNBeamMaterial'), n: beamMaterial.clone('wallNBeamMaterial'),
s: beamMaterial.clone('wallSBeamMaterial'), s: beamMaterial.clone('wallSBeamMaterial'),
@@ -133,6 +135,7 @@ export class SimpleHeyaManager extends HeyaManager<SimpleHeyaOptions> {
}; };
const pillarMaterial = findMaterial(this.meshes[0], '__PILLAR__'); const pillarMaterial = findMaterial(this.meshes[0], '__PILLAR__');
//pillarMaterial.metadata.disableEnvMap = true;
this.pillarMaterials = { this.pillarMaterials = {
nw: pillarMaterial.clone('pillarNWMaterial'), nw: pillarMaterial.clone('pillarNWMaterial'),
ne: pillarMaterial.clone('pillarNEMaterial'), ne: pillarMaterial.clone('pillarNEMaterial'),
@@ -155,7 +158,12 @@ export class SimpleHeyaManager extends HeyaManager<SimpleHeyaOptions> {
} }
this.ceilingMaterial = findMaterial(this.meshes[0], '__CEILING__'); this.ceilingMaterial = findMaterial(this.meshes[0], '__CEILING__');
//this.ceilingMaterial.metadata.disableEnvMap = true;
this.floorMaterial = findMaterial(this.meshes[0], '__FLOOR__'); this.floorMaterial = findMaterial(this.meshes[0], '__FLOOR__');
//this.floorMaterial.metadata.disableEnvMap = true;
const baseboardMaterial = findMaterial(this.meshes[0], '__BASEBOARD__');
//baseboardMaterial.metadata.disableEnvMap = true;
await this.applyOptions(options); await this.applyOptions(options);
} }

View File

@@ -25,15 +25,17 @@ export const lavaLamp = defineObject({
light.range = cm(100); light.range = cm(100);
if (room?.lightContainer != null) room.lightContainer.addLight(light); if (room?.lightContainer != null) room.lightContainer.addLight(light);
const mat = new BABYLON.PBRMaterial('lavaLampLightMat', scene);
mat.emissiveColor = new BABYLON.Color3(1.0, 0.5, 0.2);
mat.disableLighting = true;
const sphere = BABYLON.MeshBuilder.CreateSphere('lavaLampLightSphere', { diameter: cm(4) }, scene); const sphere = BABYLON.MeshBuilder.CreateSphere('lavaLampLightSphere', { diameter: cm(4) }, scene);
sphere.parent = root; sphere.parent = root;
sphere.position = new BABYLON.Vector3(0, cm(15), 0); sphere.position = new BABYLON.Vector3(0, cm(15), 0);
const mat = new BABYLON.StandardMaterial('lavaLampLightMat', scene);
mat.emissiveColor = new BABYLON.Color3(1.0, 0.5, 0.2);
mat.alpha = 0.5;
//mat.disableLighting = true;
sphere.material = mat; sphere.material = mat;
const sphere2 = BABYLON.MeshBuilder.CreateSphere('lavaLampLightSphere2', { diameter: cm(2) }, scene);
sphere2.parent = root;
sphere2.position = new BABYLON.Vector3(0, cm(15), 0);
sphere2.material = mat;
const anim = new BABYLON.Animation('lavaLampLightAnim', 'position.y', 60, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE); const anim = new BABYLON.Animation('lavaLampLightAnim', 'position.y', 60, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
anim.setKeys([ anim.setKeys([
@@ -42,6 +44,8 @@ export const lavaLamp = defineObject({
]); ]);
sphere.animations = [anim]; sphere.animations = [anim];
scene.beginAnimation(sphere, 0, 500, true); scene.beginAnimation(sphere, 0, 500, true);
sphere2.animations = [anim];
scene.beginAnimation(sphere2, 0, 500, true, 0.6);
const emitter = new BABYLON.TransformNode('emitter', scene); const emitter = new BABYLON.TransformNode('emitter', scene);
emitter.parent = root; emitter.parent = root;