angular-three-soba 1.14.1 → 2.0.0-beta.10
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 +2 -2
- package/abstractions/billboard/billboard.d.ts +28 -0
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +34 -0
- package/abstractions/grid/grid.d.ts +50 -0
- package/abstractions/index.d.ts +6 -11
- package/abstractions/text/text.d.ts +82 -0
- package/abstractions/text-3d/text-3d.d.ts +81 -0
- package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
- package/cameras/camera/camera.d.ts +26 -0
- package/cameras/cube-camera/cube-camera.d.ts +69 -0
- package/cameras/index.d.ts +4 -4
- package/cameras/orthographic-camera/orthographic-camera.d.ts +37 -0
- package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +10 -1
- package/controls/index.d.ts +1 -1
- package/controls/orbit-controls/orbit-controls.d.ts +54 -0
- package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
- package/esm2022/abstractions/billboard/billboard.mjs +74 -0
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +88 -0
- package/esm2022/abstractions/grid/grid.mjs +180 -0
- package/esm2022/abstractions/index.mjs +7 -12
- package/esm2022/abstractions/text/text.mjs +274 -0
- package/esm2022/abstractions/text-3d/text-3d.mjs +165 -0
- package/esm2022/angular-three-soba.mjs +1 -1
- package/esm2022/cameras/angular-three-soba-cameras.mjs +1 -1
- package/esm2022/cameras/camera/camera-content.mjs +20 -0
- package/esm2022/cameras/camera/camera.mjs +77 -0
- package/esm2022/cameras/cube-camera/cube-camera.mjs +161 -0
- package/esm2022/cameras/index.mjs +5 -5
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +102 -0
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +46 -0
- package/esm2022/controls/angular-three-soba-controls.mjs +1 -1
- package/esm2022/controls/index.mjs +2 -2
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +181 -0
- package/esm2022/index.mjs +1 -1
- package/esm2022/loaders/angular-three-soba-loaders.mjs +1 -1
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +30 -0
- package/esm2022/loaders/index.mjs +5 -6
- package/esm2022/loaders/loader/loader.mjs +138 -0
- package/esm2022/loaders/progress/progress.mjs +45 -0
- package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
- package/esm2022/materials/angular-three-soba-materials.mjs +1 -1
- package/esm2022/materials/index.mjs +7 -6
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +82 -0
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +367 -0
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +171 -0
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +278 -0
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
- package/esm2022/materials/point-material/point-material.mjs +46 -0
- package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
- package/esm2022/misc/animations/animations.mjs +59 -0
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +44 -0
- package/esm2022/misc/example/example.mjs +160 -0
- package/esm2022/misc/fbo/fbo.mjs +47 -0
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +304 -0
- package/esm2022/misc/index.mjs +14 -5
- package/esm2022/misc/sampler/sampler.mjs +142 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +209 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +6 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +329 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +182 -0
- package/esm2022/shaders/angular-three-soba-shaders.mjs +1 -1
- package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
- package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
- package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
- package/esm2022/shaders/index.mjs +18 -15
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +56 -0
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
- package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +25 -0
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +33 -0
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
- package/esm2022/shaders/star-field-material/star-field-material.mjs +33 -0
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +267 -0
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +206 -0
- package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
- package/esm2022/staging/bounds/bounds.mjs +308 -0
- package/esm2022/staging/camera-shake/camera-shake.mjs +123 -0
- package/esm2022/staging/center/center.mjs +163 -0
- package/esm2022/staging/cloud/cloud.mjs +158 -0
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +246 -0
- package/esm2022/staging/environment/assets.mjs +13 -0
- package/esm2022/staging/environment/environment-cube.mjs +47 -0
- package/esm2022/staging/environment/environment-ground.mjs +41 -0
- package/esm2022/staging/environment/environment-input.mjs +119 -0
- package/esm2022/staging/environment/environment-map.mjs +53 -0
- package/esm2022/staging/environment/environment-portal.mjs +113 -0
- package/esm2022/staging/environment/environment.mjs +61 -0
- package/esm2022/staging/environment/utils.mjs +105 -0
- package/esm2022/staging/float/float.mjs +94 -0
- package/esm2022/staging/index.mjs +22 -18
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +119 -0
- package/esm2022/staging/sparkles/sparkles.mjs +164 -0
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +84 -0
- package/esm2022/staging/spot-light/spot-light.mjs +81 -0
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +98 -0
- package/esm2022/staging/stage/stage.mjs +388 -0
- package/esm2022/staging/stars/stars.mjs +147 -0
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +224 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +2 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +668 -1882
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +279 -232
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +104 -69
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +177 -164
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +630 -482
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2248 -122
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +697 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +554 -209
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +3231 -2852
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +22 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/fesm2022/angular-three-soba.mjs.map +1 -1
- package/loaders/gltf-loader/gltf-loader.d.ts +10 -0
- package/loaders/index.d.ts +4 -5
- package/loaders/loader/loader.d.ts +33 -0
- package/loaders/progress/progress.d.ts +9 -0
- package/loaders/texture-loader/texture-loader.d.ts +7 -0
- package/materials/index.d.ts +6 -5
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +40 -0
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +99 -0
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +62 -0
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +107 -0
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +29 -0
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +15 -0
- package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +9 -0
- package/misc/example/example.d.ts +81 -0
- package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +214 -0
- package/misc/index.d.ts +13 -4
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +43 -32
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/lib/adaptive → performances/adaptive-events}/adaptive-events.d.ts +5 -6
- package/performances/index.d.ts +5 -0
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +92 -0
- package/performances/points/position-point.d.ts +11 -0
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +124 -0
- package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
- package/shaders/grid-material/grid-material.d.ts +37 -0
- package/shaders/index.d.ts +17 -14
- package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +147 -2
- package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +1 -1
- package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
- package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +19 -0
- package/shaders/sparkles-material/sparkles-material.d.ts +17 -0
- package/shaders/spot-light-material/spot-light-material.d.ts +13 -0
- package/shaders/star-field-material/star-field-material.d.ts +13 -0
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +146 -0
- package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
- package/staging/accumulative-shadows/randomized-lights.d.ts +90 -0
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +134 -0
- package/staging/camera-shake/camera-shake.d.ts +43 -0
- package/staging/center/center.d.ts +70 -0
- package/staging/cloud/cloud.d.ts +51 -0
- package/staging/contact-shadows/contact-shadows.d.ts +70 -0
- package/staging/{lib/environment → environment}/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +15 -0
- package/staging/environment/environment-ground.d.ts +13 -0
- package/staging/environment/environment-input.d.ts +68 -0
- package/staging/environment/environment-map.d.ts +16 -0
- package/staging/environment/environment-portal.d.ts +18 -0
- package/staging/{lib/environment → environment}/environment.d.ts +2 -6
- package/staging/environment/utils.d.ts +7 -0
- package/staging/float/float.d.ts +31 -0
- package/staging/index.d.ts +21 -17
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +48 -0
- package/staging/sparkles/sparkles.d.ts +63 -0
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +38 -0
- package/staging/spot-light/spot-light.d.ts +39 -0
- package/staging/spot-light/volumetric-mesh.d.ts +24 -0
- package/staging/stage/stage.d.ts +130 -0
- package/staging/stars/stars.d.ts +45 -0
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +1 -0
- package/web-types.json +1 -0
- package/abstractions/lib/billboard/billboard.d.ts +0 -14
- package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
- package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
- package/abstractions/lib/edges/edges.d.ts +0 -18
- package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -15
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
- package/abstractions/lib/line/line-input.d.ts +0 -19
- package/abstractions/lib/line/line.d.ts +0 -21
- package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
- package/abstractions/lib/text/text.d.ts +0 -21
- package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
- package/assets/default-spot-light-shadow.glsl +0 -10
- package/cameras/lib/camera/camera.d.ts +0 -19
- package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
- package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
- package/esm2022/abstractions/lib/billboard/billboard.mjs +0 -74
- package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -120
- package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -99
- package/esm2022/abstractions/lib/edges/edges.mjs +0 -96
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -213
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -92
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -184
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -46
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -134
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -267
- package/esm2022/abstractions/lib/line/line-input.mjs +0 -76
- package/esm2022/abstractions/lib/line/line.mjs +0 -133
- package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/abstractions/lib/text/text.mjs +0 -115
- package/esm2022/abstractions/lib/text-3d/text-3d.mjs +0 -145
- package/esm2022/cameras/lib/camera/camera-content.mjs +0 -21
- package/esm2022/cameras/lib/camera/camera.mjs +0 -75
- package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +0 -131
- package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -93
- package/esm2022/cameras/lib/perspective-camera/perspective-camera.mjs +0 -47
- package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +0 -147
- package/esm2022/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
- package/esm2022/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
- package/esm2022/loaders/lib/loader/loader.mjs +0 -134
- package/esm2022/loaders/lib/progress/progress.mjs +0 -39
- package/esm2022/loaders/lib/texture-loader/texture-loader.mjs +0 -19
- package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -75
- package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -328
- package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -158
- package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -238
- package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
- package/esm2022/misc/lib/animations/animations.mjs +0 -52
- package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +0 -26
- package/esm2022/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
- package/esm2022/misc/lib/fbo/fbo.mjs +0 -39
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/index.mjs +0 -5
- package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +0 -47
- package/esm2022/performance/lib/adaptive/adaptive-events.mjs +0 -37
- package/esm2022/performance/lib/detailed/detailed.mjs +0 -54
- package/esm2022/performance/lib/stats/stats.mjs +0 -80
- package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +0 -61
- package/esm2022/shaders/lib/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
- package/esm2022/shaders/lib/convolution-material/convolution-material.mjs +0 -94
- package/esm2022/shaders/lib/discard-material/discard-material.mjs +0 -3
- package/esm2022/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
- package/esm2022/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
- package/esm2022/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
- package/esm2022/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
- package/esm2022/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
- package/esm2022/shaders/lib/shader-material/shader-material.mjs +0 -34
- package/esm2022/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
- package/esm2022/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
- package/esm2022/shaders/lib/star-field-material/star-field-material.mjs +0 -32
- package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -249
- package/esm2022/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
- package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -201
- package/esm2022/staging/lib/bounds/bounds.mjs +0 -284
- package/esm2022/staging/lib/camera-shake/camera-shake.mjs +0 -122
- package/esm2022/staging/lib/caustics/caustics.mjs +0 -364
- package/esm2022/staging/lib/center/center.mjs +0 -143
- package/esm2022/staging/lib/cloud/cloud.mjs +0 -160
- package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +0 -228
- package/esm2022/staging/lib/environment/assets.mjs +0 -13
- package/esm2022/staging/lib/environment/environment-cube.mjs +0 -41
- package/esm2022/staging/lib/environment/environment-ground.mjs +0 -67
- package/esm2022/staging/lib/environment/environment-inputs.mjs +0 -87
- package/esm2022/staging/lib/environment/environment-map.mjs +0 -39
- package/esm2022/staging/lib/environment/environment-portal.mjs +0 -111
- package/esm2022/staging/lib/environment/environment.mjs +0 -165
- package/esm2022/staging/lib/environment/utils.mjs +0 -70
- package/esm2022/staging/lib/float/float.mjs +0 -77
- package/esm2022/staging/lib/sky/sky.mjs +0 -109
- package/esm2022/staging/lib/sparkles/sparkles.mjs +0 -210
- package/esm2022/staging/lib/spot-light/common.mjs +0 -42
- package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +0 -51
- package/esm2022/staging/lib/spot-light/spot-light-input.mjs +0 -62
- package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -74
- package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -126
- package/esm2022/staging/lib/spot-light/spot-light-shadow.mjs +0 -63
- package/esm2022/staging/lib/spot-light/spot-light.mjs +0 -117
- package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +0 -86
- package/esm2022/staging/lib/stage/stage.mjs +0 -368
- package/esm2022/staging/lib/stars/stars.mjs +0 -140
- package/fesm2022/angular-three-soba-performance.mjs +0 -210
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
- package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
- package/loaders/lib/loader/loader.d.ts +0 -26
- package/loaders/lib/progress/progress.d.ts +0 -16
- package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
- package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
- package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
- package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
- package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
- package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
- package/misc/lib/animations/animations.d.ts +0 -13
- package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
- package/performance/README.md +0 -3
- package/performance/index.d.ts +0 -4
- package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
- package/performance/lib/detailed/detailed.d.ts +0 -13
- package/performance/lib/stats/stats.d.ts +0 -15
- package/plugin/README.md +0 -11
- package/plugin/generators.json +0 -19
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -4
- package/plugin/src/generators/init/init.js +0 -22
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/shaders/lib/soft-shadow-material/soft-shadow-material.d.ts +0 -10
- package/shaders/lib/spot-light-material/spot-light-material.d.ts +0 -4
- package/shaders/lib/star-field-material/star-field-material.d.ts +0 -3
- package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
- package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
- package/staging/lib/bounds/bounds.d.ts +0 -48
- package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
- package/staging/lib/caustics/caustics.d.ts +0 -47
- package/staging/lib/center/center.d.ts +0 -40
- package/staging/lib/cloud/cloud.d.ts +0 -23
- package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
- package/staging/lib/environment/environment-cube.d.ts +0 -11
- package/staging/lib/environment/environment-ground.d.ts +0 -9
- package/staging/lib/environment/environment-inputs.d.ts +0 -28
- package/staging/lib/environment/environment-map.d.ts +0 -10
- package/staging/lib/environment/environment-portal.d.ts +0 -15
- package/staging/lib/environment/utils.d.ts +0 -8
- package/staging/lib/float/float.d.ts +0 -16
- package/staging/lib/sky/sky.d.ts +0 -20
- package/staging/lib/sparkles/sparkles.d.ts +0 -29
- package/staging/lib/spot-light/common.d.ts +0 -3
- package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
- package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
- package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
- package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
- package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
- package/staging/lib/spot-light/spot-light.d.ts +0 -17
- package/staging/lib/spot-light/volumetric-mesh.d.ts +0 -15
- package/staging/lib/stage/stage.d.ts +0 -87
- package/staging/lib/stars/stars.d.ts +0 -20
- /package/shaders/{lib/caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{lib/caustics-projection-material → caustics}/caustics-projection-material.d.ts +0 -0
- /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
- /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
- /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
- /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
const _inverseMatrix = /*@__PURE__*/ new THREE.Matrix4();
|
|
4
|
+
const _ray = /*@__PURE__*/ new THREE.Ray();
|
|
5
|
+
const _sphere = /*@__PURE__*/ new THREE.Sphere();
|
|
6
|
+
const _position = /*@__PURE__*/ new THREE.Vector3();
|
|
7
|
+
export class PositionPoint extends THREE.Group {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this.size = 0;
|
|
11
|
+
this.color = new THREE.Color('white');
|
|
12
|
+
this.instance = new ElementRef(undefined);
|
|
13
|
+
this.instanceKey = new ElementRef(undefined);
|
|
14
|
+
}
|
|
15
|
+
// This will allow the virtual instance have bounds
|
|
16
|
+
get geometry() {
|
|
17
|
+
return this.instance.nativeElement?.geometry;
|
|
18
|
+
}
|
|
19
|
+
raycast(raycaster, intersects) {
|
|
20
|
+
const parent = this.instance.nativeElement;
|
|
21
|
+
if (!parent || !parent.geometry)
|
|
22
|
+
return;
|
|
23
|
+
const instanceId = parent.userData['instances'].indexOf(this.instanceKey);
|
|
24
|
+
// If the instance wasn't found or exceeds the parents draw range, bail out
|
|
25
|
+
if (instanceId === -1 || instanceId > parent.geometry.drawRange.count)
|
|
26
|
+
return;
|
|
27
|
+
const threshold = raycaster.params.Points?.threshold ?? 1;
|
|
28
|
+
_sphere.set(this.getWorldPosition(_position), threshold);
|
|
29
|
+
if (raycaster.ray.intersectsSphere(_sphere) === false)
|
|
30
|
+
return;
|
|
31
|
+
_inverseMatrix.copy(parent.matrixWorld).invert();
|
|
32
|
+
_ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);
|
|
33
|
+
const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);
|
|
34
|
+
const localThresholdSq = localThreshold * localThreshold;
|
|
35
|
+
const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);
|
|
36
|
+
if (rayPointDistanceSq < localThresholdSq) {
|
|
37
|
+
const intersectPoint = new THREE.Vector3();
|
|
38
|
+
_ray.closestPointToPoint(this.position, intersectPoint);
|
|
39
|
+
intersectPoint.applyMatrix4(this.matrixWorld);
|
|
40
|
+
const distance = raycaster.ray.origin.distanceTo(intersectPoint);
|
|
41
|
+
if (distance < raycaster.near || distance > raycaster.far)
|
|
42
|
+
return;
|
|
43
|
+
intersects.push({
|
|
44
|
+
distance: distance,
|
|
45
|
+
distanceToRay: Math.sqrt(rayPointDistanceSq),
|
|
46
|
+
point: intersectPoint,
|
|
47
|
+
index: instanceId,
|
|
48
|
+
face: null,
|
|
49
|
+
object: this,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9wb2ludHMvcG9zaXRpb24tcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFcEQsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLLENBQUMsS0FBSztJQU03QztRQUNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztJQUM5QyxDQUFDO0lBRVEsT0FBTyxDQUFDLFNBQTBCLEVBQUUsVUFBZ0M7UUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUUsMkVBQTJFO1FBQzNFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUU5RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLO1lBQUUsT0FBTztRQUU5RCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN6RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakUsSUFBSSxrQkFBa0IsR0FBRyxnQkFBZ0IsRUFBRTtZQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN4RCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUc7Z0JBQUUsT0FBTztZQUNsRSxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztTQUNIO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IFRIUkVFLk1hdHJpeDQoKTtcbmNvbnN0IF9yYXkgPSAvKkBfX1BVUkVfXyovIG5ldyBUSFJFRS5SYXkoKTtcbmNvbnN0IF9zcGhlcmUgPSAvKkBfX1BVUkVfXyovIG5ldyBUSFJFRS5TcGhlcmUoKTtcbmNvbnN0IF9wb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi8gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uUG9pbnQgZXh0ZW5kcyBUSFJFRS5Hcm91cCB7XG5cdHNpemU6IG51bWJlcjtcblx0Y29sb3I6IFRIUkVFLkNvbG9yO1xuXHRpbnN0YW5jZTogRWxlbWVudFJlZjxUSFJFRS5Qb2ludHMgfCB1bmRlZmluZWQ+O1xuXHRpbnN0YW5jZUtleTogRWxlbWVudFJlZjxhbnk+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5zaXplID0gMDtcblx0XHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpO1xuXHRcdHRoaXMuaW5zdGFuY2UgPSBuZXcgRWxlbWVudFJlZih1bmRlZmluZWQpO1xuXHRcdHRoaXMuaW5zdGFuY2VLZXkgPSBuZXcgRWxlbWVudFJlZih1bmRlZmluZWQpO1xuXHR9XG5cblx0Ly8gVGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIGhhdmUgYm91bmRzXG5cdGdldCBnZW9tZXRyeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnN0YW5jZS5uYXRpdmVFbGVtZW50Py5nZW9tZXRyeTtcblx0fVxuXG5cdG92ZXJyaWRlIHJheWNhc3QocmF5Y2FzdGVyOiBUSFJFRS5SYXljYXN0ZXIsIGludGVyc2VjdHM6IFRIUkVFLkludGVyc2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5pbnN0YW5jZS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2VvbWV0cnkpIHJldHVybjtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMuaW5zdGFuY2VLZXkpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50Lmdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdGhyZXNob2xkID0gcmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHM/LnRocmVzaG9sZCA/PyAxO1xuXHRcdF9zcGhlcmUuc2V0KHRoaXMuZ2V0V29ybGRQb3NpdGlvbihfcG9zaXRpb24pLCB0aHJlc2hvbGQpO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm47XG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0X3JheS5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXHRcdGNvbnN0IHJheVBvaW50RGlzdGFuY2VTcSA9IF9yYXkuZGlzdGFuY2VTcVRvUG9pbnQodGhpcy5wb3NpdGlvbik7XG5cblx0XHRpZiAocmF5UG9pbnREaXN0YW5jZVNxIDwgbG9jYWxUaHJlc2hvbGRTcSkge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0UG9pbnQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRcdFx0X3JheS5jbG9zZXN0UG9pbnRUb1BvaW50KHRoaXMucG9zaXRpb24sIGludGVyc2VjdFBvaW50KTtcblx0XHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhpbnRlcnNlY3RQb2ludCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KHJheVBvaW50RGlzdGFuY2VTcSksXG5cdFx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdFx0aW5kZXg6IGluc3RhbmNlSWQsXG5cdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdG9iamVjdDogdGhpcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export class SegmentObject {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.color = new THREE.Color('white');
|
|
5
|
+
this.start = new THREE.Vector3(0, 0, 0);
|
|
6
|
+
this.end = new THREE.Vector3(0, 0, 0);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9zZWdtZW50cy9zZWdtZW50LW9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLE9BQU8sYUFBYTtJQUl6QjtRQUNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTZWdtZW50T2JqZWN0IHtcblx0Y29sb3I6IFRIUkVFLkNvbG9yO1xuXHRzdGFydDogVEhSRUUuVmVjdG9yMztcblx0ZW5kOiBUSFJFRS5WZWN0b3IzO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpO1xuXHRcdHRoaXMuc3RhcnQgPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKTtcblx0XHR0aGlzLmVuZCA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, NgZone, computed, effect, forwardRef, inject, signal, untracked, } from '@angular/core';
|
|
2
|
+
import { NgtArgs, createInjectionToken, extend, injectBeforeRender, injectNgtRef, is, signalStore, } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';
|
|
5
|
+
import { SegmentObject } from './segment-object';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const normPos = (pos) => pos instanceof THREE.Vector3
|
|
8
|
+
? pos
|
|
9
|
+
: new THREE.Vector3(...(typeof pos === 'number' ? [pos, pos, pos] : pos));
|
|
10
|
+
extend({ SegmentObject });
|
|
11
|
+
export const [injectNgtsSegmentsApi, provideNgtsSegmentsApi] = createInjectionToken((segments) => segments.api, { isRoot: false, deps: [forwardRef(() => NgtsSegments)] });
|
|
12
|
+
export class NgtsSegment {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.inputs = signalStore({});
|
|
15
|
+
this.segmentRef = injectNgtRef();
|
|
16
|
+
this.segmentsApi = injectNgtsSegmentsApi();
|
|
17
|
+
this.injector = inject(Injector);
|
|
18
|
+
this.zone = inject(NgZone);
|
|
19
|
+
this.start = this.inputs.select('start');
|
|
20
|
+
this.end = this.inputs.select('end');
|
|
21
|
+
this.normalizedStart = computed(() => normPos(this.start()));
|
|
22
|
+
this.normalizedEnd = computed(() => normPos(this.end()));
|
|
23
|
+
this.color = this.inputs.select('color');
|
|
24
|
+
}
|
|
25
|
+
set _start(start) {
|
|
26
|
+
this.inputs.set({ start });
|
|
27
|
+
}
|
|
28
|
+
set _end(end) {
|
|
29
|
+
this.inputs.set({ end });
|
|
30
|
+
}
|
|
31
|
+
set _color(color) {
|
|
32
|
+
this.inputs.set({ color });
|
|
33
|
+
}
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
effect((onCleanup) => {
|
|
36
|
+
const cleanup = this.zone.runOutsideAngular(() => {
|
|
37
|
+
const api = this.segmentsApi();
|
|
38
|
+
return api.subscribe(this.segmentRef);
|
|
39
|
+
});
|
|
40
|
+
onCleanup(cleanup);
|
|
41
|
+
}, { injector: this.injector });
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegment, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSegment, isStandalone: true, selector: "ngts-segment", inputs: { segmentRef: "segmentRef", _start: ["start", "_start"], _end: ["end", "_end"], _color: ["color", "_color"] }, ngImport: i0, template: `
|
|
45
|
+
<ngt-segment-object [ref]="segmentRef" [color]="color()" [start]="normalizedStart()" [end]="normalizedEnd()" />
|
|
46
|
+
`, isInline: true }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegment, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{
|
|
51
|
+
selector: 'ngts-segment',
|
|
52
|
+
standalone: true,
|
|
53
|
+
template: `
|
|
54
|
+
<ngt-segment-object [ref]="segmentRef" [color]="color()" [start]="normalizedStart()" [end]="normalizedEnd()" />
|
|
55
|
+
`,
|
|
56
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
57
|
+
}]
|
|
58
|
+
}], propDecorators: { segmentRef: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], _start: [{
|
|
61
|
+
type: Input,
|
|
62
|
+
args: [{ alias: 'start' }]
|
|
63
|
+
}], _end: [{
|
|
64
|
+
type: Input,
|
|
65
|
+
args: [{ alias: 'end' }]
|
|
66
|
+
}], _color: [{
|
|
67
|
+
type: Input,
|
|
68
|
+
args: [{ alias: 'color' }]
|
|
69
|
+
}] } });
|
|
70
|
+
export class NgtsSegments {
|
|
71
|
+
set _limit(limit) {
|
|
72
|
+
this.inputs.set({ limit });
|
|
73
|
+
}
|
|
74
|
+
set _lineWidth(lineWidth) {
|
|
75
|
+
this.inputs.set({ lineWidth });
|
|
76
|
+
}
|
|
77
|
+
constructor() {
|
|
78
|
+
this.inputs = signalStore({ limit: 1000, lineWidth: 1 });
|
|
79
|
+
this.segmentsRef = injectNgtRef();
|
|
80
|
+
this.segments = signal([]);
|
|
81
|
+
this.limit = this.inputs.select('limit');
|
|
82
|
+
this.positions = computed(() => Array(this.limit() * 6).fill(0));
|
|
83
|
+
this.colors = computed(() => Array(this.limit() * 6).fill(0));
|
|
84
|
+
this.resolution = new THREE.Vector2(512, 512);
|
|
85
|
+
this.lineWidth = this.inputs.select('lineWidth');
|
|
86
|
+
this.line = new Line2();
|
|
87
|
+
this.material = new LineMaterial();
|
|
88
|
+
this.geometry = new LineSegmentsGeometry();
|
|
89
|
+
this.api = computed(() => ({
|
|
90
|
+
subscribe: (segmentRef) => {
|
|
91
|
+
untracked(() => {
|
|
92
|
+
this.segments.update((s) => [...s, segmentRef]);
|
|
93
|
+
});
|
|
94
|
+
return () => {
|
|
95
|
+
untracked(() => {
|
|
96
|
+
this.segments.update((s) => s.filter((segment) => segment !== segmentRef));
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
}));
|
|
101
|
+
this.beforeRender();
|
|
102
|
+
}
|
|
103
|
+
beforeRender() {
|
|
104
|
+
injectBeforeRender(() => {
|
|
105
|
+
const [segments, limit, positions, colors] = [
|
|
106
|
+
this.segments(),
|
|
107
|
+
this.limit(),
|
|
108
|
+
this.positions(),
|
|
109
|
+
this.colors(),
|
|
110
|
+
];
|
|
111
|
+
for (let i = 0; i < limit; i++) {
|
|
112
|
+
const segmentRef = segments[i];
|
|
113
|
+
const segment = is.ref(segmentRef) ? segmentRef.nativeElement : segmentRef;
|
|
114
|
+
if (segment) {
|
|
115
|
+
positions[i * 6 + 0] = segment.start.x;
|
|
116
|
+
positions[i * 6 + 1] = segment.start.y;
|
|
117
|
+
positions[i * 6 + 2] = segment.start.z;
|
|
118
|
+
positions[i * 6 + 3] = segment.end.x;
|
|
119
|
+
positions[i * 6 + 4] = segment.end.y;
|
|
120
|
+
positions[i * 6 + 5] = segment.end.z;
|
|
121
|
+
colors[i * 6 + 0] = segment.color.r;
|
|
122
|
+
colors[i * 6 + 1] = segment.color.g;
|
|
123
|
+
colors[i * 6 + 2] = segment.color.b;
|
|
124
|
+
colors[i * 6 + 3] = segment.color.r;
|
|
125
|
+
colors[i * 6 + 4] = segment.color.g;
|
|
126
|
+
colors[i * 6 + 5] = segment.color.b;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this.geometry.setColors(colors);
|
|
130
|
+
this.geometry.setPositions(positions);
|
|
131
|
+
this.line.computeLineDistances();
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegments, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSegments, isStandalone: true, selector: "ngts-segments", inputs: { segmentsRef: "segmentsRef", _limit: ["limit", "_limit"], _lineWidth: ["lineWidth", "_lineWidth"] }, providers: [provideNgtsSegmentsApi()], ngImport: i0, template: `
|
|
136
|
+
<ngt-primitive *args="[line]" [ref]="segmentsRef">
|
|
137
|
+
<ngt-primitive *args="[geometry]" attach="geometry" />
|
|
138
|
+
<ngt-primitive
|
|
139
|
+
*args="[material]"
|
|
140
|
+
attach="material"
|
|
141
|
+
ngtCompound
|
|
142
|
+
[vertexColors]="true"
|
|
143
|
+
[resolution]="resolution"
|
|
144
|
+
[linewidth]="lineWidth()"
|
|
145
|
+
/>
|
|
146
|
+
<ng-content />
|
|
147
|
+
</ngt-primitive>
|
|
148
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
149
|
+
}
|
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegments, decorators: [{
|
|
151
|
+
type: Component,
|
|
152
|
+
args: [{
|
|
153
|
+
selector: 'ngts-segments',
|
|
154
|
+
standalone: true,
|
|
155
|
+
template: `
|
|
156
|
+
<ngt-primitive *args="[line]" [ref]="segmentsRef">
|
|
157
|
+
<ngt-primitive *args="[geometry]" attach="geometry" />
|
|
158
|
+
<ngt-primitive
|
|
159
|
+
*args="[material]"
|
|
160
|
+
attach="material"
|
|
161
|
+
ngtCompound
|
|
162
|
+
[vertexColors]="true"
|
|
163
|
+
[resolution]="resolution"
|
|
164
|
+
[linewidth]="lineWidth()"
|
|
165
|
+
/>
|
|
166
|
+
<ng-content />
|
|
167
|
+
</ngt-primitive>
|
|
168
|
+
`,
|
|
169
|
+
imports: [NgtArgs],
|
|
170
|
+
providers: [provideNgtsSegmentsApi()],
|
|
171
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
172
|
+
}]
|
|
173
|
+
}], ctorParameters: function () { return []; }, propDecorators: { segmentsRef: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], _limit: [{
|
|
176
|
+
type: Input,
|
|
177
|
+
args: [{ alias: 'limit' }]
|
|
178
|
+
}], _lineWidth: [{
|
|
179
|
+
type: Input,
|
|
180
|
+
args: [{ alias: 'lineWidth' }]
|
|
181
|
+
}] } });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9zZWdtZW50cy9zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sT0FBTyxFQUVQLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixFQUFFLEVBQ0YsV0FBVyxHQUdYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFxQmpELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBOEIsRUFBMEIsRUFBRSxDQUMxRSxHQUFHLFlBQVksS0FBSyxDQUFDLE9BQU87SUFDM0IsQ0FBQyxDQUFDLEdBQUc7SUFDTCxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUE4QixDQUFDLENBQUM7QUFFMUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUUxQixNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHNCQUFzQixDQUFDLEdBQUcsb0JBQW9C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QztnQkFDM0UsSUFBSSxPQUFPLEVBQUU7b0JBQ1osU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFdkMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFckMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFcEMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDcEM7YUFDRDtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBNUVXLFlBQVk7a0dBQVosWUFBWSwwS0FIYixDQUFDLHNCQUFzQixFQUFFLENBQUMsMEJBZjNCOzs7Ozs7Ozs7Ozs7O0VBYVQsNERBQ1MsT0FBTzs7MkZBSUwsWUFBWTtrQkFyQnhCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7RUFhVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNqQzswRUFJUyxXQUFXO3NCQUFuQixLQUFLO2dCQUV5QixNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFJVSxVQUFVO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0SW5qZWN0b3IsXG5cdElucHV0LFxuXHROZ1pvbmUsXG5cdE9uSW5pdCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RSZWYsXG5cdGNyZWF0ZUluamVjdGlvblRva2VuLFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpcyxcblx0c2lnbmFsU3RvcmUsXG5cdHR5cGUgTmd0Q29sb3IsXG5cdHR5cGUgTmd0VmVjdG9yMyxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBMaW5lMiwgTGluZU1hdGVyaWFsLCBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBTZWdtZW50T2JqZWN0IH0gZnJvbSAnLi9zZWdtZW50LW9iamVjdCc7XG5cbmV4cG9ydCB0eXBlIE5ndHNTZWdtZW50U3RhdGUgPSB7XG5cdHN0YXJ0PzogTmd0VmVjdG9yMztcblx0ZW5kPzogTmd0VmVjdG9yMztcblx0Y29sb3I/OiBOZ3RDb2xvcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndHNTZWdtZW50c1N0YXRlID0ge1xuXHRsaW1pdDogbnVtYmVyO1xuXHRsaW5lV2lkdGg6IG51bWJlcjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0J25ndC1zZWdtZW50LW9iamVjdCc6IFNlZ21lbnRPYmplY3Q7XG5cdFx0J25ndHMtc2VnbWVudCc6IE5ndHNTZWdtZW50U3RhdGU7XG5cdFx0J25ndHMtc2VnbWVudHMnOiBOZ3RzU2VnbWVudHNTdGF0ZTtcblx0fVxufVxuXG5jb25zdCBub3JtUG9zID0gKHBvczogTmd0c1NlZ21lbnRTdGF0ZVsnc3RhcnQnXSk6IFNlZ21lbnRPYmplY3RbJ3N0YXJ0J10gPT5cblx0cG9zIGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yM1xuXHRcdD8gcG9zXG5cdFx0OiBuZXcgVEhSRUUuVmVjdG9yMyguLi4oKHR5cGVvZiBwb3MgPT09ICdudW1iZXInID8gW3BvcywgcG9zLCBwb3NdIDogcG9zKSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKTtcblxuZXh0ZW5kKHsgU2VnbWVudE9iamVjdCB9KTtcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROZ3RzU2VnbWVudHNBcGksIHByb3ZpZGVOZ3RzU2VnbWVudHNBcGldID0gY3JlYXRlSW5qZWN0aW9uVG9rZW4oXG5cdChzZWdtZW50czogTmd0c1NlZ21lbnRzKSA9PiBzZWdtZW50cy5hcGksXG5cdHsgaXNSb290OiBmYWxzZSwgZGVwczogW2ZvcndhcmRSZWYoKCkgPT4gTmd0c1NlZ21lbnRzKV0gfSxcbik7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc2VnbWVudCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1zZWdtZW50LW9iamVjdCBbcmVmXT1cInNlZ21lbnRSZWZcIiBbY29sb3JdPVwiY29sb3IoKVwiIFtzdGFydF09XCJub3JtYWxpemVkU3RhcnQoKVwiIFtlbmRdPVwibm9ybWFsaXplZEVuZCgpXCIgLz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU2VnbWVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1NlZ21lbnRTdGF0ZT4oe30pO1xuXG5cdEBJbnB1dCgpIHNlZ21lbnRSZWYgPSBpbmplY3ROZ3RSZWY8U2VnbWVudE9iamVjdD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ3N0YXJ0JyB9KSBzZXQgX3N0YXJ0KHN0YXJ0OiBOZ3RWZWN0b3IzKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3RhcnQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2VuZCcgfSkgc2V0IF9lbmQoZW5kOiBOZ3RWZWN0b3IzKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZW5kIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvcicgfSkgc2V0IF9jb2xvcihjb2xvcjogTmd0Q29sb3IpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdHByaXZhdGUgc2VnbWVudHNBcGkgPSBpbmplY3ROZ3RzU2VnbWVudHNBcGkoKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cdHByaXZhdGUgc3RhcnQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3N0YXJ0Jyk7XG5cdHByaXZhdGUgZW5kID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdlbmQnKTtcblxuXHRub3JtYWxpemVkU3RhcnQgPSBjb21wdXRlZCgoKSA9PiBub3JtUG9zKHRoaXMuc3RhcnQoKSkpO1xuXHRub3JtYWxpemVkRW5kID0gY29tcHV0ZWQoKCkgPT4gbm9ybVBvcyh0aGlzLmVuZCgpKSk7XG5cdGNvbG9yID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvcicpO1xuXG5cdG5nT25Jbml0KCkge1xuXHRcdGVmZmVjdChcblx0XHRcdChvbkNsZWFudXApID0+IHtcblx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXBpID0gdGhpcy5zZWdtZW50c0FwaSgpO1xuXHRcdFx0XHRcdHJldHVybiBhcGkuc3Vic2NyaWJlKHRoaXMuc2VnbWVudFJlZik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvbkNsZWFudXAoY2xlYW51cCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdCk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zZWdtZW50cycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbGluZV1cIiBbcmVmXT1cInNlZ21lbnRzUmVmXCI+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZW9tZXRyeV1cIiBhdHRhY2g9XCJnZW9tZXRyeVwiIC8+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZVxuXHRcdFx0XHQqYXJncz1cIlttYXRlcmlhbF1cIlxuXHRcdFx0XHRhdHRhY2g9XCJtYXRlcmlhbFwiXG5cdFx0XHRcdG5ndENvbXBvdW5kXG5cdFx0XHRcdFt2ZXJ0ZXhDb2xvcnNdPVwidHJ1ZVwiXG5cdFx0XHRcdFtyZXNvbHV0aW9uXT1cInJlc29sdXRpb25cIlxuXHRcdFx0XHRbbGluZXdpZHRoXT1cImxpbmVXaWR0aCgpXCJcblx0XHRcdC8+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxuXHRwcm92aWRlcnM6IFtwcm92aWRlTmd0c1NlZ21lbnRzQXBpKCldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTZWdtZW50cyB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1NlZ21lbnRzU3RhdGU+KHsgbGltaXQ6IDEwMDAsIGxpbmVXaWR0aDogMSB9KTtcblxuXHRASW5wdXQoKSBzZWdtZW50c1JlZiA9IGluamVjdE5ndFJlZjxMaW5lMj4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2xpbWl0JyB9KSBzZXQgX2xpbWl0KGxpbWl0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBsaW1pdCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbGluZVdpZHRoJyB9KSBzZXQgX2xpbmVXaWR0aChsaW5lV2lkdGg6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGxpbmVXaWR0aCB9KTtcblx0fVxuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBzaWduYWw8Tmd0UmVmPFNlZ21lbnRPYmplY3Q+W10+KFtdKTtcblx0cHJpdmF0ZSBsaW1pdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbGltaXQnKTtcblxuXHRwcml2YXRlIHBvc2l0aW9ucyA9IGNvbXB1dGVkKCgpID0+IEFycmF5KHRoaXMubGltaXQoKSAqIDYpLmZpbGwoMCkpO1xuXHRwcml2YXRlIGNvbG9ycyA9IGNvbXB1dGVkKCgpID0+IEFycmF5KHRoaXMubGltaXQoKSAqIDYpLmZpbGwoMCkpO1xuXG5cdHJlc29sdXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMig1MTIsIDUxMik7XG5cdGxpbmVXaWR0aCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbGluZVdpZHRoJyk7XG5cdGxpbmUgPSBuZXcgTGluZTIoKTtcblx0bWF0ZXJpYWwgPSBuZXcgTGluZU1hdGVyaWFsKCk7XG5cdGdlb21ldHJ5ID0gbmV3IExpbmVTZWdtZW50c0dlb21ldHJ5KCk7XG5cblx0YXBpID0gY29tcHV0ZWQoKCkgPT4gKHtcblx0XHRzdWJzY3JpYmU6IChzZWdtZW50UmVmOiBOZ3RSZWY8U2VnbWVudE9iamVjdD4pID0+IHtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VnbWVudHMudXBkYXRlKChzKSA9PiBbLi4ucywgc2VnbWVudFJlZl0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zZWdtZW50cy51cGRhdGUoKHMpID0+IHMuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICE9PSBzZWdtZW50UmVmKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9KSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbc2VnbWVudHMsIGxpbWl0LCBwb3NpdGlvbnMsIGNvbG9yc10gPSBbXG5cdFx0XHRcdHRoaXMuc2VnbWVudHMoKSxcblx0XHRcdFx0dGhpcy5saW1pdCgpLFxuXHRcdFx0XHR0aGlzLnBvc2l0aW9ucygpLFxuXHRcdFx0XHR0aGlzLmNvbG9ycygpLFxuXHRcdFx0XTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzZWdtZW50UmVmID0gc2VnbWVudHNbaV07XG5cdFx0XHRcdGNvbnN0IHNlZ21lbnQgPSBpcy5yZWYoc2VnbWVudFJlZikgPyBzZWdtZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBzZWdtZW50UmVmO1xuXHRcdFx0XHRpZiAoc2VnbWVudCkge1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDBdID0gc2VnbWVudC5zdGFydC54O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDFdID0gc2VnbWVudC5zdGFydC55O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDJdID0gc2VnbWVudC5zdGFydC56O1xuXG5cdFx0XHRcdFx0cG9zaXRpb25zW2kgKiA2ICsgM10gPSBzZWdtZW50LmVuZC54O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDRdID0gc2VnbWVudC5lbmQueTtcblx0XHRcdFx0XHRwb3NpdGlvbnNbaSAqIDYgKyA1XSA9IHNlZ21lbnQuZW5kLno7XG5cblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAwXSA9IHNlZ21lbnQuY29sb3Iucjtcblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAxXSA9IHNlZ21lbnQuY29sb3IuZztcblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAyXSA9IHNlZ21lbnQuY29sb3IuYjtcblxuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDNdID0gc2VnbWVudC5jb2xvci5yO1xuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDRdID0gc2VnbWVudC5jb2xvci5nO1xuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDVdID0gc2VnbWVudC5jb2xvci5iO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdlb21ldHJ5LnNldENvbG9ycyhjb2xvcnMpO1xuXHRcdFx0dGhpcy5nZW9tZXRyeS5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcblx0XHRcdHRoaXMubGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
4
|
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLXNoYWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLXNoYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BufferAttribute, BufferGeometry, HalfFloatType, LinearFilter, Mesh, PerspectiveCamera, Scene, Vector2, WebGLRenderTarget, } from 'three';
|
|
2
|
+
import { ConvolutionMaterial } from '../convolution-material/convolution-material';
|
|
3
|
+
export class BlurPass {
|
|
4
|
+
constructor({ gl, resolution, width = 500, height = 500, minDepthThreshold = 0, maxDepthThreshold = 1, depthScale = 0, depthToBlurRatioBias = 0.25, }) {
|
|
5
|
+
this.renderToScreen = false;
|
|
6
|
+
this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {
|
|
7
|
+
minFilter: LinearFilter,
|
|
8
|
+
magFilter: LinearFilter,
|
|
9
|
+
stencilBuffer: false,
|
|
10
|
+
depthBuffer: false,
|
|
11
|
+
type: HalfFloatType,
|
|
12
|
+
});
|
|
13
|
+
this.renderTargetB = this.renderTargetA.clone();
|
|
14
|
+
this.convolutionMaterial = new ConvolutionMaterial();
|
|
15
|
+
this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);
|
|
16
|
+
this.convolutionMaterial.setResolution(new Vector2(width, height));
|
|
17
|
+
this.scene = new Scene();
|
|
18
|
+
this.camera = new PerspectiveCamera();
|
|
19
|
+
this.convolutionMaterial.uniforms['minDepthThreshold'].value = minDepthThreshold;
|
|
20
|
+
this.convolutionMaterial.uniforms['maxDepthThreshold'].value = maxDepthThreshold;
|
|
21
|
+
this.convolutionMaterial.uniforms['depthScale'].value = depthScale;
|
|
22
|
+
this.convolutionMaterial.uniforms['depthToBlurRatioBias'].value = depthToBlurRatioBias;
|
|
23
|
+
this.convolutionMaterial.defines['USE_DEPTH'] = depthScale > 0;
|
|
24
|
+
const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);
|
|
25
|
+
const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);
|
|
26
|
+
const geometry = new BufferGeometry();
|
|
27
|
+
geometry.setAttribute('position', new BufferAttribute(vertices, 3));
|
|
28
|
+
geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
|
|
29
|
+
this.screen = new Mesh(geometry, this.convolutionMaterial);
|
|
30
|
+
this.screen.frustumCulled = false;
|
|
31
|
+
this.scene.add(this.screen);
|
|
32
|
+
}
|
|
33
|
+
render(renderer, inputBuffer, outputBuffer) {
|
|
34
|
+
const scene = this.scene;
|
|
35
|
+
const camera = this.camera;
|
|
36
|
+
const renderTargetA = this.renderTargetA;
|
|
37
|
+
const renderTargetB = this.renderTargetB;
|
|
38
|
+
let material = this.convolutionMaterial;
|
|
39
|
+
let uniforms = material.uniforms;
|
|
40
|
+
uniforms['depthBuffer'].value = inputBuffer.depthTexture;
|
|
41
|
+
const kernel = material.kernel;
|
|
42
|
+
let lastRT = inputBuffer;
|
|
43
|
+
let destRT;
|
|
44
|
+
let i, l;
|
|
45
|
+
// Apply the multi-pass blur.
|
|
46
|
+
for (i = 0, l = kernel.length - 1; i < l; ++i) {
|
|
47
|
+
// Alternate between targets.
|
|
48
|
+
destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;
|
|
49
|
+
uniforms['kernel'].value = kernel[i];
|
|
50
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
51
|
+
renderer.setRenderTarget(destRT);
|
|
52
|
+
renderer.render(scene, camera);
|
|
53
|
+
lastRT = destRT;
|
|
54
|
+
}
|
|
55
|
+
uniforms['kernel'].value = kernel[i];
|
|
56
|
+
uniforms['inputBuffer'].value = lastRT.texture;
|
|
57
|
+
renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);
|
|
58
|
+
renderer.render(scene, camera);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ci1wYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL2JsdXItcGFzcy9ibHVyLXBhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixjQUFjLEVBRWQsYUFBYSxFQUNiLFlBQVksRUFDWixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxPQUFPLEVBQ1AsaUJBQWlCLEdBRWpCLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFhbkYsTUFBTSxPQUFPLFFBQVE7SUFTcEIsWUFBWSxFQUNYLEVBQUUsRUFDRixVQUFVLEVBQ1YsS0FBSyxHQUFHLEdBQUcsRUFDWCxNQUFNLEdBQUcsR0FBRyxFQUNaLGlCQUFpQixHQUFHLENBQUMsRUFDckIsaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixVQUFVLEdBQUcsQ0FBQyxFQUNkLG9CQUFvQixHQUFHLElBQUksR0FDWjtRQVhoQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVkvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksaUJBQWlCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUNsRSxTQUFTLEVBQUUsWUFBWTtZQUN2QixTQUFTLEVBQUUsWUFBWTtZQUN2QixhQUFhLEVBQUUsS0FBSztZQUNwQixXQUFXLEVBQUUsS0FBSztZQUNsQixJQUFJLEVBQUUsYUFBYTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0s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QUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLDZCQUE2QjtZQUM3QixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUN2RCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDL0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRCdWZmZXJBdHRyaWJ1dGUsXG5cdEJ1ZmZlckdlb21ldHJ5LFxuXHRDYW1lcmEsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWVzaCxcblx0UGVyc3BlY3RpdmVDYW1lcmEsXG5cdFNjZW5lLFxuXHRWZWN0b3IyLFxuXHRXZWJHTFJlbmRlclRhcmdldCxcblx0V2ViR0xSZW5kZXJlcixcbn0gZnJvbSAndGhyZWUnO1xuXG5pbXBvcnQgeyBDb252b2x1dGlvbk1hdGVyaWFsIH0gZnJvbSAnLi4vY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsdXJQYXNzUHJvcHMge1xuXHRnbDogV2ViR0xSZW5kZXJlcjtcblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHR3aWR0aD86IG51bWJlcjtcblx0aGVpZ2h0PzogbnVtYmVyO1xuXHRtaW5EZXB0aFRocmVzaG9sZD86IG51bWJlcjtcblx0bWF4RGVwdGhUaHJlc2hvbGQ/OiBudW1iZXI7XG5cdGRlcHRoU2NhbGU/OiBudW1iZXI7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQmx1clBhc3Mge1xuXHRyZWFkb25seSByZW5kZXJUYXJnZXRBOiBXZWJHTFJlbmRlclRhcmdldDtcblx0cmVhZG9ubHkgcmVuZGVyVGFyZ2V0QjogV2ViR0xSZW5kZXJUYXJnZXQ7XG5cdHJlYWRvbmx5IGNvbnZvbHV0aW9uTWF0ZXJpYWw6IENvbnZvbHV0aW9uTWF0ZXJpYWw7XG5cdHJlYWRvbmx5IHNjZW5lOiBTY2VuZTtcblx0cmVhZG9ubHkgY2FtZXJhOiBDYW1lcmE7XG5cdHJlYWRvbmx5IHNjcmVlbjogTWVzaDtcblx0cmVuZGVyVG9TY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcih7XG5cdFx0Z2wsXG5cdFx0cmVzb2x1dGlvbixcblx0XHR3aWR0aCA9IDUwMCxcblx0XHRoZWlnaHQgPSA1MDAsXG5cdFx0bWluRGVwdGhUaHJlc2hvbGQgPSAwLFxuXHRcdG1heERlcHRoVGhyZXNob2xkID0gMSxcblx0XHRkZXB0aFNjYWxlID0gMCxcblx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyA9IDAuMjUsXG5cdH06IEJsdXJQYXNzUHJvcHMpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldEEgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwge1xuXHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IGZhbHNlLFxuXHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHR9KTtcblx0XHR0aGlzLnJlbmRlclRhcmdldEIgPSB0aGlzLnJlbmRlclRhcmdldEEuY2xvbmUoKTtcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwgPSBuZXcgQ29udm9sdXRpb25NYXRlcmlhbCgpO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC5zZXRUZXhlbFNpemUoMS4wIC8gd2lkdGgsIDEuMCAvIGhlaWdodCk7XG5cdFx0dGhpcy5jb252b2x1dGlvbk1hdGVyaWFsLnNldFJlc29sdXRpb24obmV3IFZlY3RvcjIod2lkdGgsIGhlaWdodCkpO1xuXHRcdHRoaXMuc2NlbmUgPSBuZXcgU2NlbmUoKTtcblx0XHR0aGlzLmNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snbWluRGVwdGhUaHJlc2hvbGQnXS52YWx1ZSA9IG1pbkRlcHRoVGhyZXNob2xkO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snbWF4RGVwdGhUaHJlc2hvbGQnXS52YWx1ZSA9IG1heERlcHRoVGhyZXNob2xkO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snZGVwdGhTY2FsZSddLnZhbHVlID0gZGVwdGhTY2FsZTtcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJ10udmFsdWUgPSBkZXB0aFRvQmx1clJhdGlvQmlhcztcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwuZGVmaW5lc1snVVNFX0RFUFRIJ10gPSBkZXB0aFNjYWxlID4gMDtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWy0xLCAtMSwgMCwgMywgLTEsIDAsIC0xLCAzLCAwXSk7XG5cdFx0Y29uc3QgdXZzID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMiwgMCwgMCwgMl0pO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcblx0XHR0aGlzLnNjcmVlbiA9IG5ldyBNZXNoKGdlb21ldHJ5LCB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwpO1xuXHRcdHRoaXMuc2NyZWVuLmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNjZW5lLmFkZCh0aGlzLnNjcmVlbik7XG5cdH1cblxuXHRyZW5kZXIocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsIGlucHV0QnVmZmVyOiBXZWJHTFJlbmRlclRhcmdldCwgb3V0cHV0QnVmZmVyOiBXZWJHTFJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IHNjZW5lID0gdGhpcy5zY2VuZTtcblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRBID0gdGhpcy5yZW5kZXJUYXJnZXRBO1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldEIgPSB0aGlzLnJlbmRlclRhcmdldEI7XG5cdFx0bGV0IG1hdGVyaWFsID0gdGhpcy5jb252b2x1dGlvbk1hdGVyaWFsO1xuXHRcdGxldCB1bmlmb3JtcyA9IG1hdGVyaWFsLnVuaWZvcm1zO1xuXHRcdHVuaWZvcm1zWydkZXB0aEJ1ZmZlciddLnZhbHVlID0gaW5wdXRCdWZmZXIuZGVwdGhUZXh0dXJlO1xuXHRcdGNvbnN0IGtlcm5lbCA9IG1hdGVyaWFsLmtlcm5lbDtcblx0XHRsZXQgbGFzdFJUID0gaW5wdXRCdWZmZXI7XG5cdFx0bGV0IGRlc3RSVDtcblx0XHRsZXQgaSwgbDtcblx0XHQvLyBBcHBseSB0aGUgbXVsdGktcGFzcyBibHVyLlxuXHRcdGZvciAoaSA9IDAsIGwgPSBrZXJuZWwubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkge1xuXHRcdFx0Ly8gQWx0ZXJuYXRlIGJldHdlZW4gdGFyZ2V0cy5cblx0XHRcdGRlc3RSVCA9IChpICYgMSkgPT09IDAgPyByZW5kZXJUYXJnZXRBIDogcmVuZGVyVGFyZ2V0Qjtcblx0XHRcdHVuaWZvcm1zWydrZXJuZWwnXS52YWx1ZSA9IGtlcm5lbFtpXTtcblx0XHRcdHVuaWZvcm1zWydpbnB1dEJ1ZmZlciddLnZhbHVlID0gbGFzdFJULnRleHR1cmU7XG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZGVzdFJUKTtcblx0XHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcblx0XHRcdGxhc3RSVCA9IGRlc3RSVDtcblx0XHR9XG5cdFx0dW5pZm9ybXNbJ2tlcm5lbCddLnZhbHVlID0ga2VybmVsW2ldO1xuXHRcdHVuaWZvcm1zWydpbnB1dEJ1ZmZlciddLnZhbHVlID0gbGFzdFJULnRleHR1cmU7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVG9TY3JlZW4gPyBudWxsIDogb3V0cHV0QnVmZmVyKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { shaderMaterial } from '../shader-material/shader-material';
|
|
3
|
+
export const CausticsMaterial = shaderMaterial({
|
|
4
|
+
cameraMatrixWorld: new THREE.Matrix4(),
|
|
5
|
+
cameraProjectionMatrixInv: new THREE.Matrix4(),
|
|
6
|
+
normalTexture: null,
|
|
7
|
+
depthTexture: null,
|
|
8
|
+
lightDir: new THREE.Vector3(0, 1, 0),
|
|
9
|
+
lightPlaneNormal: new THREE.Vector3(0, 1, 0),
|
|
10
|
+
lightPlaneConstant: 0,
|
|
11
|
+
near: 0.1,
|
|
12
|
+
far: 100,
|
|
13
|
+
modelMatrix: new THREE.Matrix4(),
|
|
14
|
+
worldRadius: 1 / 40,
|
|
15
|
+
ior: 1.1,
|
|
16
|
+
bounces: 0,
|
|
17
|
+
resolution: 1024,
|
|
18
|
+
size: 10,
|
|
19
|
+
intensity: 0.5,
|
|
20
|
+
},
|
|
21
|
+
/* glsl */ `
|
|
22
|
+
varying vec2 vUv;
|
|
23
|
+
void main() {
|
|
24
|
+
vUv = uv;
|
|
25
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
26
|
+
}`,
|
|
27
|
+
/* glsl */ `
|
|
28
|
+
uniform mat4 cameraMatrixWorld;
|
|
29
|
+
uniform mat4 cameraProjectionMatrixInv;
|
|
30
|
+
uniform vec3 lightDir;
|
|
31
|
+
uniform vec3 lightPlaneNormal;
|
|
32
|
+
uniform float lightPlaneConstant;
|
|
33
|
+
uniform float near;
|
|
34
|
+
uniform float far;
|
|
35
|
+
uniform float time;
|
|
36
|
+
uniform float worldRadius;
|
|
37
|
+
uniform float resolution;
|
|
38
|
+
uniform float size;
|
|
39
|
+
uniform float intensity;
|
|
40
|
+
uniform float ior;
|
|
41
|
+
precision highp isampler2D;
|
|
42
|
+
precision highp usampler2D;
|
|
43
|
+
uniform sampler2D normalTexture;
|
|
44
|
+
uniform sampler2D depthTexture;
|
|
45
|
+
uniform float bounces;
|
|
46
|
+
varying vec2 vUv;
|
|
47
|
+
vec3 WorldPosFromDepth(float depth, vec2 coord) {
|
|
48
|
+
float z = depth * 2.0 - 1.0;
|
|
49
|
+
vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
|
|
50
|
+
vec4 viewSpacePosition = cameraProjectionMatrixInv * clipSpacePosition;
|
|
51
|
+
// Perspective division
|
|
52
|
+
viewSpacePosition /= viewSpacePosition.w;
|
|
53
|
+
vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;
|
|
54
|
+
return worldSpacePosition.xyz;
|
|
55
|
+
}
|
|
56
|
+
float sdPlane( vec3 p, vec3 n, float h ) {
|
|
57
|
+
// n must be normalized
|
|
58
|
+
return dot(p,n) + h;
|
|
59
|
+
}
|
|
60
|
+
float planeIntersect( vec3 ro, vec3 rd, vec4 p ) {
|
|
61
|
+
return -(dot(ro,p.xyz)+p.w)/dot(rd,p.xyz);
|
|
62
|
+
}
|
|
63
|
+
vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 pos, vec3 normal, float ior, out vec3 rayOrigin, out vec3 rayDirection) {
|
|
64
|
+
rayOrigin = ro;
|
|
65
|
+
rayDirection = rd;
|
|
66
|
+
rayDirection = refract(rayDirection, normal, 1.0 / ior);
|
|
67
|
+
rayOrigin = pos + rayDirection * 0.1;
|
|
68
|
+
return rayDirection;
|
|
69
|
+
}
|
|
70
|
+
void main() {
|
|
71
|
+
// Each sample consists of random offset in the x and y direction
|
|
72
|
+
float caustic = 0.0;
|
|
73
|
+
float causticTexelSize = (1.0 / resolution) * size * 2.0;
|
|
74
|
+
float texelsNeeded = worldRadius / causticTexelSize;
|
|
75
|
+
float sampleRadius = texelsNeeded / resolution;
|
|
76
|
+
float sum = 0.0;
|
|
77
|
+
if (texture2D(depthTexture, vUv).x == 1.0) {
|
|
78
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
vec2 offset1 = vec2(-0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);
|
|
82
|
+
vec2 offset2 = vec2(-0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);
|
|
83
|
+
vec2 offset3 = vec2(0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);
|
|
84
|
+
vec2 offset4 = vec2(0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);
|
|
85
|
+
vec2 uv1 = vUv + offset1 * sampleRadius;
|
|
86
|
+
vec2 uv2 = vUv + offset2 * sampleRadius;
|
|
87
|
+
vec2 uv3 = vUv + offset3 * sampleRadius;
|
|
88
|
+
vec2 uv4 = vUv + offset4 * sampleRadius;
|
|
89
|
+
vec3 normal1 = texture2D(normalTexture, uv1, -10.0).rgb * 2.0 - 1.0;
|
|
90
|
+
vec3 normal2 = texture2D(normalTexture, uv2, -10.0).rgb * 2.0 - 1.0;
|
|
91
|
+
vec3 normal3 = texture2D(normalTexture, uv3, -10.0).rgb * 2.0 - 1.0;
|
|
92
|
+
vec3 normal4 = texture2D(normalTexture, uv4, -10.0).rgb * 2.0 - 1.0;
|
|
93
|
+
float depth1 = texture2D(depthTexture, uv1, -10.0).x;
|
|
94
|
+
float depth2 = texture2D(depthTexture, uv2, -10.0).x;
|
|
95
|
+
float depth3 = texture2D(depthTexture, uv3, -10.0).x;
|
|
96
|
+
float depth4 = texture2D(depthTexture, uv4, -10.0).x;
|
|
97
|
+
// Sanity check the depths
|
|
98
|
+
if (depth1 == 1.0 || depth2 == 1.0 || depth3 == 1.0 || depth4 == 1.0) {
|
|
99
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
vec3 pos1 = WorldPosFromDepth(depth1, uv1);
|
|
103
|
+
vec3 pos2 = WorldPosFromDepth(depth2, uv2);
|
|
104
|
+
vec3 pos3 = WorldPosFromDepth(depth3, uv3);
|
|
105
|
+
vec3 pos4 = WorldPosFromDepth(depth4, uv4);
|
|
106
|
+
vec3 originPos1 = WorldPosFromDepth(0.0, uv1);
|
|
107
|
+
vec3 originPos2 = WorldPosFromDepth(0.0, uv2);
|
|
108
|
+
vec3 originPos3 = WorldPosFromDepth(0.0, uv3);
|
|
109
|
+
vec3 originPos4 = WorldPosFromDepth(0.0, uv4);
|
|
110
|
+
vec3 endPos1, endPos2, endPos3, endPos4;
|
|
111
|
+
vec3 endDir1, endDir2, endDir3, endDir4;
|
|
112
|
+
totalInternalReflection(originPos1, lightDir, pos1, normal1, ior, endPos1, endDir1);
|
|
113
|
+
totalInternalReflection(originPos2, lightDir, pos2, normal2, ior, endPos2, endDir2);
|
|
114
|
+
totalInternalReflection(originPos3, lightDir, pos3, normal3, ior, endPos3, endDir3);
|
|
115
|
+
totalInternalReflection(originPos4, lightDir, pos4, normal4, ior, endPos4, endDir4);
|
|
116
|
+
float lightPosArea = length(cross(originPos2 - originPos1, originPos3 - originPos1)) + length(cross(originPos3 - originPos1, originPos4 - originPos1));
|
|
117
|
+
float t1 = planeIntersect(endPos1, endDir1, vec4(lightPlaneNormal, lightPlaneConstant));
|
|
118
|
+
float t2 = planeIntersect(endPos2, endDir2, vec4(lightPlaneNormal, lightPlaneConstant));
|
|
119
|
+
float t3 = planeIntersect(endPos3, endDir3, vec4(lightPlaneNormal, lightPlaneConstant));
|
|
120
|
+
float t4 = planeIntersect(endPos4, endDir4, vec4(lightPlaneNormal, lightPlaneConstant));
|
|
121
|
+
vec3 finalPos1 = endPos1 + endDir1 * t1;
|
|
122
|
+
vec3 finalPos2 = endPos2 + endDir2 * t2;
|
|
123
|
+
vec3 finalPos3 = endPos3 + endDir3 * t3;
|
|
124
|
+
vec3 finalPos4 = endPos4 + endDir4 * t4;
|
|
125
|
+
float finalArea = length(cross(finalPos2 - finalPos1, finalPos3 - finalPos1)) + length(cross(finalPos3 - finalPos1, finalPos4 - finalPos1));
|
|
126
|
+
caustic += intensity * (lightPosArea / finalArea);
|
|
127
|
+
// Calculate the area of the triangle in light spaces
|
|
128
|
+
gl_FragColor = vec4(vec3(max(caustic, 0.0)), 1.0);
|
|
129
|
+
}`);
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1c3RpY3MtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvY2F1c3RpY3MvY2F1c3RpY3MtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDN0M7SUFDQyxpQkFBaUIsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDdEMseUJBQXlCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQzlDLGFBQWEsRUFBRSxJQUFJO0lBQ25CLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFFBQVEsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsZ0JBQWdCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLGtCQUFrQixFQUFFLENBQUM7SUFDckIsSUFBSSxFQUFFLEdBQUc7SUFDVCxHQUFHLEVBQUUsR0FBRztJQUNSLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDaEMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQ25CLEdBQUcsRUFBRSxHQUFHO0lBQ1IsT0FBTyxFQUFFLENBQUM7SUFDVixVQUFVLEVBQUUsSUFBSTtJQUNoQixJQUFJLEVBQUUsRUFBRTtJQUNSLFNBQVMsRUFBRSxHQUFHO0NBQ2Q7QUFDRCxVQUFVLENBQUM7Ozs7O0lBS1I7QUFDSCxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNHUixDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgQ2F1c3RpY3NNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2FtZXJhTWF0cml4V29ybGQ6IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cdFx0Y2FtZXJhUHJvamVjdGlvbk1hdHJpeEludjogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRub3JtYWxUZXh0dXJlOiBudWxsLFxuXHRcdGRlcHRoVGV4dHVyZTogbnVsbCxcblx0XHRsaWdodERpcjogbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCksXG5cdFx0bGlnaHRQbGFuZU5vcm1hbDogbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCksXG5cdFx0bGlnaHRQbGFuZUNvbnN0YW50OiAwLFxuXHRcdG5lYXI6IDAuMSxcblx0XHRmYXI6IDEwMCxcblx0XHRtb2RlbE1hdHJpeDogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHR3b3JsZFJhZGl1czogMSAvIDQwLFxuXHRcdGlvcjogMS4xLFxuXHRcdGJvdW5jZXM6IDAsXG5cdFx0cmVzb2x1dGlvbjogMTAyNCxcblx0XHRzaXplOiAxMCxcblx0XHRpbnRlbnNpdHk6IDAuNSxcblx0fSxcblx0LyogZ2xzbCAqLyBgXG4gIHZhcnlpbmcgdmVjMiB2VXY7XG4gIHZvaWQgbWFpbigpIHtcbiAgICAgIHZVdiA9IHV2O1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgfWAsXG5cdC8qIGdsc2wgKi8gYFxuICB1bmlmb3JtIG1hdDQgY2FtZXJhTWF0cml4V29ybGQ7XG4gIHVuaWZvcm0gbWF0NCBjYW1lcmFQcm9qZWN0aW9uTWF0cml4SW52O1xuICB1bmlmb3JtIHZlYzMgbGlnaHREaXI7XG4gIHVuaWZvcm0gdmVjMyBsaWdodFBsYW5lTm9ybWFsO1xuICB1bmlmb3JtIGZsb2F0IGxpZ2h0UGxhbmVDb25zdGFudDtcbiAgdW5pZm9ybSBmbG9hdCBuZWFyO1xuICB1bmlmb3JtIGZsb2F0IGZhcjtcbiAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuICB1bmlmb3JtIGZsb2F0IHdvcmxkUmFkaXVzO1xuICB1bmlmb3JtIGZsb2F0IHJlc29sdXRpb247XG4gIHVuaWZvcm0gZmxvYXQgc2l6ZTtcbiAgdW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7XG4gIHVuaWZvcm0gZmxvYXQgaW9yO1xuICBwcmVjaXNpb24gaGlnaHAgaXNhbXBsZXIyRDtcbiAgcHJlY2lzaW9uIGhpZ2hwIHVzYW1wbGVyMkQ7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbFRleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoVGV4dHVyZTtcbiAgdW5pZm9ybSBmbG9hdCBib3VuY2VzO1xuICB2YXJ5aW5nIHZlYzIgdlV2O1xuICB2ZWMzIFdvcmxkUG9zRnJvbURlcHRoKGZsb2F0IGRlcHRoLCB2ZWMyIGNvb3JkKSB7XG4gICAgZmxvYXQgeiA9IGRlcHRoICogMi4wIC0gMS4wO1xuICAgIHZlYzQgY2xpcFNwYWNlUG9zaXRpb24gPSB2ZWM0KGNvb3JkICogMi4wIC0gMS4wLCB6LCAxLjApO1xuICAgIHZlYzQgdmlld1NwYWNlUG9zaXRpb24gPSBjYW1lcmFQcm9qZWN0aW9uTWF0cml4SW52ICogY2xpcFNwYWNlUG9zaXRpb247XG4gICAgLy8gUGVyc3BlY3RpdmUgZGl2aXNpb25cbiAgICB2aWV3U3BhY2VQb3NpdGlvbiAvPSB2aWV3U3BhY2VQb3NpdGlvbi53O1xuICAgIHZlYzQgd29ybGRTcGFjZVBvc2l0aW9uID0gY2FtZXJhTWF0cml4V29ybGQgKiB2aWV3U3BhY2VQb3NpdGlvbjtcbiAgICByZXR1cm4gd29ybGRTcGFjZVBvc2l0aW9uLnh5ejtcbiAgfVxuICBmbG9hdCBzZFBsYW5lKCB2ZWMzIHAsIHZlYzMgbiwgZmxvYXQgaCApIHtcbiAgICAvLyBuIG11c3QgYmUgbm9ybWFsaXplZFxuICAgIHJldHVybiBkb3QocCxuKSArIGg7XG4gIH1cbiAgZmxvYXQgcGxhbmVJbnRlcnNlY3QoIHZlYzMgcm8sIHZlYzMgcmQsIHZlYzQgcCApIHtcbiAgICByZXR1cm4gLShkb3Qocm8scC54eXopK3AudykvZG90KHJkLHAueHl6KTtcbiAgfVxuICB2ZWMzIHRvdGFsSW50ZXJuYWxSZWZsZWN0aW9uKHZlYzMgcm8sIHZlYzMgcmQsIHZlYzMgcG9zLCB2ZWMzIG5vcm1hbCwgZmxvYXQgaW9yLCBvdXQgdmVjMyByYXlPcmlnaW4sIG91dCB2ZWMzIHJheURpcmVjdGlvbikge1xuICAgIHJheU9yaWdpbiA9IHJvO1xuICAgIHJheURpcmVjdGlvbiA9IHJkO1xuICAgIHJheURpcmVjdGlvbiA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBub3JtYWwsIDEuMCAvIGlvcik7XG4gICAgcmF5T3JpZ2luID0gcG9zICsgcmF5RGlyZWN0aW9uICogMC4xO1xuICAgIHJldHVybiByYXlEaXJlY3Rpb247XG4gIH1cbiAgdm9pZCBtYWluKCkge1xuICAgIC8vIEVhY2ggc2FtcGxlIGNvbnNpc3RzIG9mIHJhbmRvbSBvZmZzZXQgaW4gdGhlIHggYW5kIHkgZGlyZWN0aW9uXG4gICAgZmxvYXQgY2F1c3RpYyA9IDAuMDtcbiAgICBmbG9hdCBjYXVzdGljVGV4ZWxTaXplID0gKDEuMCAvIHJlc29sdXRpb24pICogc2l6ZSAqIDIuMDtcbiAgICBmbG9hdCB0ZXhlbHNOZWVkZWQgPSB3b3JsZFJhZGl1cyAvIGNhdXN0aWNUZXhlbFNpemU7XG4gICAgZmxvYXQgc2FtcGxlUmFkaXVzID0gdGV4ZWxzTmVlZGVkIC8gcmVzb2x1dGlvbjtcbiAgICBmbG9hdCBzdW0gPSAwLjA7XG4gICAgaWYgKHRleHR1cmUyRChkZXB0aFRleHR1cmUsIHZVdikueCA9PSAxLjApIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVjMiBvZmZzZXQxID0gdmVjMigtMC41LCAtMC41KTsvL3ZlYzIocmFuZCgpIC0gMC41LCByYW5kKCkgLSAwLjUpO1xuICAgIHZlYzIgb2Zmc2V0MiA9IHZlYzIoLTAuNSwgMC41KTsvL3ZlYzIocmFuZCgpIC0gMC41LCByYW5kKCkgLSAwLjUpO1xuICAgIHZlYzIgb2Zmc2V0MyA9IHZlYzIoMC41LCAwLjUpOy8vdmVjMihyYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSk7XG4gICAgdmVjMiBvZmZzZXQ0ID0gdmVjMigwLjUsIC0wLjUpOy8vdmVjMihyYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSk7XG4gICAgdmVjMiB1djEgPSB2VXYgKyBvZmZzZXQxICogc2FtcGxlUmFkaXVzO1xuICAgIHZlYzIgdXYyID0gdlV2ICsgb2Zmc2V0MiAqIHNhbXBsZVJhZGl1cztcbiAgICB2ZWMyIHV2MyA9IHZVdiArIG9mZnNldDMgKiBzYW1wbGVSYWRpdXM7XG4gICAgdmVjMiB1djQgPSB2VXYgKyBvZmZzZXQ0ICogc2FtcGxlUmFkaXVzO1xuICAgIHZlYzMgbm9ybWFsMSA9IHRleHR1cmUyRChub3JtYWxUZXh0dXJlLCB1djEsIC0xMC4wKS5yZ2IgKiAyLjAgLSAxLjA7XG4gICAgdmVjMyBub3JtYWwyID0gdGV4dHVyZTJEKG5vcm1hbFRleHR1cmUsIHV2MiwgLTEwLjApLnJnYiAqIDIuMCAtIDEuMDtcbiAgICB2ZWMzIG5vcm1hbDMgPSB0ZXh0dXJlMkQobm9ybWFsVGV4dHVyZSwgdXYzLCAtMTAuMCkucmdiICogMi4wIC0gMS4wO1xuICAgIHZlYzMgbm9ybWFsNCA9IHRleHR1cmUyRChub3JtYWxUZXh0dXJlLCB1djQsIC0xMC4wKS5yZ2IgKiAyLjAgLSAxLjA7XG4gICAgZmxvYXQgZGVwdGgxID0gdGV4dHVyZTJEKGRlcHRoVGV4dHVyZSwgdXYxLCAtMTAuMCkueDtcbiAgICBmbG9hdCBkZXB0aDIgPSB0ZXh0dXJlMkQoZGVwdGhUZXh0dXJlLCB1djIsIC0xMC4wKS54O1xuICAgIGZsb2F0IGRlcHRoMyA9IHRleHR1cmUyRChkZXB0aFRleHR1cmUsIHV2MywgLTEwLjApLng7XG4gICAgZmxvYXQgZGVwdGg0ID0gdGV4dHVyZTJEKGRlcHRoVGV4dHVyZSwgdXY0LCAtMTAuMCkueDtcbiAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIGRlcHRoc1xuICAgIGlmIChkZXB0aDEgPT0gMS4wIHx8IGRlcHRoMiA9PSAxLjAgfHwgZGVwdGgzID09IDEuMCB8fCBkZXB0aDQgPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZlYzMgcG9zMSA9IFdvcmxkUG9zRnJvbURlcHRoKGRlcHRoMSwgdXYxKTtcbiAgICB2ZWMzIHBvczIgPSBXb3JsZFBvc0Zyb21EZXB0aChkZXB0aDIsIHV2Mik7XG4gICAgdmVjMyBwb3MzID0gV29ybGRQb3NGcm9tRGVwdGgoZGVwdGgzLCB1djMpO1xuICAgIHZlYzMgcG9zNCA9IFdvcmxkUG9zRnJvbURlcHRoKGRlcHRoNCwgdXY0KTtcbiAgICB2ZWMzIG9yaWdpblBvczEgPSBXb3JsZFBvc0Zyb21EZXB0aCgwLjAsIHV2MSk7XG4gICAgdmVjMyBvcmlnaW5Qb3MyID0gV29ybGRQb3NGcm9tRGVwdGgoMC4wLCB1djIpO1xuICAgIHZlYzMgb3JpZ2luUG9zMyA9IFdvcmxkUG9zRnJvbURlcHRoKDAuMCwgdXYzKTtcbiAgICB2ZWMzIG9yaWdpblBvczQgPSBXb3JsZFBvc0Zyb21EZXB0aCgwLjAsIHV2NCk7XG4gICAgdmVjMyBlbmRQb3MxLCBlbmRQb3MyLCBlbmRQb3MzLCBlbmRQb3M0O1xuICAgIHZlYzMgZW5kRGlyMSwgZW5kRGlyMiwgZW5kRGlyMywgZW5kRGlyNDtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MxLCBsaWdodERpciwgcG9zMSwgbm9ybWFsMSwgaW9yLCBlbmRQb3MxLCBlbmREaXIxKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MyLCBsaWdodERpciwgcG9zMiwgbm9ybWFsMiwgaW9yLCBlbmRQb3MyLCBlbmREaXIyKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MzLCBsaWdodERpciwgcG9zMywgbm9ybWFsMywgaW9yLCBlbmRQb3MzLCBlbmREaXIzKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3M0LCBsaWdodERpciwgcG9zNCwgbm9ybWFsNCwgaW9yLCBlbmRQb3M0LCBlbmREaXI0KTtcbiAgICBmbG9hdCBsaWdodFBvc0FyZWEgPSBsZW5ndGgoY3Jvc3Mob3JpZ2luUG9zMiAtIG9yaWdpblBvczEsIG9yaWdpblBvczMgLSBvcmlnaW5Qb3MxKSkgKyBsZW5ndGgoY3Jvc3Mob3JpZ2luUG9zMyAtIG9yaWdpblBvczEsIG9yaWdpblBvczQgLSBvcmlnaW5Qb3MxKSk7XG4gICAgZmxvYXQgdDEgPSBwbGFuZUludGVyc2VjdChlbmRQb3MxLCBlbmREaXIxLCB2ZWM0KGxpZ2h0UGxhbmVOb3JtYWwsIGxpZ2h0UGxhbmVDb25zdGFudCkpO1xuICAgIGZsb2F0IHQyID0gcGxhbmVJbnRlcnNlY3QoZW5kUG9zMiwgZW5kRGlyMiwgdmVjNChsaWdodFBsYW5lTm9ybWFsLCBsaWdodFBsYW5lQ29uc3RhbnQpKTtcbiAgICBmbG9hdCB0MyA9IHBsYW5lSW50ZXJzZWN0KGVuZFBvczMsIGVuZERpcjMsIHZlYzQobGlnaHRQbGFuZU5vcm1hbCwgbGlnaHRQbGFuZUNvbnN0YW50KSk7XG4gICAgZmxvYXQgdDQgPSBwbGFuZUludGVyc2VjdChlbmRQb3M0LCBlbmREaXI0LCB2ZWM0KGxpZ2h0UGxhbmVOb3JtYWwsIGxpZ2h0UGxhbmVDb25zdGFudCkpO1xuICAgIHZlYzMgZmluYWxQb3MxID0gZW5kUG9zMSArIGVuZERpcjEgKiB0MTtcbiAgICB2ZWMzIGZpbmFsUG9zMiA9IGVuZFBvczIgKyBlbmREaXIyICogdDI7XG4gICAgdmVjMyBmaW5hbFBvczMgPSBlbmRQb3MzICsgZW5kRGlyMyAqIHQzO1xuICAgIHZlYzMgZmluYWxQb3M0ID0gZW5kUG9zNCArIGVuZERpcjQgKiB0NDtcbiAgICBmbG9hdCBmaW5hbEFyZWEgPSBsZW5ndGgoY3Jvc3MoZmluYWxQb3MyIC0gZmluYWxQb3MxLCBmaW5hbFBvczMgLSBmaW5hbFBvczEpKSArIGxlbmd0aChjcm9zcyhmaW5hbFBvczMgLSBmaW5hbFBvczEsIGZpbmFsUG9zNCAtIGZpbmFsUG9zMSkpO1xuICAgIGNhdXN0aWMgKz0gaW50ZW5zaXR5ICogKGxpZ2h0UG9zQXJlYSAvIGZpbmFsQXJlYSk7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhcmVhIG9mIHRoZSB0cmlhbmdsZSBpbiBsaWdodCBzcGFjZXNcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMobWF4KGNhdXN0aWMsIDAuMCkpLCAxLjApO1xuICB9YCxcbik7XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { shaderMaterial } from '../shader-material/shader-material';
|
|
3
|
+
export const CausticsProjectionMaterial = shaderMaterial({
|
|
4
|
+
causticsTexture: null,
|
|
5
|
+
causticsTextureB: null,
|
|
6
|
+
color: new THREE.Color(),
|
|
7
|
+
lightProjMatrix: new THREE.Matrix4(),
|
|
8
|
+
lightViewMatrix: new THREE.Matrix4(),
|
|
9
|
+
}, `varying vec3 vWorldPosition;
|
|
10
|
+
void main() {
|
|
11
|
+
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
|
|
12
|
+
vec4 worldPosition = modelMatrix * vec4(position, 1.);
|
|
13
|
+
vWorldPosition = worldPosition.xyz;
|
|
14
|
+
}`, `varying vec3 vWorldPosition;
|
|
15
|
+
uniform vec3 color;
|
|
16
|
+
uniform sampler2D causticsTexture;
|
|
17
|
+
uniform sampler2D causticsTextureB;
|
|
18
|
+
uniform mat4 lightProjMatrix;
|
|
19
|
+
uniform mat4 lightViewMatrix;
|
|
20
|
+
void main() {
|
|
21
|
+
// Apply caustics
|
|
22
|
+
vec4 lightSpacePos = lightProjMatrix * lightViewMatrix * vec4(vWorldPosition, 1.0);
|
|
23
|
+
lightSpacePos.xyz /= lightSpacePos.w;
|
|
24
|
+
lightSpacePos.xyz = lightSpacePos.xyz * 0.5 + 0.5;
|
|
25
|
+
vec3 front = texture2D(causticsTexture, lightSpacePos.xy).rgb;
|
|
26
|
+
vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb;
|
|
27
|
+
gl_FragColor = vec4((front + back) * color, 1.0);
|
|
28
|
+
#include <tonemapping_fragment>
|
|
29
|
+
#include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
30
|
+
}`);
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1c3RpY3MtcHJvamVjdGlvbi1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9jYXVzdGljcy9jYXVzdGljcy1wcm9qZWN0aW9uLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxjQUFjLENBQ3ZEO0lBQ0MsZUFBZSxFQUFFLElBQUk7SUFDckIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLGVBQWUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDcEMsZUFBZSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtDQUNwQyxFQUNEOzs7OztLQUtJLEVBQ0o7Ozs7Ozs7Ozs7Ozs7OztnQkFlZSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0tBQzdHLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2F1c3RpY3NUZXh0dXJlOiBudWxsLFxuXHRcdGNhdXN0aWNzVGV4dHVyZUI6IG51bGwsXG5cdFx0Y29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdGxpZ2h0UHJvak1hdHJpeDogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRsaWdodFZpZXdNYXRyaXg6IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cdH0sXG5cdGB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4gICB2b2lkIG1haW4oKSB7XG4gICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuKTtcbiAgICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XG4gICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4gICB9YCxcblx0YHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuICB1bmlmb3JtIHNhbXBsZXIyRCBjYXVzdGljc1RleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIGNhdXN0aWNzVGV4dHVyZUI7XG4gIHVuaWZvcm0gbWF0NCBsaWdodFByb2pNYXRyaXg7XG4gIHVuaWZvcm0gbWF0NCBsaWdodFZpZXdNYXRyaXg7XG4gICB2b2lkIG1haW4oKSB7XG4gICAgLy8gQXBwbHkgY2F1c3RpY3NcbiAgICB2ZWM0IGxpZ2h0U3BhY2VQb3MgPSBsaWdodFByb2pNYXRyaXggKiBsaWdodFZpZXdNYXRyaXggKiB2ZWM0KHZXb3JsZFBvc2l0aW9uLCAxLjApO1xuICAgIGxpZ2h0U3BhY2VQb3MueHl6IC89IGxpZ2h0U3BhY2VQb3MudztcbiAgICBsaWdodFNwYWNlUG9zLnh5eiA9IGxpZ2h0U3BhY2VQb3MueHl6ICogMC41ICsgMC41O1xuICAgIHZlYzMgZnJvbnQgPSB0ZXh0dXJlMkQoY2F1c3RpY3NUZXh0dXJlLCBsaWdodFNwYWNlUG9zLnh5KS5yZ2I7XG4gICAgdmVjMyBiYWNrID0gdGV4dHVyZTJEKGNhdXN0aWNzVGV4dHVyZUIsIGxpZ2h0U3BhY2VQb3MueHkpLnJnYjtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KChmcm9udCArIGJhY2spICogY29sb3IsIDEuMCk7XG4gICAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuICAgICNpbmNsdWRlIDwke3BhcnNlSW50KFRIUkVFLlJFVklTSU9OLnJlcGxhY2UoL1xcRCsvZywgJycpKSA+PSAxNTQgPyAnY29sb3JzcGFjZV9mcmFnbWVudCcgOiAnZW5jb2RpbmdzX2ZyYWdtZW50J30+XG4gICB9YCxcbik7XG4iXX0=
|