@ifc-lite/renderer 3.2.0 → 5.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/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/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 +38 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +111 -0
- package/dist/edge-pass.js.map +1 -0
- 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 +58 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +255 -284
- package/dist/index.js.map +1 -1
- package/dist/instanced-render.d.ts +25 -5
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +50 -13
- 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-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 +47 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +60 -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/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 +73 -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/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 +3 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +27 -31
- 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 +105 -0
- package/dist/post-pass-chain.js.map +1 -0
- 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 +20 -10
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +44 -34
- 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 +27 -20
- 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 +26 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +57 -182
- 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 +28 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +55 -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/edges.wgsl.d.ts +2 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +158 -0
- package/dist/shaders/edges.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 +183 -228
- 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/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/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 +30 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +44 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
- package/dist/post-processor.d.ts +0 -60
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -353
- package/dist/post-processor.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View-space reconstruction from the scene depth buffer, for screen-space
|
|
3
|
+
* passes that have no normal or position target (ambient occlusion, #5384).
|
|
4
|
+
*
|
|
5
|
+
* The depth attachment holds reverse-Z device depth (1 at the near plane,
|
|
6
|
+
* cleared to 0), produced by `MathUtils.perspectiveReverseZ` (infinite far
|
|
7
|
+
* plane) or `MathUtils.orthographicReverseZ`. Both are handled by one
|
|
8
|
+
* formula over four projection-matrix entries rather than a mode switch, so
|
|
9
|
+
* a pass never has to know which camera mode drew the frame:
|
|
10
|
+
*
|
|
11
|
+
* device depth d = (m10 * z + m14) / (m11 * z + m15) (z = view-space z, < 0)
|
|
12
|
+
* => z = (m14 - d * m15) / (d * m11 - m10)
|
|
13
|
+
*
|
|
14
|
+
* and the view-space x/y follow from NDC and the clip w (`m11 * z + m15`):
|
|
15
|
+
*
|
|
16
|
+
* x = (ndcX * w - m12) / m0, y = (ndcY * w - m13) / m5
|
|
17
|
+
*
|
|
18
|
+
* (`m8`/`m9` are zero in both projections.) `shaders/depth-reconstruct.wgsl.ts`
|
|
19
|
+
* is the WGSL twin of these functions; the unit tests round-trip real
|
|
20
|
+
* projection matrices through the TS side.
|
|
21
|
+
*/
|
|
22
|
+
import type { Mat4 } from './types.js';
|
|
23
|
+
/** The projection entries the reconstruction needs, packed as two vec4s. */
|
|
24
|
+
export interface DepthReconstructParams {
|
|
25
|
+
/** `[m10, m11, m14, m15]`: device depth to view-space z. */
|
|
26
|
+
depth: [number, number, number, number];
|
|
27
|
+
/** `[m0, m5, m12, m13]`: NDC x/y (with clip w) to view-space x/y. */
|
|
28
|
+
xy: [number, number, number, number];
|
|
29
|
+
}
|
|
30
|
+
/** Extract the reconstruction params from a (column-major) projection matrix. */
|
|
31
|
+
export declare function depthReconstructParams(projection: Mat4): DepthReconstructParams;
|
|
32
|
+
/** View-space z (negative in front of the camera) of a device depth value. */
|
|
33
|
+
export declare function viewZFromDepth(depth: number, p: DepthReconstructParams): number;
|
|
34
|
+
/** Clip-space w at view-space z: the view distance in perspective, 1 in ortho. */
|
|
35
|
+
export declare function clipWFromViewZ(viewZ: number, p: DepthReconstructParams): number;
|
|
36
|
+
/** View-space position of an NDC point at a device depth. */
|
|
37
|
+
export declare function viewPositionFromDepth(ndcX: number, ndcY: number, depth: number, p: DepthReconstructParams): [number, number, number];
|
|
38
|
+
/**
|
|
39
|
+
* Pixels per world unit at clip w = 1, for a drawing buffer `heightPx` tall.
|
|
40
|
+
* A world-space length `r` at clip w spans `r * scale / w` pixels.
|
|
41
|
+
*/
|
|
42
|
+
export declare function pixelsPerWorldUnit(projection: Mat4, heightPx: number): number;
|
|
43
|
+
//# sourceMappingURL=depth-reconstruct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.d.ts","sourceRoot":"","sources":["../src/depth-reconstruct.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qEAAqE;IACrE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,IAAI,GAAG,sBAAsB,CAM/E;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAG/E;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAE/E;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,sBAAsB,GACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAK1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/** Extract the reconstruction params from a (column-major) projection matrix. */
|
|
5
|
+
export function depthReconstructParams(projection) {
|
|
6
|
+
const m = projection.m;
|
|
7
|
+
return {
|
|
8
|
+
depth: [m[10], m[11], m[14], m[15]],
|
|
9
|
+
xy: [m[0], m[5], m[12], m[13]],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** View-space z (negative in front of the camera) of a device depth value. */
|
|
13
|
+
export function viewZFromDepth(depth, p) {
|
|
14
|
+
const [m10, m11, m14, m15] = p.depth;
|
|
15
|
+
return (m14 - depth * m15) / (depth * m11 - m10);
|
|
16
|
+
}
|
|
17
|
+
/** Clip-space w at view-space z: the view distance in perspective, 1 in ortho. */
|
|
18
|
+
export function clipWFromViewZ(viewZ, p) {
|
|
19
|
+
return p.depth[1] * viewZ + p.depth[3];
|
|
20
|
+
}
|
|
21
|
+
/** View-space position of an NDC point at a device depth. */
|
|
22
|
+
export function viewPositionFromDepth(ndcX, ndcY, depth, p) {
|
|
23
|
+
const z = viewZFromDepth(depth, p);
|
|
24
|
+
const w = clipWFromViewZ(z, p);
|
|
25
|
+
const [m0, m5, m12, m13] = p.xy;
|
|
26
|
+
return [(ndcX * w - m12) / m0, (ndcY * w - m13) / m5, z];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pixels per world unit at clip w = 1, for a drawing buffer `heightPx` tall.
|
|
30
|
+
* A world-space length `r` at clip w spans `r * scale / w` pixels.
|
|
31
|
+
*/
|
|
32
|
+
export function pixelsPerWorldUnit(projection, heightPx) {
|
|
33
|
+
return 0.5 * heightPx * projection.m[5];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=depth-reconstruct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.js","sourceRoot":"","sources":["../src/depth-reconstruct.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkC/D,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,UAAgB;IACrD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACvB,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,CAAyB;IACrE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACrC,OAAO,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,CAAyB;IACrE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,CAAyB;IAEzB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAgB,EAAE,QAAgB;IACnE,OAAO,GAAG,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/device.js
CHANGED
|
@@ -202,7 +202,7 @@ export class WebGPUDevice {
|
|
|
202
202
|
this.context.configure({
|
|
203
203
|
device: this.device,
|
|
204
204
|
format: this.format,
|
|
205
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
205
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
206
206
|
alphaMode: 'premultiplied',
|
|
207
207
|
});
|
|
208
208
|
this.contextConfigured = true;
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Mat4, SeparationLinesQuality } from './types.js';
|
|
2
|
+
export type EdgeQuality = Exclude<SeparationLinesQuality, 'off'>;
|
|
3
|
+
export interface EdgeQualityPreset {
|
|
4
|
+
/** Tap directions: 4 (cardinal) at low, 8 (+ diagonals) at high. */
|
|
5
|
+
directions: 4 | 8;
|
|
6
|
+
}
|
|
7
|
+
export declare const EDGE_QUALITY_PRESETS: Readonly<Record<EdgeQuality, EdgeQualityPreset>>;
|
|
8
|
+
/** Crease angle (degrees) above which two adjacent face normals draw an edge. */
|
|
9
|
+
export declare const EDGE_CREASE_ANGLE_DEG = 25;
|
|
10
|
+
export declare const EDGE_CREASE_COS: number;
|
|
11
|
+
/**
|
|
12
|
+
* Relative view-space depth jump (fraction of the nearer depth) above which
|
|
13
|
+
* a step reads as a silhouette rather than a coplanar seam. Linear (view
|
|
14
|
+
* space), unlike the old pass's threshold over raw reverse-Z depth, so it
|
|
15
|
+
* does not need a slope-aware fallback to avoid grazing-angle false edges.
|
|
16
|
+
*/
|
|
17
|
+
export declare const EDGE_SILHOUETTE_REL_THRESHOLD = 0.01;
|
|
18
|
+
/** Darkening never exceeds this, matching the old separation-line cap. */
|
|
19
|
+
export declare const EDGE_MAX_DARKEN = 0.35;
|
|
20
|
+
/** Float offsets of the `EdgeParams` struct fields in `shaders/edges.wgsl.ts`. */
|
|
21
|
+
export declare const EDGE_UNIFORM_LAYOUT: {
|
|
22
|
+
readonly depthParams: 0;
|
|
23
|
+
readonly xyParams: 4;
|
|
24
|
+
readonly viewport: 8;
|
|
25
|
+
readonly edge: 12;
|
|
26
|
+
};
|
|
27
|
+
/** Byte size of `EdgeParams` (4 vec4s). */
|
|
28
|
+
export declare const EDGE_UNIFORM_BYTES: number;
|
|
29
|
+
export interface EdgeFrameParams {
|
|
30
|
+
/** Camera projection the frame was drawn with (reverse-Z). */
|
|
31
|
+
projection: Mat4;
|
|
32
|
+
/** Drawing-buffer size in pixels. */
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
quality: EdgeQuality;
|
|
36
|
+
/** Tap distance in pixels, already scaled by device pixel ratio. */
|
|
37
|
+
radiusPx: number;
|
|
38
|
+
/** Darkening strength, already clamped to [0, 1]. */
|
|
39
|
+
intensity: number;
|
|
40
|
+
}
|
|
41
|
+
/** Pack one frame's `EdgeParams` into `out` (`EDGE_UNIFORM_BYTES / 4` floats). */
|
|
42
|
+
export declare function packEdgeUniforms(out: Float32Array, frame: EdgeFrameParams): void;
|
|
43
|
+
//# sourceMappingURL=edge-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-params.d.ts","sourceRoot":"","sources":["../src/edge-params.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAGjF,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,eAAe,QAAoD,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,0EAA0E;AAC1E,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,kFAAkF;AAClF,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB,QAAqC,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,UAAU,EAAE,IAAI,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAahF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 edge pass (#5385): quality presets and the uniform layout
|
|
6
|
+
* shared with `shaders/edges.wgsl.ts`. Pure functions, so the numbers the
|
|
7
|
+
* GPU sees are unit-tested. Reuses `depth-reconstruct.ts` for the projection
|
|
8
|
+
* params the shader needs to rebuild view-space position and normals from
|
|
9
|
+
* depth, the same way `ao-params.ts` does (#5384).
|
|
10
|
+
*
|
|
11
|
+
* The old separation-line pass fired only on an entity-id change, read raw
|
|
12
|
+
* (non-linear, reverse-Z) depth a fixed 1-3 px apart, and thresholded that
|
|
13
|
+
* difference as a hard boolean, which is why storey joints on a flat facade
|
|
14
|
+
* flickered into dashes (the per-pixel slope crosses the threshold, not the
|
|
15
|
+
* geometry). This pass instead:
|
|
16
|
+
* - also fires on a normal crease (a real angle, not a coplanar seam) and a
|
|
17
|
+
* depth silhouette, both in linear view-space units;
|
|
18
|
+
* - blends a coverage estimate over several tap directions (as the old pass
|
|
19
|
+
* already did for its id test, `edge4Count * 0.25`) instead of a single
|
|
20
|
+
* hard sample, so a line antialiases instead of dashing.
|
|
21
|
+
*/
|
|
22
|
+
import { depthReconstructParams } from './depth-reconstruct.js';
|
|
23
|
+
export const EDGE_QUALITY_PRESETS = {
|
|
24
|
+
low: { directions: 4 },
|
|
25
|
+
high: { directions: 8 },
|
|
26
|
+
};
|
|
27
|
+
/** Crease angle (degrees) above which two adjacent face normals draw an edge. */
|
|
28
|
+
export const EDGE_CREASE_ANGLE_DEG = 25;
|
|
29
|
+
export const EDGE_CREASE_COS = Math.cos((EDGE_CREASE_ANGLE_DEG * Math.PI) / 180);
|
|
30
|
+
/**
|
|
31
|
+
* Relative view-space depth jump (fraction of the nearer depth) above which
|
|
32
|
+
* a step reads as a silhouette rather than a coplanar seam. Linear (view
|
|
33
|
+
* space), unlike the old pass's threshold over raw reverse-Z depth, so it
|
|
34
|
+
* does not need a slope-aware fallback to avoid grazing-angle false edges.
|
|
35
|
+
*/
|
|
36
|
+
export const EDGE_SILHOUETTE_REL_THRESHOLD = 0.01;
|
|
37
|
+
/** Darkening never exceeds this, matching the old separation-line cap. */
|
|
38
|
+
export const EDGE_MAX_DARKEN = 0.35;
|
|
39
|
+
/** Float offsets of the `EdgeParams` struct fields in `shaders/edges.wgsl.ts`. */
|
|
40
|
+
export const EDGE_UNIFORM_LAYOUT = {
|
|
41
|
+
depthParams: 0,
|
|
42
|
+
xyParams: 4,
|
|
43
|
+
viewport: 8,
|
|
44
|
+
edge: 12,
|
|
45
|
+
};
|
|
46
|
+
/** Byte size of `EdgeParams` (4 vec4s). */
|
|
47
|
+
export const EDGE_UNIFORM_BYTES = (EDGE_UNIFORM_LAYOUT.edge + 4) * 4;
|
|
48
|
+
/** Pack one frame's `EdgeParams` into `out` (`EDGE_UNIFORM_BYTES / 4` floats). */
|
|
49
|
+
export function packEdgeUniforms(out, frame) {
|
|
50
|
+
const recon = depthReconstructParams(frame.projection);
|
|
51
|
+
const L = EDGE_UNIFORM_LAYOUT;
|
|
52
|
+
out.set(recon.depth, L.depthParams);
|
|
53
|
+
out.set(recon.xy, L.xyParams);
|
|
54
|
+
out[L.viewport] = frame.width;
|
|
55
|
+
out[L.viewport + 1] = frame.height;
|
|
56
|
+
out[L.viewport + 2] = 1 / frame.width;
|
|
57
|
+
out[L.viewport + 3] = 1 / frame.height;
|
|
58
|
+
out[L.edge] = Math.max(1, frame.radiusPx);
|
|
59
|
+
out[L.edge + 1] = frame.intensity;
|
|
60
|
+
out[L.edge + 2] = EDGE_QUALITY_PRESETS[frame.quality].directions === 8 ? 1 : 0;
|
|
61
|
+
out[L.edge + 3] = 0;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=edge-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-params.js","sourceRoot":"","sources":["../src/edge-params.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAUhE,MAAM,CAAC,MAAM,oBAAoB,GAAqD;IACpF,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;IACtB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CACxB,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,EAAE;CACA,CAAC;AAEX,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAerE,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,GAAiB,EAAE,KAAsB;IACxE,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,mBAAmB,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACnC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge pass (#5385): the GPU side of `shaders/edges.wgsl.ts`. One fullscreen
|
|
3
|
+
* pass reads the scene depth and object-id attachments after the main pass
|
|
4
|
+
* and darkens the resolved colour along entity boundaries, normal creases
|
|
5
|
+
* and depth silhouettes, in the same darken-blend style as ambient
|
|
6
|
+
* occlusion and the eye-dome-lighting pass (`dst * (1 - srcAlpha)`).
|
|
7
|
+
*
|
|
8
|
+
* Replaces `post-processor.ts`'s separation-line pass (#5384 superseded its
|
|
9
|
+
* ambient-occlusion half already; this PR removes the rest). No offscreen
|
|
10
|
+
* targets: unlike AO it needs no resolution split or blur, so it draws
|
|
11
|
+
* straight onto the resolved canvas.
|
|
12
|
+
*/
|
|
13
|
+
import { type EdgeFrameParams } from './edge-params.js';
|
|
14
|
+
export interface EdgePassFrame {
|
|
15
|
+
encoder: GPUCommandEncoder;
|
|
16
|
+
/** Resolved colour to darken (the canvas texture). */
|
|
17
|
+
targetView: GPUTextureView;
|
|
18
|
+
/** Depth-only view of the scene depth attachment. */
|
|
19
|
+
depthView: GPUTextureView;
|
|
20
|
+
objectIdView: GPUTextureView;
|
|
21
|
+
params: EdgeFrameParams;
|
|
22
|
+
}
|
|
23
|
+
export declare class EdgePass {
|
|
24
|
+
private readonly device;
|
|
25
|
+
private readonly uniformBuffer;
|
|
26
|
+
private readonly uniformScratch;
|
|
27
|
+
private readonly layout;
|
|
28
|
+
private readonly pipeline;
|
|
29
|
+
private cachedDepthView;
|
|
30
|
+
private cachedObjectIdView;
|
|
31
|
+
private cachedBindGroup;
|
|
32
|
+
private destroyed;
|
|
33
|
+
constructor(device: GPUDevice, colorFormat: GPUTextureFormat, sampleCount: number);
|
|
34
|
+
encode(frame: EdgePassFrame): void;
|
|
35
|
+
/** Release all GPU resources. Idempotent; the pass is unusable afterwards. */
|
|
36
|
+
destroy(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=edge-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-pass.d.ts","sourceRoot":"","sources":["../src/edge-pass.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAsB,KAAK,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAG9F,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,sDAAsD;IACtD,UAAU,EAAE,cAAc,CAAC;IAC3B,qDAAqD;IACrD,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,cAAc,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IA8CjF,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiClC,8EAA8E;IAC9E,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
* Edge pass (#5385): the GPU side of `shaders/edges.wgsl.ts`. One fullscreen
|
|
6
|
+
* pass reads the scene depth and object-id attachments after the main pass
|
|
7
|
+
* and darkens the resolved colour along entity boundaries, normal creases
|
|
8
|
+
* and depth silhouettes, in the same darken-blend style as ambient
|
|
9
|
+
* occlusion and the eye-dome-lighting pass (`dst * (1 - srcAlpha)`).
|
|
10
|
+
*
|
|
11
|
+
* Replaces `post-processor.ts`'s separation-line pass (#5384 superseded its
|
|
12
|
+
* ambient-occlusion half already; this PR removes the rest). No offscreen
|
|
13
|
+
* targets: unlike AO it needs no resolution split or blur, so it draws
|
|
14
|
+
* straight onto the resolved canvas.
|
|
15
|
+
*/
|
|
16
|
+
import { EDGE_UNIFORM_BYTES, packEdgeUniforms } from './edge-params.js';
|
|
17
|
+
import { edgeShaderSource } from './shaders/edges.wgsl.js';
|
|
18
|
+
export class EdgePass {
|
|
19
|
+
device;
|
|
20
|
+
uniformBuffer;
|
|
21
|
+
uniformScratch = new Float32Array(EDGE_UNIFORM_BYTES / 4);
|
|
22
|
+
layout;
|
|
23
|
+
pipeline;
|
|
24
|
+
cachedDepthView = null;
|
|
25
|
+
cachedObjectIdView = null;
|
|
26
|
+
cachedBindGroup = null;
|
|
27
|
+
destroyed = false;
|
|
28
|
+
constructor(device, colorFormat, sampleCount) {
|
|
29
|
+
this.device = device;
|
|
30
|
+
const multisampled = sampleCount > 1;
|
|
31
|
+
this.uniformBuffer = device.createBuffer({
|
|
32
|
+
label: 'edge-uniforms',
|
|
33
|
+
size: EDGE_UNIFORM_BYTES,
|
|
34
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
35
|
+
});
|
|
36
|
+
this.layout = device.createBindGroupLayout({
|
|
37
|
+
label: 'edge-bgl',
|
|
38
|
+
entries: [
|
|
39
|
+
{
|
|
40
|
+
binding: 0,
|
|
41
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
42
|
+
texture: { sampleType: 'depth', viewDimension: '2d', multisampled },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
binding: 1,
|
|
46
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
47
|
+
texture: { sampleType: 'unfilterable-float', viewDimension: '2d', multisampled },
|
|
48
|
+
},
|
|
49
|
+
{ binding: 2, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } },
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
const module = device.createShaderModule({ label: 'edge-shader', code: edgeShaderSource(multisampled) });
|
|
53
|
+
this.pipeline = device.createRenderPipeline({
|
|
54
|
+
label: 'edge-pipeline',
|
|
55
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [this.layout] }),
|
|
56
|
+
vertex: { module, entryPoint: 'vs_fullscreen' },
|
|
57
|
+
fragment: {
|
|
58
|
+
module,
|
|
59
|
+
entryPoint: 'fs_edges',
|
|
60
|
+
targets: [{
|
|
61
|
+
format: colorFormat,
|
|
62
|
+
blend: {
|
|
63
|
+
color: { srcFactor: 'zero', dstFactor: 'one-minus-src-alpha' },
|
|
64
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one' },
|
|
65
|
+
},
|
|
66
|
+
}],
|
|
67
|
+
},
|
|
68
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
encode(frame) {
|
|
72
|
+
if (this.destroyed)
|
|
73
|
+
return;
|
|
74
|
+
packEdgeUniforms(this.uniformScratch, frame.params);
|
|
75
|
+
this.device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformScratch);
|
|
76
|
+
if (this.cachedDepthView !== frame.depthView ||
|
|
77
|
+
this.cachedObjectIdView !== frame.objectIdView ||
|
|
78
|
+
this.cachedBindGroup === null) {
|
|
79
|
+
this.cachedBindGroup = this.device.createBindGroup({
|
|
80
|
+
label: 'edge-bg',
|
|
81
|
+
layout: this.layout,
|
|
82
|
+
entries: [
|
|
83
|
+
{ binding: 0, resource: frame.depthView },
|
|
84
|
+
{ binding: 1, resource: frame.objectIdView },
|
|
85
|
+
{ binding: 2, resource: { buffer: this.uniformBuffer } },
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
this.cachedDepthView = frame.depthView;
|
|
89
|
+
this.cachedObjectIdView = frame.objectIdView;
|
|
90
|
+
}
|
|
91
|
+
const pass = frame.encoder.beginRenderPass({
|
|
92
|
+
label: 'edges',
|
|
93
|
+
colorAttachments: [{ view: frame.targetView, loadOp: 'load', storeOp: 'store' }],
|
|
94
|
+
});
|
|
95
|
+
pass.setPipeline(this.pipeline);
|
|
96
|
+
pass.setBindGroup(0, this.cachedBindGroup);
|
|
97
|
+
pass.draw(3, 1, 0, 0);
|
|
98
|
+
pass.end();
|
|
99
|
+
}
|
|
100
|
+
/** Release all GPU resources. Idempotent; the pass is unusable afterwards. */
|
|
101
|
+
destroy() {
|
|
102
|
+
if (this.destroyed)
|
|
103
|
+
return;
|
|
104
|
+
this.destroyed = true;
|
|
105
|
+
this.uniformBuffer.destroy();
|
|
106
|
+
this.cachedBindGroup = null;
|
|
107
|
+
this.cachedDepthView = null;
|
|
108
|
+
this.cachedObjectIdView = null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=edge-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-pass.js","sourceRoot":"","sources":["../src/edge-pass.ts"],"names":[],"mappings":"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"}
|
package/dist/environment.d.ts
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* Lighting environment for the main shading pipelines and the procedural
|
|
3
3
|
* sky pass.
|
|
4
4
|
*
|
|
5
|
-
* Every field is optional
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Every field is optional. The default rig is a one-sided sun from the side
|
|
6
|
+
* the default camera sees, a hemisphere ambient strong enough to keep faces
|
|
7
|
+
* turned away from it at roughly 40-50% of the key, a fill from the opposite
|
|
8
|
+
* side and 0.85 exposure (#5382). The geometry shader converts these
|
|
9
|
+
* intensities to linear irradiance (`IRRADIANCE_CALIBRATION` in
|
|
10
|
+
* `shaders/main.wgsl.ts`), so the default rig lights a sun-facing horizontal
|
|
11
|
+
* surface at unit irradiance (by luma; the near-neutral sky leaves each
|
|
12
|
+
* channel within about 1.5% of that).
|
|
9
13
|
*
|
|
10
14
|
* Directions are in viewer/world space (Y-up). `sunDirection` points TOWARD
|
|
11
15
|
* the sun, matching the shader's `dot(N, sunDirection)` convention.
|
|
@@ -23,27 +27,34 @@ export interface LightingEnvironment {
|
|
|
23
27
|
/** Unit vector toward the sun (Y-up viewer space). Normalized defensively. */
|
|
24
28
|
sunDirection?: [number, number, number];
|
|
25
29
|
sunColor?: Vec3Color;
|
|
26
|
-
/** Diffuse strength of the sun term (
|
|
30
|
+
/** Diffuse strength of the one-sided sun term (default 0.4). */
|
|
27
31
|
sunIntensity?: number;
|
|
28
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Hemisphere-ambient sky colour (default [0.34, 0.35, 0.36]). Kept close to
|
|
34
|
+
* neutral: the ambient carries almost half of the key light, so a strongly
|
|
35
|
+
* blue sky would tint every sunlit white surface.
|
|
36
|
+
*/
|
|
29
37
|
skyColor?: Vec3Color;
|
|
30
|
-
/** Hemisphere-ambient ground colour (
|
|
38
|
+
/** Hemisphere-ambient ground colour (default [0.24, 0.2, 0.17], a warm bounce). */
|
|
31
39
|
groundColor?: Vec3Color;
|
|
32
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Hemisphere ambient strength (default 0.775). This is what lights faces
|
|
42
|
+
* turned away from the sun, so it sets how dark the shaded side and cast
|
|
43
|
+
* shadows read.
|
|
44
|
+
*/
|
|
33
45
|
ambientIntensity?: number;
|
|
34
|
-
/**
|
|
46
|
+
/** Strength of the fill bouncing in from the side opposite the sun (default 0.1). */
|
|
35
47
|
fillIntensity?: number;
|
|
36
|
-
/** Rim-light strength (
|
|
48
|
+
/** Rim-light strength, a fixed light from -Z (default 0.05). */
|
|
37
49
|
rimIntensity?: number;
|
|
38
50
|
/**
|
|
39
51
|
* Sun terminator softness — the diffuse "wrap" that lifts the light/shadow
|
|
40
52
|
* boundary off a hard `max(N·L, 0)` toward wrap-around lighting. 0 is a crisp
|
|
41
|
-
* terminator (hard shadows); larger values soften it (overcast look).
|
|
42
|
-
*
|
|
43
|
-
* Clamped to [0, 1] on resolve.
|
|
53
|
+
* terminator (hard shadows); larger values soften it (overcast look). Default
|
|
54
|
+
* 0.3. Clamped to [0, 1] on resolve.
|
|
44
55
|
*/
|
|
45
56
|
sunSoftness?: number;
|
|
46
|
-
/**
|
|
57
|
+
/** Exposure multiplier on the light, before highlight roll-off (default 0.85). */
|
|
47
58
|
exposure?: number;
|
|
48
59
|
/**
|
|
49
60
|
* Draw the procedural sky background. When false (default) the frame
|
|
@@ -67,7 +78,7 @@ export type ResolvedEnvironment = Required<Omit<LightingEnvironment, 'sky'>> & {
|
|
|
67
78
|
* night → twilight → golden hour → day.
|
|
68
79
|
*/
|
|
69
80
|
export declare function deriveSkyGradient(sunElevation: number): SkyGradient;
|
|
70
|
-
/** Fill in defaults;
|
|
81
|
+
/** Fill in defaults; `env` undefined/empty resolves to the default rig. */
|
|
71
82
|
export declare function resolveEnvironment(env?: LightingEnvironment): ResolvedEnvironment;
|
|
72
83
|
/** Byte size of the packed environment UBO (must match the WGSL struct). */
|
|
73
84
|
export declare const ENVIRONMENT_UNIFORM_SIZE = 80;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,SAAS,CAAC;IACnB,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5B;AAED,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,GAAG;IAC7E,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AA8DF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAqDnE;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,CAqBjF;AAED,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,mBAAmB,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,YAAY,CAuBd"}
|
package/dist/environment.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
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
|
+
/**
|
|
5
|
+
* Default sun direction, normalized: (-0.45, 1, 0.6) / |…|.
|
|
6
|
+
*
|
|
7
|
+
* The default camera looks from +X+Z, so it sees the +X and +Z faces. This
|
|
8
|
+
* sun lights +Z and leaves +X in shade, so the opening view has a lit side
|
|
9
|
+
* and a shaded side (#5382). The previous (0.5, 1, 0.3) lit both.
|
|
10
|
+
*/
|
|
5
11
|
const DEFAULT_SUN_DIR = (() => {
|
|
6
|
-
const len = Math.hypot(0.
|
|
7
|
-
return [0.
|
|
12
|
+
const len = Math.hypot(-0.45, 1.0, 0.6);
|
|
13
|
+
return [-0.45 / len, 1.0 / len, 0.6 / len];
|
|
8
14
|
})();
|
|
9
15
|
/**
|
|
10
16
|
* Unit sun direction, falling back to {@link DEFAULT_SUN_DIR} for any input
|
|
@@ -69,16 +75,21 @@ export function deriveSkyGradient(sunElevation) {
|
|
|
69
75
|
};
|
|
70
76
|
// Ground tones stay near-neutral grey: BIM cameras spend most of their
|
|
71
77
|
// time looking DOWN, so the below-horizon colour fills the screen — a
|
|
72
|
-
// warm "earth" tone reads as a mud-brown background there.
|
|
78
|
+
// warm "earth" tone reads as a mud-brown background there. They are
|
|
79
|
+
// lifted (same channel ratios, higher magnitude — not blended toward the
|
|
80
|
+
// warm horizon hue) relative to the previous values so a downward view
|
|
81
|
+
// reads as a lighter neutral fill rather than a dreary mid-grey wall
|
|
82
|
+
// (#5583); the shader also widens the horizon→ground falloff so this is a
|
|
83
|
+
// gradient, not a hard cut.
|
|
73
84
|
const golden = {
|
|
74
85
|
zenith: [0.18, 0.32, 0.56],
|
|
75
86
|
horizon: [0.95, 0.55, 0.28],
|
|
76
|
-
ground: [0.
|
|
87
|
+
ground: [0.176, 0.168, 0.168],
|
|
77
88
|
};
|
|
78
89
|
const day = {
|
|
79
90
|
zenith: [0.18, 0.40, 0.78],
|
|
80
91
|
horizon: [0.66, 0.78, 0.90],
|
|
81
|
-
ground: [0.
|
|
92
|
+
ground: [0.252, 0.261, 0.27],
|
|
82
93
|
};
|
|
83
94
|
// sin(altitude) stops: night below -0.21 (~-12°), twilight to ~0,
|
|
84
95
|
// golden to ~0.17 (~10°), full day above ~0.35 (~20°).
|
|
@@ -103,19 +114,19 @@ export function deriveSkyGradient(sunElevation) {
|
|
|
103
114
|
};
|
|
104
115
|
return g;
|
|
105
116
|
}
|
|
106
|
-
/** Fill in defaults;
|
|
117
|
+
/** Fill in defaults; `env` undefined/empty resolves to the default rig. */
|
|
107
118
|
export function resolveEnvironment(env) {
|
|
108
119
|
const sunDirection = normalized(env?.sunDirection ?? DEFAULT_SUN_DIR);
|
|
109
120
|
const derived = deriveSkyGradient(sunDirection[1]);
|
|
110
121
|
return {
|
|
111
122
|
sunDirection,
|
|
112
123
|
sunColor: env?.sunColor ?? [1, 1, 1],
|
|
113
|
-
sunIntensity: env?.sunIntensity ?? 0.
|
|
114
|
-
skyColor: env?.skyColor ?? [0.
|
|
115
|
-
groundColor: env?.groundColor ?? [0.
|
|
116
|
-
ambientIntensity: env?.ambientIntensity ?? 0.
|
|
117
|
-
fillIntensity: env?.fillIntensity ?? 0.
|
|
118
|
-
rimIntensity: env?.rimIntensity ?? 0.
|
|
124
|
+
sunIntensity: env?.sunIntensity ?? 0.4,
|
|
125
|
+
skyColor: env?.skyColor ?? [0.34, 0.35, 0.36],
|
|
126
|
+
groundColor: env?.groundColor ?? [0.24, 0.2, 0.17],
|
|
127
|
+
ambientIntensity: env?.ambientIntensity ?? 0.775,
|
|
128
|
+
fillIntensity: env?.fillIntensity ?? 0.1,
|
|
129
|
+
rimIntensity: env?.rimIntensity ?? 0.05,
|
|
119
130
|
sunSoftness: clamp01(env?.sunSoftness ?? 0.3),
|
|
120
131
|
exposure: env?.exposure ?? 0.85,
|
|
121
132
|
skyEnabled: env?.skyEnabled ?? false,
|
package/dist/environment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
|