diff --git a/packages/frontend/assets/room/objects/a4-case/a4-case.blend b/packages/frontend/assets/room/objects/a4-case/a4-case.blend new file mode 100644 index 0000000000..464ed85ce4 Binary files /dev/null and b/packages/frontend/assets/room/objects/a4-case/a4-case.blend differ diff --git a/packages/frontend/assets/room/objects/a4-case/a4-case.glb b/packages/frontend/assets/room/objects/a4-case/a4-case.glb new file mode 100644 index 0000000000..fe2365f1ed Binary files /dev/null and b/packages/frontend/assets/room/objects/a4-case/a4-case.glb differ diff --git a/packages/frontend/assets/room/objects/mixer/body.af b/packages/frontend/assets/room/objects/mixer/body.af index 787bd92be5..19f84dbbd8 100644 Binary files a/packages/frontend/assets/room/objects/mixer/body.af and b/packages/frontend/assets/room/objects/mixer/body.af differ diff --git a/packages/frontend/assets/room/objects/mixer/mixer.blend b/packages/frontend/assets/room/objects/mixer/mixer.blend index 327f7cdcaf..b087503362 100644 Binary files a/packages/frontend/assets/room/objects/mixer/mixer.blend and b/packages/frontend/assets/room/objects/mixer/mixer.blend differ diff --git a/packages/frontend/assets/room/objects/mixer/mixer.glb b/packages/frontend/assets/room/objects/mixer/mixer.glb index 0df428a29c..b94d45653d 100644 Binary files a/packages/frontend/assets/room/objects/mixer/mixer.glb and b/packages/frontend/assets/room/objects/mixer/mixer.glb differ diff --git a/packages/frontend/assets/room/objects/mixer/textures/body.png b/packages/frontend/assets/room/objects/mixer/textures/body.png index 3c969b7e38..8afdabe9fd 100644 Binary files a/packages/frontend/assets/room/objects/mixer/textures/body.png and b/packages/frontend/assets/room/objects/mixer/textures/body.png differ diff --git a/packages/frontend/src/utility/room/engine.ts b/packages/frontend/src/utility/room/engine.ts index 4d431054cc..c904f8a0f7 100644 --- a/packages/frontend/src/utility/room/engine.ts +++ b/packages/frontend/src/utility/room/engine.ts @@ -311,6 +311,7 @@ export class RoomEngine { this.shadowGenerator1.forceBackFacesOnly = true; this.shadowGenerator1.bias = 0.0001; this.shadowGenerator1.usePercentageCloserFiltering = true; + this.shadowGenerator1.filteringQuality = BABYLON.ShadowGenerator.QUALITY_HIGH; //this.shadowGenerator1.useContactHardeningShadow = true; const sunLight = new BABYLON.DirectionalLight('sunLight', new BABYLON.Vector3(0.2, -1, -1), this.scene); diff --git a/packages/frontend/src/utility/room/object-defs.ts b/packages/frontend/src/utility/room/object-defs.ts index 5326e4a819..2004c42ba3 100644 --- a/packages/frontend/src/utility/room/object-defs.ts +++ b/packages/frontend/src/utility/room/object-defs.ts @@ -3,6 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ +import { a4Case } from './objects/a4Case.js'; import { aircon } from './objects/aircon.js'; import { aquarium } from './objects/aquarium.js'; import { banknote } from './objects/banknote.js'; @@ -45,6 +46,7 @@ import { wallShelf } from './objects/wallShelf.js'; import { woodSoundAbsorbingPanel } from './objects/woodSoundAbsorbingPanel.js'; export const OBJECT_DEFS = [ + a4Case, aircon, aquarium, banknote, diff --git a/packages/frontend/src/utility/room/objects/a4Case.ts b/packages/frontend/src/utility/room/objects/a4Case.ts new file mode 100644 index 0000000000..9ef077ef19 --- /dev/null +++ b/packages/frontend/src/utility/room/objects/a4Case.ts @@ -0,0 +1,42 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import * as BABYLON from '@babylonjs/core'; +import { defineObject } from '../engine.js'; + +export const a4Case = defineObject({ + id: 'a4Case', + name: 'A4 Case', + options: { + schema: { + color: { + type: 'color', + label: 'Color', + }, + }, + default: { + color: [0.9, 0.9, 0.9], + }, + }, + placement: 'top', + createInstance: ({ options, root }) => { + const bodyMesh = root.getChildMeshes().find(m => m.name.includes('__X_BODY__')) as BABYLON.Mesh; + const bodyMaterial = bodyMesh.material as BABYLON.PBRMaterial; + + const applyColor = () => { + const [r, g, b] = options.color; + bodyMaterial.albedoColor = new BABYLON.Color3(r, g, b); + }; + + applyColor(); + + return { + onOptionsUpdated: ([k, v]) => { + applyColor(); + }, + interactions: {}, + }; + }, +});