@pascal-app/viewer 1.0.7 → 1.1.1
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/README.md +209 -19
- package/dist/components/viewer/drone-controller.d.ts.map +1 -1
- package/dist/components/viewer/drone-controller.js +1 -5
- package/dist/components/viewer/first-person/build-collider-world.d.ts +14 -0
- package/dist/components/viewer/first-person/build-collider-world.d.ts.map +1 -0
- package/dist/components/viewer/first-person/build-collider-world.js +426 -0
- package/dist/components/viewer/first-person/ground-holes.d.ts +22 -0
- package/dist/components/viewer/first-person/ground-holes.d.ts.map +1 -0
- package/dist/components/viewer/first-person/ground-holes.js +116 -0
- package/dist/components/viewer/first-person/mechanism-targets.d.ts +27 -0
- package/dist/components/viewer/first-person/mechanism-targets.d.ts.map +1 -0
- package/dist/components/viewer/first-person/mechanism-targets.js +79 -0
- package/dist/components/viewer/first-person/terrain-collider.d.ts +32 -0
- package/dist/components/viewer/first-person/terrain-collider.d.ts.map +1 -0
- package/dist/components/viewer/first-person/terrain-collider.js +175 -0
- package/dist/components/viewer/glb-replace-instances.d.ts +6 -3
- package/dist/components/viewer/glb-replace-instances.d.ts.map +1 -1
- package/dist/components/viewer/glb-replace-instances.js +5 -4
- package/dist/components/viewer/glb-scene.d.ts +3 -1
- package/dist/components/viewer/glb-scene.d.ts.map +1 -1
- package/dist/components/viewer/glb-scene.js +2 -1
- package/dist/components/viewer/glb-walkthrough-controller.d.ts +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.js +3 -4
- package/dist/components/viewer/index.d.ts.map +1 -1
- package/dist/components/viewer/index.js +8 -4
- package/dist/components/viewer/live-walkthrough-controller.d.ts +17 -0
- package/dist/components/viewer/live-walkthrough-controller.d.ts.map +1 -0
- package/dist/components/viewer/live-walkthrough-controller.js +1449 -0
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +22 -1
- package/dist/components/viewer/registered-systems.d.ts.map +1 -1
- package/dist/components/viewer/registered-systems.js +2 -2
- package/dist/components/viewer/unsupported-gpu-fallback.d.ts.map +1 -1
- package/dist/components/viewer/unsupported-gpu-fallback.js +21 -1
- package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -1
- package/dist/components/viewer/use-daylight-rooms.js +75 -33
- package/dist/hooks/use-gltf-ktx2.d.ts.map +1 -1
- package/dist/hooks/use-gltf-ktx2.js +2 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/lib/asset-url.d.ts +0 -1
- package/dist/lib/asset-url.d.ts.map +1 -1
- package/dist/lib/asset-url.js +3 -3
- package/dist/lib/daylight/room-context.d.ts.map +1 -1
- package/dist/lib/daylight/room-context.js +3 -2
- package/dist/lib/daylight/room-map.d.ts +149 -0
- package/dist/lib/daylight/room-map.d.ts.map +1 -0
- package/dist/lib/daylight/room-map.js +813 -0
- package/dist/lib/daylight/room-scene.d.ts +4 -2
- package/dist/lib/daylight/room-scene.d.ts.map +1 -1
- package/dist/lib/daylight/room-scene.js +81 -40
- package/dist/lib/daylight/rooms.d.ts +71 -32
- package/dist/lib/daylight/rooms.d.ts.map +1 -1
- package/dist/lib/daylight/rooms.js +371 -286
- package/dist/lib/ktx2-loader.d.ts.map +1 -1
- package/dist/lib/ktx2-loader.js +2 -1
- package/dist/lib/measurement-label.d.ts +4 -0
- package/dist/lib/measurement-label.d.ts.map +1 -0
- package/dist/lib/measurement-label.js +54 -0
- package/dist/lib/measurement-presentation.d.ts +7 -0
- package/dist/lib/measurement-presentation.d.ts.map +1 -0
- package/dist/lib/measurement-presentation.js +14 -0
- package/dist/lib/pointer-events.d.ts.map +1 -1
- package/dist/lib/pointer-events.js +3 -3
- package/dist/lib/texture-reference.d.ts.map +1 -1
- package/dist/lib/texture-reference.js +4 -3
- package/dist/lib/typing-target.d.ts +2 -0
- package/dist/lib/typing-target.d.ts.map +1 -0
- package/dist/lib/typing-target.js +7 -0
- package/dist/lib/viewer-config.d.ts +27 -0
- package/dist/lib/viewer-config.d.ts.map +1 -0
- package/dist/lib/viewer-config.js +23 -0
- package/dist/lib/viewer-preference-storage.d.ts +7 -0
- package/dist/lib/viewer-preference-storage.d.ts.map +1 -0
- package/dist/lib/viewer-preference-storage.js +23 -0
- package/dist/sfx/audio-settings.d.ts +81 -0
- package/dist/sfx/audio-settings.d.ts.map +1 -0
- package/dist/sfx/audio-settings.js +166 -0
- package/dist/sfx/index.d.ts +6 -0
- package/dist/sfx/index.d.ts.map +1 -0
- package/dist/sfx/index.js +5 -0
- package/dist/sfx/interaction-sounds.d.ts +7 -0
- package/dist/sfx/interaction-sounds.d.ts.map +1 -0
- package/dist/sfx/interaction-sounds.js +39 -0
- package/dist/sfx/player.d.ts +31 -0
- package/dist/sfx/player.d.ts.map +1 -0
- package/dist/sfx/player.js +255 -0
- package/dist/sfx/sounds.d.ts +60 -0
- package/dist/sfx/sounds.d.ts.map +1 -0
- package/dist/sfx/sounds.js +25 -0
- package/dist/sfx/use-viewer-ui-sounds.d.ts +8 -0
- package/dist/sfx/use-viewer-ui-sounds.d.ts.map +1 -0
- package/dist/sfx/use-viewer-ui-sounds.js +42 -0
- package/dist/store/use-first-person-hud.d.ts +13 -0
- package/dist/store/use-first-person-hud.d.ts.map +1 -0
- package/dist/store/use-first-person-hud.js +21 -0
- package/dist/store/use-viewer.d.ts +2 -56
- package/dist/store/use-viewer.d.ts.map +1 -1
- package/dist/store/use-viewer.js +3 -1
- package/dist/systems/elevator/elevator-interaction-system.d.ts +16 -2
- package/dist/systems/elevator/elevator-interaction-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-interaction-system.js +41 -8
- package/dist/systems/geometry/geometry-status.d.ts +8 -0
- package/dist/systems/geometry/geometry-status.d.ts.map +1 -0
- package/dist/systems/geometry/geometry-status.js +24 -0
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +134 -78
- package/dist/systems/wall/wall-system.d.ts +11 -0
- package/dist/systems/wall/wall-system.d.ts.map +1 -1
- package/dist/systems/wall/wall-system.js +56 -10
- package/dist/ui/components/action-button.d.ts +14 -0
- package/dist/ui/components/action-button.d.ts.map +1 -0
- package/dist/ui/components/action-button.js +21 -0
- package/dist/ui/components/action-menu-placement.d.ts +7 -0
- package/dist/ui/components/action-menu-placement.d.ts.map +1 -0
- package/dist/ui/components/action-menu-placement.js +10 -0
- package/dist/ui/components/floorplan-compass-button.d.ts +10 -0
- package/dist/ui/components/floorplan-compass-button.d.ts.map +1 -0
- package/dist/ui/components/floorplan-compass-button.js +22 -0
- package/dist/ui/components/follow-pascal-toggle.d.ts +6 -0
- package/dist/ui/components/follow-pascal-toggle.d.ts.map +1 -0
- package/dist/ui/components/follow-pascal-toggle.js +21 -0
- package/dist/ui/components/localized-html.d.ts +9 -0
- package/dist/ui/components/localized-html.d.ts.map +1 -0
- package/dist/ui/components/localized-html.js +16 -0
- package/dist/ui/components/render-settings-menu.d.ts +9 -0
- package/dist/ui/components/render-settings-menu.d.ts.map +1 -0
- package/dist/ui/components/render-settings-menu.js +145 -0
- package/dist/ui/components/rooms/room-highlight.d.ts +10 -0
- package/dist/ui/components/rooms/room-highlight.d.ts.map +1 -0
- package/dist/ui/components/rooms/room-highlight.js +56 -0
- package/dist/ui/components/rooms/room-labels.d.ts +278 -0
- package/dist/ui/components/rooms/room-labels.d.ts.map +1 -0
- package/dist/ui/components/rooms/room-labels.js +1295 -0
- package/dist/ui/components/rooms/viewer-rooms.d.ts +14 -0
- package/dist/ui/components/rooms/viewer-rooms.d.ts.map +1 -0
- package/dist/ui/components/rooms/viewer-rooms.js +123 -0
- package/dist/ui/components/scene-loader.d.ts +18 -0
- package/dist/ui/components/scene-loader.d.ts.map +1 -0
- package/dist/ui/components/scene-loader.js +29 -0
- package/dist/ui/components/sky-control.d.ts +37 -0
- package/dist/ui/components/sky-control.d.ts.map +1 -0
- package/dist/ui/components/sky-control.js +382 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts +4 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.d.ts.map +1 -0
- package/dist/ui/components/use-viewer-camera-navigation-sync.js +117 -0
- package/dist/ui/components/viewer-controls-bar.d.ts +20 -0
- package/dist/ui/components/viewer-controls-bar.d.ts.map +1 -0
- package/dist/ui/components/viewer-controls-bar.js +130 -0
- package/dist/ui/components/viewer-hover-label.d.ts +14 -0
- package/dist/ui/components/viewer-hover-label.d.ts.map +1 -0
- package/dist/ui/components/viewer-hover-label.js +28 -0
- package/dist/ui/components/viewer-scene-header.d.ts +34 -0
- package/dist/ui/components/viewer-scene-header.d.ts.map +1 -0
- package/dist/ui/components/viewer-scene-header.js +92 -0
- package/dist/ui/components/viewer-selection-manager.d.ts +7 -0
- package/dist/ui/components/viewer-selection-manager.d.ts.map +1 -0
- package/dist/ui/components/viewer-selection-manager.js +116 -0
- package/dist/ui/components/viewer-stage-modes.d.ts +7 -0
- package/dist/ui/components/viewer-stage-modes.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage-modes.js +42 -0
- package/dist/ui/components/viewer-stage-switcher.d.ts +10 -0
- package/dist/ui/components/viewer-stage-switcher.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage-switcher.js +16 -0
- package/dist/ui/components/viewer-stage.d.ts +25 -0
- package/dist/ui/components/viewer-stage.d.ts.map +1 -0
- package/dist/ui/components/viewer-stage.js +107 -0
- package/dist/ui/components/walkthrough-hud.d.ts +29 -0
- package/dist/ui/components/walkthrough-hud.d.ts.map +1 -0
- package/dist/ui/components/walkthrough-hud.js +55 -0
- package/dist/ui/floorplan/floorplan-camera-sync.d.ts +22 -0
- package/dist/ui/floorplan/floorplan-camera-sync.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-camera-sync.js +157 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts +61 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-dimension-renderer.js +280 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts +54 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-geometry-renderer.js +317 -0
- package/dist/ui/floorplan/floorplan-label-angle.d.ts +24 -0
- package/dist/ui/floorplan/floorplan-label-angle.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-label-angle.js +60 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.d.ts +18 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-navigation-sync.js +41 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.d.ts +26 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-geometry.js +173 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.d.ts +22 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-navigation.js +41 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.d.ts +8 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview-visibility.js +21 -0
- package/dist/ui/floorplan/floorplan-preview.d.ts +19 -0
- package/dist/ui/floorplan/floorplan-preview.d.ts.map +1 -0
- package/dist/ui/floorplan/floorplan-preview.js +700 -0
- package/dist/ui/hooks/use-mobile.d.ts +2 -0
- package/dist/ui/hooks/use-mobile.d.ts.map +1 -0
- package/dist/ui/hooks/use-mobile.js +14 -0
- package/dist/ui/index.d.ts +49 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +48 -0
- package/dist/ui/lib/below-grade.d.ts +38 -0
- package/dist/ui/lib/below-grade.d.ts.map +1 -0
- package/dist/ui/lib/below-grade.js +102 -0
- package/dist/ui/lib/camera-pose.d.ts +19 -0
- package/dist/ui/lib/camera-pose.d.ts.map +1 -0
- package/dist/ui/lib/camera-pose.js +113 -0
- package/dist/ui/lib/cn.d.ts +3 -0
- package/dist/ui/lib/cn.d.ts.map +1 -0
- package/dist/ui/lib/cn.js +5 -0
- package/dist/ui/lib/level-name.d.ts +10 -0
- package/dist/ui/lib/level-name.d.ts.map +1 -0
- package/dist/ui/lib/level-name.js +33 -0
- package/dist/ui/lib/node-display-label.d.ts +8 -0
- package/dist/ui/lib/node-display-label.d.ts.map +1 -0
- package/dist/ui/lib/node-display-label.js +36 -0
- package/dist/ui/lib/room-area.d.ts +3 -0
- package/dist/ui/lib/room-area.d.ts.map +1 -0
- package/dist/ui/lib/room-area.js +8 -0
- package/dist/ui/lib/room-assembly-overlay.d.ts +46 -0
- package/dist/ui/lib/room-assembly-overlay.d.ts.map +1 -0
- package/dist/ui/lib/room-assembly-overlay.js +222 -0
- package/dist/ui/lib/room-name-messages.d.ts +28 -0
- package/dist/ui/lib/room-name-messages.d.ts.map +1 -0
- package/dist/ui/lib/room-name-messages.js +112 -0
- package/dist/ui/lib/room-selection.d.ts +58 -0
- package/dist/ui/lib/room-selection.d.ts.map +1 -0
- package/dist/ui/lib/room-selection.js +297 -0
- package/dist/ui/lib/scene-theme-name.d.ts +4 -0
- package/dist/ui/lib/scene-theme-name.d.ts.map +1 -0
- package/dist/ui/lib/scene-theme-name.js +22 -0
- package/dist/ui/lib/selection-modifiers.d.ts +20 -0
- package/dist/ui/lib/selection-modifiers.d.ts.map +1 -0
- package/dist/ui/lib/selection-modifiers.js +15 -0
- package/dist/ui/lib/viewer-selection.d.ts +132 -0
- package/dist/ui/lib/viewer-selection.d.ts.map +1 -0
- package/dist/ui/lib/viewer-selection.js +462 -0
- package/dist/ui/lib/zone-content.d.ts +6 -0
- package/dist/ui/lib/zone-content.d.ts.map +1 -0
- package/dist/ui/lib/zone-content.js +96 -0
- package/dist/ui/primitives/button.d.ts +11 -0
- package/dist/ui/primitives/button.d.ts.map +1 -0
- package/dist/ui/primitives/button.js +35 -0
- package/dist/ui/primitives/dropdown-menu.d.ts +26 -0
- package/dist/ui/primitives/dropdown-menu.d.ts.map +1 -0
- package/dist/ui/primitives/dropdown-menu.js +53 -0
- package/dist/ui/primitives/popover.d.ts +8 -0
- package/dist/ui/primitives/popover.d.ts.map +1 -0
- package/dist/ui/primitives/popover.js +17 -0
- package/dist/ui/primitives/switch.d.ts +5 -0
- package/dist/ui/primitives/switch.d.ts.map +1 -0
- package/dist/ui/primitives/switch.js +8 -0
- package/dist/ui/primitives/tooltip.d.ts +8 -0
- package/dist/ui/primitives/tooltip.d.ts.map +1 -0
- package/dist/ui/primitives/tooltip.js +17 -0
- package/dist/ui/store/camera-pose-store.d.ts +17 -0
- package/dist/ui/store/camera-pose-store.d.ts.map +1 -0
- package/dist/ui/store/camera-pose-store.js +15 -0
- package/dist/ui/store/navigation-sync-pose-store.d.ts +26 -0
- package/dist/ui/store/navigation-sync-pose-store.d.ts.map +1 -0
- package/dist/ui/store/navigation-sync-pose-store.js +16 -0
- package/dist/ui/store/use-follow-pascal.d.ts +30 -0
- package/dist/ui/store/use-follow-pascal.d.ts.map +1 -0
- package/dist/ui/store/use-follow-pascal.js +28 -0
- package/dist/ui/theme.css +339 -0
- package/package.json +34 -7
|
@@ -35,8 +35,10 @@ export declare function feedLamps(): RoomLamp[];
|
|
|
35
35
|
export declare function feedLampOn(key: string): boolean | undefined;
|
|
36
36
|
/** The live parametric scene (registry + node data), or null while it has no zones. */
|
|
37
37
|
export declare function liveRoomScene(virtualLampsOn: boolean): RoomSceneInput | null;
|
|
38
|
-
/** Live level objects in the room system's level order (
|
|
39
|
-
export declare function liveLevelObjects(): Object3D[];
|
|
38
|
+
/** Live level objects in the room system's level order (explode offsets, visibility, focus). */
|
|
39
|
+
export declare function liveLevelObjects(): (Object3D | undefined)[];
|
|
40
|
+
/** A baked artifact's level objects in the room system's level order. */
|
|
41
|
+
export declare function bakedLevelObjects(root: Object3D | null): Object3D[];
|
|
40
42
|
/** How open a live door is (0 closed … 1 fully open), the transient state first. */
|
|
41
43
|
export declare function liveDoorOpenness(id: string): number;
|
|
42
44
|
/** A baked artifact's identity tree (levels, zones, covers, walls, openings), or null. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-scene.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/room-scene.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoD,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"room-scene.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/room-scene.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoD,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAMhG,OAAO,KAAK,EAAE,QAAQ,EAAmB,cAAc,EAAY,MAAM,SAAS,CAAA;AAGlF;;;GAGG;AAEH,mGAAmG;AACnG,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAA;IAC3C,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,yFAAyF;IACzF,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3F,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAA;IACrC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAA;CAC5C,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,eAAsB,CAAA;AAU5C,oEAAoE;AACpE,wBAAgB,SAAS,IAAI,QAAQ,EAAE,CAuBtC;AAeD,6CAA6C;AAC7C,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAK3D;AAkCD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA0E5E;AAED,gGAAgG;AAChG,wBAAgB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,CAE3D;AAqBD,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ,EAAE,CAEnE;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAanD;AASD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA8E7F;AAiED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA2CvC;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
|
|
@@ -76,18 +76,35 @@ function meshesOf(root, skip) {
|
|
|
76
76
|
visit(root, true);
|
|
77
77
|
return out;
|
|
78
78
|
}
|
|
79
|
+
/** Every live level, in one stable order: its building and assembled world floor height. */
|
|
80
|
+
function liveLevels() {
|
|
81
|
+
const { nodes } = useScene.getState();
|
|
82
|
+
const elevations = getLevelElevations(nodes);
|
|
83
|
+
const buildings = new Map();
|
|
84
|
+
const ids = [];
|
|
85
|
+
const levels = [];
|
|
86
|
+
for (const node of Object.values(nodes)) {
|
|
87
|
+
if (node?.type !== 'level')
|
|
88
|
+
continue;
|
|
89
|
+
const elevation = elevations.get(node.id);
|
|
90
|
+
const buildingId = elevation?.buildingId ?? null;
|
|
91
|
+
if (!buildings.has(buildingId))
|
|
92
|
+
buildings.set(buildingId, buildings.size);
|
|
93
|
+
const building = buildingId ? nodes[buildingId] : undefined;
|
|
94
|
+
const siteY = building?.type === 'building' ? building.position[1] : 0;
|
|
95
|
+
ids.push(node.id);
|
|
96
|
+
levels.push({ y: siteY + (elevation?.baseY ?? 0), building: buildings.get(buildingId) });
|
|
97
|
+
}
|
|
98
|
+
return { ids, levels };
|
|
99
|
+
}
|
|
79
100
|
/** The live parametric scene (registry + node data), or null while it has no zones. */
|
|
80
101
|
export function liveRoomScene(virtualLampsOn) {
|
|
81
102
|
const zoneIds = sceneRegistry.byType.zone;
|
|
82
103
|
if (!zoneIds || zoneIds.size === 0)
|
|
83
104
|
return null;
|
|
84
105
|
const { nodes } = useScene.getState();
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
.filter((node) => node?.type === 'level')
|
|
88
|
-
.map((node) => ({ id: node.id, y: elevations.get(node.id)?.baseY ?? 0 }))
|
|
89
|
-
.sort((a, b) => a.y - b.y);
|
|
90
|
-
const levelIndex = new Map(levels.map((level, index) => [level.id, index]));
|
|
106
|
+
const { ids, levels } = liveLevels();
|
|
107
|
+
const levelIndex = new Map(ids.map((id, index) => [id, index]));
|
|
91
108
|
const zones = [];
|
|
92
109
|
const point = new Vector3();
|
|
93
110
|
for (const id of zoneIds) {
|
|
@@ -96,11 +113,16 @@ export function liveRoomScene(virtualLampsOn) {
|
|
|
96
113
|
if (!node?.polygon || node.polygon.length < 3 || !object || node.visible === false)
|
|
97
114
|
continue;
|
|
98
115
|
object.updateWorldMatrix(true, false);
|
|
99
|
-
const
|
|
116
|
+
const toWorld = (ring) => ring.map(([x, z]) => {
|
|
100
117
|
object.localToWorld(point.set(x, 0, z));
|
|
101
118
|
return [point.x, point.z];
|
|
102
119
|
});
|
|
103
|
-
zones.push({
|
|
120
|
+
zones.push({
|
|
121
|
+
id,
|
|
122
|
+
polygon: toWorld(node.polygon),
|
|
123
|
+
holes: (node.holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
|
|
124
|
+
levelIndex: levelIndex.get(node.parentId ?? '') ?? 0,
|
|
125
|
+
});
|
|
104
126
|
}
|
|
105
127
|
if (!zones.length)
|
|
106
128
|
return null;
|
|
@@ -116,9 +138,12 @@ export function liveRoomScene(virtualLampsOn) {
|
|
|
116
138
|
const walls = [];
|
|
117
139
|
for (const id of sceneRegistry.byType.wall ?? []) {
|
|
118
140
|
const object = sceneRegistry.nodes.get(id);
|
|
141
|
+
if (!object)
|
|
142
|
+
continue;
|
|
143
|
+
const wallLevel = levelIndex.get(nodes[id]?.parentId ?? '') ?? 0;
|
|
119
144
|
// Doors, windows and items hang under their wall: a closed leaf mustn't close its doorway.
|
|
120
|
-
|
|
121
|
-
walls.push(
|
|
145
|
+
for (const mesh of meshesOf(object, (child) => registered.has(child)))
|
|
146
|
+
walls.push({ object: mesh, levelIndex: wallLevel });
|
|
122
147
|
}
|
|
123
148
|
const openings = [];
|
|
124
149
|
for (const kind of OPENING_TYPES) {
|
|
@@ -134,7 +159,7 @@ export function liveRoomScene(virtualLampsOn) {
|
|
|
134
159
|
bounds.expandByPoint(point.set(x, 0, z));
|
|
135
160
|
return {
|
|
136
161
|
bounds,
|
|
137
|
-
|
|
162
|
+
levels,
|
|
138
163
|
zones,
|
|
139
164
|
covers,
|
|
140
165
|
walls,
|
|
@@ -144,15 +169,33 @@ export function liveRoomScene(virtualLampsOn) {
|
|
|
144
169
|
configureRaycaster: (raycaster) => setSurfaceRaycastLayers(raycaster.layers),
|
|
145
170
|
};
|
|
146
171
|
}
|
|
147
|
-
/** Live level objects in the room system's level order (
|
|
172
|
+
/** Live level objects in the room system's level order (explode offsets, visibility, focus). */
|
|
148
173
|
export function liveLevelObjects() {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
174
|
+
return liveLevels().ids.map((id) => sceneRegistry.nodes.get(id));
|
|
175
|
+
}
|
|
176
|
+
/** A baked artifact's levels: their objects and, per level, its building and floor height. */
|
|
177
|
+
function bakedLevels(root) {
|
|
178
|
+
const objects = [];
|
|
179
|
+
root.traverse((object) => {
|
|
180
|
+
if (object.userData.kind === 'level')
|
|
181
|
+
objects.push(object);
|
|
182
|
+
});
|
|
183
|
+
root.updateWorldMatrix(true, true);
|
|
184
|
+
const buildings = new Map();
|
|
185
|
+
const point = new Vector3();
|
|
186
|
+
const levels = objects.map((object) => {
|
|
187
|
+
let building = object.parent;
|
|
188
|
+
while (building && building.userData.kind !== 'building')
|
|
189
|
+
building = building.parent;
|
|
190
|
+
if (!buildings.has(building))
|
|
191
|
+
buildings.set(building, buildings.size);
|
|
192
|
+
return { y: object.getWorldPosition(point).y, building: buildings.get(building) };
|
|
193
|
+
});
|
|
194
|
+
return { objects, levels };
|
|
195
|
+
}
|
|
196
|
+
/** A baked artifact's level objects in the room system's level order. */
|
|
197
|
+
export function bakedLevelObjects(root) {
|
|
198
|
+
return root ? bakedLevels(root).objects : [];
|
|
156
199
|
}
|
|
157
200
|
/** How open a live door is (0 closed … 1 fully open), the transient state first. */
|
|
158
201
|
export function liveDoorOpenness(id) {
|
|
@@ -164,7 +207,6 @@ export function liveDoorOpenness(id) {
|
|
|
164
207
|
}
|
|
165
208
|
/** A baked artifact's identity tree (levels, zones, covers, walls, openings), or null. */
|
|
166
209
|
export function bakedRoomScene(root, virtualLampsOn) {
|
|
167
|
-
const levelObjects = [];
|
|
168
210
|
const zoneObjects = [];
|
|
169
211
|
const covers = [];
|
|
170
212
|
const wallRoots = [];
|
|
@@ -172,9 +214,6 @@ export function bakedRoomScene(root, virtualLampsOn) {
|
|
|
172
214
|
root.traverse((object) => {
|
|
173
215
|
const extras = object.userData;
|
|
174
216
|
switch (extras.kind) {
|
|
175
|
-
case 'level':
|
|
176
|
-
levelObjects.push(object);
|
|
177
|
-
break;
|
|
178
217
|
case 'zone':
|
|
179
218
|
zoneObjects.push(object);
|
|
180
219
|
break;
|
|
@@ -195,34 +234,33 @@ export function bakedRoomScene(root, virtualLampsOn) {
|
|
|
195
234
|
});
|
|
196
235
|
if (!zoneObjects.length)
|
|
197
236
|
return null;
|
|
198
|
-
root
|
|
199
|
-
const levels = levelObjects
|
|
200
|
-
.map((object) => ({ object, y: object.getWorldPosition(new Vector3()).y }))
|
|
201
|
-
.sort((a, b) => a.y - b.y);
|
|
237
|
+
const levels = bakedLevels(root);
|
|
202
238
|
const levelOf = (object) => {
|
|
203
239
|
for (let x = object; x; x = x.parent) {
|
|
204
|
-
const index = levels.
|
|
240
|
+
const index = levels.objects.indexOf(x);
|
|
205
241
|
if (index >= 0)
|
|
206
|
-
return index;
|
|
242
|
+
return { index, frame: x };
|
|
207
243
|
}
|
|
208
|
-
return 0;
|
|
244
|
+
return { index: 0, frame: null };
|
|
209
245
|
};
|
|
210
246
|
const point = new Vector3();
|
|
211
247
|
const zones = [];
|
|
212
248
|
for (const object of zoneObjects) {
|
|
213
|
-
const polygon = object.userData
|
|
249
|
+
const { polygon, holes } = object.userData;
|
|
214
250
|
if (!polygon || polygon.length < 3)
|
|
215
251
|
continue;
|
|
216
|
-
const
|
|
252
|
+
const level = levelOf(object);
|
|
217
253
|
// Polygons are level-local [x, z]: bring them to world XZ through the level's frame.
|
|
218
|
-
const frame =
|
|
254
|
+
const frame = level.frame ?? object.parent ?? object;
|
|
255
|
+
const toWorld = (ring) => ring.map(([x, z]) => {
|
|
256
|
+
point.set(x, 0, z).applyMatrix4(frame.matrixWorld);
|
|
257
|
+
return [point.x, point.z];
|
|
258
|
+
});
|
|
219
259
|
zones.push({
|
|
220
260
|
id: object.userData.pascalId ?? object.uuid,
|
|
221
|
-
polygon: polygon
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}),
|
|
225
|
-
levelIndex,
|
|
261
|
+
polygon: toWorld(polygon),
|
|
262
|
+
holes: (holes ?? []).filter((hole) => hole.length >= 3).map(toWorld),
|
|
263
|
+
levelIndex: level.index,
|
|
226
264
|
});
|
|
227
265
|
}
|
|
228
266
|
if (!zones.length)
|
|
@@ -231,14 +269,17 @@ export function bakedRoomScene(root, virtualLampsOn) {
|
|
|
231
269
|
const kind = object.userData.kind;
|
|
232
270
|
return kind === 'door' || kind === 'window' || kind === 'item';
|
|
233
271
|
};
|
|
234
|
-
const walls = wallRoots.flatMap((object) =>
|
|
272
|
+
const walls = wallRoots.flatMap((object) => {
|
|
273
|
+
const levelIndex = levelOf(object).index;
|
|
274
|
+
return meshesOf(object, isIdentity).map((mesh) => ({ object: mesh, levelIndex }));
|
|
275
|
+
});
|
|
235
276
|
const bounds = new Box3();
|
|
236
277
|
for (const zone of zones)
|
|
237
278
|
for (const [x, z] of zone.polygon)
|
|
238
279
|
bounds.expandByPoint(point.set(x, 0, z));
|
|
239
280
|
return {
|
|
240
281
|
bounds,
|
|
241
|
-
|
|
282
|
+
levels: levels.levels,
|
|
242
283
|
zones,
|
|
243
284
|
covers,
|
|
244
285
|
walls,
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import { Box3, type Camera, Color, type Object3D, Raycaster, Vector2, Vector3 } from 'three';
|
|
2
|
+
import { type MapLevel, RoomMap } from './room-map';
|
|
3
|
+
/**
|
|
4
|
+
* "Room-aware" interior light, the game-engine way (ported from the enhanced viewer):
|
|
5
|
+
*
|
|
6
|
+
* - Zone polygons are rasterized per level into a top-down room-id map (10 cm cells). A fragment
|
|
7
|
+
* finds its room a step off itself along its normal — a wall face looks *into* the room it
|
|
8
|
+
* faces, so light never leaks through walls and there are no shadow maps to pay for.
|
|
9
|
+
* - Each room owns its lamps and window "portals": glass rectangles that emit sky (+ ground
|
|
10
|
+
* bounce) radiance inwards with an analytic rectangle form factor, plus the internally
|
|
11
|
+
* reflected component (split-flux) and the sky patch on the floor. Enclosed rooms see only
|
|
12
|
+
* a tenth of the sky environment.
|
|
13
|
+
* - Openings between rooms (doorways, arches, open plan) carry light from the neighbour and
|
|
14
|
+
* crossfade room-wide terms at the threshold.
|
|
15
|
+
* - At night, lit rooms throw light out through their windows (a gobo of the main lamp + the
|
|
16
|
+
* pane glow), and lamps outside every room light exterior surfaces analytically.
|
|
17
|
+
*
|
|
18
|
+
* Everything feeds the material lighting through `getGI` / `getAO` contexts: real diffuse
|
|
19
|
+
* irradiance (× albedo, × AO), not a post overlay. Shader inputs are uniforms and data textures,
|
|
20
|
+
* so rebuilding after an edit never recompiles a material.
|
|
21
|
+
*/
|
|
22
|
+
type N = any;
|
|
2
23
|
export type RoomLamp = {
|
|
3
24
|
position: Vector3;
|
|
4
25
|
color: Color;
|
|
@@ -25,6 +46,7 @@ export type RoomZone = {
|
|
|
25
46
|
id: string;
|
|
26
47
|
/** World XZ. */
|
|
27
48
|
polygon: [number, number][];
|
|
49
|
+
holes?: [number, number][][];
|
|
28
50
|
levelIndex: number;
|
|
29
51
|
};
|
|
30
52
|
export type RoomOpeningRoot = {
|
|
@@ -35,16 +57,22 @@ export type RoomOpeningRoot = {
|
|
|
35
57
|
/** What the room system needs from a scene (live parametric or baked artifact). */
|
|
36
58
|
export type RoomSceneInput = {
|
|
37
59
|
bounds: Box3;
|
|
38
|
-
/**
|
|
39
|
-
|
|
60
|
+
/** Every level: assembled (not exploded) world Y of its floor and its building's index. */
|
|
61
|
+
levels: MapLevel[];
|
|
40
62
|
zones: RoomZone[];
|
|
41
63
|
/** Ceilings, roofs and slabs (enclosure rays) with their kind. */
|
|
42
64
|
covers: {
|
|
43
65
|
object: Object3D;
|
|
44
66
|
kind: 'ceiling' | 'roof' | 'slab';
|
|
45
67
|
}[];
|
|
46
|
-
/**
|
|
47
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Wall meshes only (openings and their parts excluded), each with its level: walkable-opening
|
|
70
|
+
* rays test them, and their footprints keep rooms from reaching past a wall's far face.
|
|
71
|
+
*/
|
|
72
|
+
walls: {
|
|
73
|
+
object: Object3D;
|
|
74
|
+
levelIndex: number;
|
|
75
|
+
}[];
|
|
48
76
|
openings: RoomOpeningRoot[];
|
|
49
77
|
lamps: RoomLamp[];
|
|
50
78
|
/** Whether rooms without lamps of their own get their virtual ceiling lamp lit. */
|
|
@@ -100,13 +128,10 @@ export declare class RoomLighting {
|
|
|
100
128
|
exteriorLamps: RoomLamp[];
|
|
101
129
|
portals: Portal[];
|
|
102
130
|
openings: Opening[];
|
|
103
|
-
|
|
131
|
+
levels: MapLevel[];
|
|
132
|
+
/** Which room a point is in (tiled per level; see `room-map.ts`). */
|
|
133
|
+
readonly map: RoomMap;
|
|
104
134
|
private data;
|
|
105
|
-
private map;
|
|
106
|
-
private origin;
|
|
107
|
-
private gridW;
|
|
108
|
-
private gridH;
|
|
109
|
-
private levels;
|
|
110
135
|
private lampTexel;
|
|
111
136
|
private lastSky;
|
|
112
137
|
readonly portalGain: import("three/webgpu").UniformNode<"float", number>;
|
|
@@ -127,18 +152,12 @@ export declare class RoomLighting {
|
|
|
127
152
|
readonly skyPatch: import("three/webgpu").UniformNode<"float", number>;
|
|
128
153
|
/** Light through interior openings + threshold crossfade (off on the Low tier). */
|
|
129
154
|
readonly softRooms: import("three/webgpu").UniformNode<"float", number>;
|
|
155
|
+
/** Camera world Y (live). */
|
|
130
156
|
readonly cameraY: import("three/webgpu").UniformNode<"float", number>;
|
|
131
|
-
readonly focusedLevel: import("three/webgpu").UniformNode<"int", number>;
|
|
132
|
-
/**
|
|
133
|
-
* The level arrays live in one shared group, uploaded when a level moves: an array uniform in
|
|
134
|
-
* the default (per-object) group is re-sent for every object in every pass, whether it changed
|
|
135
|
-
* or not — some 760 uploads a frame in a furnished flat.
|
|
136
|
-
*/
|
|
137
|
-
private readonly levelGroup;
|
|
138
157
|
private readonly u;
|
|
139
158
|
/** Rebuild from a scene: rooms, lamps, portals, openings, room-id map. */
|
|
140
159
|
build(input: RoomSceneInput): void;
|
|
141
|
-
/** CPU-side room lookup (same rule as the shader, without the normal offset). */
|
|
160
|
+
/** CPU-side room lookup in assembled space (same rule as the shader, without the normal offset). */
|
|
142
161
|
roomAt(p: Vector3): number;
|
|
143
162
|
/**
|
|
144
163
|
* Whether each level is on screen. A camera over a level whose upper floors are hidden stands
|
|
@@ -146,6 +165,10 @@ export declare class RoomLighting {
|
|
|
146
165
|
* such, not as a lamplit room it cannot see.
|
|
147
166
|
*/
|
|
148
167
|
levelShown: boolean[];
|
|
168
|
+
/** Per level: focused (its rooms open from above when the camera is over their cover). */
|
|
169
|
+
levelFocused: boolean[];
|
|
170
|
+
/** Per level: the highest one shown in its building (its rooms seen from above). */
|
|
171
|
+
private levelTopShown;
|
|
149
172
|
/**
|
|
150
173
|
* What the lit rooms in view add to an outside camera's meter: a blend of the exterior reading
|
|
151
174
|
* and the rooms' own irradiance (their indoor meter), weighted by the share of the frame each
|
|
@@ -164,8 +187,13 @@ export declare class RoomLighting {
|
|
|
164
187
|
room: number;
|
|
165
188
|
inside: boolean;
|
|
166
189
|
};
|
|
167
|
-
/**
|
|
168
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Live level presentation, per level: explode offset (live world Y − assembled), whether it is
|
|
192
|
+
* shown, and whether it is the selected level of a cutaway (solo / levels above hidden). A shown
|
|
193
|
+
* level is focused — its rooms open from above — when selected so, or when every level over it
|
|
194
|
+
* in its building is hidden.
|
|
195
|
+
*/
|
|
196
|
+
setLevelPresentation(offsets: number[], shown: boolean[], selected: boolean[]): void;
|
|
169
197
|
/** Re-run the light transfer (after a quality-tier change of the soft room map). */
|
|
170
198
|
refresh(): void;
|
|
171
199
|
/** Lamp switches changed: rewrite lamp texels (+ the light carried through openings). */
|
|
@@ -196,22 +224,30 @@ export declare class RoomLighting {
|
|
|
196
224
|
* over the lit few at night, not over every window of the building.
|
|
197
225
|
*/
|
|
198
226
|
private writeActiveLists;
|
|
199
|
-
private uploadMap;
|
|
200
227
|
private markData;
|
|
201
228
|
private writeLamp;
|
|
202
229
|
/** Interior portals emit the neighbour room's average radiance: L = E_avg·ρ/π (lamps + daylight). */
|
|
203
230
|
private writeInteriorPortals;
|
|
204
231
|
private set;
|
|
205
232
|
/**
|
|
206
|
-
* Walk every boundary between two room cells (or a room and outside) on
|
|
207
|
-
* short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a
|
|
208
|
-
* opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
|
|
233
|
+
* Walk every boundary between two room cells (or a room and outside) on each level's grid and
|
|
234
|
+
* cast short horizontal rays against the walls at 0.35 m and 1.6 m: open at both heights = a
|
|
235
|
+
* walkable opening (doorway, arch, open-plan edge). Windows don't count (sills are above 0.35 m).
|
|
236
|
+
* `walk` runs per level while its grid exists; `finish` clusters the samples into openings.
|
|
237
|
+
*/
|
|
238
|
+
private openingSearch;
|
|
239
|
+
/** One opening from its boundary samples: measured along their own line, facing room b. */
|
|
240
|
+
private openingFromRun;
|
|
241
|
+
/** Room index (−1 outside) at a world-space position (live heights). */
|
|
242
|
+
roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"int", import("three/webgpu").ConstNode<"int", number>>>;
|
|
243
|
+
/**
|
|
244
|
+
* The room a surface faces, probed off it along its normal: 30 cm sideways, 18 cm up or down.
|
|
245
|
+
* Sideways it must clear a wall from inside it: a shutter, a door leaf or a pane set half-way
|
|
246
|
+
* into a 30 cm wall looks out past the wall's face, not into the cells along it, where a wall
|
|
247
|
+
* off the grid axes reads as room and outside in turn. One node per material: its lighting and
|
|
248
|
+
* its exterior mask share the lookup.
|
|
209
249
|
*/
|
|
210
|
-
|
|
211
|
-
/** Level index for a world-space height (live, explode-offset level heights). */
|
|
212
|
-
private levelOfNode;
|
|
213
|
-
/** Room index (−1 outside) at a world-space position. */
|
|
214
|
-
roomAtNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"int">>;
|
|
250
|
+
probeRoomNode(): N;
|
|
215
251
|
/** E' = Emax·(1 − e^(−E/Emax)), on luminance, hue kept — near-field hot spots compress, never blow out. */
|
|
216
252
|
private softClampLamps;
|
|
217
253
|
/**
|
|
@@ -219,7 +255,8 @@ export declare class RoomLighting {
|
|
|
219
255
|
* topmost cover and that cover is hidden from there: a ceiling (hidden from above), or anything
|
|
220
256
|
* once its level is focused (the levels over it hidden). From inside, under the cover, the room
|
|
221
257
|
* stays enclosed whatever is focused: it must not take the full sky on top of its windows.
|
|
222
|
-
* `h2` is the room's third header texel: [coverY, roof, level, 0]
|
|
258
|
+
* `h2` is the room's third header texel: [coverY, roof, level, 0]; `level` its level's
|
|
259
|
+
* [th, entryOffset, offset, flags] (flag 1: focused).
|
|
223
260
|
*/
|
|
224
261
|
private openToSky;
|
|
225
262
|
private texel;
|
|
@@ -228,7 +265,7 @@ export declare class RoomLighting {
|
|
|
228
265
|
* irradiance — lamp + portal + bounce diffuse irradiance (linear)
|
|
229
266
|
* enclosure — multiplier for the sky IBL (1 outdoors, `indoorEnv` in enclosed rooms)
|
|
230
267
|
*/
|
|
231
|
-
lightingNode: import("three/tsl").FnNode<[], import("three/webgpu").JoinNode<"vec4">>;
|
|
268
|
+
lightingNode: import("three/tsl").FnNode<[any], import("three/webgpu").JoinNode<"vec4">>;
|
|
232
269
|
/**
|
|
233
270
|
* Light thrown *out* of lit rooms through their windows onto exterior surfaces (ground,
|
|
234
271
|
* terraces, balconies, reveals). Two terms per exterior portal:
|
|
@@ -246,7 +283,7 @@ export declare class RoomLighting {
|
|
|
246
283
|
*/
|
|
247
284
|
exteriorLampsNode: import("three/tsl").FnNode<[any, any], any>;
|
|
248
285
|
/** 1 where exterior lights may shine (outside, or rooms open to the sky), 0 inside. */
|
|
249
|
-
exteriorMaskNode: import("three/tsl").FnNode<[], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
|
|
286
|
+
exteriorMaskNode: import("three/tsl").FnNode<[any], import("three/webgpu").VarNode<"float", import("three/webgpu").ConstNode<"float", number>>>;
|
|
250
287
|
/** Linear lamp radiance of a room (its lit lamps) — the night tint of its window panes. */
|
|
251
288
|
roomGlowNode: import("three/tsl").FnNode<[any], import("three/webgpu").Node<"vec3">>;
|
|
252
289
|
}
|
|
@@ -255,6 +292,8 @@ export declare function polygonPerimeter(poly: [number, number][]): number;
|
|
|
255
292
|
export declare function polygonArea(poly: [number, number][]): number;
|
|
256
293
|
export declare function polygonCentroid(poly: [number, number][]): Vector2;
|
|
257
294
|
/** Tanner Helland blackbody fit → linear RGB. */
|
|
295
|
+
/** A point inside the polygon and outside its holes: the centroid when it is, else a scan. */
|
|
296
|
+
export declare function interiorPoint(poly: [number, number][], holes?: [number, number][][]): Vector2;
|
|
258
297
|
export declare function kelvin(k: number): Color;
|
|
259
298
|
/** The daylight look's room system (one viewer canvas at a time). */
|
|
260
299
|
export declare const daylightRooms: RoomLighting;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,
|
|
1
|
+
{"version":3,"file":"rooms.d.ts","sourceRoot":"","sources":["../../../src/lib/daylight/rooms.ts"],"names":[],"mappings":"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"}
|