@iwsdk/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/asset/asset-manager.d.ts +72 -0
- package/dist/asset/asset-manager.d.ts.map +1 -0
- package/dist/asset/asset-manager.js +138 -0
- package/dist/asset/asset-manager.js.map +1 -0
- package/dist/asset/cache-manager.d.ts +44 -0
- package/dist/asset/cache-manager.d.ts.map +1 -0
- package/dist/asset/cache-manager.js +80 -0
- package/dist/asset/cache-manager.js.map +1 -0
- package/dist/asset/index.d.ts +9 -0
- package/dist/asset/index.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.d.ts +21 -0
- package/dist/asset/loaders/audio-loader.d.ts.map +1 -0
- package/dist/asset/loaders/audio-loader.js +57 -0
- package/dist/asset/loaders/audio-loader.js.map +1 -0
- package/dist/asset/loaders/gltf-loader.d.ts +33 -0
- package/dist/asset/loaders/gltf-loader.d.ts.map +1 -0
- package/dist/asset/loaders/gltf-loader.js +79 -0
- package/dist/asset/loaders/gltf-loader.js.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts +18 -0
- package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/hdr-texture-loader.js +65 -0
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -0
- package/dist/asset/loaders/texture-loader.d.ts +21 -0
- package/dist/asset/loaders/texture-loader.d.ts.map +1 -0
- package/dist/asset/loaders/texture-loader.js +57 -0
- package/dist/asset/loaders/texture-loader.js.map +1 -0
- package/dist/audio/audio-pool.d.ts +59 -0
- package/dist/audio/audio-pool.d.ts.map +1 -0
- package/dist/audio/audio-pool.js +105 -0
- package/dist/audio/audio-pool.js.map +1 -0
- package/dist/audio/audio-system.d.ts +326 -0
- package/dist/audio/audio-system.d.ts.map +1 -0
- package/dist/audio/audio-system.js +478 -0
- package/dist/audio/audio-system.js.map +1 -0
- package/dist/audio/audio-utils.d.ts +71 -0
- package/dist/audio/audio-utils.d.ts.map +1 -0
- package/dist/audio/audio-utils.js +145 -0
- package/dist/audio/audio-utils.js.map +1 -0
- package/dist/audio/audio.d.ts +178 -0
- package/dist/audio/audio.d.ts.map +1 -0
- package/dist/audio/audio.js +104 -0
- package/dist/audio/audio.js.map +1 -0
- package/dist/audio/index.d.ts +11 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/ecs/component-registry.d.ts +54 -0
- package/dist/ecs/component-registry.d.ts.map +1 -0
- package/dist/ecs/component-registry.js +86 -0
- package/dist/ecs/component-registry.js.map +1 -0
- package/dist/ecs/component.d.ts +12 -0
- package/dist/ecs/component.d.ts.map +1 -0
- package/dist/ecs/entity.d.ts +17 -0
- package/dist/ecs/entity.d.ts.map +1 -0
- package/dist/ecs/entity.js +13 -0
- package/dist/ecs/entity.js.map +1 -0
- package/dist/ecs/index.d.ts +12 -0
- package/dist/ecs/index.d.ts.map +1 -0
- package/dist/ecs/system.d.ts +70 -0
- package/dist/ecs/system.d.ts.map +1 -0
- package/dist/ecs/system.js +79 -0
- package/dist/ecs/system.js.map +1 -0
- package/dist/ecs/world.d.ts +101 -0
- package/dist/ecs/world.d.ts.map +1 -0
- package/dist/ecs/world.js +165 -0
- package/dist/ecs/world.js.map +1 -0
- package/dist/environment/dome-gradient.d.ts +39 -0
- package/dist/environment/dome-gradient.d.ts.map +1 -0
- package/dist/environment/dome-gradient.js +30 -0
- package/dist/environment/dome-gradient.js.map +1 -0
- package/dist/environment/dome-texture.d.ts +39 -0
- package/dist/environment/dome-texture.d.ts.map +1 -0
- package/dist/environment/dome-texture.js +30 -0
- package/dist/environment/dome-texture.js.map +1 -0
- package/dist/environment/environment-system.d.ts +82 -0
- package/dist/environment/environment-system.d.ts.map +1 -0
- package/dist/environment/environment-system.js +389 -0
- package/dist/environment/environment-system.js.map +1 -0
- package/dist/environment/gradient-environment.d.ts +37 -0
- package/dist/environment/gradient-environment.d.ts.map +1 -0
- package/dist/environment/gradient-environment.js +99 -0
- package/dist/environment/gradient-environment.js.map +1 -0
- package/dist/environment/ibl-gradient.d.ts +38 -0
- package/dist/environment/ibl-gradient.d.ts.map +1 -0
- package/dist/environment/ibl-gradient.js +29 -0
- package/dist/environment/ibl-gradient.js.map +1 -0
- package/dist/environment/ibl-texture.d.ts +36 -0
- package/dist/environment/ibl-texture.d.ts.map +1 -0
- package/dist/environment/ibl-texture.js +30 -0
- package/dist/environment/ibl-texture.js.map +1 -0
- package/dist/environment/index.d.ts +12 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.d.ts +115 -0
- package/dist/grab/distance-grabbable.d.ts.map +1 -0
- package/dist/grab/distance-grabbable.js +102 -0
- package/dist/grab/distance-grabbable.js.map +1 -0
- package/dist/grab/grab-system.d.ts +320 -0
- package/dist/grab/grab-system.d.ts.map +1 -0
- package/dist/grab/grab-system.js +239 -0
- package/dist/grab/grab-system.js.map +1 -0
- package/dist/grab/handles.d.ts +43 -0
- package/dist/grab/handles.d.ts.map +1 -0
- package/dist/grab/handles.js +132 -0
- package/dist/grab/handles.js.map +1 -0
- package/dist/grab/index.d.ts +13 -0
- package/dist/grab/index.d.ts.map +1 -0
- package/dist/grab/index.js +23 -0
- package/dist/grab/index.js.map +1 -0
- package/dist/grab/one-hand-grabbable.d.ts +80 -0
- package/dist/grab/one-hand-grabbable.d.ts.map +1 -0
- package/dist/grab/one-hand-grabbable.js +80 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -0
- package/dist/grab/pointer-events-patch.d.ts +16 -0
- package/dist/grab/pointer-events-patch.d.ts.map +1 -0
- package/dist/grab/pointer-events-patch.js +223 -0
- package/dist/grab/pointer-events-patch.js.map +1 -0
- package/dist/grab/two-hands-grabbable.d.ts +103 -0
- package/dist/grab/two-hands-grabbable.d.ts.map +1 -0
- package/dist/grab/two-hands-grabbable.js +100 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/init/index.d.ts +9 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/world-initializer.d.ts +76 -0
- package/dist/init/world-initializer.d.ts.map +1 -0
- package/dist/init/world-initializer.js +403 -0
- package/dist/init/world-initializer.js.map +1 -0
- package/dist/init/xr.d.ts +87 -0
- package/dist/init/xr.d.ts.map +1 -0
- package/dist/init/xr.js +193 -0
- package/dist/init/xr.js.map +1 -0
- package/dist/input/index.d.ts +9 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/input-system.d.ts +52 -0
- package/dist/input/input-system.d.ts.map +1 -0
- package/dist/input/input-system.js +176 -0
- package/dist/input/input-system.js.map +1 -0
- package/dist/input/state-tags.d.ts +56 -0
- package/dist/input/state-tags.d.ts.map +1 -0
- package/dist/input/state-tags.js +63 -0
- package/dist/input/state-tags.js.map +1 -0
- package/dist/level/index.d.ts +12 -0
- package/dist/level/index.d.ts.map +1 -0
- package/dist/level/level-entity-creator.d.ts +27 -0
- package/dist/level/level-entity-creator.d.ts.map +1 -0
- package/dist/level/level-entity-creator.js +110 -0
- package/dist/level/level-entity-creator.js.map +1 -0
- package/dist/level/level-glxf-importer.d.ts +22 -0
- package/dist/level/level-glxf-importer.d.ts.map +1 -0
- package/dist/level/level-glxf-importer.js +40 -0
- package/dist/level/level-glxf-importer.js.map +1 -0
- package/dist/level/level-root.d.ts +18 -0
- package/dist/level/level-root.d.ts.map +1 -0
- package/dist/level/level-root.js +25 -0
- package/dist/level/level-root.js.map +1 -0
- package/dist/level/level-system.d.ts +54 -0
- package/dist/level/level-system.d.ts.map +1 -0
- package/dist/level/level-system.js +134 -0
- package/dist/level/level-system.js.map +1 -0
- package/dist/level/level-tag.d.ts +25 -0
- package/dist/level/level-tag.d.ts.map +1 -0
- package/dist/level/level-tag.js +28 -0
- package/dist/level/level-tag.js.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts +12 -0
- package/dist/locomotion/geometries/beveled-cylinder.d.ts.map +1 -0
- package/dist/locomotion/geometries/beveled-cylinder.js +64 -0
- package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -0
- package/dist/locomotion/index.d.ts +11 -0
- package/dist/locomotion/index.d.ts.map +1 -0
- package/dist/locomotion/locomotion.d.ts +239 -0
- package/dist/locomotion/locomotion.d.ts.map +1 -0
- package/dist/locomotion/locomotion.js +256 -0
- package/dist/locomotion/locomotion.js.map +1 -0
- package/dist/locomotion/materials/line.d.ts +24 -0
- package/dist/locomotion/materials/line.d.ts.map +1 -0
- package/dist/locomotion/materials/line.js +307 -0
- package/dist/locomotion/materials/line.js.map +1 -0
- package/dist/locomotion/slide.d.ts +76 -0
- package/dist/locomotion/slide.d.ts.map +1 -0
- package/dist/locomotion/slide.js +131 -0
- package/dist/locomotion/slide.js.map +1 -0
- package/dist/locomotion/teleport.d.ts +68 -0
- package/dist/locomotion/teleport.d.ts.map +1 -0
- package/dist/locomotion/teleport.js +150 -0
- package/dist/locomotion/teleport.js.map +1 -0
- package/dist/locomotion/turn.d.ts +77 -0
- package/dist/locomotion/turn.d.ts.map +1 -0
- package/dist/locomotion/turn.js +126 -0
- package/dist/locomotion/turn.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js +13 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +154 -0
- package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +66 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +162 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +519 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +15 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +32 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +10 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +41 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +35 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +24 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +92 -0
- package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +382 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +2587 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +477 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +1 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +17 -0
- package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +1 -0
- package/dist/physics/index.d.ts +11 -0
- package/dist/physics/index.d.ts.map +1 -0
- package/dist/physics/physics-system.d.ts +314 -0
- package/dist/physics/physics-system.d.ts.map +1 -0
- package/dist/physics/physics-system.js +419 -0
- package/dist/physics/physics-system.js.map +1 -0
- package/dist/physics/physicsBody.d.ts +83 -0
- package/dist/physics/physicsBody.d.ts.map +1 -0
- package/dist/physics/physicsBody.js +60 -0
- package/dist/physics/physicsBody.js.map +1 -0
- package/dist/physics/physicsManipulation.d.ts +51 -0
- package/dist/physics/physicsManipulation.d.ts.map +1 -0
- package/dist/physics/physicsManipulation.js +46 -0
- package/dist/physics/physicsManipulation.js.map +1 -0
- package/dist/physics/physicsShape.d.ts +133 -0
- package/dist/physics/physicsShape.d.ts.map +1 -0
- package/dist/physics/physicsShape.js +97 -0
- package/dist/physics/physicsShape.js.map +1 -0
- package/dist/physics/utils.d.ts +21 -0
- package/dist/physics/utils.d.ts.map +1 -0
- package/dist/physics/utils.js +130 -0
- package/dist/physics/utils.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/three.d.ts +8 -0
- package/dist/runtime/three.d.ts.map +1 -0
- package/dist/runtime/three.js +18 -0
- package/dist/runtime/three.js.map +1 -0
- package/dist/scene-understanding/anchor.d.ts +42 -0
- package/dist/scene-understanding/anchor.d.ts.map +1 -0
- package/dist/scene-understanding/anchor.js +45 -0
- package/dist/scene-understanding/anchor.js.map +1 -0
- package/dist/scene-understanding/index.d.ts +11 -0
- package/dist/scene-understanding/index.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.d.ts +67 -0
- package/dist/scene-understanding/mesh.d.ts.map +1 -0
- package/dist/scene-understanding/mesh.js +55 -0
- package/dist/scene-understanding/mesh.js.map +1 -0
- package/dist/scene-understanding/plane.d.ts +39 -0
- package/dist/scene-understanding/plane.d.ts.map +1 -0
- package/dist/scene-understanding/plane.js +42 -0
- package/dist/scene-understanding/plane.js.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts +180 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -0
- package/dist/scene-understanding/scene-understanding-system.js +342 -0
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -0
- package/dist/transform/index.d.ts +10 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.d.ts +35 -0
- package/dist/transform/synced-quaternion.d.ts.map +1 -0
- package/dist/transform/synced-quaternion.js +128 -0
- package/dist/transform/synced-quaternion.js.map +1 -0
- package/dist/transform/synced-vector3.d.ts +34 -0
- package/dist/transform/synced-vector3.d.ts.map +1 -0
- package/dist/transform/synced-vector3.js +106 -0
- package/dist/transform/synced-vector3.js.map +1 -0
- package/dist/transform/transform.d.ts +100 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +194 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist/types/webxr-augmentations.d.ts +23 -0
- package/dist/types/webxr-augmentations.d.ts.map +1 -0
- package/dist/ui/document.d.ts +112 -0
- package/dist/ui/document.d.ts.map +1 -0
- package/dist/ui/document.js +298 -0
- package/dist/ui/document.js.map +1 -0
- package/dist/ui/follow.d.ts +197 -0
- package/dist/ui/follow.d.ts.map +1 -0
- package/dist/ui/follow.js +143 -0
- package/dist/ui/follow.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/screenspace.d.ts +219 -0
- package/dist/ui/screenspace.d.ts.map +1 -0
- package/dist/ui/screenspace.js +215 -0
- package/dist/ui/screenspace.js.map +1 -0
- package/dist/ui/ui.d.ts +209 -0
- package/dist/ui/ui.d.ts.map +1 -0
- package/dist/ui/ui.js +185 -0
- package/dist/ui/ui.js.map +1 -0
- package/dist/vendor/basis/README.md +46 -0
- package/dist/vendor/basis/basis_transcoder.js +19 -0
- package/dist/vendor/basis/basis_transcoder.wasm +0 -0
- package/dist/vendor/draco/README.md +32 -0
- package/dist/vendor/draco/draco_decoder.js +34 -0
- package/dist/vendor/draco/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/draco_encoder.js +33 -0
- package/dist/vendor/draco/draco_wasm_wrapper.js +117 -0
- package/dist/vendor/draco/gltf/draco_decoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_decoder.wasm +0 -0
- package/dist/vendor/draco/gltf/draco_encoder.js +33 -0
- package/dist/vendor/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/visibility/index.d.ts +8 -0
- package/dist/visibility/index.d.ts.map +1 -0
- package/dist/visibility/visibility.d.ts +37 -0
- package/dist/visibility/visibility.d.ts.map +1 -0
- package/dist/visibility/visibility.js +52 -0
- package/dist/visibility/visibility.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
declare const EnvironmentSystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
|
|
8
|
+
domeTextures: {
|
|
9
|
+
required: import("elics").Component<{}>[];
|
|
10
|
+
};
|
|
11
|
+
domeGradients: {
|
|
12
|
+
required: import("elics").Component<{}>[];
|
|
13
|
+
};
|
|
14
|
+
iblTextures: {
|
|
15
|
+
required: import("elics").Component<{}>[];
|
|
16
|
+
};
|
|
17
|
+
iblGradients: {
|
|
18
|
+
required: import("elics").Component<{}>[];
|
|
19
|
+
};
|
|
20
|
+
}, import("../ecs/world.js").World, import("../ecs/system.js").System<import("elics").SystemSchema, {
|
|
21
|
+
domeTextures: {
|
|
22
|
+
required: import("elics").Component<{}>[];
|
|
23
|
+
};
|
|
24
|
+
domeGradients: {
|
|
25
|
+
required: import("elics").Component<{}>[];
|
|
26
|
+
};
|
|
27
|
+
iblTextures: {
|
|
28
|
+
required: import("elics").Component<{}>[];
|
|
29
|
+
};
|
|
30
|
+
iblGradients: {
|
|
31
|
+
required: import("elics").Component<{}>[];
|
|
32
|
+
};
|
|
33
|
+
}>>;
|
|
34
|
+
/**
|
|
35
|
+
* Unified background and image‑based lighting system.
|
|
36
|
+
*
|
|
37
|
+
* @remarks
|
|
38
|
+
* - Background is driven by {@link DomeTexture} (HDR/LDR equirect) or {@link DomeGradient} (procedural sphere) and writes to `scene.background`.
|
|
39
|
+
* - IBL is driven by {@link IBLTexture} ("room" or HDR/LDR equirect via PMREM) or {@link IBLGradient} (PMREM of a gradient scene) and writes to `scene.environment`.
|
|
40
|
+
* - Rotation and intensity hooks forward to `scene.backgroundRotation`, `scene.backgroundIntensity`, and `scene.environmentRotation`, `scene.environmentIntensity`.
|
|
41
|
+
* - In immersive AR, background visuals are hidden while environment lighting remains active.
|
|
42
|
+
* - PMREM targets are regenerated only when sources change; the dome mesh and geometry are reused.
|
|
43
|
+
*
|
|
44
|
+
* @category Environment & Lighting
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* // Background: HDR skybox; IBL: Room environment
|
|
48
|
+
* const root = world.activeLevel!.value;
|
|
49
|
+
* root.addComponent(DomeTexture, { src: '/envs/sky.hdr', intensity: 0.9 });
|
|
50
|
+
* root.addComponent(IBLTexture, { src: 'room', intensity: 1.2 });
|
|
51
|
+
*
|
|
52
|
+
* // Rotate background 45° around Y; rotate IBL 90°
|
|
53
|
+
* root.setValue(DomeTexture, 'rotation', [0, Math.PI / 4, 0]);
|
|
54
|
+
* root.setValue(IBLTexture, 'rotation', [0, Math.PI / 2, 0]);
|
|
55
|
+
* root.setValue(DomeTexture, '_needsUpdate', true);
|
|
56
|
+
* root.setValue(IBLTexture, '_needsUpdate', true);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class EnvironmentSystem extends EnvironmentSystem_base {
|
|
60
|
+
private state;
|
|
61
|
+
private pmrem;
|
|
62
|
+
private gradientGeometry?;
|
|
63
|
+
private tmpColor;
|
|
64
|
+
init(): void;
|
|
65
|
+
update(): void;
|
|
66
|
+
private processBackground;
|
|
67
|
+
private hasDomeTextureBackgroundChanged;
|
|
68
|
+
private updateDomeTextureBackground;
|
|
69
|
+
private updateBackgroundProps;
|
|
70
|
+
private updateDomeGradient;
|
|
71
|
+
private processIBL;
|
|
72
|
+
private hasIBLTextureChanged;
|
|
73
|
+
private updateIBLTexture;
|
|
74
|
+
private updateIBLProps;
|
|
75
|
+
private updateIBLGradient;
|
|
76
|
+
private setEnvironment;
|
|
77
|
+
private updateBackgroundForXRMode;
|
|
78
|
+
private ensureGradientDome;
|
|
79
|
+
private clearGradientDome;
|
|
80
|
+
}
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=environment-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-system.d.ts","sourceRoot":"","sources":["../../src/environment/environment-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAkB,SAAQ,sBAKrC;IACA,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAsB;IAEtC,IAAI,IAAI,IAAI;IAiBZ,MAAM,IAAI,IAAI;YA4CA,iBAAiB;IAwB/B,OAAO,CAAC,+BAA+B;YASzB,2BAA2B;IAoBzC,OAAO,CAAC,qBAAqB;YAWf,kBAAkB;YA4BlB,UAAU;IAwBxB,OAAO,CAAC,oBAAoB;YASd,gBAAgB;IAwB9B,OAAO,CAAC,cAAc;YAaR,iBAAiB;IA+C/B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,yBAAyB;IAoCjC,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,iBAAiB;CAW1B"}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';
|
|
2
|
+
import { AssetManager } from '../asset/asset-manager.js';
|
|
3
|
+
import { CacheManager } from '../asset/cache-manager.js';
|
|
4
|
+
import { createSystem } from '../ecs/system.js';
|
|
5
|
+
import '../ecs/world.js';
|
|
6
|
+
import 'elics';
|
|
7
|
+
import '../ecs/component-registry.js';
|
|
8
|
+
import '../level/level-system.js';
|
|
9
|
+
import '../level/level-tag.js';
|
|
10
|
+
import '@iwsdk/glxf';
|
|
11
|
+
import '@pmndrs/uikit';
|
|
12
|
+
import '@preact/signals-core';
|
|
13
|
+
import { Color, PMREMGenerator, EquirectangularReflectionMapping, Mesh, SphereGeometry, BackSide } from 'three';
|
|
14
|
+
import '../ui/ui.js';
|
|
15
|
+
import '../ui/follow.js';
|
|
16
|
+
import '../ui/screenspace.js';
|
|
17
|
+
import { LevelRoot } from '../level/level-root.js';
|
|
18
|
+
import '../runtime/three.js';
|
|
19
|
+
import { DomeGradient } from './dome-gradient.js';
|
|
20
|
+
import { DomeTexture } from './dome-texture.js';
|
|
21
|
+
import { GradientEnvironment, createGradientMaterial } from './gradient-environment.js';
|
|
22
|
+
import { IBLGradient } from './ibl-gradient.js';
|
|
23
|
+
import { IBLTexture } from './ibl-texture.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
27
|
+
*
|
|
28
|
+
* This source code is licensed under the MIT license found in the
|
|
29
|
+
* LICENSE file in the root directory of this source tree.
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Unified background and image‑based lighting system.
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* - Background is driven by {@link DomeTexture} (HDR/LDR equirect) or {@link DomeGradient} (procedural sphere) and writes to `scene.background`.
|
|
36
|
+
* - IBL is driven by {@link IBLTexture} ("room" or HDR/LDR equirect via PMREM) or {@link IBLGradient} (PMREM of a gradient scene) and writes to `scene.environment`.
|
|
37
|
+
* - Rotation and intensity hooks forward to `scene.backgroundRotation`, `scene.backgroundIntensity`, and `scene.environmentRotation`, `scene.environmentIntensity`.
|
|
38
|
+
* - In immersive AR, background visuals are hidden while environment lighting remains active.
|
|
39
|
+
* - PMREM targets are regenerated only when sources change; the dome mesh and geometry are reused.
|
|
40
|
+
*
|
|
41
|
+
* @category Environment & Lighting
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* // Background: HDR skybox; IBL: Room environment
|
|
45
|
+
* const root = world.activeLevel!.value;
|
|
46
|
+
* root.addComponent(DomeTexture, { src: '/envs/sky.hdr', intensity: 0.9 });
|
|
47
|
+
* root.addComponent(IBLTexture, { src: 'room', intensity: 1.2 });
|
|
48
|
+
*
|
|
49
|
+
* // Rotate background 45° around Y; rotate IBL 90°
|
|
50
|
+
* root.setValue(DomeTexture, 'rotation', [0, Math.PI / 4, 0]);
|
|
51
|
+
* root.setValue(IBLTexture, 'rotation', [0, Math.PI / 2, 0]);
|
|
52
|
+
* root.setValue(DomeTexture, '_needsUpdate', true);
|
|
53
|
+
* root.setValue(IBLTexture, '_needsUpdate', true);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
class EnvironmentSystem extends createSystem({
|
|
57
|
+
domeTextures: { required: [DomeTexture, LevelRoot] },
|
|
58
|
+
domeGradients: { required: [DomeGradient, LevelRoot] },
|
|
59
|
+
iblTextures: { required: [IBLTexture, LevelRoot] },
|
|
60
|
+
iblGradients: { required: [IBLGradient, LevelRoot] },
|
|
61
|
+
}) {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this.state = {};
|
|
65
|
+
this.tmpColor = new Color();
|
|
66
|
+
}
|
|
67
|
+
init() {
|
|
68
|
+
this.pmrem = new PMREMGenerator(this.renderer);
|
|
69
|
+
this.cleanupFuncs.push(() => {
|
|
70
|
+
var _a, _b;
|
|
71
|
+
this.pmrem.dispose();
|
|
72
|
+
(_a = this.state.environmentTarget) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
73
|
+
this.state.environmentTarget = undefined;
|
|
74
|
+
this.clearGradientDome();
|
|
75
|
+
(_b = this.gradientGeometry) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
76
|
+
this.gradientGeometry = undefined;
|
|
77
|
+
});
|
|
78
|
+
// XR background toggle
|
|
79
|
+
this.cleanupFuncs.push(this.visibilityState.subscribe(() => this.updateBackgroundForXRMode()));
|
|
80
|
+
}
|
|
81
|
+
update() {
|
|
82
|
+
var _a;
|
|
83
|
+
// Choose background source: DomeTexture > DomeGradient
|
|
84
|
+
let backgroundEntity;
|
|
85
|
+
for (const e of this.queries.domeTextures.entities) {
|
|
86
|
+
backgroundEntity = e;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (!backgroundEntity) {
|
|
90
|
+
for (const e of this.queries.domeGradients.entities) {
|
|
91
|
+
backgroundEntity = e;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (backgroundEntity) {
|
|
96
|
+
this.processBackground(backgroundEntity);
|
|
97
|
+
}
|
|
98
|
+
// Choose IBL source: IBLTexture > IBLGradient
|
|
99
|
+
let iblEntity;
|
|
100
|
+
for (const e of this.queries.iblTextures.entities) {
|
|
101
|
+
iblEntity = e;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (!iblEntity) {
|
|
105
|
+
for (const e of this.queries.iblGradients.entities) {
|
|
106
|
+
iblEntity = e;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (iblEntity) {
|
|
111
|
+
this.processIBL(iblEntity);
|
|
112
|
+
}
|
|
113
|
+
// Keep gradient dome centered and sized
|
|
114
|
+
if (this.state.gradientDome) {
|
|
115
|
+
this.state.gradientDome.position.copy(this.camera.position);
|
|
116
|
+
const r = Math.max(1e-3, (((_a = this.camera) === null || _a === void 0 ? void 0 : _a.far) || 1000) * 0.95);
|
|
117
|
+
this.state.gradientDome.scale.setScalar(r);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Background handling
|
|
121
|
+
async processBackground(entity) {
|
|
122
|
+
try {
|
|
123
|
+
if (entity.hasComponent(DomeTexture)) {
|
|
124
|
+
const needs = entity.getValue(DomeTexture, '_needsUpdate');
|
|
125
|
+
if (needs) {
|
|
126
|
+
const changed = this.hasDomeTextureBackgroundChanged(entity);
|
|
127
|
+
if (changed) {
|
|
128
|
+
await this.updateDomeTextureBackground(entity);
|
|
129
|
+
}
|
|
130
|
+
this.updateBackgroundProps(entity);
|
|
131
|
+
entity.setValue(DomeTexture, '_needsUpdate', false);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (entity.hasComponent(DomeGradient)) {
|
|
135
|
+
const needs = entity.getValue(DomeGradient, '_needsUpdate');
|
|
136
|
+
if (needs) {
|
|
137
|
+
await this.updateDomeGradient(entity, /*forIBL*/ false);
|
|
138
|
+
entity.setValue(DomeGradient, '_needsUpdate', false);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
console.error('[EnvironmentSystem] Failed background update:', e);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
hasDomeTextureBackgroundChanged(entity) {
|
|
147
|
+
const src = entity.getValue(DomeTexture, 'src') || '';
|
|
148
|
+
const changed = src !== this.state.backgroundSource;
|
|
149
|
+
if (changed) {
|
|
150
|
+
this.state.backgroundSource = src;
|
|
151
|
+
}
|
|
152
|
+
return changed;
|
|
153
|
+
}
|
|
154
|
+
async updateDomeTextureBackground(entity) {
|
|
155
|
+
const src = entity.getValue(DomeTexture, 'src') || '';
|
|
156
|
+
if (!src) {
|
|
157
|
+
this.scene.background = null;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const lower = src.toLowerCase();
|
|
161
|
+
const isHDR = lower.endsWith('.hdr') || lower.endsWith('.exr');
|
|
162
|
+
const url = CacheManager.resolveUrl(src);
|
|
163
|
+
const texture = isHDR
|
|
164
|
+
? await AssetManager.loadHDRTexture(url)
|
|
165
|
+
: await AssetManager.loadTexture(url);
|
|
166
|
+
this.state.backgroundTexture = texture;
|
|
167
|
+
// For LDR equirect backgrounds, ensure world-locked mapping; HDR/EXR already mapped by loader
|
|
168
|
+
if (!isHDR) {
|
|
169
|
+
texture.mapping = EquirectangularReflectionMapping;
|
|
170
|
+
}
|
|
171
|
+
this.scene.background = texture;
|
|
172
|
+
}
|
|
173
|
+
updateBackgroundProps(entity) {
|
|
174
|
+
var _a, _b, _c;
|
|
175
|
+
const blurriness = (_a = entity.getValue(DomeTexture, 'blurriness')) !== null && _a !== void 0 ? _a : 0;
|
|
176
|
+
const intensity = (_b = entity.getValue(DomeTexture, 'intensity')) !== null && _b !== void 0 ? _b : 1;
|
|
177
|
+
const rot = entity.getVectorView(DomeTexture, 'rotation');
|
|
178
|
+
this.scene.backgroundBlurriness = blurriness;
|
|
179
|
+
this.scene.backgroundIntensity = intensity;
|
|
180
|
+
if (rot) {
|
|
181
|
+
(_c = this.scene.backgroundRotation) === null || _c === void 0 ? void 0 : _c.set(rot[0] || 0, rot[1] || 0, rot[2] || 0);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async updateDomeGradient(entity, forIBL) {
|
|
185
|
+
const skyV = entity.getVectorView(DomeGradient, 'sky');
|
|
186
|
+
const equatorV = entity.getVectorView(DomeGradient, 'equator');
|
|
187
|
+
const groundV = entity.getVectorView(DomeGradient, 'ground');
|
|
188
|
+
const intensity = entity.getValue(DomeGradient, 'intensity') || 1.0;
|
|
189
|
+
const skyHex = this.tmpColor.setRGB(skyV[0], skyV[1], skyV[2]).getHex();
|
|
190
|
+
const equatorHex = this.tmpColor
|
|
191
|
+
.setRGB(equatorV[0], equatorV[1], equatorV[2])
|
|
192
|
+
.getHex();
|
|
193
|
+
const groundHex = this.tmpColor
|
|
194
|
+
.setRGB(groundV[0], groundV[1], groundV[2])
|
|
195
|
+
.getHex();
|
|
196
|
+
if (!forIBL) {
|
|
197
|
+
// Background gradient dome mesh
|
|
198
|
+
this.ensureGradientDome(skyHex, equatorHex, groundHex, intensity);
|
|
199
|
+
// Ensure correct visibility for AR sessions (hide in AR)
|
|
200
|
+
if (this.state.gradientDome) {
|
|
201
|
+
this.state.gradientDome.visible = !this.state.isAR;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// IBL handling
|
|
206
|
+
async processIBL(entity) {
|
|
207
|
+
try {
|
|
208
|
+
if (entity.hasComponent(IBLTexture)) {
|
|
209
|
+
const needs = entity.getValue(IBLTexture, '_needsUpdate');
|
|
210
|
+
if (needs) {
|
|
211
|
+
const changed = this.hasIBLTextureChanged(entity);
|
|
212
|
+
if (changed) {
|
|
213
|
+
await this.updateIBLTexture(entity);
|
|
214
|
+
}
|
|
215
|
+
this.updateIBLProps(entity);
|
|
216
|
+
entity.setValue(IBLTexture, '_needsUpdate', false);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else if (entity.hasComponent(IBLGradient)) {
|
|
220
|
+
const needs = entity.getValue(IBLGradient, '_needsUpdate');
|
|
221
|
+
if (needs) {
|
|
222
|
+
await this.updateIBLGradient(entity);
|
|
223
|
+
entity.setValue(IBLGradient, '_needsUpdate', false);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
console.error('[EnvironmentSystem] Failed IBL update:', e);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
hasIBLTextureChanged(entity) {
|
|
232
|
+
const src = entity.getValue(IBLTexture, 'src') || '';
|
|
233
|
+
const changed = src !== this.state.environmentSource;
|
|
234
|
+
if (changed) {
|
|
235
|
+
this.state.environmentSource = src;
|
|
236
|
+
}
|
|
237
|
+
return changed;
|
|
238
|
+
}
|
|
239
|
+
async updateIBLTexture(entity) {
|
|
240
|
+
var _a;
|
|
241
|
+
const src = (entity.getValue(IBLTexture, 'src') || '').trim();
|
|
242
|
+
if (!src) {
|
|
243
|
+
this.setEnvironment(null);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (src === 'room') {
|
|
247
|
+
// Build RoomEnvironment scene and PMREM it
|
|
248
|
+
const room = new RoomEnvironment();
|
|
249
|
+
const target = this.pmrem.fromScene(room);
|
|
250
|
+
(_a = room.dispose) === null || _a === void 0 ? void 0 : _a.call(room);
|
|
251
|
+
this.setEnvironment(target);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const lower2 = src.toLowerCase();
|
|
255
|
+
const isHDR = lower2.endsWith('.hdr') || lower2.endsWith('.exr');
|
|
256
|
+
const url = CacheManager.resolveUrl(src);
|
|
257
|
+
const tex = isHDR
|
|
258
|
+
? await AssetManager.loadHDRTexture(url)
|
|
259
|
+
: await AssetManager.loadTexture(url);
|
|
260
|
+
const target = this.pmrem.fromEquirectangular(tex);
|
|
261
|
+
this.setEnvironment(target);
|
|
262
|
+
}
|
|
263
|
+
updateIBLProps(entity) {
|
|
264
|
+
var _a, _b;
|
|
265
|
+
const intensity = (_a = entity.getValue(IBLTexture, 'intensity')) !== null && _a !== void 0 ? _a : 1;
|
|
266
|
+
const rot = entity.getVectorView(IBLTexture, 'rotation');
|
|
267
|
+
this.scene.environmentIntensity = intensity;
|
|
268
|
+
if (rot) {
|
|
269
|
+
(_b = this.scene.environmentRotation) === null || _b === void 0 ? void 0 : _b.set(rot[0] || 0, rot[1] || 0, rot[2] || 0);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async updateIBLGradient(entity) {
|
|
273
|
+
var _a;
|
|
274
|
+
const skyV = entity.getVectorView(IBLGradient, 'sky');
|
|
275
|
+
const equatorV = entity.getVectorView(IBLGradient, 'equator');
|
|
276
|
+
const groundV = entity.getVectorView(IBLGradient, 'ground');
|
|
277
|
+
const intensity = entity.getValue(IBLGradient, 'intensity') || 1.0;
|
|
278
|
+
const skyHex = new Color().setRGB(skyV[0], skyV[1], skyV[2]).getHex();
|
|
279
|
+
const equatorHex = new Color(equatorV[0], equatorV[1], equatorV[2]).getHex();
|
|
280
|
+
const groundHex = new Color(groundV[0], groundV[1], groundV[2]).getHex();
|
|
281
|
+
let gradientScene = this.state.gradientEnvironmentScene;
|
|
282
|
+
if (!gradientScene) {
|
|
283
|
+
gradientScene = new GradientEnvironment(skyHex, equatorHex, groundHex, intensity);
|
|
284
|
+
this.state.gradientEnvironmentScene = gradientScene;
|
|
285
|
+
// Cache mesh for uniform updates
|
|
286
|
+
this.state.gradientEnvironmentMesh = gradientScene.children.find((o) => o instanceof Mesh);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
const mat = (_a = this.state.gradientEnvironmentMesh) === null || _a === void 0 ? void 0 : _a.material;
|
|
290
|
+
if (mat) {
|
|
291
|
+
mat.uniforms.skyColor.value.setHex(skyHex).multiplyScalar(intensity);
|
|
292
|
+
mat.uniforms.equatorColor.value
|
|
293
|
+
.setHex(equatorHex)
|
|
294
|
+
.multiplyScalar(intensity);
|
|
295
|
+
mat.uniforms.groundColor.value
|
|
296
|
+
.setHex(groundHex)
|
|
297
|
+
.multiplyScalar(intensity);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const target = this.pmrem.fromScene(gradientScene);
|
|
301
|
+
this.setEnvironment(target);
|
|
302
|
+
// Apply IBL intensity for gradient as well
|
|
303
|
+
this.scene.environmentIntensity = intensity;
|
|
304
|
+
}
|
|
305
|
+
setEnvironment(target) {
|
|
306
|
+
var _a;
|
|
307
|
+
(_a = this.state.environmentTarget) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
308
|
+
this.state.environmentTarget = undefined;
|
|
309
|
+
if (target) {
|
|
310
|
+
this.state.environmentTarget = target;
|
|
311
|
+
this.scene.environment = target.texture;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
this.scene.environment = null;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// XR background handling
|
|
318
|
+
updateBackgroundForXRMode() {
|
|
319
|
+
var _a, _b, _c;
|
|
320
|
+
const session = (_c = (_b = (_a = this.xrManager).getSession) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : this.world.session;
|
|
321
|
+
const blend = session === null || session === void 0 ? void 0 : session.environmentBlendMode;
|
|
322
|
+
const isAR = blend === 'alpha-blend' ||
|
|
323
|
+
blend === 'additive' ||
|
|
324
|
+
blend === 'subtractive';
|
|
325
|
+
if (isAR === this.state.isAR) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
this.state.isAR = isAR;
|
|
329
|
+
if (isAR) {
|
|
330
|
+
if (this.scene.background !== null &&
|
|
331
|
+
this.state.savedBackground === undefined) {
|
|
332
|
+
this.state.savedBackground = this.scene.background;
|
|
333
|
+
this.scene.background = null;
|
|
334
|
+
}
|
|
335
|
+
// Hide procedural gradient dome in AR as well
|
|
336
|
+
if (this.state.gradientDome) {
|
|
337
|
+
this.state.gradientDome.visible = false;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
else if (this.state.savedBackground !== undefined) {
|
|
341
|
+
this.scene.background = this.state.savedBackground;
|
|
342
|
+
this.state.savedBackground = undefined;
|
|
343
|
+
// Restore gradient dome visibility when exiting AR
|
|
344
|
+
if (this.state.gradientDome) {
|
|
345
|
+
this.state.gradientDome.visible = true;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Gradient dome mesh utilities (background)
|
|
350
|
+
ensureGradientDome(skyHex, equatorHex, groundHex, intensity) {
|
|
351
|
+
var _a;
|
|
352
|
+
if (!this.gradientGeometry) {
|
|
353
|
+
this.gradientGeometry = new SphereGeometry(1, 32, 15);
|
|
354
|
+
}
|
|
355
|
+
if (!this.state.gradientDome) {
|
|
356
|
+
const material = createGradientMaterial(skyHex, equatorHex, groundHex, intensity, BackSide);
|
|
357
|
+
const dome = new Mesh(this.gradientGeometry, material);
|
|
358
|
+
dome.scale.setScalar(Math.max(1e-3, (((_a = this.camera) === null || _a === void 0 ? void 0 : _a.far) || 1000) * 0.95));
|
|
359
|
+
dome.renderOrder = -1e9;
|
|
360
|
+
dome.frustumCulled = false;
|
|
361
|
+
this.scene.add(dome);
|
|
362
|
+
this.state.gradientDome = dome;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
const mat = this.state.gradientDome.material;
|
|
366
|
+
mat.uniforms.skyColor.value.setHex(skyHex).multiplyScalar(intensity);
|
|
367
|
+
mat.uniforms.equatorColor.value
|
|
368
|
+
.setHex(equatorHex)
|
|
369
|
+
.multiplyScalar(intensity);
|
|
370
|
+
mat.uniforms.groundColor.value
|
|
371
|
+
.setHex(groundHex)
|
|
372
|
+
.multiplyScalar(intensity);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
clearGradientDome() {
|
|
376
|
+
if (this.state.gradientDome) {
|
|
377
|
+
this.state.gradientDome.removeFromParent();
|
|
378
|
+
this.state.gradientDome.material.dispose();
|
|
379
|
+
this.state.gradientDome = undefined;
|
|
380
|
+
}
|
|
381
|
+
if (this.state.gradientEnvironmentScene) {
|
|
382
|
+
this.state.gradientEnvironmentScene.dispose();
|
|
383
|
+
this.state.gradientEnvironmentScene = undefined;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export { EnvironmentSystem };
|
|
389
|
+
//# sourceMappingURL=environment-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-system.js","sources":["../../src/environment/environment-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { BackSide, FrontSide, Scene, ShaderMaterial } from '../runtime/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Gradient shader uniforms and code used for background domes and environments.
|
|
10
|
+
* @category Environment & Lighting
|
|
11
|
+
*/
|
|
12
|
+
export declare const GRADIENT_SHADER: {
|
|
13
|
+
vertexShader: string;
|
|
14
|
+
fragmentShader: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Create a gradient material with Unity‑style sky/equator/ground colors.
|
|
18
|
+
* @param skyHex Sky color as hex.
|
|
19
|
+
* @param equatorHex Equator color as hex.
|
|
20
|
+
* @param groundHex Ground color as hex.
|
|
21
|
+
* @param intensity Intensity multiplier applied to all colors.
|
|
22
|
+
* @param side Material side (BackSide for background dome; FrontSide for env scene).
|
|
23
|
+
* @category Environment & Lighting
|
|
24
|
+
*/
|
|
25
|
+
export declare function createGradientMaterial(skyHex: number, equatorHex: number, groundHex: number, intensity: number, side?: typeof BackSide | typeof FrontSide): ShaderMaterial;
|
|
26
|
+
/**
|
|
27
|
+
* A Scene containing a gradient sphere for PMREM processing.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* Uses the same shader as the background dome to ensure coherent lighting.
|
|
31
|
+
* @category Environment & Lighting
|
|
32
|
+
*/
|
|
33
|
+
export declare class GradientEnvironment extends Scene {
|
|
34
|
+
constructor(skyHex?: number, equatorHex?: number, groundHex?: number, intensity?: number);
|
|
35
|
+
dispose(): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=gradient-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-environment.d.ts","sourceRoot":"","sources":["../../src/environment/gradient-environment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EAER,SAAS,EAET,KAAK,EACL,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CA8B3B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,OAAO,QAAQ,GAAG,OAAO,SAAqB,GACnD,cAAc,CAahB;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAE1C,MAAM,GAAE,MAAiB,EACzB,UAAU,GAAE,MAAiB,EAC7B,SAAS,GAAE,MAAiB,EAC5B,SAAS,GAAE,MAAY;IAkBzB,OAAO,IAAI,IAAI;CAchB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import '../runtime/three.js';
|
|
2
|
+
import { FrontSide, Scene, SphereGeometry, Mesh, ShaderMaterial, Color, BackSide } from 'three';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Gradient shader uniforms and code used for background domes and environments.
|
|
12
|
+
* @category Environment & Lighting
|
|
13
|
+
*/
|
|
14
|
+
const GRADIENT_SHADER = {
|
|
15
|
+
vertexShader: /* glsl */ `
|
|
16
|
+
varying vec3 vWorldPosition;
|
|
17
|
+
void main() {
|
|
18
|
+
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
19
|
+
vWorldPosition = worldPosition.xyz;
|
|
20
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
21
|
+
}
|
|
22
|
+
`,
|
|
23
|
+
fragmentShader: /* glsl */ `
|
|
24
|
+
uniform vec3 skyColor;
|
|
25
|
+
uniform vec3 equatorColor;
|
|
26
|
+
uniform vec3 groundColor;
|
|
27
|
+
varying vec3 vWorldPosition;
|
|
28
|
+
|
|
29
|
+
void main() {
|
|
30
|
+
float h = normalize(vWorldPosition).y;
|
|
31
|
+
vec3 color;
|
|
32
|
+
|
|
33
|
+
if (h > 0.0) {
|
|
34
|
+
// Sky to equator interpolation
|
|
35
|
+
color = mix(equatorColor, skyColor, h);
|
|
36
|
+
} else {
|
|
37
|
+
// Equator to ground interpolation
|
|
38
|
+
color = mix(equatorColor, groundColor, -h);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
gl_FragColor = vec4(color, 1.0);
|
|
42
|
+
}
|
|
43
|
+
`,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Create a gradient material with Unity‑style sky/equator/ground colors.
|
|
47
|
+
* @param skyHex Sky color as hex.
|
|
48
|
+
* @param equatorHex Equator color as hex.
|
|
49
|
+
* @param groundHex Ground color as hex.
|
|
50
|
+
* @param intensity Intensity multiplier applied to all colors.
|
|
51
|
+
* @param side Material side (BackSide for background dome; FrontSide for env scene).
|
|
52
|
+
* @category Environment & Lighting
|
|
53
|
+
*/
|
|
54
|
+
function createGradientMaterial(skyHex, equatorHex, groundHex, intensity, side = FrontSide) {
|
|
55
|
+
return new ShaderMaterial({
|
|
56
|
+
uniforms: {
|
|
57
|
+
skyColor: { value: new Color(skyHex).multiplyScalar(intensity) },
|
|
58
|
+
equatorColor: { value: new Color(equatorHex).multiplyScalar(intensity) },
|
|
59
|
+
groundColor: { value: new Color(groundHex).multiplyScalar(intensity) },
|
|
60
|
+
},
|
|
61
|
+
vertexShader: GRADIENT_SHADER.vertexShader,
|
|
62
|
+
fragmentShader: GRADIENT_SHADER.fragmentShader,
|
|
63
|
+
side,
|
|
64
|
+
depthWrite: side === BackSide ? false : true,
|
|
65
|
+
depthTest: side === BackSide ? false : true,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A Scene containing a gradient sphere for PMREM processing.
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* Uses the same shader as the background dome to ensure coherent lighting.
|
|
73
|
+
* @category Environment & Lighting
|
|
74
|
+
*/
|
|
75
|
+
class GradientEnvironment extends Scene {
|
|
76
|
+
constructor(skyHex = 0x87ceeb, equatorHex = 0xffa500, groundHex = 0x228b22, intensity = 1.0) {
|
|
77
|
+
super();
|
|
78
|
+
// Create gradient sphere using shared gradient material
|
|
79
|
+
const geometry = new SphereGeometry(100, 32, 15);
|
|
80
|
+
const material = createGradientMaterial(skyHex, equatorHex, groundHex, intensity, BackSide);
|
|
81
|
+
const gradientSphere = new Mesh(geometry, material);
|
|
82
|
+
this.add(gradientSphere);
|
|
83
|
+
}
|
|
84
|
+
dispose() {
|
|
85
|
+
const resources = new Set();
|
|
86
|
+
this.traverse((object) => {
|
|
87
|
+
if (object.isMesh) {
|
|
88
|
+
resources.add(object.geometry);
|
|
89
|
+
resources.add(object.material);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
for (const resource of resources) {
|
|
93
|
+
resource.dispose();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { GRADIENT_SHADER, GradientEnvironment, createGradientMaterial };
|
|
99
|
+
//# sourceMappingURL=gradient-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-environment.js","sources":["../../src/environment/gradient-environment.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;;;;AAKG;AAYH;;;AAGG;AACI,MAAM,eAAe,GAAG;IAC7B,YAAY,aAAa;;;;;;;AAOxB,EAAA,CAAA;IACD,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;AAoB1B,EAAA,CAAA;;AAGH;;;;;;;;AAQG;AACG,SAAU,sBAAsB,CACpC,MAAc,EACd,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,IAAA,GAA2C,SAAS,EAAA;IAEpD,OAAO,IAAI,cAAc,CAAC;AACxB,QAAA,QAAQ,EAAE;AACR,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAChE,YAAA,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACxE,YAAA,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACvE,SAAA;QACD,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,cAAc,EAAE,eAAe,CAAC,cAAc;QAC9C,IAAI;QACJ,UAAU,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;QAC5C,SAAS,EAAE,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI;AAC5C,KAAA,CAAC;AACJ;AAEA;;;;;;AAMG;AACG,MAAO,mBAAoB,SAAQ,KAAK,CAAA;IAC5C,WAAA,CACE,MAAA,GAAiB,QAAQ,EACzB,UAAA,GAAqB,QAAQ,EAC7B,SAAA,GAAoB,QAAQ,EAC5B,SAAA,GAAoB,GAAG,EAAA;AAEvB,QAAA,KAAK,EAAE;;QAGP,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CACrC,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,CACT;QAED,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1B;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAO;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAW,KAAI;AAC5B,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9B,gBAAA,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,QAAQ,CAAC,OAAO,EAAE;QACpB;IACF;AACD;;;;"}
|