@ifc-lite/renderer 3.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- 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/appearance-preview.d.ts +2 -0
- package/dist/appearance-preview.d.ts.map +1 -1
- package/dist/appearance-preview.js +4 -0
- package/dist/appearance-preview.js.map +1 -1
- package/dist/camera-animation-immediate.d.ts +5 -0
- package/dist/camera-animation-immediate.d.ts.map +1 -0
- package/dist/camera-animation-immediate.js +16 -0
- package/dist/camera-animation-immediate.js.map +1 -0
- package/dist/camera-animation.d.ts +3 -9
- package/dist/camera-animation.d.ts.map +1 -1
- package/dist/camera-animation.js +14 -9
- package/dist/camera-animation.js.map +1 -1
- 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-recovery.d.ts +60 -0
- package/dist/device-recovery.d.ts.map +1 -0
- package/dist/device-recovery.js +153 -0
- package/dist/device-recovery.js.map +1 -0
- package/dist/device.d.ts +2 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +13 -1
- package/dist/device.js.map +1 -1
- package/dist/environment.d.ts +26 -15
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +24 -13
- package/dist/environment.js.map +1 -1
- package/dist/federation-registry.d.ts +16 -0
- package/dist/federation-registry.d.ts.map +1 -1
- package/dist/federation-registry.js +80 -9
- package/dist/federation-registry.js.map +1 -1
- package/dist/gpu-static-upload.d.ts +39 -0
- package/dist/gpu-static-upload.d.ts.map +1 -0
- package/dist/gpu-static-upload.js +70 -0
- package/dist/gpu-static-upload.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +95 -0
- package/dist/gpu-upload-guard.d.ts.map +1 -0
- package/dist/gpu-upload-guard.js +88 -0
- package/dist/gpu-upload-guard.js.map +1 -0
- package/dist/index.d.ts +71 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +340 -375
- package/dist/index.js.map +1 -1
- package/dist/instanced-override-color.d.ts +8 -0
- package/dist/instanced-override-color.d.ts.map +1 -1
- package/dist/instanced-override-color.js +10 -0
- package/dist/instanced-override-color.js.map +1 -1
- package/dist/instanced-render.d.ts +22 -2
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +47 -10
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +17 -0
- package/dist/instanced-rte.d.ts.map +1 -0
- package/dist/instanced-rte.js +32 -0
- package/dist/instanced-rte.js.map +1 -0
- package/dist/merged-mesh-extract.d.ts.map +1 -1
- package/dist/merged-mesh-extract.js +5 -0
- package/dist/merged-mesh-extract.js.map +1 -1
- package/dist/mesh-rte-uniforms.d.ts +46 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +59 -0
- package/dist/mesh-rte-uniforms.js.map +1 -0
- package/dist/model-bounds-tracker.d.ts +7 -0
- package/dist/model-bounds-tracker.d.ts.map +1 -1
- package/dist/model-bounds-tracker.js +16 -5
- package/dist/model-bounds-tracker.js.map +1 -1
- package/dist/model-translation.d.ts +40 -2
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +152 -17
- package/dist/model-translation.js.map +1 -1
- package/dist/pick-rte-snapshot.d.ts +7 -0
- package/dist/pick-rte-snapshot.d.ts.map +1 -0
- package/dist/pick-rte-snapshot.js +15 -0
- package/dist/pick-rte-snapshot.js.map +1 -0
- package/dist/pick-types.d.ts +17 -0
- package/dist/pick-types.d.ts.map +1 -0
- package/dist/pick-types.js +5 -0
- package/dist/pick-types.js.map +1 -0
- package/dist/pick-uniforms.d.ts +6 -0
- package/dist/pick-uniforms.d.ts.map +1 -1
- package/dist/pick-uniforms.js +22 -18
- package/dist/pick-uniforms.js.map +1 -1
- package/dist/pick-world-position.d.ts +18 -0
- package/dist/pick-world-position.d.ts.map +1 -0
- package/dist/pick-world-position.js +21 -0
- package/dist/pick-world-position.js.map +1 -0
- package/dist/picker-readbacks.d.ts +6 -0
- package/dist/picker-readbacks.d.ts.map +1 -0
- package/dist/picker-readbacks.js +20 -0
- package/dist/picker-readbacks.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +6 -0
- package/dist/picker-rte-uniforms.d.ts.map +1 -0
- package/dist/picker-rte-uniforms.js +41 -0
- package/dist/picker-rte-uniforms.js.map +1 -0
- package/dist/picker.d.ts +6 -7
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +88 -115
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +10 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +57 -21
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +1 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +17 -20
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +5 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +49 -9
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
- package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
- package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
- package/dist/pointcloud/point-cloud-node.d.ts +14 -6
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
- package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
- package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
- package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-placement.js +20 -5
- package/dist/pointcloud/point-cloud-placement.js.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
- package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
- package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +46 -52
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +55 -44
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
- package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-visibility.js +18 -0
- package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
- package/dist/pointcloud/point-pipeline.d.ts +4 -9
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
- package/dist/pointcloud/point-pipeline.js +4 -9
- package/dist/pointcloud/point-pipeline.js.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.js +25 -5
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
- package/dist/post-pass-chain.d.ts +38 -0
- package/dist/post-pass-chain.d.ts.map +1 -0
- package/dist/post-pass-chain.js +99 -0
- package/dist/post-pass-chain.js.map +1 -0
- package/dist/post-processor.d.ts +12 -26
- package/dist/post-processor.d.ts.map +1 -1
- package/dist/post-processor.js +14 -72
- package/dist/post-processor.js.map +1 -1
- package/dist/raycast-engine.d.ts +7 -5
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +17 -20
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +1 -1
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/reference-image-pipeline.d.ts +1 -1
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +25 -7
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/reference-images.d.ts +3 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +15 -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 +15 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +46 -20
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/renderer-screenshot.d.ts +4 -0
- package/dist/renderer-screenshot.d.ts.map +1 -0
- package/dist/renderer-screenshot.js +17 -0
- package/dist/renderer-screenshot.js.map +1 -0
- package/dist/renderer-symbolic-overlays.d.ts +5 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +36 -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-appearance-preview.d.ts +2 -0
- package/dist/scene-appearance-preview.d.ts.map +1 -1
- package/dist/scene-appearance-preview.js +9 -0
- package/dist/scene-appearance-preview.js.map +1 -1
- package/dist/scene-authored-owner.d.ts +10 -0
- package/dist/scene-authored-owner.d.ts.map +1 -1
- package/dist/scene-authored-owner.js +44 -5
- package/dist/scene-authored-owner.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +18 -0
- package/dist/scene-batch-rebuild.d.ts.map +1 -0
- package/dist/scene-batch-rebuild.js +49 -0
- package/dist/scene-batch-rebuild.js.map +1 -0
- package/dist/scene-batch-upload.d.ts +4 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +31 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-bucket-routing.d.ts +21 -0
- package/dist/scene-bucket-routing.d.ts.map +1 -0
- package/dist/scene-bucket-routing.js +44 -0
- package/dist/scene-bucket-routing.js.map +1 -0
- package/dist/scene-contents.d.ts +8 -0
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-mesh-provenance.d.ts +13 -0
- package/dist/scene-derived-mesh-provenance.d.ts.map +1 -0
- package/dist/scene-derived-mesh-provenance.js +30 -0
- package/dist/scene-derived-mesh-provenance.js.map +1 -0
- package/dist/scene-device-recovery.d.ts +103 -0
- package/dist/scene-device-recovery.d.ts.map +1 -0
- package/dist/scene-device-recovery.js +295 -0
- package/dist/scene-device-recovery.js.map +1 -0
- 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-geometry.d.ts +1 -0
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +3 -23
- package/dist/scene-geometry.js.map +1 -1
- 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 +13 -1
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +23 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-precision.d.ts +16 -0
- package/dist/scene-precision.d.ts.map +1 -0
- package/dist/scene-precision.js +73 -0
- package/dist/scene-precision.js.map +1 -0
- 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 +42 -39
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +258 -375
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-lift.d.ts +10 -2
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +14 -6
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +12 -4
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +59 -33
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +18 -72
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +72 -103
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +38 -0
- package/dist/section-2d-types.d.ts.map +1 -0
- package/dist/section-2d-types.js +6 -0
- package/dist/section-2d-types.js.map +1 -0
- package/dist/section-cap-pipelines.d.ts +6 -0
- package/dist/section-cap-pipelines.d.ts.map +1 -0
- package/dist/section-cap-pipelines.js +87 -0
- package/dist/section-cap-pipelines.js.map +1 -0
- package/dist/section-plane-geometry.d.ts +24 -0
- package/dist/section-plane-geometry.d.ts.map +1 -0
- package/dist/section-plane-geometry.js +93 -0
- package/dist/section-plane-geometry.js.map +1 -0
- package/dist/section-plane.d.ts +23 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +58 -174
- package/dist/section-plane.js.map +1 -1
- package/dist/shaders/ao.wgsl.d.ts +2 -0
- package/dist/shaders/ao.wgsl.d.ts.map +1 -0
- package/dist/shaders/ao.wgsl.js +234 -0
- package/dist/shaders/ao.wgsl.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +26 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +53 -0
- package/dist/shaders/color-transfer.wgsl.js.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
- package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -6
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +110 -159
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
- package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
- package/dist/shaders/relative-to-eye.wgsl.js +40 -0
- package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +25 -7
- package/dist/shaders/shadow.wgsl.js.map +1 -1
- package/dist/shaders/sky.wgsl.d.ts +1 -11
- package/dist/shaders/sky.wgsl.d.ts.map +1 -1
- package/dist/shaders/sky.wgsl.js +17 -19
- package/dist/shaders/sky.wgsl.js.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
- package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
- package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
- package/dist/shaders/textured.wgsl.d.ts.map +1 -1
- package/dist/shaders/textured.wgsl.js +11 -9
- package/dist/shaders/textured.wgsl.js.map +1 -1
- package/dist/shadow-light-matrix.d.ts +7 -0
- package/dist/shadow-light-matrix.d.ts.map +1 -1
- package/dist/shadow-light-matrix.js +11 -0
- package/dist/shadow-light-matrix.js.map +1 -1
- package/dist/shadow-occluder-batches.d.ts +10 -0
- package/dist/shadow-occluder-batches.d.ts.map +1 -0
- package/dist/shadow-occluder-batches.js +39 -0
- package/dist/shadow-occluder-batches.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +4 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +5 -51
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +49 -45
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +39 -0
- package/dist/shadow-types.d.ts.map +1 -0
- package/dist/shadow-types.js +15 -0
- package/dist/shadow-types.js.map +1 -0
- package/dist/symbolic-overlay-geometry.d.ts +7 -0
- package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
- package/dist/symbolic-overlay-geometry.js +43 -0
- package/dist/symbolic-overlay-geometry.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +24 -36
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +175 -182
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-atlas.d.ts +21 -0
- package/dist/symbolic-text-atlas.d.ts.map +1 -1
- package/dist/symbolic-text-atlas.js +29 -1
- package/dist/symbolic-text-atlas.js.map +1 -1
- package/dist/types.d.ts +20 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +23 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +38 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Screen-space ambient occlusion (#5384), SAO-style, in four fullscreen
|
|
6
|
+
* passes that share this module:
|
|
7
|
+
*
|
|
8
|
+
* 1. `fs_ao` (AO resolution): reconstruct the view-space position and
|
|
9
|
+
* normal from depth, then take `samples` taps on a per-pixel rotated
|
|
10
|
+
* spiral whose radius is `radius` world units projected to pixels. A tap
|
|
11
|
+
* occludes by how far it rises above the tangent plane (cosine, minus a
|
|
12
|
+
* bias), fading to zero at `radius` so distant geometry does not count.
|
|
13
|
+
* Writes (occlusion, linear depth).
|
|
14
|
+
* 2. `fs_blur_h`, 3. `fs_blur_v`: separable 9-tap bilateral blur that stops
|
|
15
|
+
* at depth discontinuities.
|
|
16
|
+
* 4. `fs_composite` (full resolution): depth-aware upsample, then output
|
|
17
|
+
* the darkening as alpha for a multiply blend. Background pixels (clear
|
|
18
|
+
* depth) output 0, so the sky and the clear colour are never darkened.
|
|
19
|
+
*
|
|
20
|
+
* `ao-params.ts` owns the uniform layout (`AO_UNIFORM_LAYOUT`) and the
|
|
21
|
+
* kernel; `depth-reconstruct.wgsl.ts` owns the reconstruction.
|
|
22
|
+
*/
|
|
23
|
+
import { AO_GAIN, AO_MAX_DARKEN } from '../ao-params.js';
|
|
24
|
+
import { depthReconstructWgsl, depthTextureWgsl } from './depth-reconstruct.wgsl.js';
|
|
25
|
+
export function aoShaderSource(multisampled) {
|
|
26
|
+
return `
|
|
27
|
+
struct AoParams {
|
|
28
|
+
depthParams: vec4<f32>, // m10, m11, m14, m15
|
|
29
|
+
xyParams: vec4<f32>, // m0, m5, m12, m13
|
|
30
|
+
viewport: vec4<f32>, // full-res width, height, 1/width, 1/height
|
|
31
|
+
ao: vec4<f32>, // radius (world), px per world unit at w=1, max radius px, intensity
|
|
32
|
+
misc: vec4<f32>, // resolution divisor, samples, cosine bias, depth tolerance
|
|
33
|
+
kernel: array<vec4<f32>, 8>, // 16 unit-disk offsets, two per vec4
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
${depthTextureWgsl(0, multisampled)}
|
|
37
|
+
@group(0) @binding(1) var<uniform> params: AoParams;
|
|
38
|
+
@group(0) @binding(2) var aoIn: texture_2d<f32>;
|
|
39
|
+
|
|
40
|
+
${depthReconstructWgsl}
|
|
41
|
+
|
|
42
|
+
const TAU: f32 = 6.28318530718;
|
|
43
|
+
const AO_GAIN: f32 = ${AO_GAIN.toFixed(3)};
|
|
44
|
+
const AO_MAX_DARKEN: f32 = ${AO_MAX_DARKEN.toFixed(3)};
|
|
45
|
+
|
|
46
|
+
struct VsOut {
|
|
47
|
+
@builtin(position) pos: vec4<f32>,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@vertex
|
|
51
|
+
fn vs_fullscreen(@builtin(vertex_index) v: u32) -> VsOut {
|
|
52
|
+
var p = array<vec2<f32>, 3>(
|
|
53
|
+
vec2<f32>(-1.0, -3.0),
|
|
54
|
+
vec2<f32>(-1.0, 1.0),
|
|
55
|
+
vec2<f32>( 3.0, 1.0)
|
|
56
|
+
);
|
|
57
|
+
var o: VsOut;
|
|
58
|
+
o.pos = vec4<f32>(p[v], 0.0, 1.0);
|
|
59
|
+
return o;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fn viewPosAt(ip: vec2<i32>, d: f32) -> vec3<f32> {
|
|
63
|
+
return viewPositionFromDepth(ndcFromPixel(ip, params.viewport.zw), d, params.depthParams, params.xyParams);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// A neighbour for the normal. Background pushes it far away, so
|
|
67
|
+
// normalFromNeighbours takes the other side.
|
|
68
|
+
fn neighbourPos(ip: vec2<i32>, center: vec3<f32>) -> vec3<f32> {
|
|
69
|
+
let d = loadDepth(ip);
|
|
70
|
+
if (d <= BACKGROUND_DEPTH) {
|
|
71
|
+
return center - vec3<f32>(0.0, 0.0, 1e6);
|
|
72
|
+
}
|
|
73
|
+
return viewPosAt(ip, d);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fn kernelTap(i: u32) -> vec2<f32> {
|
|
77
|
+
let v = params.kernel[i / 2u];
|
|
78
|
+
return select(v.xy, v.zw, (i & 1u) == 1u);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Interleaved gradient noise (Jimenez 2014): a per-pixel rotation the
|
|
82
|
+
// 9-tap blur removes without a visible pattern.
|
|
83
|
+
fn interleavedGradientNoise(p: vec2<f32>) -> f32 {
|
|
84
|
+
return fract(52.9829189 * fract(dot(p, vec2<f32>(0.06711056, 0.00583715))));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@fragment
|
|
88
|
+
fn fs_ao(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
89
|
+
let divisor = i32(params.misc.x);
|
|
90
|
+
let p = vec2<i32>(fragPos.xy) * divisor;
|
|
91
|
+
let dims = vec2<i32>(params.viewport.xy);
|
|
92
|
+
let d = loadDepth(p);
|
|
93
|
+
if (d <= BACKGROUND_DEPTH) {
|
|
94
|
+
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
95
|
+
}
|
|
96
|
+
let P = viewPosAt(p, d);
|
|
97
|
+
let N = normalFromNeighbours(
|
|
98
|
+
P,
|
|
99
|
+
neighbourPos(p + vec2<i32>(1, 0), P),
|
|
100
|
+
neighbourPos(p - vec2<i32>(1, 0), P),
|
|
101
|
+
neighbourPos(p + vec2<i32>(0, 1), P),
|
|
102
|
+
neighbourPos(p - vec2<i32>(0, 1), P),
|
|
103
|
+
);
|
|
104
|
+
let depthKey = -P.z;
|
|
105
|
+
|
|
106
|
+
let radius = params.ao.x;
|
|
107
|
+
let w = clipWFromViewZ(P.z, params.depthParams);
|
|
108
|
+
let radiusPx = min(radius * params.ao.y / w, params.ao.z);
|
|
109
|
+
if (radiusPx < 1.0) {
|
|
110
|
+
// Smaller than a pixel: nothing to resolve at this distance.
|
|
111
|
+
return vec4<f32>(0.0, depthKey, 0.0, 0.0);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let angle = interleavedGradientNoise(fragPos.xy) * TAU;
|
|
115
|
+
let rot = vec2<f32>(cos(angle), sin(angle));
|
|
116
|
+
let invR2 = 1.0 / (radius * radius);
|
|
117
|
+
let bias = params.misc.z;
|
|
118
|
+
let samples = u32(params.misc.y);
|
|
119
|
+
var occlusion = 0.0;
|
|
120
|
+
for (var i = 0u; i < samples; i = i + 1u) {
|
|
121
|
+
let k = kernelTap(i);
|
|
122
|
+
let offset = vec2<f32>(k.x * rot.x - k.y * rot.y, k.x * rot.y + k.y * rot.x) * radiusPx;
|
|
123
|
+
let q = p + vec2<i32>(round(offset));
|
|
124
|
+
if (any(q < vec2<i32>(0)) || any(q >= dims)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
let dq = loadDepth(q);
|
|
128
|
+
if (dq <= BACKGROUND_DEPTH) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
let v = viewPosAt(q, dq) - P;
|
|
132
|
+
let vv = dot(v, v);
|
|
133
|
+
// Range check: taps beyond the world radius do not occlude.
|
|
134
|
+
let falloff = max(1.0 - vv * invR2, 0.0);
|
|
135
|
+
let cosine = dot(v, N) * inverseSqrt(vv + 1e-8);
|
|
136
|
+
occlusion = occlusion + falloff * max(cosine - bias, 0.0);
|
|
137
|
+
}
|
|
138
|
+
occlusion = occlusion / (f32(samples) * (1.0 - bias));
|
|
139
|
+
return vec4<f32>(occlusion, depthKey, 0.0, 0.0);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Relative depth closeness in [0, 1]: 1 on the same surface, 0 across
|
|
143
|
+
// a step larger than the tolerance.
|
|
144
|
+
fn depthWeight(key: f32, centerKey: f32) -> f32 {
|
|
145
|
+
return max(0.0, 1.0 - abs(key - centerKey) / (centerKey * params.misc.w));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
fn bilateralBlur(t: vec2<i32>, dir: vec2<i32>) -> vec4<f32> {
|
|
149
|
+
let center = textureLoad(aoIn, t, 0);
|
|
150
|
+
if (center.y <= 0.0) {
|
|
151
|
+
return center;
|
|
152
|
+
}
|
|
153
|
+
let dims = vec2<i32>(textureDimensions(aoIn));
|
|
154
|
+
// Gaussian, sigma ~2 texels. A var: it is indexed at runtime.
|
|
155
|
+
var gauss = array<f32, 5>(0.2270, 0.1945, 0.1216, 0.0540, 0.0162);
|
|
156
|
+
var sum = center.x * gauss[0];
|
|
157
|
+
var wsum = gauss[0];
|
|
158
|
+
for (var i = 1; i <= 4; i = i + 1) {
|
|
159
|
+
for (var s = -1; s <= 1; s = s + 2) {
|
|
160
|
+
let q = t + dir * (i * s);
|
|
161
|
+
if (any(q < vec2<i32>(0)) || any(q >= dims)) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
let tap = textureLoad(aoIn, q, 0);
|
|
165
|
+
if (tap.y <= 0.0) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
let wgt = gauss[i] * depthWeight(tap.y, center.y);
|
|
169
|
+
sum = sum + tap.x * wgt;
|
|
170
|
+
wsum = wsum + wgt;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return vec4<f32>(sum / wsum, center.y, 0.0, 0.0);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@fragment
|
|
177
|
+
fn fs_blur_h(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
178
|
+
return bilateralBlur(vec2<i32>(fragPos.xy), vec2<i32>(1, 0));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@fragment
|
|
182
|
+
fn fs_blur_v(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
183
|
+
return bilateralBlur(vec2<i32>(fragPos.xy), vec2<i32>(0, 1));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Joint bilateral upsample: the (up to) four AO texels around this
|
|
187
|
+
// pixel, weighted bilinearly and by depth closeness. When none is on
|
|
188
|
+
// this pixel's surface, the closest in depth wins.
|
|
189
|
+
fn upsampledOcclusion(p: vec2<i32>, key: f32) -> f32 {
|
|
190
|
+
let divisor = params.misc.x;
|
|
191
|
+
if (divisor <= 1.0) {
|
|
192
|
+
return textureLoad(aoIn, p, 0).x;
|
|
193
|
+
}
|
|
194
|
+
let dims = vec2<i32>(textureDimensions(aoIn));
|
|
195
|
+
// AO texel t was computed at full-res pixel t * divisor.
|
|
196
|
+
let f = vec2<f32>(p) / divisor;
|
|
197
|
+
let base = vec2<i32>(floor(f));
|
|
198
|
+
let fr = f - floor(f);
|
|
199
|
+
var sum = 0.0;
|
|
200
|
+
var wsum = 0.0;
|
|
201
|
+
var nearest = 0.0;
|
|
202
|
+
var nearestDiff = 1e30;
|
|
203
|
+
for (var j = 0; j < 4; j = j + 1) {
|
|
204
|
+
let o = vec2<i32>(j & 1, j >> 1u);
|
|
205
|
+
let q = clamp(base + o, vec2<i32>(0), dims - 1);
|
|
206
|
+
let tap = textureLoad(aoIn, q, 0);
|
|
207
|
+
let bw = select(1.0 - fr.x, fr.x, o.x == 1) * select(1.0 - fr.y, fr.y, o.y == 1);
|
|
208
|
+
let wgt = bw * depthWeight(tap.y, key);
|
|
209
|
+
sum = sum + tap.x * wgt;
|
|
210
|
+
wsum = wsum + wgt;
|
|
211
|
+
let diff = abs(tap.y - key);
|
|
212
|
+
if (diff < nearestDiff) {
|
|
213
|
+
nearestDiff = diff;
|
|
214
|
+
nearest = tap.x;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return select(nearest, sum / wsum, wsum > 1e-3);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@fragment
|
|
221
|
+
fn fs_composite(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
222
|
+
let p = vec2<i32>(fragPos.xy);
|
|
223
|
+
let d = loadDepth(p);
|
|
224
|
+
if (d <= BACKGROUND_DEPTH) {
|
|
225
|
+
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
226
|
+
}
|
|
227
|
+
let key = -viewZFromDepth(d, params.depthParams);
|
|
228
|
+
let occlusion = upsampledOcclusion(p, key);
|
|
229
|
+
let darken = clamp(occlusion * AO_GAIN * params.ao.w, 0.0, AO_MAX_DARKEN);
|
|
230
|
+
return vec4<f32>(0.0, 0.0, 0.0, darken);
|
|
231
|
+
}
|
|
232
|
+
`;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=ao.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ao.wgsl.js","sourceRoot":"","sources":["../../src/shaders/ao.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAErF,MAAM,UAAU,cAAc,CAAC,YAAqB;IAClD,OAAO;;;;;;;;;;UAUC,gBAAgB,CAAC,CAAC,EAAE,YAAY,CAAC;;;;UAIjC,oBAAoB;;;+BAGC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;qCACZ,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4L5D,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Colour transfer shared by every shader that lights or tone-maps: the
|
|
3
|
+
* geometry fragment stage (`main.wgsl.ts`, and the textured variant derived
|
|
4
|
+
* from it) and the procedural sky (`sky.wgsl.ts`). One home, so the model and
|
|
5
|
+
* the sky cannot drift onto different "film stocks".
|
|
6
|
+
*
|
|
7
|
+
* The contract:
|
|
8
|
+
*
|
|
9
|
+
* - Authored colours (IfcColourRgb, IFC5 / glTF base colours, overlay tints,
|
|
10
|
+
* texture texels) are display-referred sRGB. `srgbToLinear` decodes them
|
|
11
|
+
* before they are multiplied by light, because light adds and multiplies
|
|
12
|
+
* linearly and sRGB values do not.
|
|
13
|
+
* - `neutralCompress` rolls off highlights only. Anything whose brightest
|
|
14
|
+
* channel is below 0.76 (about 227/255 once encoded) passes through
|
|
15
|
+
* untouched, so a colour up to that brightness, lit at unit neutral
|
|
16
|
+
* irradiance, renders as authored; brighter colours roll off with their
|
|
17
|
+
* hue preserved (pure white lands at 0.88, about 241/255, leaving
|
|
18
|
+
* headroom for sunlit highlights). It is the Khronos PBR Neutral operator
|
|
19
|
+
* without its toe: the toe subtracts up to 0.04 to cancel a specular F0
|
|
20
|
+
* offset, and this renderer has no specular term, so keeping it would only
|
|
21
|
+
* crush dark materials.
|
|
22
|
+
* - `linearToSrgb` is the exact piecewise encode. The canvas is configured
|
|
23
|
+
* with a non-sRGB format, so the shader must encode.
|
|
24
|
+
*/
|
|
25
|
+
export declare const colorTransferWgsl = "\n fn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n let lo = c / 12.92;\n let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));\n return select(hi, lo, c <= vec3<f32>(0.04045));\n }\n\n fn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n let lo = c * 12.92;\n let hi = 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - 0.055;\n return select(hi, lo, c <= vec3<f32>(0.0031308));\n }\n\n fn neutralCompress(cIn: vec3<f32>) -> vec3<f32> {\n let startCompression = 0.76;\n let desaturation = 0.15;\n let c = max(cIn, vec3<f32>(0.0));\n let peak = max(c.r, max(c.g, c.b));\n if (peak < startCompression) { return c; }\n let d = 1.0 - startCompression;\n let newPeak = 1.0 - d * d / (peak + d - startCompression);\n let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n return mix(c * (newPeak / peak), vec3<f32>(newPeak), g);\n }\n";
|
|
26
|
+
//# sourceMappingURL=color-transfer.wgsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-transfer.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/color-transfer.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,iBAAiB,8gCAwB7B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
* Colour transfer shared by every shader that lights or tone-maps: the
|
|
6
|
+
* geometry fragment stage (`main.wgsl.ts`, and the textured variant derived
|
|
7
|
+
* from it) and the procedural sky (`sky.wgsl.ts`). One home, so the model and
|
|
8
|
+
* the sky cannot drift onto different "film stocks".
|
|
9
|
+
*
|
|
10
|
+
* The contract:
|
|
11
|
+
*
|
|
12
|
+
* - Authored colours (IfcColourRgb, IFC5 / glTF base colours, overlay tints,
|
|
13
|
+
* texture texels) are display-referred sRGB. `srgbToLinear` decodes them
|
|
14
|
+
* before they are multiplied by light, because light adds and multiplies
|
|
15
|
+
* linearly and sRGB values do not.
|
|
16
|
+
* - `neutralCompress` rolls off highlights only. Anything whose brightest
|
|
17
|
+
* channel is below 0.76 (about 227/255 once encoded) passes through
|
|
18
|
+
* untouched, so a colour up to that brightness, lit at unit neutral
|
|
19
|
+
* irradiance, renders as authored; brighter colours roll off with their
|
|
20
|
+
* hue preserved (pure white lands at 0.88, about 241/255, leaving
|
|
21
|
+
* headroom for sunlit highlights). It is the Khronos PBR Neutral operator
|
|
22
|
+
* without its toe: the toe subtracts up to 0.04 to cancel a specular F0
|
|
23
|
+
* offset, and this renderer has no specular term, so keeping it would only
|
|
24
|
+
* crush dark materials.
|
|
25
|
+
* - `linearToSrgb` is the exact piecewise encode. The canvas is configured
|
|
26
|
+
* with a non-sRGB format, so the shader must encode.
|
|
27
|
+
*/
|
|
28
|
+
export const colorTransferWgsl = `
|
|
29
|
+
fn srgbToLinear(c: vec3<f32>) -> vec3<f32> {
|
|
30
|
+
let lo = c / 12.92;
|
|
31
|
+
let hi = pow((max(c, vec3<f32>(0.0)) + 0.055) / 1.055, vec3<f32>(2.4));
|
|
32
|
+
return select(hi, lo, c <= vec3<f32>(0.04045));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
fn linearToSrgb(c: vec3<f32>) -> vec3<f32> {
|
|
36
|
+
let lo = c * 12.92;
|
|
37
|
+
let hi = 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - 0.055;
|
|
38
|
+
return select(hi, lo, c <= vec3<f32>(0.0031308));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fn neutralCompress(cIn: vec3<f32>) -> vec3<f32> {
|
|
42
|
+
let startCompression = 0.76;
|
|
43
|
+
let desaturation = 0.15;
|
|
44
|
+
let c = max(cIn, vec3<f32>(0.0));
|
|
45
|
+
let peak = max(c.r, max(c.g, c.b));
|
|
46
|
+
if (peak < startCompression) { return c; }
|
|
47
|
+
let d = 1.0 - startCompression;
|
|
48
|
+
let newPeak = 1.0 - d * d / (peak + d - startCompression);
|
|
49
|
+
let g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
|
|
50
|
+
return mix(c * (newPeak / peak), vec3<f32>(newPeak), g);
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
//# sourceMappingURL=color-transfer.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-transfer.wgsl.js","sourceRoot":"","sources":["../../src/shaders/color-transfer.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBhC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WGSL twin of `depth-reconstruct.ts`: view-space position and normal from
|
|
3
|
+
* the scene's reverse-Z depth buffer, shared by the screen-space passes so
|
|
4
|
+
* each one reconstructs geometry the same way.
|
|
5
|
+
*
|
|
6
|
+
* `dp` is `[m10, m11, m14, m15]` and `xy` is `[m0, m5, m12, m13]` of the
|
|
7
|
+
* camera projection (see `depthReconstructParams`).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Declares `depthTex` at `@group(0) @binding(binding)` and `loadDepth(ip)`,
|
|
11
|
+
* which clamps the coordinate to the texture and reads sample 0 when the
|
|
12
|
+
* attachment is multisampled.
|
|
13
|
+
*/
|
|
14
|
+
export declare function depthTextureWgsl(binding: number, multisampled: boolean): string;
|
|
15
|
+
export declare const depthReconstructWgsl = "\n // Reverse-Z clears to 0, so anything at or below this is background.\n const BACKGROUND_DEPTH: f32 = 1e-7;\n\n fn viewZFromDepth(d: f32, dp: vec4<f32>) -> f32 {\n return (dp.z - d * dp.w) / (d * dp.y - dp.x);\n }\n\n fn clipWFromViewZ(z: f32, dp: vec4<f32>) -> f32 {\n return dp.y * z + dp.w;\n }\n\n // Pixel centre to NDC (y up), for a buffer whose texel size is invDims.\n fn ndcFromPixel(ip: vec2<i32>, invDims: vec2<f32>) -> vec2<f32> {\n let uv = (vec2<f32>(ip) + 0.5) * invDims;\n return vec2<f32>(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0);\n }\n\n fn viewPositionFromDepth(ndc: vec2<f32>, d: f32, dp: vec4<f32>, xy: vec4<f32>) -> vec3<f32> {\n let z = viewZFromDepth(d, dp);\n let w = clipWFromViewZ(z, dp);\n return vec3<f32>((ndc.x * w - xy.z) / xy.x, (ndc.y * w - xy.w) / xy.y, z);\n }\n\n // Normal facing the camera, from a position and its four pixel\n // neighbours. On each axis it takes the neighbour with the smaller\n // depth step, so a pixel on a silhouette or a crease uses the side\n // on its own surface instead of averaging across the edge.\n fn normalFromNeighbours(\n p: vec3<f32>, right: vec3<f32>, left: vec3<f32>, down: vec3<f32>, up: vec3<f32>,\n ) -> vec3<f32> {\n let dxR = right - p;\n let dxL = p - left;\n let dx = select(dxR, dxL, abs(dxL.z) < abs(dxR.z));\n let dyD = down - p;\n let dyU = p - up;\n let dy = select(dyD, dyU, abs(dyU.z) < abs(dyD.z));\n // Pixel +x is view +x and pixel +y is view -y, so dy x dx faces +z.\n return normalize(cross(dy, dx));\n }\n";
|
|
16
|
+
//# sourceMappingURL=depth-reconstruct.wgsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/depth-reconstruct.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,eAAO,MAAM,oBAAoB,+uDAwChC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
* WGSL twin of `depth-reconstruct.ts`: view-space position and normal from
|
|
6
|
+
* the scene's reverse-Z depth buffer, shared by the screen-space passes so
|
|
7
|
+
* each one reconstructs geometry the same way.
|
|
8
|
+
*
|
|
9
|
+
* `dp` is `[m10, m11, m14, m15]` and `xy` is `[m0, m5, m12, m13]` of the
|
|
10
|
+
* camera projection (see `depthReconstructParams`).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Declares `depthTex` at `@group(0) @binding(binding)` and `loadDepth(ip)`,
|
|
14
|
+
* which clamps the coordinate to the texture and reads sample 0 when the
|
|
15
|
+
* attachment is multisampled.
|
|
16
|
+
*/
|
|
17
|
+
export function depthTextureWgsl(binding, multisampled) {
|
|
18
|
+
const type = multisampled ? 'texture_depth_multisampled_2d' : 'texture_depth_2d';
|
|
19
|
+
return `
|
|
20
|
+
@group(0) @binding(${binding}) var depthTex: ${type};
|
|
21
|
+
|
|
22
|
+
fn loadDepth(ip: vec2<i32>) -> f32 {
|
|
23
|
+
let dims = vec2<i32>(textureDimensions(depthTex));
|
|
24
|
+
return textureLoad(depthTex, clamp(ip, vec2<i32>(0), dims - 1), 0);
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
export const depthReconstructWgsl = `
|
|
29
|
+
// Reverse-Z clears to 0, so anything at or below this is background.
|
|
30
|
+
const BACKGROUND_DEPTH: f32 = 1e-7;
|
|
31
|
+
|
|
32
|
+
fn viewZFromDepth(d: f32, dp: vec4<f32>) -> f32 {
|
|
33
|
+
return (dp.z - d * dp.w) / (d * dp.y - dp.x);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fn clipWFromViewZ(z: f32, dp: vec4<f32>) -> f32 {
|
|
37
|
+
return dp.y * z + dp.w;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Pixel centre to NDC (y up), for a buffer whose texel size is invDims.
|
|
41
|
+
fn ndcFromPixel(ip: vec2<i32>, invDims: vec2<f32>) -> vec2<f32> {
|
|
42
|
+
let uv = (vec2<f32>(ip) + 0.5) * invDims;
|
|
43
|
+
return vec2<f32>(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
fn viewPositionFromDepth(ndc: vec2<f32>, d: f32, dp: vec4<f32>, xy: vec4<f32>) -> vec3<f32> {
|
|
47
|
+
let z = viewZFromDepth(d, dp);
|
|
48
|
+
let w = clipWFromViewZ(z, dp);
|
|
49
|
+
return vec3<f32>((ndc.x * w - xy.z) / xy.x, (ndc.y * w - xy.w) / xy.y, z);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Normal facing the camera, from a position and its four pixel
|
|
53
|
+
// neighbours. On each axis it takes the neighbour with the smaller
|
|
54
|
+
// depth step, so a pixel on a silhouette or a crease uses the side
|
|
55
|
+
// on its own surface instead of averaging across the edge.
|
|
56
|
+
fn normalFromNeighbours(
|
|
57
|
+
p: vec3<f32>, right: vec3<f32>, left: vec3<f32>, down: vec3<f32>, up: vec3<f32>,
|
|
58
|
+
) -> vec3<f32> {
|
|
59
|
+
let dxR = right - p;
|
|
60
|
+
let dxL = p - left;
|
|
61
|
+
let dx = select(dxR, dxL, abs(dxL.z) < abs(dxR.z));
|
|
62
|
+
let dyD = down - p;
|
|
63
|
+
let dyU = p - up;
|
|
64
|
+
let dy = select(dyD, dyU, abs(dyU.z) < abs(dyD.z));
|
|
65
|
+
// Pixel +x is view +x and pixel +y is view -y, so dy x dx faces +z.
|
|
66
|
+
return normalize(cross(dy, dx));
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
69
|
+
//# sourceMappingURL=depth-reconstruct.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.wgsl.js","sourceRoot":"","sources":["../../src/shaders/depth-reconstruct.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;GAOG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,YAAqB;IACrE,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACjF,OAAO;6BACoB,OAAO,mBAAmB,IAAI;;;;;;CAM1D,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCnC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** RTE vertex reconstruction and shadow sampling composed into the main WGSL. */
|
|
2
|
+
export declare const mainRteWgsl = "\n fn rtePosition(local: vec3<f32>) -> vec4<f32> {\n let linear = (uniforms.model * vec4<f32>(local, 0.0)).xyz;\n return rteWorldPosition(linear, RteDrawableUniform(\n uniforms.drawableDeltaHigh,\n uniforms.drawableDeltaLow,\n ));\n }\n fn rteInstancePosition(local: vec3<f32>, anchorHigh: vec3<f32>, anchorLow: vec3<f32>) -> vec4<f32> {\n return rteWorldPosition(local, RteDrawableUniform(\n vec4<f32>(anchorHigh, 0.0),\n vec4<f32>(anchorLow, 0.0),\n ));\n }";
|
|
3
|
+
export declare const mainShadowWgsl = "\n @binding(1) @group(1) var shadowMap: texture_depth_2d;\n @binding(2) @group(1) var shadowCmp: sampler_comparison;\n struct Shadow { lightViewProj: mat4x4<f32>, params: vec4<f32>, params2: vec4<f32>, }\n @binding(3) @group(1) var<uniform> shadowU: Shadow;\n const SHADOW_POISSON = array<vec2<f32>, 12>(\n vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),\n vec2<f32>(-0.203, 0.621), vec2<f32>( 0.962, -0.195), vec2<f32>( 0.473, -0.480),\n vec2<f32>( 0.519, 0.767), vec2<f32>( 0.185, -0.893), vec2<f32>( 0.507, 0.064),\n vec2<f32>( 0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),\n );\n fn sunShadowFactor(eyePos: vec3<f32>, N: vec3<f32>, fragCoord: vec2<f32>) -> f32 {\n if (shadowU.params.y < 0.5) { return 1.0; }\n let L = normalize(env.sunDirection);\n let Ns = N * select(-1.0, 1.0, dot(N, L) >= 0.0);\n let biased = eyePos + Ns * shadowU.params.z;\n let clip = shadowU.lightViewProj * vec4<f32>(biased, 1.0);\n let ndc = clip.xyz / clip.w;\n let uv = vec2<f32>(ndc.x * 0.5 + 0.5, ndc.y * -0.5 + 0.5);\n let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && ndc.z > 0.0;\n if (!inBounds) { return 1.0; }\n let NdotL = max(dot(Ns, L), 0.0);\n let slope = clamp(sqrt(max(1.0 - NdotL * NdotL, 0.0)) / max(NdotL, 0.1), 1.0, 12.0);\n let refDepth = ndc.z + shadowU.params2.x * slope * (1.0 + shadowU.params.w);\n let radius = shadowU.params.x * shadowU.params.w;\n let ign = fract(52.9829189 * fract(dot(fragCoord, vec2<f32>(0.06711056, 0.00583715))));\n let ang = ign * 6.2831853;\n let cr = cos(ang); let sr = sin(ang); var sum = 0.0;\n for (var i = 0; i < 12; i = i + 1) {\n let p = SHADOW_POISSON[i];\n let off = vec2<f32>(p.x * cr - p.y * sr, p.x * sr + p.y * cr) * radius;\n sum = sum + textureSampleCompareLevel(shadowMap, shadowCmp, uv + off, refDepth);\n }\n return mix(1.0, sum / 12.0, smoothstep(0.0, 0.3, NdotL));\n }";
|
|
4
|
+
//# sourceMappingURL=main-rte-shadow.wgsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-rte-shadow.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/main-rte-shadow.wgsl.ts"],"names":[],"mappings":"AAIA,iFAAiF;AAEjF,eAAO,MAAM,WAAW,qkBAad,CAAC;AAEX,eAAO,MAAM,cAAc,gqEAkCjB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
/** RTE vertex reconstruction and shadow sampling composed into the main WGSL. */
|
|
5
|
+
export const mainRteWgsl = `
|
|
6
|
+
fn rtePosition(local: vec3<f32>) -> vec4<f32> {
|
|
7
|
+
let linear = (uniforms.model * vec4<f32>(local, 0.0)).xyz;
|
|
8
|
+
return rteWorldPosition(linear, RteDrawableUniform(
|
|
9
|
+
uniforms.drawableDeltaHigh,
|
|
10
|
+
uniforms.drawableDeltaLow,
|
|
11
|
+
));
|
|
12
|
+
}
|
|
13
|
+
fn rteInstancePosition(local: vec3<f32>, anchorHigh: vec3<f32>, anchorLow: vec3<f32>) -> vec4<f32> {
|
|
14
|
+
return rteWorldPosition(local, RteDrawableUniform(
|
|
15
|
+
vec4<f32>(anchorHigh, 0.0),
|
|
16
|
+
vec4<f32>(anchorLow, 0.0),
|
|
17
|
+
));
|
|
18
|
+
}`;
|
|
19
|
+
export const mainShadowWgsl = `
|
|
20
|
+
@binding(1) @group(1) var shadowMap: texture_depth_2d;
|
|
21
|
+
@binding(2) @group(1) var shadowCmp: sampler_comparison;
|
|
22
|
+
struct Shadow { lightViewProj: mat4x4<f32>, params: vec4<f32>, params2: vec4<f32>, }
|
|
23
|
+
@binding(3) @group(1) var<uniform> shadowU: Shadow;
|
|
24
|
+
const SHADOW_POISSON = array<vec2<f32>, 12>(
|
|
25
|
+
vec2<f32>(-0.326, -0.406), vec2<f32>(-0.840, -0.074), vec2<f32>(-0.696, 0.457),
|
|
26
|
+
vec2<f32>(-0.203, 0.621), vec2<f32>( 0.962, -0.195), vec2<f32>( 0.473, -0.480),
|
|
27
|
+
vec2<f32>( 0.519, 0.767), vec2<f32>( 0.185, -0.893), vec2<f32>( 0.507, 0.064),
|
|
28
|
+
vec2<f32>( 0.896, 0.412), vec2<f32>(-0.322, -0.933), vec2<f32>(-0.792, -0.598),
|
|
29
|
+
);
|
|
30
|
+
fn sunShadowFactor(eyePos: vec3<f32>, N: vec3<f32>, fragCoord: vec2<f32>) -> f32 {
|
|
31
|
+
if (shadowU.params.y < 0.5) { return 1.0; }
|
|
32
|
+
let L = normalize(env.sunDirection);
|
|
33
|
+
let Ns = N * select(-1.0, 1.0, dot(N, L) >= 0.0);
|
|
34
|
+
let biased = eyePos + Ns * shadowU.params.z;
|
|
35
|
+
let clip = shadowU.lightViewProj * vec4<f32>(biased, 1.0);
|
|
36
|
+
let ndc = clip.xyz / clip.w;
|
|
37
|
+
let uv = vec2<f32>(ndc.x * 0.5 + 0.5, ndc.y * -0.5 + 0.5);
|
|
38
|
+
let inBounds = uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && ndc.z > 0.0;
|
|
39
|
+
if (!inBounds) { return 1.0; }
|
|
40
|
+
let NdotL = max(dot(Ns, L), 0.0);
|
|
41
|
+
let slope = clamp(sqrt(max(1.0 - NdotL * NdotL, 0.0)) / max(NdotL, 0.1), 1.0, 12.0);
|
|
42
|
+
let refDepth = ndc.z + shadowU.params2.x * slope * (1.0 + shadowU.params.w);
|
|
43
|
+
let radius = shadowU.params.x * shadowU.params.w;
|
|
44
|
+
let ign = fract(52.9829189 * fract(dot(fragCoord, vec2<f32>(0.06711056, 0.00583715))));
|
|
45
|
+
let ang = ign * 6.2831853;
|
|
46
|
+
let cr = cos(ang); let sr = sin(ang); var sum = 0.0;
|
|
47
|
+
for (var i = 0; i < 12; i = i + 1) {
|
|
48
|
+
let p = SHADOW_POISSON[i];
|
|
49
|
+
let off = vec2<f32>(p.x * cr - p.y * sr, p.x * sr + p.y * cr) * radius;
|
|
50
|
+
sum = sum + textureSampleCompareLevel(shadowMap, shadowCmp, uv + off, refDepth);
|
|
51
|
+
}
|
|
52
|
+
return mix(1.0, sum / 12.0, smoothstep(0.0, 0.3, NdotL));
|
|
53
|
+
}`;
|
|
54
|
+
//# sourceMappingURL=main-rte-shadow.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-rte-shadow.wgsl.js","sourceRoot":"","sources":["../../src/shaders/main-rte-shadow.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,iFAAiF;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;UAajB,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkCpB,CAAC"}
|