@ifc-lite/renderer 4.2.0 → 6.0.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/camera-projection.d.ts +2 -0
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +46 -0
- package/dist/camera-projection.js.map +1 -1
- package/dist/chunk-grid.d.ts +21 -0
- package/dist/chunk-grid.d.ts.map +1 -1
- package/dist/chunk-grid.js +25 -7
- package/dist/chunk-grid.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +4 -2
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/deviation/deviation-computer.d.ts +4 -0
- package/dist/deviation/deviation-computer.d.ts.map +1 -1
- package/dist/deviation/deviation-computer.js +20 -0
- package/dist/deviation/deviation-computer.js.map +1 -1
- package/dist/deviation/deviation-readback.d.ts +18 -0
- package/dist/deviation/deviation-readback.d.ts.map +1 -0
- package/dist/deviation/deviation-readback.js +67 -0
- package/dist/deviation/deviation-readback.js.map +1 -0
- package/dist/edge-params.d.ts +43 -0
- package/dist/edge-params.d.ts.map +1 -0
- package/dist/edge-params.js +63 -0
- package/dist/edge-params.js.map +1 -0
- package/dist/edge-pass.d.ts +54 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +185 -0
- package/dist/edge-pass.js.map +1 -0
- package/dist/entity-color-table.d.ts +140 -0
- package/dist/entity-color-table.d.ts.map +1 -0
- package/dist/entity-color-table.js +238 -0
- package/dist/entity-color-table.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +1 -1
- package/dist/gpu-upload-guard.js +1 -1
- package/dist/hover-mesh-cache.d.ts +29 -0
- package/dist/hover-mesh-cache.d.ts.map +1 -0
- package/dist/hover-mesh-cache.js +31 -0
- package/dist/hover-mesh-cache.js.map +1 -0
- package/dist/index.d.ts +43 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -189
- package/dist/index.js.map +1 -1
- package/dist/individual-mesh-upload.d.ts +24 -0
- package/dist/individual-mesh-upload.d.ts.map +1 -0
- package/dist/individual-mesh-upload.js +85 -0
- package/dist/individual-mesh-upload.js.map +1 -0
- package/dist/instanced-render.d.ts +22 -12
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +39 -27
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +68 -7
- package/dist/instanced-rte.d.ts.map +1 -1
- package/dist/instanced-rte.js +98 -17
- package/dist/instanced-rte.js.map +1 -1
- package/dist/instanced-vertex-layout.d.ts +26 -0
- package/dist/instanced-vertex-layout.d.ts.map +1 -0
- package/dist/instanced-vertex-layout.js +61 -0
- package/dist/instanced-vertex-layout.js.map +1 -0
- package/dist/mesh-material.d.ts +26 -0
- package/dist/mesh-material.d.ts.map +1 -0
- package/dist/mesh-material.js +52 -0
- package/dist/mesh-material.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +5 -2
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +5 -2
- package/dist/mesh-rte-uniforms.js.map +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +0 -7
- package/dist/model-translation.js.map +1 -1
- package/dist/outline-params.d.ts +45 -0
- package/dist/outline-params.d.ts.map +1 -0
- package/dist/outline-params.js +54 -0
- package/dist/outline-params.js.map +1 -0
- package/dist/overlay-routing.d.ts +8 -8
- package/dist/overlay-routing.js +2 -2
- package/dist/overlay-routing.js.map +1 -1
- package/dist/overlay-theme-uniforms.d.ts +54 -0
- package/dist/overlay-theme-uniforms.d.ts.map +1 -0
- package/dist/overlay-theme-uniforms.js +89 -0
- package/dist/overlay-theme-uniforms.js.map +1 -0
- package/dist/overlay-theme.d.ts +79 -0
- package/dist/overlay-theme.d.ts.map +1 -0
- package/dist/overlay-theme.js +24 -0
- package/dist/overlay-theme.js.map +1 -0
- package/dist/partial-batch-requests.d.ts +2 -2
- package/dist/pick-mesh-budget.d.ts +28 -0
- package/dist/pick-mesh-budget.d.ts.map +1 -0
- package/dist/pick-mesh-budget.js +74 -0
- package/dist/pick-mesh-budget.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +7 -1
- package/dist/picker-rte-uniforms.d.ts.map +1 -1
- package/dist/picker-rte-uniforms.js +9 -1
- package/dist/picker-rte-uniforms.js.map +1 -1
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +15 -28
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +4 -47
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +9 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +47 -70
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +7 -2
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-node.js +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +3 -1
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +7 -1
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/post-pass-chain.d.ts +15 -2
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +49 -14
- package/dist/post-pass-chain.js.map +1 -1
- package/dist/raycast-engine.d.ts +5 -1
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +20 -8
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +2 -0
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/raycast-point-cloud-query.js +7 -0
- package/dist/raycast-point-cloud-query.js.map +1 -1
- package/dist/raycast-source-curve-query.d.ts +13 -0
- package/dist/raycast-source-curve-query.d.ts.map +1 -0
- package/dist/raycast-source-curve-query.js +17 -0
- package/dist/raycast-source-curve-query.js.map +1 -0
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +4 -2
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/relative-to-eye-abi.d.ts +36 -0
- package/dist/relative-to-eye-abi.d.ts.map +1 -0
- package/dist/relative-to-eye-abi.js +72 -0
- package/dist/relative-to-eye-abi.js.map +1 -0
- package/dist/relative-to-eye.d.ts +15 -35
- package/dist/relative-to-eye.d.ts.map +1 -1
- package/dist/relative-to-eye.js +46 -74
- package/dist/relative-to-eye.js.map +1 -1
- package/dist/render-stats.d.ts +5 -1
- package/dist/render-stats.d.ts.map +1 -1
- package/dist/render-stats.js +1 -1
- package/dist/render-stats.js.map +1 -1
- package/dist/renderer-overlays.d.ts +8 -7
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +14 -16
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +1 -2
- package/dist/scene-batch-rebuild.d.ts.map +1 -1
- package/dist/scene-batch-rebuild.js +4 -8
- package/dist/scene-batch-rebuild.js.map +1 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +7 -3
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-contents.d.ts +1 -1
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-batches.d.ts +19 -64
- package/dist/scene-derived-batches.d.ts.map +1 -1
- package/dist/scene-derived-batches.js +16 -51
- package/dist/scene-derived-batches.js.map +1 -1
- package/dist/scene-device-recovery.d.ts +3 -3
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +12 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-geometry.d.ts +6 -6
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +8 -9
- package/dist/scene-geometry.js.map +1 -1
- package/dist/scene-instance-bounds.d.ts +1 -1
- package/dist/scene-instance-bounds.d.ts.map +1 -1
- package/dist/scene-instance-bounds.js +4 -16
- package/dist/scene-instance-bounds.js.map +1 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +4 -4
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +6 -10
- package/dist/scene-instance-translation.d.ts.map +1 -1
- package/dist/scene-instance-translation.js +9 -31
- package/dist/scene-instance-translation.js.map +1 -1
- package/dist/scene-instance-types.d.ts +11 -2
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-instance-types.js +7 -1
- package/dist/scene-instance-types.js.map +1 -1
- package/dist/scene-model-translation.d.ts +1 -2
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +4 -3
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene.d.ts +44 -30
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +121 -129
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +2 -2
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +10 -11
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +6 -4
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +45 -21
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +1 -1
- package/dist/section-2d-types.d.ts.map +1 -1
- package/dist/section-2d-types.js +1 -1
- package/dist/section-2d-types.js.map +1 -1
- package/dist/section-plane.d.ts +3 -0
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +18 -25
- package/dist/section-plane.js.map +1 -1
- package/dist/selection-mask-pass.d.ts +85 -0
- package/dist/selection-mask-pass.d.ts.map +1 -0
- package/dist/selection-mask-pass.js +170 -0
- package/dist/selection-mask-pass.js.map +1 -0
- package/dist/selection-mask-pipelines.d.ts +57 -0
- package/dist/selection-mask-pipelines.d.ts.map +1 -0
- package/dist/selection-mask-pipelines.js +150 -0
- package/dist/selection-mask-pipelines.js.map +1 -0
- package/dist/selection-outline-frame.d.ts +47 -0
- package/dist/selection-outline-frame.d.ts.map +1 -0
- package/dist/selection-outline-frame.js +122 -0
- package/dist/selection-outline-frame.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +5 -3
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -1
- package/dist/shaders/color-transfer.wgsl.js +5 -3
- package/dist/shaders/color-transfer.wgsl.js.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +7 -2
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.js +8 -3
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -1
- package/dist/shaders/edges.wgsl.d.ts +20 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +257 -0
- package/dist/shaders/edges.wgsl.js.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts +2 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.js +85 -0
- package/dist/shaders/entity-color-table.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +107 -171
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.d.ts +2 -0
- package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -0
- package/dist/shaders/mesh-uniforms.wgsl.js +53 -0
- package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +3 -2
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/selection-mask.wgsl.d.ts +16 -0
- package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -0
- package/dist/shaders/selection-mask.wgsl.js +138 -0
- package/dist/shaders/selection-mask.wgsl.js.map +1 -0
- 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 +3 -3
- package/dist/shaders/specular.wgsl.d.ts +34 -0
- package/dist/shaders/specular.wgsl.d.ts.map +1 -0
- package/dist/shaders/specular.wgsl.js +134 -0
- package/dist/shaders/specular.wgsl.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +1 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +0 -1
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +26 -32
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +3 -0
- package/dist/shadow-types.d.ts.map +1 -1
- package/dist/shadow-types.js.map +1 -1
- package/dist/snap-detector.d.ts +5 -0
- package/dist/snap-detector.d.ts.map +1 -1
- package/dist/snap-detector.js.map +1 -1
- package/dist/source-curve-clipping.d.ts +7 -0
- package/dist/source-curve-clipping.d.ts.map +1 -0
- package/dist/source-curve-clipping.js +165 -0
- package/dist/source-curve-clipping.js.map +1 -0
- package/dist/source-curve-snap.d.ts +49 -0
- package/dist/source-curve-snap.d.ts.map +1 -0
- package/dist/source-curve-snap.js +197 -0
- package/dist/source-curve-snap.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +1 -1
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +13 -22
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-rte.d.ts +16 -0
- package/dist/symbolic-text-rte.d.ts.map +1 -0
- package/dist/symbolic-text-rte.js +37 -0
- package/dist/symbolic-text-rte.js.map +1 -0
- package/dist/textured-vertices.d.ts.map +1 -1
- package/dist/textured-vertices.js +2 -3
- package/dist/textured-vertices.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +10 -7
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +9 -8
- package/dist/visual-enhancement.js.map +1 -1
- package/dist/xray-alpha.d.ts +7 -3
- package/dist/xray-alpha.d.ts.map +1 -1
- package/dist/xray-alpha.js +11 -7
- package/dist/xray-alpha.js.map +1 -1
- package/package.json +4 -4
- package/dist/post-processor.d.ts +0 -46
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -295
- package/dist/post-processor.js.map +0 -1
|
@@ -2,10 +2,6 @@ import { type AoQuality } from './ao-params.js';
|
|
|
2
2
|
import type { VisualEnhancementOptions, ContactShadingQuality, SeparationLinesQuality } from './types.js';
|
|
3
3
|
export type ResolvedVisualEnhancement = {
|
|
4
4
|
enabled: boolean;
|
|
5
|
-
edgeContrast: {
|
|
6
|
-
enabled: boolean;
|
|
7
|
-
intensity: number;
|
|
8
|
-
};
|
|
9
5
|
contactShading: {
|
|
10
6
|
quality: ContactShadingQuality;
|
|
11
7
|
/** [0, 1]. */
|
|
@@ -22,10 +18,16 @@ export type ResolvedVisualEnhancement = {
|
|
|
22
18
|
radius: number;
|
|
23
19
|
};
|
|
24
20
|
};
|
|
25
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Accepted `separationLines.radius`, in pixels: the tap distance the edge
|
|
23
|
+
* pass (#5385) offsets its cardinal and (at `high` quality) diagonal
|
|
24
|
+
* samples by. Widened from 1-2 to 1-3 when the pass gained diagonal taps and
|
|
25
|
+
* a normal-crease/silhouette test alongside the entity-id test, so `high`
|
|
26
|
+
* quality has room to space its 8 taps out from the 4-tap `low` default.
|
|
27
|
+
*/
|
|
26
28
|
export declare const SEPARATION_RADIUS_RANGE_PX: {
|
|
27
29
|
readonly min: 1;
|
|
28
|
-
readonly max:
|
|
30
|
+
readonly max: 3;
|
|
29
31
|
};
|
|
30
32
|
/**
|
|
31
33
|
* Resolves per-frame `VisualEnhancementOptions` against the last-resolved
|
|
@@ -45,7 +47,8 @@ export declare class VisualEnhancementResolver {
|
|
|
45
47
|
export interface LivePostEffects {
|
|
46
48
|
/** The quality to run ambient occlusion at, or null when it does not run. */
|
|
47
49
|
ambientOcclusion: AoQuality | null;
|
|
48
|
-
|
|
50
|
+
/** The edge pass (#5385): entity-id, normal-crease and silhouette lines. Option name stays `separationLines`. */
|
|
51
|
+
edges: boolean;
|
|
49
52
|
}
|
|
50
53
|
/**
|
|
51
54
|
* The post passes to run this frame: those the options ask for, while
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-enhancement.d.ts","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1G,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"visual-enhancement.d.ts","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1G,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACZ,OAAO,EAAE,qBAAqB,CAAC;QAC/B,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,6CAA6C;QAC7C,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,sBAAsB,CAAC;QAChC,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,mDAAmD;QACnD,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;CAA8B,CAAC;AAWtE;;;;;;;;;GASG;AACH,qBAAa,yBAAyB;IAClC,OAAO,CAAC,KAAK,CAIX;IAEF,OAAO,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,yBAAyB;CA2BzE;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC5B,6EAA6E;IAC7E,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,iHAAiH;IACjH,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,yBAAyB,EAAE,WAAW,EAAE,OAAO,GAAG,eAAe,CAOpG"}
|
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { AO_RADIUS_RANGE } from './ao-params.js';
|
|
5
|
-
/**
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Accepted `separationLines.radius`, in pixels: the tap distance the edge
|
|
7
|
+
* pass (#5385) offsets its cardinal and (at `high` quality) diagonal
|
|
8
|
+
* samples by. Widened from 1-2 to 1-3 when the pass gained diagonal taps and
|
|
9
|
+
* a normal-crease/silhouette test alongside the entity-id test, so `high`
|
|
10
|
+
* quality has room to space its 8 taps out from the 4-tap `low` default.
|
|
11
|
+
*/
|
|
12
|
+
export const SEPARATION_RADIUS_RANGE_PX = { min: 1, max: 3 };
|
|
7
13
|
/**
|
|
8
14
|
* `value` clamped to [min, max]; a missing or non-finite value keeps
|
|
9
15
|
* `previous` (which is already in range).
|
|
@@ -26,7 +32,6 @@ function clampOr(value, previous, min, max) {
|
|
|
26
32
|
export class VisualEnhancementResolver {
|
|
27
33
|
state = {
|
|
28
34
|
enabled: true,
|
|
29
|
-
edgeContrast: { enabled: true, intensity: 1.0 },
|
|
30
35
|
contactShading: { quality: 'off', intensity: 0.8, radius: 1.0 },
|
|
31
36
|
separationLines: { enabled: true, quality: 'low', intensity: 0.5, radius: 1.0 },
|
|
32
37
|
};
|
|
@@ -37,10 +42,6 @@ export class VisualEnhancementResolver {
|
|
|
37
42
|
const prev = this.state;
|
|
38
43
|
const merged = {
|
|
39
44
|
enabled: options.enabled ?? prev.enabled,
|
|
40
|
-
edgeContrast: {
|
|
41
|
-
enabled: options.edgeContrast?.enabled ?? prev.edgeContrast.enabled,
|
|
42
|
-
intensity: options.edgeContrast?.intensity ?? prev.edgeContrast.intensity,
|
|
43
|
-
},
|
|
44
45
|
contactShading: {
|
|
45
46
|
quality: options.contactShading?.quality ?? prev.contactShading.quality,
|
|
46
47
|
intensity: clampOr(options.contactShading?.intensity, prev.contactShading.intensity, 0, 1),
|
|
@@ -66,7 +67,7 @@ export function livePostEffects(ve, effectsLive) {
|
|
|
66
67
|
const aoQuality = ve.contactShading.quality;
|
|
67
68
|
return {
|
|
68
69
|
ambientOcclusion: live && aoQuality !== 'off' ? aoQuality : null,
|
|
69
|
-
|
|
70
|
+
edges: live && ve.separationLines.enabled && ve.separationLines.quality !== 'off',
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
73
|
//# sourceMappingURL=visual-enhancement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-enhancement.js","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,eAAe,EAAkB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"visual-enhancement.js","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"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"}
|
package/dist/xray-alpha.d.ts
CHANGED
|
@@ -60,12 +60,16 @@ export declare function alphaSlotSuffix(groupIndex: number): string;
|
|
|
60
60
|
* `:remaining` after it — so this looks for the segment, not the tail. */
|
|
61
61
|
export declare const ALPHA_SLOT_KEY: RegExp;
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
64
|
-
* `ghostExceptIds` plus the resolution rules that read them.
|
|
63
|
+
* X-Ray state: a snapshot of the caller's `transparencyOverrides` /
|
|
64
|
+
* `ghostExceptIds` plus the resolution rules that read them. The renderer keeps
|
|
65
|
+
* one across frames until `XRayEpochTracker` reports a change, so the per-batch
|
|
66
|
+
* results below are paid once per X-Ray edit, not once per frame.
|
|
65
67
|
*
|
|
66
68
|
* Snapshotting matters: the renderer classifies a batch (opaque vs transparent
|
|
67
69
|
* pipeline) and writes its uniform at two different points in the frame, and a
|
|
68
|
-
* caller mutating its map in between would desync the two.
|
|
70
|
+
* caller mutating its map in between would desync the two. The sets are copied
|
|
71
|
+
* too, because a kept resolution outlives the frame whose sets it was given,
|
|
72
|
+
* and `XRayEpochTracker` only watches the sets passed since.
|
|
69
73
|
*/
|
|
70
74
|
export declare class XRayAlpha {
|
|
71
75
|
/** False when no override and no ghost set is active — every resolver is then
|
package/dist/xray-alpha.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xray-alpha.d.ts","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAM5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;2EAE2E;AAC3E,eAAO,MAAM,cAAc,QAAiB,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"xray-alpha.d.ts","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAM5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;2EAE2E;AAC3E,eAAO,MAAM,cAAc,QAAiB,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,qBAAa,SAAS;IACpB;6EACyE;IACzE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAG/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyE;gBAExF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC;IAS3E;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAStD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAKzD;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK5E;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK1E,OAAO,CAAC,OAAO;CAgDhB;AA8BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAAmB,GAAG,MAAM;IAsBjG,UAAU,IAAI,MAAM;CAGrB"}
|
package/dist/xray-alpha.js
CHANGED
|
@@ -32,12 +32,16 @@ export function alphaSlotSuffix(groupIndex) {
|
|
|
32
32
|
* `:remaining` after it — so this looks for the segment, not the tail. */
|
|
33
33
|
export const ALPHA_SLOT_KEY = /:x\d+(?::|$)/;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
* `ghostExceptIds` plus the resolution rules that read them.
|
|
35
|
+
* X-Ray state: a snapshot of the caller's `transparencyOverrides` /
|
|
36
|
+
* `ghostExceptIds` plus the resolution rules that read them. The renderer keeps
|
|
37
|
+
* one across frames until `XRayEpochTracker` reports a change, so the per-batch
|
|
38
|
+
* results below are paid once per X-Ray edit, not once per frame.
|
|
37
39
|
*
|
|
38
40
|
* Snapshotting matters: the renderer classifies a batch (opaque vs transparent
|
|
39
41
|
* pipeline) and writes its uniform at two different points in the frame, and a
|
|
40
|
-
* caller mutating its map in between would desync the two.
|
|
42
|
+
* caller mutating its map in between would desync the two. The sets are copied
|
|
43
|
+
* too, because a kept resolution outlives the frame whose sets it was given,
|
|
44
|
+
* and `XRayEpochTracker` only watches the sets passed since.
|
|
41
45
|
*/
|
|
42
46
|
export class XRayAlpha {
|
|
43
47
|
/** False when no override and no ghost set is active — every resolver is then
|
|
@@ -47,15 +51,15 @@ export class XRayAlpha {
|
|
|
47
51
|
ghostExcept;
|
|
48
52
|
ghostAlpha;
|
|
49
53
|
selected;
|
|
50
|
-
// Resolved-per-batch results
|
|
51
|
-
//
|
|
54
|
+
// Resolved-per-batch results. Classification and the uniform write both need
|
|
55
|
+
// them each frame, and recomputing would walk every id twice per batch.
|
|
52
56
|
batchCache = new WeakMap();
|
|
53
57
|
constructor(options, selectedExpressIds) {
|
|
54
58
|
const src = options.transparencyOverrides;
|
|
55
59
|
this.overrides = src != null && src.size > 0 ? new Map(src) : null;
|
|
56
|
-
this.ghostExcept = options.ghostExceptIds
|
|
60
|
+
this.ghostExcept = options.ghostExceptIds != null ? new Set(options.ghostExceptIds) : null;
|
|
57
61
|
this.ghostAlpha = options.ghostAlpha ?? DEFAULT_GHOST_ALPHA;
|
|
58
|
-
this.selected = selectedExpressIds;
|
|
62
|
+
this.selected = new Set(selectedExpressIds);
|
|
59
63
|
this.active = this.overrides != null || this.ghostExcept != null;
|
|
60
64
|
}
|
|
61
65
|
/**
|
package/dist/xray-alpha.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xray-alpha.js","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA8B/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAc3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;mFACmF;AACnF,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,KAAK,UAAU,EAAE,CAAC;AAC3B,CAAC;AAED;;2EAE2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"xray-alpha.js","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/renderer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "WebGPU renderer for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@ifc-lite/geometry": "^7.
|
|
16
|
+
"@ifc-lite/geometry": "^7.6.0",
|
|
17
17
|
"@ifc-lite/spatial": "^1.15.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@webgpu/types": "^0.1.
|
|
21
|
-
"tsx": "^4.23.
|
|
20
|
+
"@webgpu/types": "^0.1.74",
|
|
21
|
+
"tsx": "^4.23.15",
|
|
22
22
|
"typescript": "^6.0.3"
|
|
23
23
|
},
|
|
24
24
|
"license": "MPL-2.0",
|
package/dist/post-processor.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Separation-line overlay: a fullscreen pass that darkens pixels where a
|
|
3
|
-
* neighbour belongs to a different entity AND the depth creases or steps
|
|
4
|
-
* there, so abutting elements read as separate parts.
|
|
5
|
-
*
|
|
6
|
-
* Ambient occlusion used to share this pass as "contact shading"; it now
|
|
7
|
-
* lives in `ao-pass.ts` (#5384).
|
|
8
|
-
*/
|
|
9
|
-
import { WebGPUDevice } from './device.js';
|
|
10
|
-
export type PostProcessQuality = 'low' | 'high';
|
|
11
|
-
export interface SeparationLinePassOptions {
|
|
12
|
-
targetView: GPUTextureView;
|
|
13
|
-
depthView: GPUTextureView;
|
|
14
|
-
objectIdView: GPUTextureView;
|
|
15
|
-
quality: PostProcessQuality;
|
|
16
|
-
/** Tap distance in pixels at `high` quality; `low` always uses 1. */
|
|
17
|
-
radius: number;
|
|
18
|
-
intensity: number;
|
|
19
|
-
}
|
|
20
|
-
export declare class PostProcessor {
|
|
21
|
-
private _device;
|
|
22
|
-
private colorFormat;
|
|
23
|
-
private isMultisampled;
|
|
24
|
-
private uniformBuffer;
|
|
25
|
-
private uniformStaging;
|
|
26
|
-
private uniformF32;
|
|
27
|
-
private uniformU32;
|
|
28
|
-
private bindGroupLayout;
|
|
29
|
-
private pipeline;
|
|
30
|
-
private cachedBindGroup;
|
|
31
|
-
private cachedDepthView;
|
|
32
|
-
private cachedObjectIdView;
|
|
33
|
-
constructor(device: WebGPUDevice, sampleCount: number);
|
|
34
|
-
/**
|
|
35
|
-
* Draw the separation lines over `targetView` in a fullscreen overlay pass.
|
|
36
|
-
*/
|
|
37
|
-
apply(commandEncoder: GPUCommandEncoder, options: SeparationLinePassOptions): void;
|
|
38
|
-
private destroyed;
|
|
39
|
-
/**
|
|
40
|
-
* Destroy all GPU resources held by this post-processor.
|
|
41
|
-
* After calling this method the post-processor is no longer usable.
|
|
42
|
-
* Safe to call multiple times.
|
|
43
|
-
*/
|
|
44
|
-
destroy(): void;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=post-processor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-processor.d.ts","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,kBAAkB,CAA+B;gBAE7C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAwOrD;;OAEG;IACH,KAAK,CAAC,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAmClF,OAAO,CAAC,SAAS,CAAS;IAE1B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAQlB"}
|
package/dist/post-processor.js
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
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
|
-
export class PostProcessor {
|
|
5
|
-
_device;
|
|
6
|
-
colorFormat;
|
|
7
|
-
isMultisampled;
|
|
8
|
-
uniformBuffer;
|
|
9
|
-
uniformStaging;
|
|
10
|
-
uniformF32;
|
|
11
|
-
uniformU32;
|
|
12
|
-
bindGroupLayout;
|
|
13
|
-
pipeline;
|
|
14
|
-
cachedBindGroup = null;
|
|
15
|
-
cachedDepthView = null;
|
|
16
|
-
cachedObjectIdView = null;
|
|
17
|
-
constructor(device, sampleCount) {
|
|
18
|
-
this._device = device.getDevice();
|
|
19
|
-
this.colorFormat = device.getFormat();
|
|
20
|
-
this.isMultisampled = sampleCount > 1;
|
|
21
|
-
this.uniformStaging = new ArrayBuffer(16);
|
|
22
|
-
this.uniformF32 = new Float32Array(this.uniformStaging);
|
|
23
|
-
this.uniformU32 = new Uint32Array(this.uniformStaging);
|
|
24
|
-
this.uniformBuffer = this._device.createBuffer({
|
|
25
|
-
size: 16,
|
|
26
|
-
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
27
|
-
});
|
|
28
|
-
this.bindGroupLayout = this._device.createBindGroupLayout({
|
|
29
|
-
entries: [
|
|
30
|
-
{
|
|
31
|
-
binding: 0,
|
|
32
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
33
|
-
texture: { sampleType: 'depth', viewDimension: '2d', multisampled: this.isMultisampled },
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
binding: 1,
|
|
37
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
38
|
-
texture: { sampleType: 'unfilterable-float', viewDimension: '2d', multisampled: this.isMultisampled },
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
binding: 2,
|
|
42
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
43
|
-
buffer: { type: 'uniform' },
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
});
|
|
47
|
-
const depthTexDecl = this.isMultisampled
|
|
48
|
-
? '@group(0) @binding(0) var depthTex: texture_depth_multisampled_2d;'
|
|
49
|
-
: '@group(0) @binding(0) var depthTex: texture_depth_2d;';
|
|
50
|
-
const idTexDecl = this.isMultisampled
|
|
51
|
-
? '@group(0) @binding(1) var idTex: texture_multisampled_2d<f32>;'
|
|
52
|
-
: '@group(0) @binding(1) var idTex: texture_2d<f32>;';
|
|
53
|
-
const depthLoadExpr = this.isMultisampled
|
|
54
|
-
? 'textureLoad(depthTex, c, 0u)'
|
|
55
|
-
: 'textureLoad(depthTex, c, 0)';
|
|
56
|
-
const idLoadExpr = this.isMultisampled
|
|
57
|
-
? 'textureLoad(idTex, c, 0u)'
|
|
58
|
-
: 'textureLoad(idTex, c, 0)';
|
|
59
|
-
const shader = this._device.createShaderModule({
|
|
60
|
-
code: `
|
|
61
|
-
struct Params {
|
|
62
|
-
seamRadiusPx: f32,
|
|
63
|
-
seamIntensity: f32,
|
|
64
|
-
highQuality: u32,
|
|
65
|
-
_pad: u32,
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
${depthTexDecl}
|
|
69
|
-
${idTexDecl}
|
|
70
|
-
@group(0) @binding(2) var<uniform> params: Params;
|
|
71
|
-
|
|
72
|
-
struct VsOut {
|
|
73
|
-
@builtin(position) pos: vec4<f32>,
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@vertex
|
|
77
|
-
fn vs_main(@builtin(vertex_index) v: u32) -> VsOut {
|
|
78
|
-
var o: VsOut;
|
|
79
|
-
var p = array<vec2<f32>, 3>(
|
|
80
|
-
vec2<f32>(-1.0, -3.0),
|
|
81
|
-
vec2<f32>(-1.0, 1.0),
|
|
82
|
-
vec2<f32>( 3.0, 1.0)
|
|
83
|
-
);
|
|
84
|
-
o.pos = vec4<f32>(p[v], 0.0, 1.0);
|
|
85
|
-
return o;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
fn sampleDepthClamped(ip: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
89
|
-
let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
|
|
90
|
-
return ${depthLoadExpr};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
fn decodeId24(encoded: vec4<f32>) -> u32 {
|
|
94
|
-
let r = u32(round(encoded.r * 255.0)) & 255u;
|
|
95
|
-
let g = u32(round(encoded.g * 255.0)) & 255u;
|
|
96
|
-
let b = u32(round(encoded.b * 255.0)) & 255u;
|
|
97
|
-
return (r << 16u) | (g << 8u) | b;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
fn sampleIdClamped(ip: vec2<i32>, dims: vec2<i32>) -> u32 {
|
|
101
|
-
let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
|
|
102
|
-
return decodeId24(${idLoadExpr});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@fragment
|
|
106
|
-
fn fs_main(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
107
|
-
let dimsU = textureDimensions(depthTex);
|
|
108
|
-
let dims = vec2<i32>(i32(dimsU.x), i32(dimsU.y));
|
|
109
|
-
let p = vec2<i32>(i32(fragPos.x), i32(fragPos.y));
|
|
110
|
-
|
|
111
|
-
let center = sampleDepthClamped(p, dims);
|
|
112
|
-
if (center <= 0.00001) {
|
|
113
|
-
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
var seam = 0.0;
|
|
117
|
-
{
|
|
118
|
-
let idCenter = sampleIdClamped(p, dims);
|
|
119
|
-
if (idCenter != 0u) {
|
|
120
|
-
let rs = max(1, i32(params.seamRadiusPx));
|
|
121
|
-
let idX1 = sampleIdClamped(p + vec2<i32>( rs, 0), dims);
|
|
122
|
-
let idX0 = sampleIdClamped(p + vec2<i32>(-rs, 0), dims);
|
|
123
|
-
let idY1 = sampleIdClamped(p + vec2<i32>(0, rs), dims);
|
|
124
|
-
let idY0 = sampleIdClamped(p + vec2<i32>(0, -rs), dims);
|
|
125
|
-
|
|
126
|
-
// Sample depths at same positions to filter coplanar entity boundaries.
|
|
127
|
-
// Coplanar surfaces from different entities only differ by the z-hash
|
|
128
|
-
// anti-z-fighting offset (~2.5e-4 relative). Two complementary gates:
|
|
129
|
-
// - slope-aware first difference: depth-DISCONTINUOUS edges
|
|
130
|
-
// (silhouettes, one surface occluding another).
|
|
131
|
-
// - per-axis second difference > 3e-4: depth-CONTINUOUS creases
|
|
132
|
-
// (wall/wall and floor/wall corners). At a corner the depth slope
|
|
133
|
-
// changes across the seam, so |d(+r) + d(-r) - 2*center| measures
|
|
134
|
-
// the slope mismatch; it stays at the z-hash offset (<= 2.55e-4)
|
|
135
|
-
// for coplanar continuations. The old first-difference-only gate
|
|
136
|
-
// flickered around its threshold along corners -> DASHED lines.
|
|
137
|
-
// Known accepted edges of this gate: a coplanar feature narrower than
|
|
138
|
-
// 2*rs px puts BOTH taps on the other entity (sum of two hash offsets,
|
|
139
|
-
// up to 5.1e-4, can fire) — narrow inter-entity features deserve a seam
|
|
140
|
-
// line anyway. In ortho the z-hash offset shrinks with the scene-fitted
|
|
141
|
-
// far-near range, so large ortho views fall back to the 5e-4 gate.
|
|
142
|
-
let sX1 = sampleDepthClamped(p + vec2<i32>( rs, 0), dims);
|
|
143
|
-
let sX0 = sampleDepthClamped(p + vec2<i32>(-rs, 0), dims);
|
|
144
|
-
let sY1 = sampleDepthClamped(p + vec2<i32>(0, rs), dims);
|
|
145
|
-
let sY0 = sampleDepthClamped(p + vec2<i32>(0, -rs), dims);
|
|
146
|
-
let depthRef = max(center, 0.0001);
|
|
147
|
-
let depthRelThreshold = 5e-4;
|
|
148
|
-
let creaseRelThreshold = 3e-4;
|
|
149
|
-
let creaseX = abs(sX1 + sX0 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
150
|
-
let creaseY = abs(sY1 + sY0 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
151
|
-
|
|
152
|
-
// Discontinuity gate, slope-aware: a depth jump only counts as an
|
|
153
|
-
// occlusion edge when it clearly exceeds the in-plane slope measured
|
|
154
|
-
// on the OPPOSITE side of the pixel (2x asymmetry) on top of the
|
|
155
|
-
// absolute floor. A flush coplanar joint viewed at a grazing angle
|
|
156
|
-
// carries a huge per-pixel slope that used to trip the absolute
|
|
157
|
-
// threshold and draw noisy dashed lines across floors/walls; its
|
|
158
|
-
// jumps are symmetric, so the asymmetry test suppresses it. Genuine
|
|
159
|
-
// silhouettes jump far beyond the opposite-side slope. Features whose
|
|
160
|
-
// depth step shrinks below the local slope are sub-pixel at that
|
|
161
|
-
// angle anyway, so fading their line out is the correct behaviour.
|
|
162
|
-
let jX1 = abs(sX1 - center) / depthRef;
|
|
163
|
-
let jX0 = abs(sX0 - center) / depthRef;
|
|
164
|
-
let jY1 = abs(sY1 - center) / depthRef;
|
|
165
|
-
let jY0 = abs(sY0 - center) / depthRef;
|
|
166
|
-
let discX1 = jX1 > max(depthRelThreshold, 2.0 * jX0);
|
|
167
|
-
let discX0 = jX0 > max(depthRelThreshold, 2.0 * jX1);
|
|
168
|
-
let discY1 = jY1 > max(depthRelThreshold, 2.0 * jY0);
|
|
169
|
-
let discY0 = jY0 > max(depthRelThreshold, 2.0 * jY1);
|
|
170
|
-
|
|
171
|
-
let edge4Count =
|
|
172
|
-
f32(idX1 != idCenter && idX1 != 0u && (creaseX || discX1)) +
|
|
173
|
-
f32(idX0 != idCenter && idX0 != 0u && (creaseX || discX0)) +
|
|
174
|
-
f32(idY1 != idCenter && idY1 != 0u && (creaseY || discY1)) +
|
|
175
|
-
f32(idY0 != idCenter && idY0 != 0u && (creaseY || discY0));
|
|
176
|
-
seam = edge4Count * 0.25;
|
|
177
|
-
|
|
178
|
-
if (params.highQuality == 1u) {
|
|
179
|
-
let idD1 = sampleIdClamped(p + vec2<i32>( rs, rs), dims);
|
|
180
|
-
let idD2 = sampleIdClamped(p + vec2<i32>(-rs, rs), dims);
|
|
181
|
-
let idD3 = sampleIdClamped(p + vec2<i32>( rs, -rs), dims);
|
|
182
|
-
let idD4 = sampleIdClamped(p + vec2<i32>(-rs, -rs), dims);
|
|
183
|
-
let sD1 = sampleDepthClamped(p + vec2<i32>( rs, rs), dims);
|
|
184
|
-
let sD2 = sampleDepthClamped(p + vec2<i32>(-rs, rs), dims);
|
|
185
|
-
let sD3 = sampleDepthClamped(p + vec2<i32>( rs, -rs), dims);
|
|
186
|
-
let sD4 = sampleDepthClamped(p + vec2<i32>(-rs, -rs), dims);
|
|
187
|
-
// Same crease + slope-aware discontinuity gates along the diagonals.
|
|
188
|
-
let creaseD1 = abs(sD1 + sD4 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
189
|
-
let creaseD2 = abs(sD2 + sD3 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
190
|
-
let jD1 = abs(sD1 - center) / depthRef;
|
|
191
|
-
let jD2 = abs(sD2 - center) / depthRef;
|
|
192
|
-
let jD3 = abs(sD3 - center) / depthRef;
|
|
193
|
-
let jD4 = abs(sD4 - center) / depthRef;
|
|
194
|
-
let discD1 = jD1 > max(depthRelThreshold, 2.0 * jD4);
|
|
195
|
-
let discD4 = jD4 > max(depthRelThreshold, 2.0 * jD1);
|
|
196
|
-
let discD2 = jD2 > max(depthRelThreshold, 2.0 * jD3);
|
|
197
|
-
let discD3 = jD3 > max(depthRelThreshold, 2.0 * jD2);
|
|
198
|
-
let edgeDiagCount =
|
|
199
|
-
f32(idD1 != idCenter && idD1 != 0u && (creaseD1 || discD1)) +
|
|
200
|
-
f32(idD2 != idCenter && idD2 != 0u && (creaseD2 || discD2)) +
|
|
201
|
-
f32(idD3 != idCenter && idD3 != 0u && (creaseD2 || discD3)) +
|
|
202
|
-
f32(idD4 != idCenter && idD4 != 0u && (creaseD1 || discD4));
|
|
203
|
-
let edgeDiag = edgeDiagCount * 0.25;
|
|
204
|
-
seam = max(seam, (seam + edgeDiag) * 0.5);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
let seamDarken = clamp(seam * params.seamIntensity, 0.0, 0.35);
|
|
210
|
-
return vec4<f32>(0.0, 0.0, 0.0, seamDarken);
|
|
211
|
-
}
|
|
212
|
-
`,
|
|
213
|
-
});
|
|
214
|
-
this.pipeline = this._device.createRenderPipeline({
|
|
215
|
-
layout: this._device.createPipelineLayout({ bindGroupLayouts: [this.bindGroupLayout] }),
|
|
216
|
-
vertex: {
|
|
217
|
-
module: shader,
|
|
218
|
-
entryPoint: 'vs_main',
|
|
219
|
-
},
|
|
220
|
-
fragment: {
|
|
221
|
-
module: shader,
|
|
222
|
-
entryPoint: 'fs_main',
|
|
223
|
-
targets: [{
|
|
224
|
-
format: this.colorFormat,
|
|
225
|
-
blend: {
|
|
226
|
-
color: {
|
|
227
|
-
srcFactor: 'zero',
|
|
228
|
-
dstFactor: 'one-minus-src-alpha',
|
|
229
|
-
},
|
|
230
|
-
alpha: {
|
|
231
|
-
srcFactor: 'zero',
|
|
232
|
-
dstFactor: 'one',
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
}],
|
|
236
|
-
},
|
|
237
|
-
primitive: {
|
|
238
|
-
topology: 'triangle-list',
|
|
239
|
-
cullMode: 'none',
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Draw the separation lines over `targetView` in a fullscreen overlay pass.
|
|
245
|
-
*/
|
|
246
|
-
apply(commandEncoder, options) {
|
|
247
|
-
if (this.destroyed)
|
|
248
|
-
return;
|
|
249
|
-
const highQuality = options.quality === 'high';
|
|
250
|
-
this.uniformF32[0] = highQuality ? options.radius : 1.0;
|
|
251
|
-
this.uniformF32[1] = options.intensity;
|
|
252
|
-
this.uniformU32[2] = highQuality ? 1 : 0;
|
|
253
|
-
this.uniformU32[3] = 0;
|
|
254
|
-
this._device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformStaging);
|
|
255
|
-
if (this.cachedDepthView !== options.depthView || this.cachedObjectIdView !== options.objectIdView || this.cachedBindGroup === null) {
|
|
256
|
-
this.cachedBindGroup = this._device.createBindGroup({
|
|
257
|
-
layout: this.bindGroupLayout,
|
|
258
|
-
entries: [
|
|
259
|
-
{ binding: 0, resource: options.depthView },
|
|
260
|
-
{ binding: 1, resource: options.objectIdView },
|
|
261
|
-
{ binding: 2, resource: { buffer: this.uniformBuffer } },
|
|
262
|
-
],
|
|
263
|
-
});
|
|
264
|
-
this.cachedDepthView = options.depthView;
|
|
265
|
-
this.cachedObjectIdView = options.objectIdView;
|
|
266
|
-
}
|
|
267
|
-
const pass = commandEncoder.beginRenderPass({
|
|
268
|
-
colorAttachments: [{
|
|
269
|
-
view: options.targetView,
|
|
270
|
-
loadOp: 'load',
|
|
271
|
-
storeOp: 'store',
|
|
272
|
-
}],
|
|
273
|
-
});
|
|
274
|
-
pass.setPipeline(this.pipeline);
|
|
275
|
-
pass.setBindGroup(0, this.cachedBindGroup);
|
|
276
|
-
pass.draw(3, 1, 0, 0);
|
|
277
|
-
pass.end();
|
|
278
|
-
}
|
|
279
|
-
destroyed = false;
|
|
280
|
-
/**
|
|
281
|
-
* Destroy all GPU resources held by this post-processor.
|
|
282
|
-
* After calling this method the post-processor is no longer usable.
|
|
283
|
-
* Safe to call multiple times.
|
|
284
|
-
*/
|
|
285
|
-
destroy() {
|
|
286
|
-
if (this.destroyed)
|
|
287
|
-
return;
|
|
288
|
-
this.destroyed = true;
|
|
289
|
-
this.uniformBuffer.destroy();
|
|
290
|
-
this.cachedBindGroup = null;
|
|
291
|
-
this.cachedDepthView = null;
|
|
292
|
-
this.cachedObjectIdView = null;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=post-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-processor.js","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"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"}
|