@ifc-lite/renderer 3.2.0 → 4.2.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/dist/aabb-edges.d.ts +10 -0
- package/dist/aabb-edges.d.ts.map +1 -1
- package/dist/aabb-edges.js +13 -0
- package/dist/aabb-edges.js.map +1 -1
- package/dist/ao-params.d.ts +85 -0
- package/dist/ao-params.d.ts.map +1 -0
- package/dist/ao-params.js +109 -0
- package/dist/ao-params.js.map +1 -0
- package/dist/ao-pass.d.ts +47 -0
- package/dist/ao-pass.d.ts.map +1 -0
- package/dist/ao-pass.js +157 -0
- package/dist/ao-pass.js.map +1 -0
- package/dist/camera-matrices.d.ts +3 -0
- package/dist/camera-matrices.d.ts.map +1 -1
- package/dist/camera-matrices.js +12 -1
- package/dist/camera-matrices.js.map +1 -1
- package/dist/camera-orientation.d.ts +62 -0
- package/dist/camera-orientation.d.ts.map +1 -0
- package/dist/camera-orientation.js +155 -0
- package/dist/camera-orientation.js.map +1 -0
- package/dist/camera-projection.d.ts +3 -1
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +26 -20
- package/dist/camera-projection.js.map +1 -1
- package/dist/camera-surface-zoom.d.ts +32 -0
- package/dist/camera-surface-zoom.d.ts.map +1 -0
- package/dist/camera-surface-zoom.js +37 -0
- package/dist/camera-surface-zoom.js.map +1 -0
- package/dist/camera.d.ts +32 -61
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +71 -167
- package/dist/camera.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts +9 -3
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +31 -8
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -3
- package/dist/constants.js.map +1 -1
- package/dist/depth-reconstruct.d.ts +43 -0
- package/dist/depth-reconstruct.d.ts.map +1 -0
- package/dist/depth-reconstruct.js +35 -0
- package/dist/depth-reconstruct.js.map +1 -0
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/environment.d.ts +26 -15
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +24 -13
- package/dist/environment.js.map +1 -1
- package/dist/federation-registry.d.ts +16 -0
- package/dist/federation-registry.d.ts.map +1 -1
- package/dist/federation-registry.js +80 -9
- package/dist/federation-registry.js.map +1 -1
- package/dist/gpu-static-upload.d.ts +39 -0
- package/dist/gpu-static-upload.d.ts.map +1 -0
- package/dist/gpu-static-upload.js +70 -0
- package/dist/gpu-static-upload.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +12 -23
- package/dist/gpu-upload-guard.d.ts.map +1 -1
- package/dist/gpu-upload-guard.js +12 -26
- package/dist/gpu-upload-guard.js.map +1 -1
- package/dist/index.d.ts +29 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +201 -252
- package/dist/index.js.map +1 -1
- package/dist/instanced-render.d.ts +22 -2
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +47 -10
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +17 -0
- package/dist/instanced-rte.d.ts.map +1 -0
- package/dist/instanced-rte.js +32 -0
- package/dist/instanced-rte.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +46 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +59 -0
- package/dist/mesh-rte-uniforms.js.map +1 -0
- package/dist/model-bounds-tracker.d.ts +7 -0
- package/dist/model-bounds-tracker.d.ts.map +1 -1
- package/dist/model-bounds-tracker.js +16 -5
- package/dist/model-bounds-tracker.js.map +1 -1
- package/dist/model-translation.d.ts +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +50 -2
- package/dist/model-translation.js.map +1 -1
- package/dist/pick-rte-snapshot.d.ts +7 -0
- package/dist/pick-rte-snapshot.d.ts.map +1 -0
- package/dist/pick-rte-snapshot.js +15 -0
- package/dist/pick-rte-snapshot.js.map +1 -0
- package/dist/pick-types.d.ts +17 -0
- package/dist/pick-types.d.ts.map +1 -0
- package/dist/pick-types.js +5 -0
- package/dist/pick-types.js.map +1 -0
- package/dist/pick-uniforms.d.ts +6 -0
- package/dist/pick-uniforms.d.ts.map +1 -1
- package/dist/pick-uniforms.js +22 -18
- package/dist/pick-uniforms.js.map +1 -1
- package/dist/pick-world-position.d.ts +18 -0
- package/dist/pick-world-position.d.ts.map +1 -0
- package/dist/pick-world-position.js +21 -0
- package/dist/pick-world-position.js.map +1 -0
- package/dist/picker-readbacks.d.ts +6 -0
- package/dist/picker-readbacks.d.ts.map +1 -0
- package/dist/picker-readbacks.js +20 -0
- package/dist/picker-readbacks.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +6 -0
- package/dist/picker-rte-uniforms.d.ts.map +1 -0
- package/dist/picker-rte-uniforms.js +41 -0
- package/dist/picker-rte-uniforms.js.map +1 -0
- package/dist/picker.d.ts +6 -7
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +88 -115
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +8 -0
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +46 -19
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +1 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +17 -20
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +5 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +49 -9
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
- package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
- package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
- package/dist/pointcloud/point-cloud-node.d.ts +14 -6
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
- package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
- package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
- package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-placement.js +20 -5
- package/dist/pointcloud/point-cloud-placement.js.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
- package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
- package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +46 -52
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +55 -44
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
- package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-visibility.js +18 -0
- package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
- package/dist/pointcloud/point-pipeline.d.ts +4 -9
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
- package/dist/pointcloud/point-pipeline.js +4 -9
- package/dist/pointcloud/point-pipeline.js.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.js +25 -5
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
- package/dist/post-pass-chain.d.ts +38 -0
- package/dist/post-pass-chain.d.ts.map +1 -0
- package/dist/post-pass-chain.js +99 -0
- package/dist/post-pass-chain.js.map +1 -0
- package/dist/post-processor.d.ts +12 -26
- package/dist/post-processor.d.ts.map +1 -1
- package/dist/post-processor.js +14 -72
- package/dist/post-processor.js.map +1 -1
- package/dist/raycast-engine.d.ts +7 -5
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +17 -20
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +1 -1
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/reference-image-pipeline.d.ts +1 -1
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +25 -7
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/reference-images.d.ts +1 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +13 -5
- package/dist/reference-images.js.map +1 -1
- package/dist/relative-to-eye.d.ts +146 -0
- package/dist/relative-to-eye.d.ts.map +1 -0
- package/dist/relative-to-eye.js +326 -0
- package/dist/relative-to-eye.js.map +1 -0
- package/dist/render-section-draw.d.ts +11 -0
- package/dist/render-section-draw.d.ts.map +1 -1
- package/dist/render-section-draw.js +6 -3
- package/dist/render-section-draw.js.map +1 -1
- package/dist/renderer-color-readback.d.ts +50 -0
- package/dist/renderer-color-readback.d.ts.map +1 -0
- package/dist/renderer-color-readback.js +145 -0
- package/dist/renderer-color-readback.js.map +1 -0
- package/dist/renderer-overlays.d.ts +12 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +33 -20
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/renderer-screenshot.d.ts +4 -0
- package/dist/renderer-screenshot.d.ts.map +1 -0
- package/dist/renderer-screenshot.js +17 -0
- package/dist/renderer-screenshot.js.map +1 -0
- package/dist/renderer-symbolic-overlays.d.ts +4 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +33 -13
- package/dist/renderer-symbolic-overlays.js.map +1 -1
- package/dist/renderer-viewport.d.ts +45 -0
- package/dist/renderer-viewport.d.ts.map +1 -1
- package/dist/renderer-viewport.js +44 -0
- package/dist/renderer-viewport.js.map +1 -1
- package/dist/rte-clip-space.d.ts +12 -0
- package/dist/rte-clip-space.d.ts.map +1 -0
- package/dist/rte-clip-space.js +22 -0
- package/dist/rte-clip-space.js.map +1 -0
- package/dist/rte-frustum.d.ts +24 -0
- package/dist/rte-frustum.d.ts.map +1 -0
- package/dist/rte-frustum.js +45 -0
- package/dist/rte-frustum.js.map +1 -0
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +14 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +5 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-finalize-regroup.d.ts +54 -0
- package/dist/scene-finalize-regroup.d.ts.map +1 -0
- package/dist/scene-finalize-regroup.js +136 -0
- package/dist/scene-finalize-regroup.js.map +1 -0
- package/dist/scene-instance-bounds.d.ts +12 -0
- package/dist/scene-instance-bounds.d.ts.map +1 -0
- package/dist/scene-instance-bounds.js +48 -0
- package/dist/scene-instance-bounds.js.map +1 -0
- package/dist/scene-instance-materialization.d.ts +4 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +21 -6
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +17 -0
- package/dist/scene-instance-translation.d.ts.map +1 -0
- package/dist/scene-instance-translation.js +50 -0
- package/dist/scene-instance-translation.js.map +1 -0
- package/dist/scene-instance-types.d.ts +6 -0
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-model-translation.d.ts +2 -0
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +1 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-rect-select.d.ts +11 -1
- package/dist/scene-rect-select.d.ts.map +1 -1
- package/dist/scene-rect-select.js +7 -4
- package/dist/scene-rect-select.js.map +1 -1
- package/dist/scene.d.ts +17 -19
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +109 -238
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-lift.d.ts +10 -2
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +14 -6
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +12 -4
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +59 -33
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +18 -72
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +72 -103
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +38 -0
- package/dist/section-2d-types.d.ts.map +1 -0
- package/dist/section-2d-types.js +6 -0
- package/dist/section-2d-types.js.map +1 -0
- package/dist/section-cap-pipelines.d.ts +6 -0
- package/dist/section-cap-pipelines.d.ts.map +1 -0
- package/dist/section-cap-pipelines.js +87 -0
- package/dist/section-cap-pipelines.js.map +1 -0
- package/dist/section-plane-geometry.d.ts +24 -0
- package/dist/section-plane-geometry.d.ts.map +1 -0
- package/dist/section-plane-geometry.js +93 -0
- package/dist/section-plane-geometry.js.map +1 -0
- package/dist/section-plane.d.ts +23 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +58 -174
- package/dist/section-plane.js.map +1 -1
- package/dist/shaders/ao.wgsl.d.ts +2 -0
- package/dist/shaders/ao.wgsl.d.ts.map +1 -0
- package/dist/shaders/ao.wgsl.js +234 -0
- package/dist/shaders/ao.wgsl.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +26 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +53 -0
- package/dist/shaders/color-transfer.wgsl.js.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
- package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -6
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +110 -159
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
- package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
- package/dist/shaders/relative-to-eye.wgsl.js +40 -0
- package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +25 -7
- package/dist/shaders/shadow.wgsl.js.map +1 -1
- package/dist/shaders/sky.wgsl.d.ts +1 -11
- package/dist/shaders/sky.wgsl.d.ts.map +1 -1
- package/dist/shaders/sky.wgsl.js +17 -19
- package/dist/shaders/sky.wgsl.js.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
- package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
- package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
- package/dist/shaders/textured.wgsl.d.ts.map +1 -1
- package/dist/shaders/textured.wgsl.js +11 -9
- package/dist/shaders/textured.wgsl.js.map +1 -1
- package/dist/shadow-light-matrix.d.ts +7 -0
- package/dist/shadow-light-matrix.d.ts.map +1 -1
- package/dist/shadow-light-matrix.js +11 -0
- package/dist/shadow-light-matrix.js.map +1 -1
- package/dist/shadow-occluder-batches.d.ts +10 -0
- package/dist/shadow-occluder-batches.d.ts.map +1 -0
- package/dist/shadow-occluder-batches.js +39 -0
- package/dist/shadow-occluder-batches.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +4 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +5 -51
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +49 -45
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +39 -0
- package/dist/shadow-types.d.ts.map +1 -0
- package/dist/shadow-types.js +15 -0
- package/dist/shadow-types.js.map +1 -0
- package/dist/symbolic-overlay-geometry.d.ts +7 -0
- package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
- package/dist/symbolic-overlay-geometry.js +43 -0
- package/dist/symbolic-overlay-geometry.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +24 -36
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +175 -182
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-atlas.d.ts +21 -0
- package/dist/symbolic-text-atlas.d.ts.map +1 -1
- package/dist/symbolic-text-atlas.js +29 -1
- package/dist/symbolic-text-atlas.js.map +1 -1
- package/dist/types.d.ts +20 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +23 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +38 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
package/dist/aabb-edges.d.ts
CHANGED
|
@@ -3,4 +3,14 @@
|
|
|
3
3
|
* of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
|
|
4
4
|
*/
|
|
5
5
|
export declare function aabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): Float32Array;
|
|
6
|
+
/**
|
|
7
|
+
* The same twelve edges in a local f32 frame. Clash diagnostics receive
|
|
8
|
+
* world-f64 bounds, so materialising their corners as absolute f32 values at a
|
|
9
|
+
* national-grid coordinate would collapse a centimetre-wide interference box
|
|
10
|
+
* before the renderer can apply its RTE contract.
|
|
11
|
+
*/
|
|
12
|
+
export declare function anchoredAabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): {
|
|
13
|
+
localVertices: Float32Array;
|
|
14
|
+
origin: [number, number, number];
|
|
15
|
+
};
|
|
6
16
|
//# sourceMappingURL=aabb-edges.d.ts.map
|
package/dist/aabb-edges.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd"}
|
|
1
|
+
{"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC;IAAE,aAAa,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CASnE"}
|
package/dist/aabb-edges.js
CHANGED
|
@@ -31,4 +31,17 @@ export function aabbEdgeLineList(min, max) {
|
|
|
31
31
|
}
|
|
32
32
|
return out;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The same twelve edges in a local f32 frame. Clash diagnostics receive
|
|
36
|
+
* world-f64 bounds, so materialising their corners as absolute f32 values at a
|
|
37
|
+
* national-grid coordinate would collapse a centimetre-wide interference box
|
|
38
|
+
* before the renderer can apply its RTE contract.
|
|
39
|
+
*/
|
|
40
|
+
export function anchoredAabbEdgeLineList(min, max) {
|
|
41
|
+
const origin = [min[0], min[1], min[2]];
|
|
42
|
+
return {
|
|
43
|
+
localVertices: aabbEdgeLineList([0, 0, 0], [max[0] - origin[0], max[1] - origin[1], max[2] - origin[2]]),
|
|
44
|
+
origin,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
34
47
|
//# sourceMappingURL=aabb-edges.js.map
|
package/dist/aabb-edges.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsC,EACtC,GAAsC;IAEtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,YAAY;IACZ,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;QAClE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;KACnE,CAAC;IACF,iCAAiC;IACjC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;KAC7C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsC,EACtC,GAAsC;IAEtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,YAAY;IACZ,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;QAClE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;KACnE,CAAC;IACF,iCAAiC;IACjC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;KAC7C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAsC,EACtC,GAAsC;IAEtC,MAAM,MAAM,GAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO;QACL,aAAa,EAAE,gBAAgB,CAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACT,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7D;QACD,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ContactShadingQuality, Mat4 } from './types.js';
|
|
2
|
+
export type AoQuality = Exclude<ContactShadingQuality, 'off'>;
|
|
3
|
+
export interface AoQualityPreset {
|
|
4
|
+
/** AO target is the drawing buffer divided by this (2 = half resolution). */
|
|
5
|
+
resolutionDivisor: 1 | 2;
|
|
6
|
+
/** Depth taps per AO texel. */
|
|
7
|
+
samples: number;
|
|
8
|
+
/** Turns of the sampling spiral; coprime-ish with `samples` so taps do not line up. */
|
|
9
|
+
spiralTurns: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const AO_QUALITY_PRESETS: Readonly<Record<AoQuality, AoQualityPreset>>;
|
|
12
|
+
/** Kernel slots in the uniform; every preset must fit. */
|
|
13
|
+
export declare const AO_MAX_SAMPLES = 16;
|
|
14
|
+
/**
|
|
15
|
+
* Accepted `contactShading.radius`, in world units (metres for IFC models,
|
|
16
|
+
* which the geometry pipeline normalises to metres).
|
|
17
|
+
*/
|
|
18
|
+
export declare const AO_RADIUS_RANGE: {
|
|
19
|
+
readonly min: 0.05;
|
|
20
|
+
readonly max: 10;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Cap on the projected radius, as a fraction of the drawing-buffer height.
|
|
24
|
+
* Close to the camera a 1 m radius covers most of the screen; the cap keeps
|
|
25
|
+
* the taps local (and texture-cache friendly) at the cost of a smaller
|
|
26
|
+
* effective radius there.
|
|
27
|
+
*/
|
|
28
|
+
export declare const AO_MAX_RADIUS_FRACTION = 0.15;
|
|
29
|
+
/**
|
|
30
|
+
* Cosine bias: a tap must rise at least this far above the tangent plane to
|
|
31
|
+
* occlude. Suppresses self-occlusion from depth quantisation on flat faces.
|
|
32
|
+
*/
|
|
33
|
+
export declare const AO_COSINE_BIAS = 0.1;
|
|
34
|
+
/**
|
|
35
|
+
* Relative depth difference at which the bilateral blur and the upsample
|
|
36
|
+
* stop mixing two AO texels (a silhouette or a step, not the same surface).
|
|
37
|
+
*/
|
|
38
|
+
export declare const AO_DEPTH_TOLERANCE = 0.04;
|
|
39
|
+
/**
|
|
40
|
+
* The composite darkens by `min(occlusion * AO_GAIN * intensity,
|
|
41
|
+
* AO_MAX_DARKEN)`. `occlusion` is the tap average in [0, 1]: 1 would need
|
|
42
|
+
* every tap straight above the tangent plane and at zero distance, so real
|
|
43
|
+
* corners read well below it and the gain lifts them into view.
|
|
44
|
+
*/
|
|
45
|
+
export declare const AO_GAIN = 2;
|
|
46
|
+
/** Darkening never exceeds this, so a crevice keeps its colour. */
|
|
47
|
+
export declare const AO_MAX_DARKEN = 0.85;
|
|
48
|
+
/** Size of the AO target for a drawing buffer at `quality`. */
|
|
49
|
+
export declare function aoTargetSize(width: number, height: number, quality: AoQuality): {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Unit-disk sample offsets on a spiral (the SAO pattern): tap `i` sits at
|
|
55
|
+
* radius `(i + 0.5) / samples` and angle `radius * turns * 2pi`. Radii grow
|
|
56
|
+
* linearly, so taps crowd towards the centre where contact occlusion lives.
|
|
57
|
+
* Returns `AO_MAX_SAMPLES` (x, y) pairs; slots past `samples` are zero.
|
|
58
|
+
*/
|
|
59
|
+
export declare function spiralKernel(samples: number, turns: number): Float32Array;
|
|
60
|
+
/** Float offsets of the `AoParams` struct fields in `shaders/ao.wgsl.ts`. */
|
|
61
|
+
export declare const AO_UNIFORM_LAYOUT: {
|
|
62
|
+
readonly depthParams: 0;
|
|
63
|
+
readonly xyParams: 4;
|
|
64
|
+
readonly viewport: 8;
|
|
65
|
+
readonly ao: 12;
|
|
66
|
+
readonly misc: 16;
|
|
67
|
+
readonly kernel: 20;
|
|
68
|
+
};
|
|
69
|
+
/** Byte size of `AoParams` (13 vec4s: five of parameters, eight of kernel). */
|
|
70
|
+
export declare const AO_UNIFORM_BYTES: number;
|
|
71
|
+
export interface AoFrameParams {
|
|
72
|
+
/** Camera projection the frame was drawn with (reverse-Z). */
|
|
73
|
+
projection: Mat4;
|
|
74
|
+
/** Drawing-buffer size in pixels. */
|
|
75
|
+
width: number;
|
|
76
|
+
height: number;
|
|
77
|
+
quality: AoQuality;
|
|
78
|
+
/** World-space radius, already clamped to `AO_RADIUS_RANGE`. */
|
|
79
|
+
radius: number;
|
|
80
|
+
/** Darkening strength, already clamped to [0, 1]. */
|
|
81
|
+
intensity: number;
|
|
82
|
+
}
|
|
83
|
+
/** Pack one frame's `AoParams` into `out` (`AO_UNIFORM_BYTES / 4` floats). */
|
|
84
|
+
export declare function packAoUniforms(out: Float32Array, frame: AoFrameParams): void;
|
|
85
|
+
//# sourceMappingURL=ao-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ao-params.d.ts","sourceRoot":"","sources":["../src/ao-params.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;IACzB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAG3E,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CAAkC,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,IAAM,CAAC;AAE3B,mEAAmE;AACnE,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGjH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAYzE;AAQD,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,QAAsD,CAAC;AAEpF,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,UAAU,EAAE,IAAI,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;IACnB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAmB5E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* CPU side of the screen-space ambient occlusion pass (#5384): quality
|
|
6
|
+
* presets, the sampling kernel and the uniform layout shared with
|
|
7
|
+
* `shaders/ao.wgsl.ts`. Pure functions, so the numbers the GPU sees are
|
|
8
|
+
* unit-tested.
|
|
9
|
+
*/
|
|
10
|
+
import { depthReconstructParams, pixelsPerWorldUnit } from './depth-reconstruct.js';
|
|
11
|
+
export const AO_QUALITY_PRESETS = {
|
|
12
|
+
low: { resolutionDivisor: 2, samples: 12, spiralTurns: 5 },
|
|
13
|
+
high: { resolutionDivisor: 1, samples: 16, spiralTurns: 7 },
|
|
14
|
+
};
|
|
15
|
+
/** Kernel slots in the uniform; every preset must fit. */
|
|
16
|
+
export const AO_MAX_SAMPLES = 16;
|
|
17
|
+
/**
|
|
18
|
+
* Accepted `contactShading.radius`, in world units (metres for IFC models,
|
|
19
|
+
* which the geometry pipeline normalises to metres).
|
|
20
|
+
*/
|
|
21
|
+
export const AO_RADIUS_RANGE = { min: 0.05, max: 10 };
|
|
22
|
+
/**
|
|
23
|
+
* Cap on the projected radius, as a fraction of the drawing-buffer height.
|
|
24
|
+
* Close to the camera a 1 m radius covers most of the screen; the cap keeps
|
|
25
|
+
* the taps local (and texture-cache friendly) at the cost of a smaller
|
|
26
|
+
* effective radius there.
|
|
27
|
+
*/
|
|
28
|
+
export const AO_MAX_RADIUS_FRACTION = 0.15;
|
|
29
|
+
/**
|
|
30
|
+
* Cosine bias: a tap must rise at least this far above the tangent plane to
|
|
31
|
+
* occlude. Suppresses self-occlusion from depth quantisation on flat faces.
|
|
32
|
+
*/
|
|
33
|
+
export const AO_COSINE_BIAS = 0.1;
|
|
34
|
+
/**
|
|
35
|
+
* Relative depth difference at which the bilateral blur and the upsample
|
|
36
|
+
* stop mixing two AO texels (a silhouette or a step, not the same surface).
|
|
37
|
+
*/
|
|
38
|
+
export const AO_DEPTH_TOLERANCE = 0.04;
|
|
39
|
+
/**
|
|
40
|
+
* The composite darkens by `min(occlusion * AO_GAIN * intensity,
|
|
41
|
+
* AO_MAX_DARKEN)`. `occlusion` is the tap average in [0, 1]: 1 would need
|
|
42
|
+
* every tap straight above the tangent plane and at zero distance, so real
|
|
43
|
+
* corners read well below it and the gain lifts them into view.
|
|
44
|
+
*/
|
|
45
|
+
export const AO_GAIN = 2.0;
|
|
46
|
+
/** Darkening never exceeds this, so a crevice keeps its colour. */
|
|
47
|
+
export const AO_MAX_DARKEN = 0.85;
|
|
48
|
+
/** Size of the AO target for a drawing buffer at `quality`. */
|
|
49
|
+
export function aoTargetSize(width, height, quality) {
|
|
50
|
+
const d = AO_QUALITY_PRESETS[quality].resolutionDivisor;
|
|
51
|
+
return { width: Math.max(1, Math.ceil(width / d)), height: Math.max(1, Math.ceil(height / d)) };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Unit-disk sample offsets on a spiral (the SAO pattern): tap `i` sits at
|
|
55
|
+
* radius `(i + 0.5) / samples` and angle `radius * turns * 2pi`. Radii grow
|
|
56
|
+
* linearly, so taps crowd towards the centre where contact occlusion lives.
|
|
57
|
+
* Returns `AO_MAX_SAMPLES` (x, y) pairs; slots past `samples` are zero.
|
|
58
|
+
*/
|
|
59
|
+
export function spiralKernel(samples, turns) {
|
|
60
|
+
if (!Number.isInteger(samples) || samples < 1 || samples > AO_MAX_SAMPLES) {
|
|
61
|
+
throw new RangeError(`AO sample count must be an integer in [1, ${AO_MAX_SAMPLES}], got ${samples}`);
|
|
62
|
+
}
|
|
63
|
+
const out = new Float32Array(AO_MAX_SAMPLES * 2);
|
|
64
|
+
for (let i = 0; i < samples; i++) {
|
|
65
|
+
const r = (i + 0.5) / samples;
|
|
66
|
+
const a = r * turns * 2 * Math.PI;
|
|
67
|
+
out[i * 2] = r * Math.cos(a);
|
|
68
|
+
out[i * 2 + 1] = r * Math.sin(a);
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
/** Each preset's kernel, built once. */
|
|
73
|
+
const PRESET_KERNELS = {
|
|
74
|
+
low: spiralKernel(AO_QUALITY_PRESETS.low.samples, AO_QUALITY_PRESETS.low.spiralTurns),
|
|
75
|
+
high: spiralKernel(AO_QUALITY_PRESETS.high.samples, AO_QUALITY_PRESETS.high.spiralTurns),
|
|
76
|
+
};
|
|
77
|
+
/** Float offsets of the `AoParams` struct fields in `shaders/ao.wgsl.ts`. */
|
|
78
|
+
export const AO_UNIFORM_LAYOUT = {
|
|
79
|
+
depthParams: 0,
|
|
80
|
+
xyParams: 4,
|
|
81
|
+
viewport: 8,
|
|
82
|
+
ao: 12,
|
|
83
|
+
misc: 16,
|
|
84
|
+
kernel: 20,
|
|
85
|
+
};
|
|
86
|
+
/** Byte size of `AoParams` (13 vec4s: five of parameters, eight of kernel). */
|
|
87
|
+
export const AO_UNIFORM_BYTES = (AO_UNIFORM_LAYOUT.kernel + AO_MAX_SAMPLES * 2) * 4;
|
|
88
|
+
/** Pack one frame's `AoParams` into `out` (`AO_UNIFORM_BYTES / 4` floats). */
|
|
89
|
+
export function packAoUniforms(out, frame) {
|
|
90
|
+
const preset = AO_QUALITY_PRESETS[frame.quality];
|
|
91
|
+
const recon = depthReconstructParams(frame.projection);
|
|
92
|
+
const L = AO_UNIFORM_LAYOUT;
|
|
93
|
+
out.set(recon.depth, L.depthParams);
|
|
94
|
+
out.set(recon.xy, L.xyParams);
|
|
95
|
+
out[L.viewport] = frame.width;
|
|
96
|
+
out[L.viewport + 1] = frame.height;
|
|
97
|
+
out[L.viewport + 2] = 1 / frame.width;
|
|
98
|
+
out[L.viewport + 3] = 1 / frame.height;
|
|
99
|
+
out[L.ao] = frame.radius;
|
|
100
|
+
out[L.ao + 1] = pixelsPerWorldUnit(frame.projection, frame.height);
|
|
101
|
+
out[L.ao + 2] = AO_MAX_RADIUS_FRACTION * frame.height;
|
|
102
|
+
out[L.ao + 3] = frame.intensity;
|
|
103
|
+
out[L.misc] = preset.resolutionDivisor;
|
|
104
|
+
out[L.misc + 1] = preset.samples;
|
|
105
|
+
out[L.misc + 2] = AO_COSINE_BIAS;
|
|
106
|
+
out[L.misc + 3] = AO_DEPTH_TOLERANCE;
|
|
107
|
+
out.set(PRESET_KERNELS[frame.quality], L.kernel);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ao-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ao-params.js","sourceRoot":"","sources":["../src/ao-params.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen-space ambient occlusion pass (#5384): the GPU side of
|
|
3
|
+
* `shaders/ao.wgsl.ts`. It reads the scene depth attachment after the main
|
|
4
|
+
* pass and multiplies the resolved colour by the occlusion it finds.
|
|
5
|
+
*
|
|
6
|
+
* Passes per frame: AO (half resolution at `low`, full at `high`), a
|
|
7
|
+
* horizontal and a vertical bilateral blur at the same resolution, and a
|
|
8
|
+
* full-resolution composite onto the canvas with the darken blend the other
|
|
9
|
+
* overlays use (`dst * (1 - srcAlpha)`).
|
|
10
|
+
*
|
|
11
|
+
* Owns two `rg16float` targets (occlusion + linear depth, and the blur
|
|
12
|
+
* scratch). They follow the drawing-buffer size and the quality, are
|
|
13
|
+
* rebuilt when either changes, and are released by `destroy()`; the renderer
|
|
14
|
+
* drops the whole pass when AO is switched off and on teardown (device loss
|
|
15
|
+
* re-creates it on the next AO frame).
|
|
16
|
+
*/
|
|
17
|
+
import { type AoFrameParams } from './ao-params.js';
|
|
18
|
+
export interface AoPassFrame {
|
|
19
|
+
encoder: GPUCommandEncoder;
|
|
20
|
+
/** Resolved colour to darken (the canvas texture). */
|
|
21
|
+
targetView: GPUTextureView;
|
|
22
|
+
/** Depth-only view of the scene depth attachment. */
|
|
23
|
+
depthView: GPUTextureView;
|
|
24
|
+
params: AoFrameParams;
|
|
25
|
+
}
|
|
26
|
+
export declare class AoPass {
|
|
27
|
+
private readonly device;
|
|
28
|
+
private readonly uniformBuffer;
|
|
29
|
+
private readonly uniformScratch;
|
|
30
|
+
private readonly aoLayout;
|
|
31
|
+
private readonly filterLayout;
|
|
32
|
+
private readonly aoPipeline;
|
|
33
|
+
private readonly blurHPipeline;
|
|
34
|
+
private readonly blurVPipeline;
|
|
35
|
+
private readonly compositePipeline;
|
|
36
|
+
private targets;
|
|
37
|
+
private bindGroups;
|
|
38
|
+
private destroyed;
|
|
39
|
+
constructor(device: GPUDevice, colorFormat: GPUTextureFormat, sampleCount: number);
|
|
40
|
+
encode(frame: AoPassFrame): void;
|
|
41
|
+
private ensureTargets;
|
|
42
|
+
private ensureBindGroups;
|
|
43
|
+
private releaseTargets;
|
|
44
|
+
/** Release every GPU resource. Idempotent; the pass is unusable afterwards. */
|
|
45
|
+
destroy(): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ao-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ao-pass.d.ts","sourceRoot":"","sources":["../src/ao-pass.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpG,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,sDAAsD;IACtD,UAAU,EAAE,cAAc,CAAC;IAC3B,qDAAqD;IACrD,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;CACvB;AAmBD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IAkDjF,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAyBhC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,cAAc;IAQtB,+EAA+E;IAC/E,OAAO,IAAI,IAAI;CAMhB"}
|
package/dist/ao-pass.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Screen-space ambient occlusion pass (#5384): the GPU side of
|
|
6
|
+
* `shaders/ao.wgsl.ts`. It reads the scene depth attachment after the main
|
|
7
|
+
* pass and multiplies the resolved colour by the occlusion it finds.
|
|
8
|
+
*
|
|
9
|
+
* Passes per frame: AO (half resolution at `low`, full at `high`), a
|
|
10
|
+
* horizontal and a vertical bilateral blur at the same resolution, and a
|
|
11
|
+
* full-resolution composite onto the canvas with the darken blend the other
|
|
12
|
+
* overlays use (`dst * (1 - srcAlpha)`).
|
|
13
|
+
*
|
|
14
|
+
* Owns two `rg16float` targets (occlusion + linear depth, and the blur
|
|
15
|
+
* scratch). They follow the drawing-buffer size and the quality, are
|
|
16
|
+
* rebuilt when either changes, and are released by `destroy()`; the renderer
|
|
17
|
+
* drops the whole pass when AO is switched off and on teardown (device loss
|
|
18
|
+
* re-creates it on the next AO frame).
|
|
19
|
+
*/
|
|
20
|
+
import { AO_UNIFORM_BYTES, aoTargetSize, packAoUniforms } from './ao-params.js';
|
|
21
|
+
import { aoShaderSource } from './shaders/ao.wgsl.js';
|
|
22
|
+
const AO_TARGET_FORMAT = 'rg16float';
|
|
23
|
+
export class AoPass {
|
|
24
|
+
device;
|
|
25
|
+
uniformBuffer;
|
|
26
|
+
uniformScratch = new Float32Array(AO_UNIFORM_BYTES / 4);
|
|
27
|
+
aoLayout;
|
|
28
|
+
filterLayout;
|
|
29
|
+
aoPipeline;
|
|
30
|
+
blurHPipeline;
|
|
31
|
+
blurVPipeline;
|
|
32
|
+
compositePipeline;
|
|
33
|
+
targets = null;
|
|
34
|
+
bindGroups = null;
|
|
35
|
+
destroyed = false;
|
|
36
|
+
constructor(device, colorFormat, sampleCount) {
|
|
37
|
+
this.device = device;
|
|
38
|
+
this.uniformBuffer = device.createBuffer({
|
|
39
|
+
label: 'ao-uniforms',
|
|
40
|
+
size: AO_UNIFORM_BYTES,
|
|
41
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
42
|
+
});
|
|
43
|
+
const depthEntry = {
|
|
44
|
+
binding: 0,
|
|
45
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
46
|
+
texture: { sampleType: 'depth', viewDimension: '2d', multisampled: sampleCount > 1 },
|
|
47
|
+
};
|
|
48
|
+
const paramsEntry = {
|
|
49
|
+
binding: 1,
|
|
50
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
51
|
+
buffer: { type: 'uniform' },
|
|
52
|
+
};
|
|
53
|
+
this.aoLayout = device.createBindGroupLayout({ label: 'ao-bgl', entries: [depthEntry, paramsEntry] });
|
|
54
|
+
this.filterLayout = device.createBindGroupLayout({
|
|
55
|
+
label: 'ao-filter-bgl',
|
|
56
|
+
entries: [
|
|
57
|
+
depthEntry,
|
|
58
|
+
paramsEntry,
|
|
59
|
+
{ binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'unfilterable-float' } },
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
const module = device.createShaderModule({ label: 'ao-shader', code: aoShaderSource(sampleCount > 1) });
|
|
63
|
+
const make = (label, layout, entryPoint, target) => device.createRenderPipeline({
|
|
64
|
+
label,
|
|
65
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
66
|
+
vertex: { module, entryPoint: 'vs_fullscreen' },
|
|
67
|
+
fragment: { module, entryPoint, targets: [target] },
|
|
68
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
69
|
+
});
|
|
70
|
+
this.aoPipeline = make('ao-pipeline', this.aoLayout, 'fs_ao', { format: AO_TARGET_FORMAT });
|
|
71
|
+
this.blurHPipeline = make('ao-blur-h-pipeline', this.filterLayout, 'fs_blur_h', { format: AO_TARGET_FORMAT });
|
|
72
|
+
this.blurVPipeline = make('ao-blur-v-pipeline', this.filterLayout, 'fs_blur_v', { format: AO_TARGET_FORMAT });
|
|
73
|
+
this.compositePipeline = make('ao-composite-pipeline', this.filterLayout, 'fs_composite', {
|
|
74
|
+
format: colorFormat,
|
|
75
|
+
// Darken overlay: dst' = dst * (1 - srcAlpha); canvas alpha untouched.
|
|
76
|
+
blend: {
|
|
77
|
+
color: { srcFactor: 'zero', dstFactor: 'one-minus-src-alpha' },
|
|
78
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one' },
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
encode(frame) {
|
|
83
|
+
if (this.destroyed)
|
|
84
|
+
return;
|
|
85
|
+
const { width, height } = aoTargetSize(frame.params.width, frame.params.height, frame.params.quality);
|
|
86
|
+
const targets = this.ensureTargets(width, height);
|
|
87
|
+
const groups = this.ensureBindGroups(targets, frame.depthView);
|
|
88
|
+
packAoUniforms(this.uniformScratch, frame.params);
|
|
89
|
+
this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformScratch);
|
|
90
|
+
const run = (label, view, pipeline, group, load) => {
|
|
91
|
+
const pass = frame.encoder.beginRenderPass({
|
|
92
|
+
label,
|
|
93
|
+
colorAttachments: [{ view, loadOp: load, storeOp: 'store', clearValue: { r: 0, g: 0, b: 0, a: 0 } }],
|
|
94
|
+
});
|
|
95
|
+
pass.setPipeline(pipeline);
|
|
96
|
+
pass.setBindGroup(0, group);
|
|
97
|
+
pass.draw(3, 1, 0, 0);
|
|
98
|
+
pass.end();
|
|
99
|
+
};
|
|
100
|
+
run('ao', targets.aoView, this.aoPipeline, groups.ao, 'clear');
|
|
101
|
+
run('ao-blur-h', targets.scratchView, this.blurHPipeline, groups.blurH, 'clear');
|
|
102
|
+
run('ao-blur-v', targets.aoView, this.blurVPipeline, groups.blurV, 'clear');
|
|
103
|
+
run('ao-composite', frame.targetView, this.compositePipeline, groups.composite, 'load');
|
|
104
|
+
}
|
|
105
|
+
ensureTargets(width, height) {
|
|
106
|
+
const current = this.targets;
|
|
107
|
+
if (current && current.width === width && current.height === height)
|
|
108
|
+
return current;
|
|
109
|
+
this.releaseTargets();
|
|
110
|
+
const make = (label) => this.device.createTexture({
|
|
111
|
+
label,
|
|
112
|
+
size: { width, height },
|
|
113
|
+
format: AO_TARGET_FORMAT,
|
|
114
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
115
|
+
});
|
|
116
|
+
const ao = make('ao-target');
|
|
117
|
+
const scratch = make('ao-scratch');
|
|
118
|
+
this.targets = { width, height, ao, scratch, aoView: ao.createView(), scratchView: scratch.createView() };
|
|
119
|
+
return this.targets;
|
|
120
|
+
}
|
|
121
|
+
ensureBindGroups(targets, depthView) {
|
|
122
|
+
const current = this.bindGroups;
|
|
123
|
+
if (current && current.depthView === depthView)
|
|
124
|
+
return current;
|
|
125
|
+
const params = { binding: 1, resource: { buffer: this.uniformBuffer } };
|
|
126
|
+
const depth = { binding: 0, resource: depthView };
|
|
127
|
+
const filter = (label, input) => this.device.createBindGroup({
|
|
128
|
+
label,
|
|
129
|
+
layout: this.filterLayout,
|
|
130
|
+
entries: [depth, params, { binding: 2, resource: input }],
|
|
131
|
+
});
|
|
132
|
+
this.bindGroups = {
|
|
133
|
+
depthView,
|
|
134
|
+
ao: this.device.createBindGroup({ label: 'ao-bg', layout: this.aoLayout, entries: [depth, params] }),
|
|
135
|
+
blurH: filter('ao-blur-h-bg', targets.aoView),
|
|
136
|
+
blurV: filter('ao-blur-v-bg', targets.scratchView),
|
|
137
|
+
composite: filter('ao-composite-bg', targets.aoView),
|
|
138
|
+
};
|
|
139
|
+
return this.bindGroups;
|
|
140
|
+
}
|
|
141
|
+
releaseTargets() {
|
|
142
|
+
this.targets?.ao.destroy();
|
|
143
|
+
this.targets?.scratch.destroy();
|
|
144
|
+
this.targets = null;
|
|
145
|
+
// Bind groups reference the old views.
|
|
146
|
+
this.bindGroups = null;
|
|
147
|
+
}
|
|
148
|
+
/** Release every GPU resource. Idempotent; the pass is unusable afterwards. */
|
|
149
|
+
destroy() {
|
|
150
|
+
if (this.destroyed)
|
|
151
|
+
return;
|
|
152
|
+
this.destroyed = true;
|
|
153
|
+
this.releaseTargets();
|
|
154
|
+
this.uniformBuffer.destroy();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=ao-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ao-pass.js","sourceRoot":"","sources":["../src/ao-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { type RelativeToEyeFrame } from './relative-to-eye.js';
|
|
1
2
|
import type { CameraInternalState } from './camera-state.js';
|
|
3
|
+
/** Mirror lookAt's effective eye without rewriting the caller's malformed pose. */
|
|
4
|
+
export declare function updateCameraRelativeFrame(state: CameraInternalState, frame: RelativeToEyeFrame): void;
|
|
2
5
|
export declare function updateCameraMatrices(state: CameraInternalState): void;
|
|
3
6
|
/**
|
|
4
7
|
* Compute tight near/far for orthographic mode by projecting the scene
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-matrices.d.ts","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CA4DrE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyE/B"}
|
|
1
|
+
{"version":3,"file":"camera-matrices.d.ts","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"AAwBA,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAQrG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CA4DrE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyE/B"}
|
package/dist/camera-matrices.js
CHANGED
|
@@ -19,8 +19,19 @@
|
|
|
19
19
|
* `orthographicReverseZ` and `multiply` each already return a fresh `Mat4`,
|
|
20
20
|
* and the ortho branch already returned a fresh `{near, far}` per frame.
|
|
21
21
|
*/
|
|
22
|
-
import { MathUtils } from './math.js';
|
|
22
|
+
import { MathUtils, viewBasis } from './math.js';
|
|
23
|
+
import { MAX_RTE_SOURCE_ABS_METRES } from './relative-to-eye.js';
|
|
23
24
|
import { DEFAULT_ORTHO_SIZE, usableOrthoSize } from './camera-guards.js';
|
|
25
|
+
/** Mirror lookAt's effective eye without rewriting the caller's malformed pose. */
|
|
26
|
+
export function updateCameraRelativeFrame(state, frame) {
|
|
27
|
+
const eye = viewBasis(state.camera.position, state.camera.target, state.camera.up).eye;
|
|
28
|
+
if ([eye.x, eye.y, eye.z].some(value => !Number.isFinite(value) || Math.abs(value) > MAX_RTE_SOURCE_ABS_METRES)
|
|
29
|
+
|| !state.projMatrix.m.every(Number.isFinite) || !state.viewMatrix.m.every(Number.isFinite)) {
|
|
30
|
+
frame.invalidate();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
frame.update(eye, state.projMatrix, state.viewMatrix);
|
|
34
|
+
}
|
|
24
35
|
export function updateCameraMatrices(state) {
|
|
25
36
|
const dx = state.camera.position.x - state.camera.target.x;
|
|
26
37
|
const dy = state.camera.position.y - state.camera.target.y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-matrices.js","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-matrices.js","sourceRoot":"","sources":["../src/camera-matrices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { CameraInternalState } from './camera-state.js';
|
|
2
|
+
import type { CameraAnimator } from './camera-animation.js';
|
|
3
|
+
/** Absolute orientation and readouts share the camera's authored f64 pose. */
|
|
4
|
+
export declare class CameraOrientation {
|
|
5
|
+
private readonly state;
|
|
6
|
+
private readonly animator;
|
|
7
|
+
private readonly updateMatrices;
|
|
8
|
+
constructor(state: CameraInternalState, animator: CameraAnimator, updateMatrices: () => void);
|
|
9
|
+
/**
|
|
10
|
+
* Get distance from camera position to target.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately **unsanitized**: it reports the pose as it actually is, so a
|
|
13
|
+
* malformed one (a BCF viewpoint restored from a file reaches the public
|
|
14
|
+
* setters unvalidated) yields NaN rather than a substituted number. This is
|
|
15
|
+
* a measurement, not a control input: it is what `useBCF` reads back when
|
|
16
|
+
* restoring a viewpoint and what the BCF overlay scales markers by. There is
|
|
17
|
+
* no substitute that is right for every reader — a plausible-looking `1`
|
|
18
|
+
* would place every restored target one unit from the eye — and returning a
|
|
19
|
+
* number here would contradict `getPosition()`/`getTarget()`, which are raw,
|
|
20
|
+
* leaving callers no way to tell that the pose is broken. Gesture code inside
|
|
21
|
+
* this package guards with {@link isUsableDistance} instead; each gesture
|
|
22
|
+
* needs a different fallback. Callers OUTSIDE the package cannot use that
|
|
23
|
+
* predicate (it is package-internal) and are not all guarded — see #2466 for
|
|
24
|
+
* the viewpoint-restore path (#2441).
|
|
25
|
+
*/
|
|
26
|
+
getDistance(): number;
|
|
27
|
+
/**
|
|
28
|
+
* Get current camera rotation angles in degrees
|
|
29
|
+
* Returns { azimuth, elevation } where:
|
|
30
|
+
* - azimuth: horizontal rotation (0-360), 0 = front
|
|
31
|
+
* - elevation: vertical rotation (-90 to 90), 0 = horizon
|
|
32
|
+
*/
|
|
33
|
+
getRotation(): {
|
|
34
|
+
azimuth: number;
|
|
35
|
+
elevation: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Place the camera at an ABSOLUTE orientation around its current target,
|
|
39
|
+
* in the same angle convention {@link getRotation} reports — the exact
|
|
40
|
+
* inverse of it, so `setRotation(a, e)` then `getRotation()` returns
|
|
41
|
+
* `{ azimuth: a, elevation: e }` (modulo the normalisation and pole clamp
|
|
42
|
+
* below).
|
|
43
|
+
*
|
|
44
|
+
* This is the only absolute-orientation entry point on the camera. Everything
|
|
45
|
+
* else is relative (`orbit`, and the viewer's 90° rotate steppers built on it)
|
|
46
|
+
* or names a direction rather than an angle (`setPresetView`), which is why a
|
|
47
|
+
* host command that says "go to azimuth 120°, elevation 30°" had nothing to
|
|
48
|
+
* call and silently did nothing (#2934).
|
|
49
|
+
*
|
|
50
|
+
* The orbit radius and the target are preserved — this rotates the camera on
|
|
51
|
+
* its current sphere, it does not reframe. `up` is reset to world Y, matching
|
|
52
|
+
* `orbit`, so the reported azimuth comes back through `getRotation`'s
|
|
53
|
+
* position-based branch.
|
|
54
|
+
*
|
|
55
|
+
* @param azimuth Horizontal angle in degrees; normalised into [0, 360).
|
|
56
|
+
* @param elevation Vertical angle in degrees, 0 = horizon. Clamped to just
|
|
57
|
+
* inside ±90° (the same `MIN_PHI` margin `orbit` uses) — the exact poles
|
|
58
|
+
* collapse `cross(forward, up)` and flip the model.
|
|
59
|
+
*/
|
|
60
|
+
setRotation(azimuth: number, elevation: number): void;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=camera-orientation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-orientation.d.ts","sourceRoot":"","sources":["../src/camera-orientation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,8EAA8E;AAC9E,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,IAAI;IAG7C;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,IAAI,MAAM;IASrB;;;;;OAKG;IACH,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA6CrD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAmDtD"}
|