@pascal-app/viewer 1.0.6 → 1.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/README.md +54 -21
- package/dist/components/viewer/daylight-atmosphere.d.ts +9 -0
- package/dist/components/viewer/daylight-atmosphere.d.ts.map +1 -0
- package/dist/components/viewer/daylight-atmosphere.js +315 -0
- package/dist/components/viewer/drone-controller.d.ts +15 -0
- package/dist/components/viewer/drone-controller.d.ts.map +1 -0
- package/dist/components/viewer/drone-controller.js +194 -0
- package/dist/components/viewer/glb-interactive.d.ts +4 -18
- package/dist/components/viewer/glb-interactive.d.ts.map +1 -1
- package/dist/components/viewer/glb-interactive.js +32 -268
- 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-motion.d.ts +8 -0
- package/dist/components/viewer/glb-scene-motion.d.ts.map +1 -0
- package/dist/components/viewer/glb-scene-motion.js +57 -0
- package/dist/components/viewer/glb-scene.d.ts +5 -1
- package/dist/components/viewer/glb-scene.d.ts.map +1 -1
- package/dist/components/viewer/glb-scene.js +290 -49
- package/dist/components/viewer/glb-selection-callout.d.ts +17 -0
- package/dist/components/viewer/glb-selection-callout.d.ts.map +1 -0
- package/dist/components/viewer/glb-selection-callout.js +54 -0
- package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
- package/dist/components/viewer/glb-walkthrough-controller.js +6 -3
- package/dist/components/viewer/index.d.ts +5 -0
- package/dist/components/viewer/index.d.ts.map +1 -1
- package/dist/components/viewer/index.js +38 -10
- package/dist/components/viewer/lights.d.ts.map +1 -1
- package/dist/components/viewer/lights.js +192 -5
- package/dist/components/viewer/post-processing.d.ts.map +1 -1
- package/dist/components/viewer/post-processing.js +150 -94
- package/dist/components/viewer/registered-systems.d.ts.map +1 -1
- package/dist/components/viewer/registered-systems.js +2 -2
- package/dist/components/viewer/scene-environment.js +4 -5
- package/dist/components/viewer/selection-callout.d.ts +51 -0
- package/dist/components/viewer/selection-callout.d.ts.map +1 -0
- package/dist/components/viewer/selection-callout.js +197 -0
- 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 +13 -0
- package/dist/components/viewer/use-daylight-rooms.d.ts.map +1 -0
- package/dist/components/viewer/use-daylight-rooms.js +278 -0
- package/dist/components/viewer/viewer-camera.d.ts.map +1 -1
- package/dist/components/viewer/viewer-camera.js +12 -1
- 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 +26 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- 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/ground.d.ts +21 -0
- package/dist/lib/daylight/ground.d.ts.map +1 -0
- package/dist/lib/daylight/ground.js +53 -0
- package/dist/lib/daylight/location.d.ts +32 -0
- package/dist/lib/daylight/location.d.ts.map +1 -0
- package/dist/lib/daylight/location.js +74 -0
- package/dist/lib/daylight/look.d.ts +33 -0
- package/dist/lib/daylight/look.d.ts.map +1 -0
- package/dist/lib/daylight/look.js +13 -0
- package/dist/lib/daylight/material-hooks.d.ts +2 -0
- package/dist/lib/daylight/material-hooks.d.ts.map +1 -0
- package/dist/lib/daylight/material-hooks.js +150 -0
- package/dist/lib/daylight/room-context.d.ts +12 -0
- package/dist/lib/daylight/room-context.d.ts.map +1 -0
- package/dist/lib/daylight/room-context.js +54 -0
- package/dist/lib/daylight/room-map.d.ts +124 -0
- package/dist/lib/daylight/room-map.d.ts.map +1 -0
- package/dist/lib/daylight/room-map.js +630 -0
- package/dist/lib/daylight/room-scene.d.ts +56 -0
- package/dist/lib/daylight/room-scene.d.ts.map +1 -0
- package/dist/lib/daylight/room-scene.js +391 -0
- package/dist/lib/daylight/rooms.d.ts +292 -0
- package/dist/lib/daylight/rooms.d.ts.map +1 -0
- package/dist/lib/daylight/rooms.js +1268 -0
- package/dist/lib/daylight/runtime.d.ts +33 -0
- package/dist/lib/daylight/runtime.d.ts.map +1 -0
- package/dist/lib/daylight/runtime.js +42 -0
- package/dist/lib/daylight/sky.d.ts +26 -0
- package/dist/lib/daylight/sky.d.ts.map +1 -0
- package/dist/lib/daylight/sky.js +217 -0
- package/dist/lib/daylight/solar.d.ts +46 -0
- package/dist/lib/daylight/solar.d.ts.map +1 -0
- package/dist/lib/daylight/solar.js +156 -0
- package/dist/lib/device-tier.d.ts +29 -0
- package/dist/lib/device-tier.d.ts.map +1 -0
- package/dist/lib/device-tier.js +71 -0
- package/dist/lib/dispose-object3d.d.ts.map +1 -1
- package/dist/lib/dispose-object3d.js +4 -2
- package/dist/lib/drone-flight.d.ts +44 -0
- package/dist/lib/drone-flight.d.ts.map +1 -0
- package/dist/lib/drone-flight.js +121 -0
- package/dist/lib/editor-highlight.d.ts +16 -0
- package/dist/lib/editor-highlight.d.ts.map +1 -0
- package/dist/lib/editor-highlight.js +33 -0
- package/dist/lib/foundation-materials.d.ts.map +1 -1
- package/dist/lib/foundation-materials.js +2 -4
- package/dist/lib/glb-merge.d.ts +23 -0
- package/dist/lib/glb-merge.d.ts.map +1 -0
- package/dist/lib/glb-merge.js +184 -0
- package/dist/lib/hardware-geometry.d.ts +21 -0
- package/dist/lib/hardware-geometry.d.ts.map +1 -0
- package/dist/lib/hardware-geometry.js +283 -0
- package/dist/lib/ktx2-loader.d.ts.map +1 -1
- package/dist/lib/ktx2-loader.js +2 -1
- package/dist/lib/layer-pass.d.ts +2 -0
- package/dist/lib/layer-pass.d.ts.map +1 -1
- package/dist/lib/layer-pass.js +20 -0
- package/dist/lib/materials.d.ts.map +1 -1
- package/dist/lib/materials.js +50 -23
- 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 +5 -0
- package/dist/lib/measurement-presentation.d.ts.map +1 -0
- package/dist/lib/measurement-presentation.js +8 -0
- package/dist/lib/merged-outline-node.d.ts.map +1 -1
- package/dist/lib/merged-outline-node.js +7 -1
- package/dist/lib/occlusion-culler.d.ts +34 -0
- package/dist/lib/occlusion-culler.d.ts.map +1 -0
- package/dist/lib/occlusion-culler.js +698 -0
- package/dist/lib/pointer-events.d.ts.map +1 -1
- package/dist/lib/pointer-events.js +3 -3
- package/dist/lib/post-processing-resources.d.ts +4 -0
- package/dist/lib/post-processing-resources.d.ts.map +1 -1
- package/dist/lib/post-processing-resources.js +5 -0
- package/dist/lib/readback-rows.d.ts +14 -0
- package/dist/lib/readback-rows.d.ts.map +1 -0
- package/dist/lib/readback-rows.js +31 -0
- package/dist/lib/reveal-pose.d.ts.map +1 -1
- package/dist/lib/reveal-pose.js +3 -0
- package/dist/lib/scene-matrices.d.ts +12 -0
- package/dist/lib/scene-matrices.d.ts.map +1 -0
- package/dist/lib/scene-matrices.js +287 -0
- package/dist/lib/scene-pass-mrt.d.ts +5 -2
- package/dist/lib/scene-pass-mrt.d.ts.map +1 -1
- package/dist/lib/scene-pass-mrt.js +7 -2
- package/dist/lib/scene-themes.d.ts +0 -2
- package/dist/lib/scene-themes.d.ts.map +1 -1
- package/dist/lib/scene-themes.js +0 -2
- package/dist/lib/scene-visibility.d.ts +2 -0
- package/dist/lib/scene-visibility.d.ts.map +1 -1
- package/dist/lib/scene-visibility.js +12 -3
- package/dist/lib/site-surfaces.d.ts +1 -8
- package/dist/lib/site-surfaces.d.ts.map +1 -1
- package/dist/lib/site-surfaces.js +0 -19
- package/dist/lib/snapshot-pipeline.d.ts.map +1 -1
- package/dist/lib/snapshot-pipeline.js +24 -40
- package/dist/lib/texture-reference.d.ts.map +1 -1
- package/dist/lib/texture-reference.js +13 -10
- package/dist/lib/underground-ambiance.d.ts +0 -2
- package/dist/lib/underground-ambiance.d.ts.map +1 -1
- package/dist/lib/underground-ambiance.js +0 -2
- package/dist/lib/viewer-config.d.ts +21 -0
- package/dist/lib/viewer-config.d.ts.map +1 -0
- package/dist/lib/viewer-config.js +21 -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/store/use-item-light-pool.d.ts +3 -6
- package/dist/store/use-item-light-pool.d.ts.map +1 -1
- package/dist/store/use-item-light-pool.js +12 -0
- package/dist/store/use-viewer.d.ts +62 -59
- package/dist/store/use-viewer.d.ts.map +1 -1
- package/dist/store/use-viewer.js +106 -19
- package/dist/systems/ceiling/ceiling-system.d.ts +5 -0
- package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
- package/dist/systems/ceiling/ceiling-system.js +11 -1
- package/dist/systems/door/door-system.d.ts.map +1 -1
- package/dist/systems/door/door-system.js +501 -145
- package/dist/systems/door/leaf-profile.d.ts +11 -0
- package/dist/systems/door/leaf-profile.d.ts.map +1 -0
- package/dist/systems/door/leaf-profile.js +140 -0
- 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/interactive/callout-actions.d.ts +72 -0
- package/dist/systems/interactive/callout-actions.d.ts.map +1 -0
- package/dist/systems/interactive/callout-actions.js +212 -0
- package/dist/systems/interactive/interactive-system.d.ts +5 -1
- package/dist/systems/interactive/interactive-system.d.ts.map +1 -1
- package/dist/systems/interactive/interactive-system.js +44 -121
- package/dist/systems/interactive/opening-settled.d.ts +16 -0
- package/dist/systems/interactive/opening-settled.d.ts.map +1 -0
- package/dist/systems/interactive/opening-settled.js +53 -0
- package/dist/systems/item-light/item-light-system.d.ts.map +1 -1
- package/dist/systems/item-light/item-light-system.js +22 -214
- package/dist/systems/item-light/pooled-lights.d.ts +70 -0
- package/dist/systems/item-light/pooled-lights.d.ts.map +1 -0
- package/dist/systems/item-light/pooled-lights.js +449 -0
- package/dist/systems/level/level-system.d.ts.map +1 -1
- package/dist/systems/level/level-system.js +19 -1
- package/dist/systems/roof/roof-material-slots.d.ts +14 -0
- package/dist/systems/roof/roof-material-slots.d.ts.map +1 -0
- package/dist/systems/roof/roof-material-slots.js +13 -0
- package/dist/systems/roof/roof-materials.d.ts +25 -2
- package/dist/systems/roof/roof-materials.d.ts.map +1 -1
- package/dist/systems/roof/roof-materials.js +85 -26
- package/dist/systems/roof/roof-system.d.ts +34 -1
- package/dist/systems/roof/roof-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-system.js +582 -168
- package/dist/systems/wall/opening-casing-geometry.d.ts +14 -0
- package/dist/systems/wall/opening-casing-geometry.d.ts.map +1 -0
- package/dist/systems/wall/opening-casing-geometry.js +102 -0
- package/dist/systems/wall/opening-cutout-geometry.d.ts +9 -0
- package/dist/systems/wall/opening-cutout-geometry.d.ts.map +1 -1
- package/dist/systems/wall/opening-cutout-geometry.js +7 -3
- package/dist/systems/wall/wall-materials.d.ts.map +1 -1
- package/dist/systems/wall/wall-materials.js +28 -35
- 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 +86 -25
- package/dist/systems/wall/wall-t-junctions.d.ts +15 -0
- package/dist/systems/wall/wall-t-junctions.d.ts.map +1 -0
- package/dist/systems/wall/wall-t-junctions.js +149 -0
- package/dist/systems/window/window-animation-system.d.ts +3 -12
- package/dist/systems/window/window-animation-system.d.ts.map +1 -1
- package/dist/systems/window/window-animation-system.js +37 -122
- package/dist/systems/window/window-pose.d.ts +31 -0
- package/dist/systems/window/window-pose.d.ts.map +1 -0
- package/dist/systems/window/window-pose.js +152 -0
- package/dist/systems/window/window-roller-shutter.d.ts +8 -0
- package/dist/systems/window/window-roller-shutter.d.ts.map +1 -0
- package/dist/systems/window/window-roller-shutter.js +64 -0
- package/dist/systems/window/window-system.d.ts +2 -11
- package/dist/systems/window/window-system.d.ts.map +1 -1
- package/dist/systems/window/window-system.js +470 -303
- package/package.json +6 -6
- package/dist/systems/interactive/control-widget.d.ts +0 -10
- package/dist/systems/interactive/control-widget.d.ts.map +0 -1
- package/dist/systems/interactive/control-widget.js +0 -35
- package/dist/systems/interactive/procedural-controls.d.ts +0 -13
- package/dist/systems/interactive/procedural-controls.d.ts.map +0 -1
- package/dist/systems/interactive/procedural-controls.js +0 -17
|
@@ -5,11 +5,6 @@ import { temporarilySetGroundAside } from './scene-visibility';
|
|
|
5
5
|
* drawn on the ground (property line, setbacks, contours) carry none.
|
|
6
6
|
*/
|
|
7
7
|
export const SITE_GROUND = 'siteGround';
|
|
8
|
-
/**
|
|
9
|
-
* `userData` key marking the generic foundation under the buildings (footing and stem, drawn under
|
|
10
|
-
* the ground): a capture that sees through the veil leaves it out, as it left it out before it was drawn.
|
|
11
|
-
*/
|
|
12
|
-
export const SITE_FOUNDATION = 'siteFoundation';
|
|
13
8
|
/**
|
|
14
9
|
* The site's own shown surfaces (ground, horizon disc, property and setback lines, contours), not
|
|
15
10
|
* its registered children (buildings, items), which are groups.
|
|
@@ -25,17 +20,6 @@ export function siteSurfaces() {
|
|
|
25
20
|
}
|
|
26
21
|
return surfaces;
|
|
27
22
|
}
|
|
28
|
-
/** The site's generic foundation meshes, shown or not. */
|
|
29
|
-
export function siteFoundation() {
|
|
30
|
-
const foundation = [];
|
|
31
|
-
for (const siteId of sceneRegistry.byType.site ?? []) {
|
|
32
|
-
for (const child of sceneRegistry.nodes.get(siteId)?.children ?? []) {
|
|
33
|
-
if (child.userData[SITE_FOUNDATION] === true)
|
|
34
|
-
foundation.push(child);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return foundation;
|
|
38
|
-
}
|
|
39
23
|
/** The site's ground by role, shown or not: the veil is hidden until a level below grade is shown. */
|
|
40
24
|
export function siteGround() {
|
|
41
25
|
const ground = { solid: [], veil: [] };
|
|
@@ -56,15 +40,12 @@ export function siteGround() {
|
|
|
56
40
|
export function temporarilyVeilGround(veiled) {
|
|
57
41
|
const { solid, veil } = siteGround();
|
|
58
42
|
const restoreSolid = temporarilySetGroundAside(solid, veiled);
|
|
59
|
-
// Seen through a veil the footing under a floor below grade would show: the picture has none.
|
|
60
|
-
const restoreFoundation = veiled ? temporarilySetGroundAside(siteFoundation(), true) : () => { };
|
|
61
43
|
const flipped = veil.filter((surface) => surface.visible !== veiled);
|
|
62
44
|
for (const surface of flipped)
|
|
63
45
|
surface.visible = veiled;
|
|
64
46
|
return () => {
|
|
65
47
|
for (const surface of flipped)
|
|
66
48
|
surface.visible = !veiled;
|
|
67
|
-
restoreFoundation();
|
|
68
49
|
restoreSolid();
|
|
69
50
|
};
|
|
70
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/snapshot-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"snapshot-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/snapshot-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Color, Matrix4, SRGBColorSpace, UnsignedByteType } from 'three';
|
|
1
|
+
import { Color, Matrix4, SRGBColorSpace, UnsignedByteType, Vector3, } from 'three';
|
|
2
2
|
import { ssgi } from 'three/addons/tsl/display/SSGINode.js';
|
|
3
3
|
import { denoise } from 'three/examples/jsm/tsl/display/DenoiseNode.js';
|
|
4
4
|
import { fxaa } from 'three/examples/jsm/tsl/display/FXAANode.js';
|
|
@@ -6,8 +6,11 @@ import { clamp, convertToTexture, diffuseColor, float, mix, normalView, output,
|
|
|
6
6
|
import { PassNode, RenderPipeline, RenderTarget, } from 'three/webgpu';
|
|
7
7
|
import { GRADE_PARAMS, SSGI_PARAMS } from '../components/viewer/post-processing';
|
|
8
8
|
import { backdropColors, backdropGradient, flatBackdropOutput } from './backdrop';
|
|
9
|
+
import { DAYLIGHT_INK_BACKDROP, daylightGradeRgb, isDaylightAtmosphere } from './daylight/look';
|
|
10
|
+
import { daylightRoomContext } from './daylight/room-context';
|
|
9
11
|
import { edgeColorFor, edgeOpacityScaleFor } from './edge-style';
|
|
10
12
|
import { createEdgeDepthSampler, inkedEdges } from './ink-edges';
|
|
13
|
+
import { readbackRows } from './readback-rows';
|
|
11
14
|
import { sceneLightingMask, scenePassMrt } from './scene-pass-mrt';
|
|
12
15
|
import { packNormalToRGB, unpackRGBToNormal } from './tsl-compat';
|
|
13
16
|
export const THUMBNAIL_WIDTH = 1920;
|
|
@@ -71,6 +74,8 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
71
74
|
const inkColorUniform = uniform(new Color('#1a1d24'));
|
|
72
75
|
const inkOpacityUniform = uniform(0.5);
|
|
73
76
|
const inkOpacityScaleUniform = uniform(1);
|
|
77
|
+
const daylight = isDaylightAtmosphere(atmosphere);
|
|
78
|
+
const whiteBalanceUniform = uniform(new Vector3(1, 1, 1));
|
|
74
79
|
// The scene pass owns MRT and its transparent clear, including when nested
|
|
75
80
|
// inside FXAA's intermediate render target.
|
|
76
81
|
const scenePass = new SnapshotScenePass('color', scene, camera);
|
|
@@ -80,6 +85,9 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
80
85
|
normal: packNormalToRGB(normalView),
|
|
81
86
|
lighting: sceneLightingMask(),
|
|
82
87
|
}));
|
|
88
|
+
// The daylight look's room light (windows, lamps, bounce, night spill), as in the viewport.
|
|
89
|
+
if (daylight)
|
|
90
|
+
scenePass.contextNode = daylightRoomContext();
|
|
83
91
|
const scenePassColor = scenePass.getTextureNode('output');
|
|
84
92
|
const scenePassDepth = scenePass.getTextureNode('depth');
|
|
85
93
|
const sampleEdgeDepth = createEdgeDepthSampler(scenePassDepth, camera);
|
|
@@ -128,7 +136,10 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
128
136
|
opacity: float(inkOpacityUniform).mul(inkOpacityScaleUniform),
|
|
129
137
|
});
|
|
130
138
|
const ungradedSceneRgb = mix(aoRgb, inkedRgb, inkMixUniform);
|
|
131
|
-
|
|
139
|
+
// The built-in daylight look grades with its own white balance, as the viewport does.
|
|
140
|
+
const gradeRgb = daylight
|
|
141
|
+
? (rgb) => daylightGradeRgb(rgb, whiteBalanceUniform)
|
|
142
|
+
: (rgb) => saturation(rgb.div(0.18).pow(vec3(GRADE_PARAMS.contrast)).mul(0.18), GRADE_PARAMS.saturation);
|
|
132
143
|
const sceneRgb = mix(ungradedSceneRgb, gradeRgb(ungradedSceneRgb), gradeMixUniform);
|
|
133
144
|
// Per-pixel world ray from the capture camera → sky gradient above the
|
|
134
145
|
// horizon (dir.y = 0), flat background below — mirrors the viewport
|
|
@@ -194,8 +205,9 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
194
205
|
const backdrop = backdropColors(sceneTheme);
|
|
195
206
|
inkMixUniform.value = edges === 'off' ? 0 : 1;
|
|
196
207
|
inkOpacityUniform.value = edges === 'strong' ? 1 : 0.5;
|
|
197
|
-
|
|
198
|
-
|
|
208
|
+
const inkBackdrop = daylight ? DAYLIGHT_INK_BACKDROP : sceneTheme.background;
|
|
209
|
+
inkColorUniform.value.set(edgeColorFor(inkBackdrop));
|
|
210
|
+
inkOpacityScaleUniform.value = edgeOpacityScaleFor(inkBackdrop);
|
|
199
211
|
bgColorUniform.value.set(sceneTheme.background);
|
|
200
212
|
bgSkyUniform.value.set(backdrop.sky);
|
|
201
213
|
bgSkyDeepUniform.value.set(backdrop.skyDeep);
|
|
@@ -203,7 +215,10 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
203
215
|
bgMixUniform.value = transparent ? 0 : 1;
|
|
204
216
|
flatBgMixUniform.value =
|
|
205
217
|
!transparent && !atmosphere && sceneTheme.backgroundSky === null ? 1 : 0;
|
|
206
|
-
gradeMixUniform.value =
|
|
218
|
+
gradeMixUniform.value =
|
|
219
|
+
(grade || daylight) && sceneTheme.postprocessing?.colorGrading !== false ? 1 : 0;
|
|
220
|
+
if (isDaylightAtmosphere(atmosphere))
|
|
221
|
+
whiteBalanceUniform.value.copy(atmosphere.whiteBalance);
|
|
207
222
|
aoMixUniform.value = sceneTheme.postprocessing?.ambientOcclusion === false ? 0 : 1;
|
|
208
223
|
// The capture camera never joins the scene graph, so its matrixWorld
|
|
209
224
|
// is only refreshed by the render itself — too late for the backdrop
|
|
@@ -253,25 +268,14 @@ export async function createSnapshotPipeline({ renderer, scene, camera, atmosphe
|
|
|
253
268
|
}
|
|
254
269
|
}
|
|
255
270
|
/**
|
|
256
|
-
* The frame in `renderTarget`, read back and encoded:
|
|
257
|
-
*
|
|
258
|
-
*
|
|
271
|
+
* The frame in `renderTarget`, read back and encoded: rows made tight and
|
|
272
|
+
* top-down (`readbackRows`), then cut to the capture mode — the viewport as
|
|
273
|
+
* is, an area, or the standard aspect.
|
|
259
274
|
* Shared by the post-processed pipeline and the plain one.
|
|
260
275
|
*/
|
|
261
276
|
async function encodeCapture(renderer, renderTarget, captureWidth, captureHeight, { captureMode, cropRegion, standardW, standardH, mime, }) {
|
|
262
277
|
const encoding = mime ? { type: mime } : { type: SNAPSHOT_MIME, quality: SNAPSHOT_QUALITY };
|
|
263
|
-
// Read pixels from the RT asynchronously.
|
|
264
|
-
// WebGPU copyTextureToBuffer aligns each row to 256 bytes, so we must
|
|
265
|
-
// depad the rows before constructing ImageData.
|
|
266
278
|
const pixels = (await renderer.readRenderTargetPixelsAsync(renderTarget, 0, 0, captureWidth, captureHeight));
|
|
267
|
-
const actualBytesPerRow = captureWidth * 4;
|
|
268
|
-
const tightTotal = actualBytesPerRow * captureHeight;
|
|
269
|
-
const paddedBytesPerRow = Math.ceil(actualBytesPerRow / 256) * 256;
|
|
270
|
-
// Two readback shapes to handle:
|
|
271
|
-
// - WebGPU (`copyTextureToBuffer`): top-down + 256-byte row padding
|
|
272
|
-
// when width*4 isn't already a multiple of 256.
|
|
273
|
-
// - WebGL2 fallback (iOS Chrome, etc.): tightly-packed but bottom-up
|
|
274
|
-
// (OpenGL framebuffer convention).
|
|
275
279
|
// `isWebGPURenderer` lies — it stays true even when the renderer
|
|
276
280
|
// falls back to the WebGL backend. Inspect the actual backend
|
|
277
281
|
// instead (presence of a GPU device, or backend constructor name).
|
|
@@ -279,27 +283,7 @@ async function encodeCapture(renderer, renderTarget, captureWidth, captureHeight
|
|
|
279
283
|
const isWebGPU = !!backend?.device ||
|
|
280
284
|
backend?.isWebGPUBackend === true ||
|
|
281
285
|
backend?.constructor?.name === 'WebGPUBackend';
|
|
282
|
-
|
|
283
|
-
if (isWebGPU) {
|
|
284
|
-
// WebGPU: depad rows if needed; orientation is already top-down.
|
|
285
|
-
if (paddedBytesPerRow === actualBytesPerRow) {
|
|
286
|
-
tightPixels = new Uint8ClampedArray(pixels.buffer, pixels.byteOffset, Math.min(pixels.byteLength, tightTotal));
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
tightPixels = new Uint8ClampedArray(tightTotal);
|
|
290
|
-
for (let row = 0; row < captureHeight; row++) {
|
|
291
|
-
tightPixels.set(pixels.subarray(row * paddedBytesPerRow, row * paddedBytesPerRow + actualBytesPerRow), row * actualBytesPerRow);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
// WebGL2: tight buffer in bottom-up order — flip rows.
|
|
297
|
-
tightPixels = new Uint8ClampedArray(tightTotal);
|
|
298
|
-
for (let row = 0; row < captureHeight; row++) {
|
|
299
|
-
const srcStart = (captureHeight - 1 - row) * actualBytesPerRow;
|
|
300
|
-
tightPixels.set(pixels.subarray(srcStart, srcStart + actualBytesPerRow), row * actualBytesPerRow);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
286
|
+
const tightPixels = readbackRows(pixels, captureWidth, captureHeight, isWebGPU);
|
|
303
287
|
const imageData = new ImageData(tightPixels, captureWidth, captureHeight);
|
|
304
288
|
const srcCanvas = new OffscreenCanvas(captureWidth, captureHeight);
|
|
305
289
|
srcCanvas.getContext('2d').putImageData(imageData, 0, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture-reference.d.ts","sourceRoot":"","sources":["../../src/lib/texture-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,WAAW,GACX,QAAQ,GACR,OAAO,CAAA;AAEX,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEvD,KAAK,oBAAoB,GAAG;IAC1B,CAAC,EAAE,CAAC,CAAA;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,gBAAgB,CAAA;IACrB,UAAU,EAAE,uBAAuB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,CAAA;CAC5D,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"texture-reference.d.ts","sourceRoot":"","sources":["../../src/lib/texture-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAGnC,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,WAAW,GACX,QAAQ,GACR,OAAO,CAAA;AAEX,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEvD,KAAK,oBAAoB,GAAG;IAC1B,CAAC,EAAE,CAAC,CAAA;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,gBAAgB,CAAA;IACrB,UAAU,EAAE,uBAAuB,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,CAAA;CAC5D,CAAC,GACF,CAAC,oBAAoB,GAAG;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AA0DN,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBhE;AAMD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,KAAK,EACD;IACE;wEACoE;IACpE,IAAI,EAAE,UAAU,GAAG,eAAe,CAAA;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,GACJ,gBAAgB,GAAG,IAAI,CA6BzB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAmCnF"}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getViewerConfig } from './viewer-config';
|
|
2
2
|
const STORAGE_BUCKET_BY_KIND = {
|
|
3
3
|
'library-material': 'materials',
|
|
4
4
|
'item-glb': 'items',
|
|
5
5
|
'project-asset': 'project-assets',
|
|
6
6
|
};
|
|
7
|
+
// Keyed by the URL it was read from, so a texture stamped before the env is set never pins a
|
|
8
|
+
// null origin for the rest of the process.
|
|
7
9
|
let cachedStorageOrigin;
|
|
8
10
|
function pascalStorageOrigin() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
const url = getViewerConfig().storageUrl;
|
|
12
|
+
if (cachedStorageOrigin && cachedStorageOrigin.url === url)
|
|
13
|
+
return cachedStorageOrigin.origin;
|
|
14
|
+
let origin = null;
|
|
11
15
|
try {
|
|
12
|
-
|
|
13
|
-
cachedStorageOrigin = url ? new URL(url).origin : null;
|
|
16
|
+
origin = url ? new URL(url).origin : null;
|
|
14
17
|
}
|
|
15
|
-
catch {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return cachedStorageOrigin;
|
|
18
|
+
catch { }
|
|
19
|
+
cachedStorageOrigin = { url, origin };
|
|
20
|
+
return origin;
|
|
19
21
|
}
|
|
20
22
|
/** Static catalog materials ship in the app's public dir and resolve through
|
|
21
23
|
* the assets CDN (`/material/{category}/{slug}/{slug}_{map}_{size}.ktx2`) —
|
|
@@ -23,7 +25,8 @@ function pascalStorageOrigin() {
|
|
|
23
25
|
function isAppMaterialUrl(src) {
|
|
24
26
|
try {
|
|
25
27
|
const url = new URL(src);
|
|
26
|
-
return url.origin === new URL(
|
|
28
|
+
return (url.origin === new URL(getViewerConfig().assetsBaseUrl).origin &&
|
|
29
|
+
url.pathname.startsWith('/material/'));
|
|
27
30
|
}
|
|
28
31
|
catch {
|
|
29
32
|
return false;
|
|
@@ -19,8 +19,6 @@ export declare const AMBIANCE_SECONDS = 0.7;
|
|
|
19
19
|
export declare const FADE_SECONDS = 0.4;
|
|
20
20
|
/** The thin rim along the cut of the hole in the ground, from above. */
|
|
21
21
|
export declare const UNDERGROUND_RIM: "#3c3c3c";
|
|
22
|
-
/** The grade ring, where the ground meets the level below grade: a light rim in the dark mode. */
|
|
23
|
-
export declare const UNDERGROUND_RING: "#b4b4b4";
|
|
24
22
|
/** The corners the vignette closes in to. */
|
|
25
23
|
export declare const UNDERGROUND_VIGNETTE: "#0c0c0c";
|
|
26
24
|
/** The sky's ambient and hemisphere light, as a share of what the theme gives. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"underground-ambiance.d.ts","sourceRoot":"","sources":["../../src/lib/underground-ambiance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAkB5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIrD;;;;;;;;;;;;GAYG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,+EAA+E;AAC/E,eAAO,MAAM,YAAY,MAAM,CAAA;AAa/B,wEAAwE;AACxE,eAAO,MAAM,eAAe,WAA0B,CAAA;AACtD,
|
|
1
|
+
{"version":3,"file":"underground-ambiance.d.ts","sourceRoot":"","sources":["../../src/lib/underground-ambiance.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,8 +32,6 @@ const BACKDROP = {
|
|
|
32
32
|
};
|
|
33
33
|
/** The thin rim along the cut of the hole in the ground, from above. */
|
|
34
34
|
export const UNDERGROUND_RIM = UNDERGROUND_PALETTE.rim;
|
|
35
|
-
/** The grade ring, where the ground meets the level below grade: a light rim in the dark mode. */
|
|
36
|
-
export const UNDERGROUND_RING = UNDERGROUND_PALETTE.ring;
|
|
37
35
|
/** The corners the vignette closes in to. */
|
|
38
36
|
export const UNDERGROUND_VIGNETTE = UNDERGROUND_PALETTE.vignette;
|
|
39
37
|
/** The sky's ambient and hemisphere light, as a share of what the theme gives. */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type ViewerConfig = {
|
|
2
|
+
assetsBaseUrl?: string;
|
|
3
|
+
storageUrl?: string;
|
|
4
|
+
decoders?: {
|
|
5
|
+
dracoPath?: string;
|
|
6
|
+
basisPath?: string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare const ASSETS_CDN_URL = "https://editor.pascal.app";
|
|
10
|
+
/** Configure the page's viewer runtime before hydrating or loading assets. */
|
|
11
|
+
export declare function configureViewer(options: ViewerConfig): void;
|
|
12
|
+
/** Resolve at use time so browser hosts need neither Next nor a process polyfill. */
|
|
13
|
+
export declare function getViewerConfig(): {
|
|
14
|
+
assetsBaseUrl: string;
|
|
15
|
+
storageUrl: string | undefined;
|
|
16
|
+
decoders: {
|
|
17
|
+
dracoPath: string;
|
|
18
|
+
basisPath: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=viewer-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-config.d.ts","sourceRoot":"","sources":["../../src/lib/viewer-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,cAAc,8BAA8B,CAAA;AAIzD,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE3D;AAED,qFAAqF;AACrF,wBAAgB,eAAe;IAE3B,aAAa;IAIb,UAAU;IAGV,QAAQ;QACN,SAAS;QAET,SAAS;;EAKd"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const ASSETS_CDN_URL = 'https://editor.pascal.app';
|
|
2
|
+
let config = {};
|
|
3
|
+
/** Configure the page's viewer runtime before hydrating or loading assets. */
|
|
4
|
+
export function configureViewer(options) {
|
|
5
|
+
config = { ...options, decoders: { ...options.decoders } };
|
|
6
|
+
}
|
|
7
|
+
/** Resolve at use time so browser hosts need neither Next nor a process polyfill. */
|
|
8
|
+
export function getViewerConfig() {
|
|
9
|
+
return {
|
|
10
|
+
assetsBaseUrl: config.assetsBaseUrl ??
|
|
11
|
+
((typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_ASSETS_CDN_URL : undefined) ||
|
|
12
|
+
ASSETS_CDN_URL),
|
|
13
|
+
storageUrl: config.storageUrl ??
|
|
14
|
+
(typeof process !== 'undefined' ? process.env.NEXT_PUBLIC_SUPABASE_URL : undefined),
|
|
15
|
+
decoders: {
|
|
16
|
+
dracoPath: config.decoders?.dracoPath ?? 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/',
|
|
17
|
+
basisPath: config.decoders?.basisPath ??
|
|
18
|
+
'https://cdn.jsdelivr.net/npm/three@0.187.0/examples/jsm/libs/basis/',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Browser privacy settings can deny even access to the localStorage property. */
|
|
2
|
+
export declare const viewerPreferenceStorage: {
|
|
3
|
+
getItem(name: string): string | null;
|
|
4
|
+
setItem(name: string, value: string): void;
|
|
5
|
+
removeItem(name: string): void;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=viewer-preference-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewer-preference-storage.d.ts","sourceRoot":"","sources":["../../src/lib/viewer-preference-storage.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,uBAAuB;;;;CAkBZ,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Browser privacy settings can deny even access to the localStorage property. */
|
|
2
|
+
export const viewerPreferenceStorage = {
|
|
3
|
+
getItem(name) {
|
|
4
|
+
try {
|
|
5
|
+
return window.localStorage.getItem(name);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
setItem(name, value) {
|
|
12
|
+
try {
|
|
13
|
+
window.localStorage.setItem(name, value);
|
|
14
|
+
}
|
|
15
|
+
catch { }
|
|
16
|
+
},
|
|
17
|
+
removeItem(name) {
|
|
18
|
+
try {
|
|
19
|
+
window.localStorage.removeItem(name);
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type AnyNodeId, type Interactive, type LightEffect } from '@pascal-app/core';
|
|
2
|
-
import type
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { type Object3D } from 'three';
|
|
3
|
+
import type { PooledLight } from '../systems/item-light/pooled-lights';
|
|
4
|
+
export type LightSource = PooledLight & {
|
|
5
5
|
nodeId: AnyNodeId;
|
|
6
|
-
color: string;
|
|
7
|
-
distance: number;
|
|
8
|
-
getWorldPosition: (out: Vector3) => boolean;
|
|
9
6
|
getIntensity: () => number;
|
|
10
7
|
isEligible: () => boolean;
|
|
11
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-item-light-pool.d.ts","sourceRoot":"","sources":["../../src/store/use-item-light-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"use-item-light-pool.d.ts","sourceRoot":"","sources":["../../src/store/use-item-light-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAIjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEtE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,MAAM,EAAE,SAAS,CAAA;IACjB,YAAY,EAAE,MAAM,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAA;CAC1B,CAAA;AAID,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7C,WAAW,CAiDb;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACvC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC5B,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC1D,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,gBAAgB,iFAkB1B,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { sceneRegistry, useInteractive, } from '@pascal-app/core';
|
|
2
|
+
import { Quaternion } from 'three';
|
|
2
3
|
import { create } from 'zustand';
|
|
4
|
+
const _quaternion = new Quaternion();
|
|
3
5
|
export function catalogLightSource(key, nodeId, effect, interactive, localScale) {
|
|
4
6
|
const toggleIndex = interactive.controls.findIndex((control) => control.kind === 'toggle');
|
|
5
7
|
const sliderIndex = interactive.controls.findIndex((control) => control.kind === 'slider');
|
|
@@ -9,6 +11,16 @@ export function catalogLightSource(key, nodeId, effect, interactive, localScale)
|
|
|
9
11
|
nodeId,
|
|
10
12
|
color: effect.color,
|
|
11
13
|
distance: effect.distance ?? 0,
|
|
14
|
+
spot: effect.spot,
|
|
15
|
+
shadows: effect.shadows,
|
|
16
|
+
glow: effect.glow,
|
|
17
|
+
peak: effect.intensityRange[1],
|
|
18
|
+
getWorldDirection: (out) => {
|
|
19
|
+
const object = sceneRegistry.nodes.get(nodeId);
|
|
20
|
+
out.set(...(effect.spot?.direction ?? [0, -1, 0])).normalize();
|
|
21
|
+
if (object)
|
|
22
|
+
out.applyQuaternion(object.getWorldQuaternion(_quaternion));
|
|
23
|
+
},
|
|
12
24
|
getWorldPosition: (out) => {
|
|
13
25
|
const object = sceneRegistry.nodes.get(nodeId);
|
|
14
26
|
if (!object)
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { AnyNode, BaseNode, BuildingNode, GroundBox, LevelGradeStanding, LevelNode, SitePresentation, UnitNode, ZoneNode } from '@pascal-app/core';
|
|
2
2
|
import type { Object3D } from 'three';
|
|
3
|
+
import type { LatLng } from '../lib/daylight/location';
|
|
4
|
+
import type { Weather } from '../lib/daylight/sky';
|
|
5
|
+
import type { TimeOfDay } from '../lib/daylight/solar';
|
|
3
6
|
import type { EdgeMode } from '../lib/edge-style';
|
|
4
7
|
import type { ColorPreset, RenderShading } from '../lib/materials';
|
|
5
8
|
import { type SceneTheme } from '../lib/scene-themes';
|
|
6
9
|
export type RenderContext = 'editor' | 'viewer';
|
|
10
|
+
export type RenderQuality = 'low' | 'medium' | 'high';
|
|
11
|
+
/** A quality tier, or `auto`: the tier the device was detected for. */
|
|
12
|
+
export type RenderQualityChoice = RenderQuality | 'auto';
|
|
7
13
|
export type MetricNotation = 'meters' | 'millimeters';
|
|
8
14
|
export type WallMode = 'up' | 'cutaway' | 'down' | 'translucent';
|
|
15
|
+
export type WalkthroughMovement = 'walk' | 'drone';
|
|
9
16
|
type SelectionPath = {
|
|
10
17
|
buildingId: BuildingNode['id'] | null;
|
|
11
18
|
levelId: LevelNode['id'] | null;
|
|
@@ -160,13 +167,6 @@ type ViewerState = {
|
|
|
160
167
|
* viewer's underground ambiance from the camera; never persisted.
|
|
161
168
|
*/
|
|
162
169
|
eyeUnderGround: boolean;
|
|
163
|
-
/**
|
|
164
|
-
* Levels whose foundation a plugin is drawing under the ground right now (a framing plugin pours
|
|
165
|
-
* the real footing and stem from the building's record). The generic foundation derived from the
|
|
166
|
-
* walls is not drawn under these levels, so nothing is drawn twice. Written by that plugin while
|
|
167
|
-
* its meshes are mounted, empty otherwise; never persisted.
|
|
168
|
-
*/
|
|
169
|
-
pluginFoundationLevelIds: readonly string[];
|
|
170
170
|
/**
|
|
171
171
|
* The world is turned, or turning, to earth (the underground ambiance's factor is above 0).
|
|
172
172
|
* Its factor itself eases every frame and lives with the shaders, not here; this flips only at
|
|
@@ -192,8 +192,56 @@ type ViewerState = {
|
|
|
192
192
|
setShowMeasurements: (show: boolean) => void;
|
|
193
193
|
showZones: boolean;
|
|
194
194
|
setShowZones: (show: boolean) => void;
|
|
195
|
+
/**
|
|
196
|
+
* Ceilings also draw their upper face, so they read as solid from above: a roof seen over closed
|
|
197
|
+
* rooms. Off, a camera above looks into the rooms, the ceiling showing only from below. The
|
|
198
|
+
* editor drives it from its Ceilings display setting; not persisted.
|
|
199
|
+
*/
|
|
200
|
+
showCeilingTops: boolean;
|
|
201
|
+
setShowCeilingTops: (show: boolean) => void;
|
|
202
|
+
/**
|
|
203
|
+
* The house as its frame: a framing plugin draws the studs, plates, headers, joists and rafters of
|
|
204
|
+
* every storey and hides the shell over them; the foundation stays. Not persisted.
|
|
205
|
+
*/
|
|
206
|
+
framingOnly: boolean;
|
|
207
|
+
setFramingOnly: (on: boolean) => void;
|
|
208
|
+
/**
|
|
209
|
+
* The frame in the finished house: a framing plugin draws the studs, joists and rafters with the
|
|
210
|
+
* shell left as it is, and the roof decks draw open where their rafters are, so the frame shows
|
|
211
|
+
* where it is exposed (the attic) and stays hidden inside the walls and the finished ceilings.
|
|
212
|
+
* Framing only wins while both are on. Not persisted.
|
|
213
|
+
*/
|
|
214
|
+
framingShown: boolean;
|
|
215
|
+
setFramingShown: (on: boolean) => void;
|
|
195
216
|
transparentBackground: boolean;
|
|
196
217
|
setTransparentBackground: (transparent: boolean) => void;
|
|
218
|
+
/** Colored appearance: time-of-day preset driving the built-in daylight sun and sky. */
|
|
219
|
+
timeOfDay: TimeOfDay;
|
|
220
|
+
/** A preset: clears any exact time and the live clock. */
|
|
221
|
+
setTimeOfDay: (timeOfDay: TimeOfDay) => void;
|
|
222
|
+
/** An exact time (minutes after local mean midnight at the site); null follows `timeOfDay`. */
|
|
223
|
+
timeOfDayMinutes: number | null;
|
|
224
|
+
setTimeOfDayMinutes: (minutes: number | null) => void;
|
|
225
|
+
/** The sky follows the clock: now, live. */
|
|
226
|
+
skyLive: boolean;
|
|
227
|
+
setSkyLive: (live: boolean) => void;
|
|
228
|
+
/** Colored appearance: cloud cover preset. */
|
|
229
|
+
weather: Weather;
|
|
230
|
+
setWeather: (weather: Weather) => void;
|
|
231
|
+
/** A device position the user chose to share; used when the site has no geocoded point. */
|
|
232
|
+
deviceLocation: LatLng | null;
|
|
233
|
+
setDeviceLocation: (location: LatLng | null) => void;
|
|
234
|
+
/** Post-processing tier of the colored appearance (bloom/AO/AA/shadow resolution) in effect:
|
|
235
|
+
* the user's pick, or on `auto` the tier detected for the device. */
|
|
236
|
+
renderQuality: RenderQuality;
|
|
237
|
+
/** What the user picked (persisted); `auto` follows `detectedRenderQuality`. */
|
|
238
|
+
renderQualityChoice: RenderQualityChoice;
|
|
239
|
+
/** The tier the device's capabilities call for (GPU, memory, form factor); never persisted. */
|
|
240
|
+
detectedRenderQuality: RenderQuality | null;
|
|
241
|
+
/** The device renders on the CPU (software adapter or rasterizer); never persisted. */
|
|
242
|
+
softwareRenderer: boolean;
|
|
243
|
+
setRenderQuality: (quality: RenderQualityChoice) => void;
|
|
244
|
+
setDetectedRenderQuality: (quality: RenderQuality, softwareRenderer?: boolean) => void;
|
|
197
245
|
inkOpacity: number | null;
|
|
198
246
|
setInkOpacity: (opacity: number | null) => void;
|
|
199
247
|
projectId: string | null;
|
|
@@ -216,8 +264,13 @@ type ViewerState = {
|
|
|
216
264
|
setExportScene: (fn: ((format?: 'glb' | 'usdz' | 'stl' | 'obj') => Promise<void>) | null) => void;
|
|
217
265
|
debugColors: boolean;
|
|
218
266
|
setDebugColors: (enabled: boolean) => void;
|
|
267
|
+
/** A first-person camera is active (walk or drone): orbit controls and selection stand aside. */
|
|
219
268
|
walkthroughMode: boolean;
|
|
220
269
|
setWalkthroughMode: (mode: boolean) => void;
|
|
270
|
+
/** How the first-person camera moves: on foot (collision, doors) or as a free-flying drone.
|
|
271
|
+
* Back to `walk` whenever the walkthrough ends. */
|
|
272
|
+
walkthroughMovement: WalkthroughMovement;
|
|
273
|
+
setWalkthroughMovement: (movement: WalkthroughMovement) => void;
|
|
221
274
|
/** Pointer lock temporarily released mid-walkthrough (⌘/PrintScreen — OS
|
|
222
275
|
* screenshot needs a movable cursor); clicking the canvas re-locks. */
|
|
223
276
|
walkthroughSuspended: boolean;
|
|
@@ -243,55 +296,13 @@ declare const useViewer: import("zustand").UseBoundStore<Omit<import("zustand").
|
|
|
243
296
|
setState(partial: Partial<ViewerState> | ViewerState | ((state: ViewerState) => Partial<ViewerState> | ViewerState), replace?: false | undefined): unknown;
|
|
244
297
|
setState(state: ViewerState | ((state: ViewerState) => ViewerState), replace: true): unknown;
|
|
245
298
|
persist: {
|
|
246
|
-
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ViewerState,
|
|
247
|
-
cameraMode: "orthographic" | "perspective";
|
|
248
|
-
sceneTheme: string;
|
|
249
|
-
shadingByContext: Partial<Record<RenderContext, RenderShading>>;
|
|
250
|
-
textures: boolean;
|
|
251
|
-
colorPreset: ColorPreset;
|
|
252
|
-
edges: EdgeMode;
|
|
253
|
-
shadows: boolean;
|
|
254
|
-
unit?: "imperial" | "metric" | undefined;
|
|
255
|
-
metricNotation: MetricNotation;
|
|
256
|
-
levelMode: "exploded" | "manual" | "solo" | "stacked";
|
|
257
|
-
wallMode: WallMode;
|
|
258
|
-
projectPreferences: {
|
|
259
|
-
[k: string]: {
|
|
260
|
-
look?: LocalLook;
|
|
261
|
-
showScans?: boolean;
|
|
262
|
-
showGuides?: boolean;
|
|
263
|
-
showGrid?: boolean;
|
|
264
|
-
showMeasurements?: boolean;
|
|
265
|
-
};
|
|
266
|
-
};
|
|
267
|
-
}, unknown>>) => void;
|
|
299
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<ViewerState, unknown, unknown>>) => void;
|
|
268
300
|
clearStorage: () => void;
|
|
269
301
|
rehydrate: () => Promise<void> | void;
|
|
270
302
|
hasHydrated: () => boolean;
|
|
271
303
|
onHydrate: (fn: (state: ViewerState) => void) => () => void;
|
|
272
304
|
onFinishHydration: (fn: (state: ViewerState) => void) => () => void;
|
|
273
|
-
getOptions: () => Partial<import("zustand/middleware").PersistOptions<ViewerState,
|
|
274
|
-
cameraMode: "orthographic" | "perspective";
|
|
275
|
-
sceneTheme: string;
|
|
276
|
-
shadingByContext: Partial<Record<RenderContext, RenderShading>>;
|
|
277
|
-
textures: boolean;
|
|
278
|
-
colorPreset: ColorPreset;
|
|
279
|
-
edges: EdgeMode;
|
|
280
|
-
shadows: boolean;
|
|
281
|
-
unit?: "imperial" | "metric" | undefined;
|
|
282
|
-
metricNotation: MetricNotation;
|
|
283
|
-
levelMode: "exploded" | "manual" | "solo" | "stacked";
|
|
284
|
-
wallMode: WallMode;
|
|
285
|
-
projectPreferences: {
|
|
286
|
-
[k: string]: {
|
|
287
|
-
look?: LocalLook;
|
|
288
|
-
showScans?: boolean;
|
|
289
|
-
showGuides?: boolean;
|
|
290
|
-
showGrid?: boolean;
|
|
291
|
-
showMeasurements?: boolean;
|
|
292
|
-
};
|
|
293
|
-
};
|
|
294
|
-
}, unknown>>;
|
|
305
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<ViewerState, unknown, unknown>>;
|
|
295
306
|
};
|
|
296
307
|
}>;
|
|
297
308
|
/**
|
|
@@ -325,14 +336,6 @@ export declare function groundVeiled(state: {
|
|
|
325
336
|
gradeStanding?: LevelGradeStanding;
|
|
326
337
|
walkthroughMode?: boolean;
|
|
327
338
|
}): boolean;
|
|
328
|
-
/** Whether any ground is veiled now, wholesale or through the eye's window. */
|
|
329
|
-
export declare function anyGroundVeiled(state: {
|
|
330
|
-
belowGrade: boolean;
|
|
331
|
-
groundMode: GroundMode;
|
|
332
|
-
gradeStanding?: LevelGradeStanding;
|
|
333
|
-
groundWindowVeiled: boolean;
|
|
334
|
-
walkthroughMode?: boolean;
|
|
335
|
-
}): boolean;
|
|
336
339
|
/**
|
|
337
340
|
* Whether the site draws its own ground. `showGround: false` says other geometry supplies the
|
|
338
341
|
* ground (an authored landscape), which stands on a level above a basement; while a level below
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-viewer.d.ts","sourceRoot":"","sources":["../../src/store/use-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAIrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"use-viewer.d.ts","sourceRoot":"","sources":["../../src/store/use-viewer.ts"],"names":[],"mappings":"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"}
|