angular-three-soba 1.14.0 → 2.0.0-beta.3
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/{lib/billboard → billboard}/billboard.d.ts +14 -4
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +25 -0
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +25 -0
- package/abstractions/{lib/edges → edges}/edges.d.ts +11 -7
- package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-helper.d.ts +16 -23
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +30 -0
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +32 -0
- package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/gizmo-viewcube.d.ts +2 -3
- package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewport/gizmo-viewport-axis.d.ts +28 -9
- package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewport/gizmo-viewport.d.ts +23 -4
- package/abstractions/index.d.ts +11 -11
- package/abstractions/line/line-input.d.ts +42 -0
- package/abstractions/line/line.d.ts +35 -0
- package/abstractions/{lib/quadratic-bezier-line → quadratic-bezier-line}/quadratic-bezier-line.d.ts +12 -8
- package/abstractions/text/text.d.ts +77 -0
- package/abstractions/text-3d/text-3d.d.ts +74 -0
- package/cameras/{lib/camera → camera}/camera-content.d.ts +1 -1
- package/cameras/{lib/camera → camera}/camera.d.ts +12 -8
- package/cameras/cube-camera/cube-camera.d.ts +42 -0
- package/cameras/index.d.ts +5 -4
- package/cameras/{lib/orthographic-camera → orthographic-camera}/orthographic-camera.d.ts +14 -5
- package/controls/index.d.ts +1 -1
- package/controls/{lib/orbit-controls → orbit-controls}/orbit-controls.d.ts +19 -11
- package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
- package/esm2022/abstractions/billboard/billboard.mjs +71 -0
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +131 -0
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +113 -0
- package/esm2022/abstractions/edges/edges.mjs +93 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +210 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +95 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +155 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +62 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +80 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +206 -0
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +273 -0
- package/esm2022/abstractions/index.mjs +12 -12
- package/esm2022/abstractions/line/line-input.mjs +113 -0
- package/esm2022/abstractions/line/line.mjs +165 -0
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +128 -0
- package/esm2022/abstractions/text/text.mjs +275 -0
- package/esm2022/abstractions/text-3d/text-3d.mjs +167 -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 +21 -0
- package/esm2022/cameras/camera/camera.mjs +71 -0
- package/esm2022/cameras/cube-camera/cube-camera.mjs +131 -0
- package/esm2022/cameras/index.mjs +6 -5
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +99 -0
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +47 -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 +165 -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 +33 -0
- package/esm2022/loaders/index.mjs +5 -6
- package/esm2022/loaders/loader/loader.mjs +133 -0
- package/esm2022/loaders/progress/progress.mjs +52 -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 +6 -6
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +73 -0
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +383 -0
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +168 -0
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +257 -0
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +66 -0
- package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
- package/esm2022/misc/animations/animations.mjs +55 -0
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +46 -0
- package/esm2022/misc/fbo/fbo.mjs +47 -0
- package/esm2022/misc/index.mjs +5 -5
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +46 -0
- package/esm2022/performance/adaptive/adaptive-events.mjs +31 -0
- package/esm2022/performance/angular-three-soba-performance.mjs +1 -1
- package/esm2022/performance/detailed/detailed.mjs +61 -0
- package/esm2022/performance/index.mjs +7 -5
- package/esm2022/performance/instances/instance.mjs +48 -0
- package/esm2022/performance/instances/instances.mjs +189 -0
- package/esm2022/performance/instances/position-mesh.mjs +52 -0
- package/esm2022/performance/stats/stats.mjs +79 -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-material/caustics-material.mjs +128 -0
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +33 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
- package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
- package/esm2022/shaders/index.mjs +15 -15
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +55 -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 +33 -0
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +47 -0
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
- package/esm2022/shaders/star-field-material/star-field-material.mjs +32 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +283 -0
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +208 -0
- package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
- package/esm2022/staging/bounds/bounds.mjs +307 -0
- package/esm2022/staging/camera-shake/camera-shake.mjs +117 -0
- package/esm2022/staging/caustics/caustisc.mjs +384 -0
- package/esm2022/staging/center/center.mjs +148 -0
- package/esm2022/staging/cloud/cloud.mjs +164 -0
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +249 -0
- package/esm2022/staging/environment/assets.mjs +13 -0
- package/esm2022/staging/environment/environment-cube.mjs +49 -0
- package/esm2022/staging/environment/environment-ground.mjs +43 -0
- package/esm2022/staging/environment/environment-input.mjs +106 -0
- package/esm2022/staging/environment/environment-map.mjs +53 -0
- package/esm2022/staging/environment/environment-portal.mjs +135 -0
- package/esm2022/staging/environment/environment.mjs +78 -0
- package/esm2022/staging/environment/utils.mjs +84 -0
- package/esm2022/staging/float/float.mjs +82 -0
- package/esm2022/staging/index.mjs +18 -18
- package/esm2022/staging/sky/sky.mjs +114 -0
- package/esm2022/staging/sparkles/sparkles.mjs +161 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +75 -0
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +57 -0
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +256 -0
- package/esm2022/staging/spot-light/spot-light.mjs +94 -0
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +101 -0
- package/esm2022/staging/stage/stage.mjs +374 -0
- package/esm2022/staging/stars/stars.mjs +148 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +1116 -890
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +126 -122
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +72 -54
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +147 -131
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +340 -258
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +140 -123
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performance.mjs +383 -106
- package/fesm2022/angular-three-soba-performance.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +57 -9
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +1609 -1561
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba.mjs.map +1 -1
- package/loaders/gltf-loader/gltf-loader.d.ts +9 -0
- package/loaders/index.d.ts +4 -5
- package/loaders/{lib/loader → loader}/loader.d.ts +20 -15
- package/loaders/progress/progress.d.ts +9 -0
- package/loaders/texture-loader/texture-loader.d.ts +7 -0
- package/materials/index.d.ts +5 -5
- package/materials/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +11 -5
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +81 -0
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +50 -0
- package/materials/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +51 -6
- package/materials/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +9 -3
- package/misc/animations/animations.d.ts +13 -0
- package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
- package/misc/depth-buffer/depth-buffer.d.ts +9 -0
- package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
- package/misc/index.d.ts +4 -4
- package/package.json +25 -23
- package/performance/{lib/adaptive → adaptive}/adaptive-dpr.d.ts +4 -7
- package/performance/{lib/adaptive → adaptive}/adaptive-events.d.ts +2 -6
- package/performance/detailed/detailed.d.ts +20 -0
- package/performance/index.d.ts +6 -4
- package/performance/instances/instance.d.ts +9 -0
- package/performance/instances/instances.d.ts +35 -0
- package/performance/instances/position-mesh.d.ts +10 -0
- package/performance/{lib/stats → stats}/stats.d.ts +10 -7
- package/plugin/package.json +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +1 -1
- package/plugin/src/generators/init/init.js +1 -1
- package/plugin/src/generators/init/init.js.map +1 -1
- package/plugin/src/index.js.map +1 -1
- package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
- package/shaders/index.d.ts +14 -14
- package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +1 -1
- package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
- package/shaders/{lib/soft-shadow-material → soft-shadow-material}/soft-shadow-material.d.ts +2 -2
- package/shaders/sparkles-material/sparkles-material.d.ts +3 -0
- package/staging/{lib/accumulative-shadows → accumulative-shadows}/accumulative-shadows.d.ts +55 -17
- package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
- package/staging/{lib/accumulative-shadows → accumulative-shadows}/randomized-lights.d.ts +45 -10
- package/staging/{lib/bounds → bounds}/bounds.d.ts +32 -22
- package/staging/{lib/camera-shake → camera-shake}/camera-shake.d.ts +15 -11
- package/staging/{lib/caustics/caustics.d.ts → caustics/caustisc.d.ts} +36 -13
- package/staging/{lib/center → center}/center.d.ts +30 -8
- package/staging/cloud/cloud.d.ts +48 -0
- package/staging/{lib/contact-shadows → contact-shadows}/contact-shadows.d.ts +38 -10
- package/staging/environment/environment-cube.d.ts +11 -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 +11 -0
- package/staging/{lib/environment → environment}/environment-portal.d.ts +5 -7
- package/staging/{lib/environment → environment}/environment.d.ts +2 -2
- package/staging/environment/utils.d.ts +7 -0
- package/staging/float/float.d.ts +27 -0
- package/staging/index.d.ts +17 -17
- package/staging/{lib/sky → sky}/sky.d.ts +26 -5
- package/staging/{lib/sparkles → sparkles}/sparkles.d.ts +30 -10
- package/staging/{lib/spot-light → spot-light}/spot-light-input.d.ts +24 -2
- package/staging/{lib/spot-light/shadow-mesh-input.d.ts → spot-light/spot-light-shadow-mesh-input.d.ts} +18 -3
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +38 -0
- package/staging/{lib/spot-light → spot-light}/spot-light.d.ts +11 -5
- package/staging/{lib/spot-light → spot-light}/volumetric-mesh.d.ts +8 -5
- package/staging/{lib/stage → stage}/stage.d.ts +33 -14
- package/staging/{lib/stars → stars}/stars.d.ts +21 -7
- 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/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/line/line-input.d.ts +0 -19
- package/abstractions/lib/line/line.d.ts +0 -21
- 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/cube-camera/cube-camera.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/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/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/progress/progress.d.ts +0 -16
- package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
- 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/misc/lib/animations/animations.d.ts +0 -13
- package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
- package/performance/lib/detailed/detailed.d.ts +0 -13
- package/staging/lib/cloud/cloud.d.ts +0 -23
- 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/utils.d.ts +0 -8
- package/staging/lib/float/float.d.ts +0 -16
- package/staging/lib/spot-light/common.d.ts +0 -3
- 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/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/constants.d.ts +0 -0
- /package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +0 -0
- /package/plugin/{README.md → libs/plugin/README.md} +0 -0
- /package/shaders/{lib/caustics-material → caustics-material}/caustics-material.d.ts +0 -0
- /package/shaders/{lib/caustics-projection-material → caustics-material}/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
- /package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +0 -0
- /package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +0 -0
- /package/shaders/{lib/spot-light-material → spot-light-material}/spot-light-material.d.ts +0 -0
- /package/shaders/{lib/star-field-material → star-field-material}/star-field-material.d.ts +0 -0
- /package/staging/{lib/environment → environment}/assets.d.ts +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { shaderMaterial } from '../shader-material/shader-material';
|
|
2
|
+
export const SparklesMaterial = shaderMaterial({ time: 0, pixelRatio: 1 },
|
|
3
|
+
// language=GLSL
|
|
4
|
+
`
|
|
5
|
+
uniform float pixelRatio;
|
|
6
|
+
uniform float time;
|
|
7
|
+
|
|
8
|
+
attribute float size;
|
|
9
|
+
attribute float speed;
|
|
10
|
+
attribute float opacity;
|
|
11
|
+
attribute vec3 noise;
|
|
12
|
+
attribute vec3 color;
|
|
13
|
+
|
|
14
|
+
varying vec3 vColor;
|
|
15
|
+
varying float vOpacity;
|
|
16
|
+
|
|
17
|
+
void main() {
|
|
18
|
+
vec4 modelPosition = modelMatrix * vec4(position, 1.0);
|
|
19
|
+
|
|
20
|
+
modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;
|
|
21
|
+
modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;
|
|
22
|
+
modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;
|
|
23
|
+
|
|
24
|
+
vec4 viewPosition = viewMatrix * modelPosition;
|
|
25
|
+
vec4 projectionPostion = projectionMatrix * viewPosition;
|
|
26
|
+
|
|
27
|
+
gl_Position = projectionPostion;
|
|
28
|
+
gl_PointSize = size * 25. * pixelRatio;
|
|
29
|
+
gl_PointSize *= (1.0 / - viewPosition.z);
|
|
30
|
+
|
|
31
|
+
vColor = color;
|
|
32
|
+
vOpacity = opacity;
|
|
33
|
+
}
|
|
34
|
+
`,
|
|
35
|
+
// language=GLSL
|
|
36
|
+
`
|
|
37
|
+
varying vec3 vColor;
|
|
38
|
+
varying float vOpacity;
|
|
39
|
+
|
|
40
|
+
void main() {
|
|
41
|
+
float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
|
|
42
|
+
float strength = 0.05 / distanceToCenter - 0.1;
|
|
43
|
+
|
|
44
|
+
gl_FragColor = vec4(vColor, strength * vOpacity);
|
|
45
|
+
}
|
|
46
|
+
`);
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDMUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7QUFDMUIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QkQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7R0FVRCxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgU3BhcmtsZXNNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMCwgcGl4ZWxSYXRpbzogMSB9LFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIGZsb2F0IHRpbWU7XG5cbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuYXR0cmlidXRlIGZsb2F0IHNwZWVkO1xuYXR0cmlidXRlIGZsb2F0IG9wYWNpdHk7XG5hdHRyaWJ1dGUgdmVjMyBub2lzZTtcbmF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IG1vZGVsUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG5cbiAgbW9kZWxQb3NpdGlvbi55ICs9IHNpbih0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS54ICogMTAwLjApICogMC4yO1xuICBtb2RlbFBvc2l0aW9uLnogKz0gY29zKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnkgKiAxMDAuMCkgKiAwLjI7XG4gIG1vZGVsUG9zaXRpb24ueCArPSBjb3ModGltZSAqIHNwZWVkICsgbW9kZWxQb3NpdGlvbi54ICogbm9pc2UueiAqIDEwMC4wKSAqIDAuMjtcblxuICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXdNYXRyaXggKiBtb2RlbFBvc2l0aW9uO1xuICB2ZWM0IHByb2plY3Rpb25Qb3N0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdQb3NpdGlvbjtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25Qb3N0aW9uO1xuICBnbF9Qb2ludFNpemUgPSBzaXplICogMjUuICogcGl4ZWxSYXRpbztcbiAgZ2xfUG9pbnRTaXplICo9ICgxLjAgLyAtIHZpZXdQb3NpdGlvbi56KTtcblxuICB2Q29sb3IgPSBjb2xvcjtcbiAgdk9wYWNpdHkgPSBvcGFjaXR5O1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0YW5jZVRvQ2VudGVyID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUpKTtcbiAgZmxvYXQgc3RyZW5ndGggPSAwLjA1IC8gZGlzdGFuY2VUb0NlbnRlciAtIDAuMTtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZDb2xvciwgc3RyZW5ndGggKiB2T3BhY2l0eSk7XG59XG4gIGBcbik7XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Color, ShaderMaterial, Vector2, Vector3 } from 'three';
|
|
2
|
+
export class SpotLightMaterial extends ShaderMaterial {
|
|
3
|
+
constructor() {
|
|
4
|
+
super({
|
|
5
|
+
uniforms: {
|
|
6
|
+
depth: { value: null },
|
|
7
|
+
opacity: { value: 1 },
|
|
8
|
+
attenuation: { value: 2.5 },
|
|
9
|
+
anglePower: { value: 12 },
|
|
10
|
+
spotPosition: { value: new Vector3(0, 0, 0) },
|
|
11
|
+
lightColor: { value: new Color('white') },
|
|
12
|
+
cameraNear: { value: 0 },
|
|
13
|
+
cameraFar: { value: 1 },
|
|
14
|
+
resolution: { value: new Vector2(0, 0) },
|
|
15
|
+
},
|
|
16
|
+
transparent: true,
|
|
17
|
+
depthWrite: false,
|
|
18
|
+
vertexShader: /* glsl */ `
|
|
19
|
+
varying vec3 vNormal;
|
|
20
|
+
varying vec3 vWorldPosition;
|
|
21
|
+
varying float vViewZ;
|
|
22
|
+
varying float vIntensity;
|
|
23
|
+
uniform vec3 spotPosition;
|
|
24
|
+
uniform float attenuation;
|
|
25
|
+
|
|
26
|
+
void main() {
|
|
27
|
+
// compute intensity
|
|
28
|
+
vNormal = normalize( normalMatrix * normal );
|
|
29
|
+
vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
|
|
30
|
+
vWorldPosition = worldPosition.xyz;
|
|
31
|
+
vec4 viewPosition = viewMatrix * worldPosition;
|
|
32
|
+
vViewZ = viewPosition.z;
|
|
33
|
+
float intensity = distance(worldPosition.xyz, spotPosition) / attenuation;
|
|
34
|
+
intensity = 1.0 - clamp(intensity, 0.0, 1.0);
|
|
35
|
+
vIntensity = intensity;
|
|
36
|
+
// set gl_Position
|
|
37
|
+
gl_Position = projectionMatrix * viewPosition;
|
|
38
|
+
|
|
39
|
+
}`,
|
|
40
|
+
fragmentShader: /* glsl */ `
|
|
41
|
+
#include <packing>
|
|
42
|
+
|
|
43
|
+
varying vec3 vNormal;
|
|
44
|
+
varying vec3 vWorldPosition;
|
|
45
|
+
uniform vec3 lightColor;
|
|
46
|
+
uniform vec3 spotPosition;
|
|
47
|
+
uniform float attenuation;
|
|
48
|
+
uniform float anglePower;
|
|
49
|
+
uniform sampler2D depth;
|
|
50
|
+
uniform vec2 resolution;
|
|
51
|
+
uniform float cameraNear;
|
|
52
|
+
uniform float cameraFar;
|
|
53
|
+
varying float vViewZ;
|
|
54
|
+
varying float vIntensity;
|
|
55
|
+
uniform float opacity;
|
|
56
|
+
|
|
57
|
+
float readDepth( sampler2D depthSampler, vec2 coord ) {
|
|
58
|
+
float fragCoordZ = texture2D( depthSampler, coord ).x;
|
|
59
|
+
float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
|
|
60
|
+
return viewZ;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
void main() {
|
|
64
|
+
float d = 1.0;
|
|
65
|
+
bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
|
|
66
|
+
if (isSoft) {
|
|
67
|
+
vec2 sUv = gl_FragCoord.xy / resolution;
|
|
68
|
+
d = readDepth(depth, sUv);
|
|
69
|
+
}
|
|
70
|
+
float intensity = vIntensity;
|
|
71
|
+
vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
|
|
72
|
+
float angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
|
|
73
|
+
intensity *= angleIntensity;
|
|
74
|
+
// fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
|
|
75
|
+
if (isSoft) {
|
|
76
|
+
intensity *= smoothstep(0., 1., vViewZ - d);
|
|
77
|
+
}
|
|
78
|
+
gl_FragColor = vec4(lightColor, intensity * opacity);
|
|
79
|
+
|
|
80
|
+
#include <tonemapping_fragment>
|
|
81
|
+
#include <encodings_fragment>
|
|
82
|
+
}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQUNqRDtRQUNJLEtBQUssQ0FBQztZQUNGLFFBQVEsRUFBRTtnQkFDTixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN0QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDN0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2FBQzNDO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBcUI3QjtZQUNJLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQTBDL0I7U0FDQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciwgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogeyB2YWx1ZTogMi41IH0sXG4gICAgICAgICAgICAgICAgYW5nbGVQb3dlcjogeyB2YWx1ZTogMTIgfSxcbiAgICAgICAgICAgICAgICBzcG90UG9zaXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IzKDAsIDAsIDApIH0sXG4gICAgICAgICAgICAgICAgbGlnaHRDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCd3aGl0ZScpIH0sXG4gICAgICAgICAgICAgICAgY2FtZXJhTmVhcjogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgICAgIGNhbWVyYUZhcjogeyB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgICAgIHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDAsIDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdlZpZXdaO1xuICAgICAgdmFyeWluZyBmbG9hdCB2SW50ZW5zaXR5O1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgLy8gY29tcHV0ZSBpbnRlbnNpdHlcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvblx0PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbiAgICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiAgICAgICAgdlZpZXdaID0gdmlld1Bvc2l0aW9uLno7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eVx0PSBkaXN0YW5jZSh3b3JsZFBvc2l0aW9uLnh5eiwgc3BvdFBvc2l0aW9uKSAvIGF0dGVudWF0aW9uO1xuICAgICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG4gICAgICAgIHZJbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG4gICAgICAgIC8vIHNldCBnbF9Qb3NpdGlvblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuXG4gICAgICB9YCxcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGFuZ2xlUG93ZXI7XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aDtcbiAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuICAgICAgZmxvYXQgcmVhZERlcHRoKCBzYW1wbGVyMkQgZGVwdGhTYW1wbGVyLCB2ZWMyIGNvb3JkICkge1xuICAgICAgICBmbG9hdCBmcmFnQ29vcmRaID0gdGV4dHVyZTJEKCBkZXB0aFNhbXBsZXIsIGNvb3JkICkueDtcbiAgICAgICAgZmxvYXQgdmlld1ogPSBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WihmcmFnQ29vcmRaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xuICAgICAgICByZXR1cm4gdmlld1o7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgZCA9IDEuMDtcbiAgICAgICAgYm9vbCBpc1NvZnQgPSByZXNvbHV0aW9uWzBdID4gMC4wICYmIHJlc29sdXRpb25bMV0gPiAwLjA7XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICB2ZWMyIHNVdiA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb247XG4gICAgICAgICAgZCA9IHJlYWREZXB0aChkZXB0aCwgc1V2KTtcbiAgICAgICAgfVxuICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSB2SW50ZW5zaXR5O1xuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyggZG90KG5vcm1hbCwgdmVjMygwLjAsIDAuMCwgMS4wKSksIGFuZ2xlUG93ZXIgKTtcbiAgICAgICAgaW50ZW5zaXR5XHQqPSBhbmdsZUludGVuc2l0eTtcbiAgICAgICAgLy8gZmFkZXMgd2hlbiB6IGlzIGNsb3NlIHRvIHNhbXBsZWQgZGVwdGgsIG1lYW5pbmcgdGhlIGNvbmUgaXMgaW50ZXJzZWN0aW5nIGV4aXN0aW5nIGdlb21ldHJ5XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICBpbnRlbnNpdHlcdCo9IHNtb290aHN0ZXAoMC4sIDEuLCB2Vmlld1ogLSBkKTtcbiAgICAgICAgfVxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpZ2h0Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpO1xuXG4gICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0ICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgIH1gLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { shaderMaterial } from '../shader-material/shader-material';
|
|
2
|
+
export const StarFieldMaterial = shaderMaterial({ time: 0.0, fade: 0.0 },
|
|
3
|
+
// language=GLSL
|
|
4
|
+
`
|
|
5
|
+
uniform float time;
|
|
6
|
+
attribute float size;
|
|
7
|
+
varying vec3 vColor;
|
|
8
|
+
void main() {
|
|
9
|
+
vColor = color;
|
|
10
|
+
vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
|
|
11
|
+
gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));
|
|
12
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
13
|
+
}
|
|
14
|
+
`,
|
|
15
|
+
// language=GLSL
|
|
16
|
+
`
|
|
17
|
+
uniform sampler2D pointTexture;
|
|
18
|
+
uniform float fade;
|
|
19
|
+
varying vec3 vColor;
|
|
20
|
+
void main() {
|
|
21
|
+
float opacity = 1.0;
|
|
22
|
+
if (fade == 1.0) {
|
|
23
|
+
float d = distance(gl_PointCoord, vec2(0.5, 0.5));
|
|
24
|
+
opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
|
|
25
|
+
}
|
|
26
|
+
gl_FragColor = vec4(vColor, opacity);
|
|
27
|
+
|
|
28
|
+
#include <tonemapping_fragment>
|
|
29
|
+
#include <encodings_fragment>
|
|
30
|
+
}
|
|
31
|
+
`);
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1maWVsZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FDM0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7O0dBVUQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7Ozs7OztHQWVELENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBTdGFyRmllbGRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMC4wLCBmYWRlOiAwLjAgfSxcbiAgICAvLyBsYW5ndWFnZT1HTFNMXG4gICAgYFxudW5pZm9ybSBmbG9hdCB0aW1lO1xuYXR0cmlidXRlIGZsb2F0IHNpemU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICB2Q29sb3IgPSBjb2xvcjtcbiAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC41KTtcbiAgZ2xfUG9pbnRTaXplID0gc2l6ZSAqICgzMC4wIC8gLW12UG9zaXRpb24ueikgKiAoMy4wICsgc2luKHRpbWUgKyAxMDAuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIHNhbXBsZXIyRCBwb2ludFRleHR1cmU7XG51bmlmb3JtIGZsb2F0IGZhZGU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICBmbG9hdCBvcGFjaXR5ID0gMS4wO1xuICBpZiAoZmFkZSA9PSAxLjApIHtcbiAgICBmbG9hdCBkID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUsIDAuNSkpO1xuICAgIG9wYWNpdHkgPSAxLjAgLyAoMS4wICsgZXhwKDE2LjAgKiAoZCAtIDAuMjUpKSk7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2Q29sb3IsIG9wYWNpdHkpO1xuXG4gICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn1cbiAgYFxuKTtcbiJdfQ==
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, InjectionToken, Input, computed, effect, inject, untracked, } from '@angular/core';
|
|
2
|
+
import { NgtSignalStore, NgtStore, extend, getLocalState, injectBeforeRender, injectNgtRef, requestAnimationInInjectionContext, } from 'angular-three';
|
|
3
|
+
import { SoftShadowMaterial } from 'angular-three-soba/shaders';
|
|
4
|
+
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
5
|
+
import { ProgressiveLightMap } from './progressive-light-map';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
extend({ SoftShadowMaterial, Group, Mesh, PlaneGeometry });
|
|
8
|
+
export const NGTS_ACCUMULATIVE_SHADOWS_API = new InjectionToken('NgtsAccumulativeShadows API');
|
|
9
|
+
class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
10
|
+
/** How many frames it can render, more yields cleaner results but takes more time, 40 */
|
|
11
|
+
set frames(frames) {
|
|
12
|
+
this.set({ frames });
|
|
13
|
+
}
|
|
14
|
+
/** If frames === Infinity blend controls the refresh ratio, 100 */
|
|
15
|
+
set blend(blend) {
|
|
16
|
+
this.set({ blend });
|
|
17
|
+
}
|
|
18
|
+
/** Can limit the amount of frames rendered if frames === Infinity, usually to get some performance back once a movable scene has settled, Infinity */
|
|
19
|
+
set limit(limit) {
|
|
20
|
+
this.set({ limit });
|
|
21
|
+
}
|
|
22
|
+
/** Scale of the plane, */
|
|
23
|
+
set scale(scale) {
|
|
24
|
+
this.set({ scale });
|
|
25
|
+
}
|
|
26
|
+
/** Temporal accumulates shadows over time which is more performant but has a visual regression over instant results, false */
|
|
27
|
+
set temporal(temporal) {
|
|
28
|
+
this.set({ temporal });
|
|
29
|
+
}
|
|
30
|
+
/** Opacity of the plane, 1 */
|
|
31
|
+
set opacity(opacity) {
|
|
32
|
+
this.set({ opacity });
|
|
33
|
+
}
|
|
34
|
+
/** Discards alpha pixels, 0.65 */
|
|
35
|
+
set alphaTest(alphaTest) {
|
|
36
|
+
this.set({ alphaTest });
|
|
37
|
+
}
|
|
38
|
+
/** Shadow color, black */
|
|
39
|
+
set color(color) {
|
|
40
|
+
this.set({ color });
|
|
41
|
+
}
|
|
42
|
+
/** Colorblend, how much colors turn to black, 0 is black, 2 */
|
|
43
|
+
set colorBlend(colorBlend) {
|
|
44
|
+
this.set({ colorBlend });
|
|
45
|
+
}
|
|
46
|
+
/** Buffer resolution, 1024 */
|
|
47
|
+
set resolution(resolution) {
|
|
48
|
+
this.set({ resolution });
|
|
49
|
+
}
|
|
50
|
+
/** Texture tonemapping */
|
|
51
|
+
set toneMapped(toneMapped) {
|
|
52
|
+
this.set({ toneMapped });
|
|
53
|
+
}
|
|
54
|
+
#store;
|
|
55
|
+
#gl;
|
|
56
|
+
#scene;
|
|
57
|
+
#camera;
|
|
58
|
+
#resolution;
|
|
59
|
+
#temporal;
|
|
60
|
+
#blend;
|
|
61
|
+
#frames;
|
|
62
|
+
#opacity;
|
|
63
|
+
#alphaTest;
|
|
64
|
+
constructor() {
|
|
65
|
+
super({
|
|
66
|
+
frames: 40,
|
|
67
|
+
limit: Infinity,
|
|
68
|
+
blend: 20,
|
|
69
|
+
scale: 10,
|
|
70
|
+
opacity: 1,
|
|
71
|
+
alphaTest: 0.75,
|
|
72
|
+
color: 'black',
|
|
73
|
+
colorBlend: 2,
|
|
74
|
+
resolution: 1024,
|
|
75
|
+
toneMapped: true,
|
|
76
|
+
temporal: false,
|
|
77
|
+
});
|
|
78
|
+
this.nullTraverse = () => null;
|
|
79
|
+
this.Math = Math;
|
|
80
|
+
this.#store = inject(NgtStore);
|
|
81
|
+
this.#gl = this.#store.select('gl');
|
|
82
|
+
this.#scene = this.#store.select('scene');
|
|
83
|
+
this.#camera = this.#store.select('camera');
|
|
84
|
+
this.#resolution = this.select('resolution');
|
|
85
|
+
this.#temporal = this.select('temporal');
|
|
86
|
+
this.#blend = this.select('blend');
|
|
87
|
+
this.#frames = this.select('frames');
|
|
88
|
+
this.#opacity = this.select('opacity');
|
|
89
|
+
this.#alphaTest = this.select('alphaTest');
|
|
90
|
+
this.accumulativeShadowsScale = this.select('scale');
|
|
91
|
+
this.accumulativeShadowsToneMapped = this.select('toneMapped');
|
|
92
|
+
this.accumulativeShadowsColor = this.select('color');
|
|
93
|
+
this.accumulativeShadowsColorBlend = this.select('colorBlend');
|
|
94
|
+
this.meshRef = injectNgtRef();
|
|
95
|
+
this.accumulativeShadowsRef = injectNgtRef();
|
|
96
|
+
this.pLM = computed(() => new ProgressiveLightMap(untracked(this.#gl), untracked(this.#scene), this.#resolution()));
|
|
97
|
+
this.api = computed(() => {
|
|
98
|
+
const pLM = this.pLM();
|
|
99
|
+
const alphaTest = this.#alphaTest();
|
|
100
|
+
const opacity = this.#opacity();
|
|
101
|
+
const camera = this.#camera();
|
|
102
|
+
return {
|
|
103
|
+
lights: new Map(),
|
|
104
|
+
temporal: this.#temporal(),
|
|
105
|
+
frames: Math.max(2, this.#frames()),
|
|
106
|
+
blend: Math.max(2, this.#frames() === Infinity ? this.#blend() : this.#frames()),
|
|
107
|
+
count: 0,
|
|
108
|
+
getMesh: () => this.meshRef.nativeElement,
|
|
109
|
+
reset: () => {
|
|
110
|
+
if (!this.meshRef.nativeElement)
|
|
111
|
+
return;
|
|
112
|
+
// Clear buffers, reset opacities, set frame count to 0
|
|
113
|
+
pLM.clear();
|
|
114
|
+
const material = this.meshRef.nativeElement.material;
|
|
115
|
+
material.opacity = 0;
|
|
116
|
+
material.alphaTest = 0;
|
|
117
|
+
this.api().count = 0;
|
|
118
|
+
},
|
|
119
|
+
update: (frames = 1) => {
|
|
120
|
+
if (!this.meshRef.nativeElement)
|
|
121
|
+
return;
|
|
122
|
+
// Adapt the opacity-blend ratio to the number of frames
|
|
123
|
+
const material = this.meshRef.nativeElement.material;
|
|
124
|
+
if (!this.api().temporal) {
|
|
125
|
+
material.opacity = opacity;
|
|
126
|
+
material.alphaTest = alphaTest;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
material.opacity = Math.min(opacity, material.opacity + opacity / this.api().blend);
|
|
130
|
+
material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / this.api().blend);
|
|
131
|
+
}
|
|
132
|
+
// Switch accumulative lights on
|
|
133
|
+
this.accumulativeShadowsRef.nativeElement.visible = true;
|
|
134
|
+
// Collect scene lights and meshes
|
|
135
|
+
pLM.prepare();
|
|
136
|
+
// Update the lightmap and the accumulative lights
|
|
137
|
+
for (let i = 0; i < frames; i++) {
|
|
138
|
+
this.api().lights.forEach((light) => light().update());
|
|
139
|
+
pLM.update(camera, this.api().blend);
|
|
140
|
+
}
|
|
141
|
+
// Switch lights off
|
|
142
|
+
this.accumulativeShadowsRef.nativeElement.visible = false;
|
|
143
|
+
// Restore lights and meshes
|
|
144
|
+
pLM.finish();
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
requestAnimationInInjectionContext(() => {
|
|
149
|
+
this.#configure();
|
|
150
|
+
this.#resetAndUpdate();
|
|
151
|
+
});
|
|
152
|
+
injectBeforeRender(this.#onBeforeRender.bind(this));
|
|
153
|
+
}
|
|
154
|
+
#onBeforeRender() {
|
|
155
|
+
const invalidate = this.#store.get('invalidate');
|
|
156
|
+
const limit = this.get('limit');
|
|
157
|
+
const api = this.api();
|
|
158
|
+
if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
|
|
159
|
+
invalidate();
|
|
160
|
+
api.update();
|
|
161
|
+
api.count++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
#configure() {
|
|
165
|
+
const trigger = computed(() => ({ pLM: this.pLM(), mesh: this.meshRef.nativeElement }));
|
|
166
|
+
effect(() => {
|
|
167
|
+
const { pLM, mesh } = trigger();
|
|
168
|
+
if (!mesh)
|
|
169
|
+
return;
|
|
170
|
+
pLM.configure(mesh);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
#resetAndUpdate() {
|
|
174
|
+
const trigger = computed(() => ({
|
|
175
|
+
state: this.select()(),
|
|
176
|
+
objects: getLocalState(this.#store.get('scene')).objects(),
|
|
177
|
+
mesh: this.meshRef.nativeElement,
|
|
178
|
+
}));
|
|
179
|
+
effect(() => {
|
|
180
|
+
const { mesh } = trigger();
|
|
181
|
+
if (!mesh)
|
|
182
|
+
return;
|
|
183
|
+
const api = untracked(this.api);
|
|
184
|
+
// Reset internals, buffers, ...
|
|
185
|
+
api.reset();
|
|
186
|
+
// Update lightmap
|
|
187
|
+
if (!api.temporal && api.frames !== Infinity)
|
|
188
|
+
api.update(api.blend);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
192
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { frames: "frames", blend: "blend", limit: "limit", scale: "scale", temporal: "temporal", opacity: "opacity", alphaTest: "alphaTest", color: "color", colorBlend: "colorBlend", resolution: "resolution", toneMapped: "toneMapped" }, providers: [
|
|
193
|
+
{
|
|
194
|
+
provide: NGTS_ACCUMULATIVE_SHADOWS_API,
|
|
195
|
+
useFactory: (shadows) => shadows.api,
|
|
196
|
+
deps: [NgtsAccumulativeShadows],
|
|
197
|
+
},
|
|
198
|
+
], usesInheritance: true, ngImport: i0, template: `
|
|
199
|
+
<ngt-group ngtCompound>
|
|
200
|
+
<ngt-group [ref]="accumulativeShadowsRef" [traverse]="nullTraverse">
|
|
201
|
+
<ng-content />
|
|
202
|
+
</ngt-group>
|
|
203
|
+
<ngt-mesh
|
|
204
|
+
[ref]="meshRef"
|
|
205
|
+
[receiveShadow]="true"
|
|
206
|
+
[scale]="accumulativeShadowsScale()"
|
|
207
|
+
[rotation]="[-Math.PI / 2, 0, 0]"
|
|
208
|
+
>
|
|
209
|
+
<ngt-plane-geometry />
|
|
210
|
+
<ngt-soft-shadow-material
|
|
211
|
+
[transparent]="true"
|
|
212
|
+
[depthWrite]="false"
|
|
213
|
+
[toneMapped]="accumulativeShadowsToneMapped()"
|
|
214
|
+
[color]="accumulativeShadowsColor()"
|
|
215
|
+
[blend]="accumulativeShadowsColorBlend()"
|
|
216
|
+
[map]="pLM().progressiveLightMap2.texture"
|
|
217
|
+
/>
|
|
218
|
+
</ngt-mesh>
|
|
219
|
+
</ngt-group>
|
|
220
|
+
`, isInline: true }); }
|
|
221
|
+
}
|
|
222
|
+
export { NgtsAccumulativeShadows };
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
|
|
224
|
+
type: Component,
|
|
225
|
+
args: [{
|
|
226
|
+
selector: 'ngts-accumulative-shadows',
|
|
227
|
+
standalone: true,
|
|
228
|
+
template: `
|
|
229
|
+
<ngt-group ngtCompound>
|
|
230
|
+
<ngt-group [ref]="accumulativeShadowsRef" [traverse]="nullTraverse">
|
|
231
|
+
<ng-content />
|
|
232
|
+
</ngt-group>
|
|
233
|
+
<ngt-mesh
|
|
234
|
+
[ref]="meshRef"
|
|
235
|
+
[receiveShadow]="true"
|
|
236
|
+
[scale]="accumulativeShadowsScale()"
|
|
237
|
+
[rotation]="[-Math.PI / 2, 0, 0]"
|
|
238
|
+
>
|
|
239
|
+
<ngt-plane-geometry />
|
|
240
|
+
<ngt-soft-shadow-material
|
|
241
|
+
[transparent]="true"
|
|
242
|
+
[depthWrite]="false"
|
|
243
|
+
[toneMapped]="accumulativeShadowsToneMapped()"
|
|
244
|
+
[color]="accumulativeShadowsColor()"
|
|
245
|
+
[blend]="accumulativeShadowsColorBlend()"
|
|
246
|
+
[map]="pLM().progressiveLightMap2.texture"
|
|
247
|
+
/>
|
|
248
|
+
</ngt-mesh>
|
|
249
|
+
</ngt-group>
|
|
250
|
+
`,
|
|
251
|
+
providers: [
|
|
252
|
+
{
|
|
253
|
+
provide: NGTS_ACCUMULATIVE_SHADOWS_API,
|
|
254
|
+
useFactory: (shadows) => shadows.api,
|
|
255
|
+
deps: [NgtsAccumulativeShadows],
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
259
|
+
}]
|
|
260
|
+
}], ctorParameters: function () { return []; }, propDecorators: { frames: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], blend: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], limit: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], scale: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], temporal: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], opacity: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], alphaTest: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], color: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], colorBlend: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], resolution: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], toneMapped: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}] } });
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsY0FBYyxFQUNkLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGtDQUFrQyxHQUVyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RCxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUF3QzNELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUMzRCw2QkFBNkIsQ0FDaEMsQ0FBQztBQVFGLE1BbUNhLHVCQUF3QixTQUFRLGNBQTRDO0lBSXJGLHlGQUF5RjtJQUN6RixJQUFhLE1BQU0sQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FB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b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLDZCQUE2Qjs0QkFDdEMsVUFBVSxFQUFFLENBQUMsT0FBZ0MsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUc7NEJBQzdELElBQUksRUFBRSx5QkFBeUI7eUJBQ2xDO3FCQUNKO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFNZ0IsTUFBTTtzQkFBbEIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxRQUFRO3NCQUFwQixLQUFLO2dCQUtPLE9BQU87c0JBQW5CLEtBQUs7Z0JBS08sU0FBUztzQkFBckIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBTaWduYWwsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBOZ3RTaWduYWxTdG9yZSxcbiAgICBOZ3RTdG9yZSxcbiAgICBleHRlbmQsXG4gICAgZ2V0TG9jYWxTdGF0ZSxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIHJlcXVlc3RBbmltYXRpb25JbkluamVjdGlvbkNvbnRleHQsXG4gICAgdHlwZSBOZ3RHcm91cCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBTb2Z0U2hhZG93TWF0ZXJpYWwsIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVMaWdodE1hcCB9IGZyb20gJy4vcHJvZ3Jlc3NpdmUtbGlnaHQtbWFwJztcblxuZXh0ZW5kKHsgU29mdFNoYWRvd01hdGVyaWFsLCBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlIHtcbiAgICAvKiogSG93IG1hbnkgZnJhbWVzIGl0IGNhbiByZW5kZXIsIG1vcmUgeWllbGRzIGNsZWFuZXIgcmVzdWx0cyBidXQgdGFrZXMgbW9yZSB0aW1lLCA0MCAqL1xuICAgIGZyYW1lczogbnVtYmVyO1xuICAgIC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cbiAgICBibGVuZDogbnVtYmVyO1xuICAgIC8qKiBDYW4gbGltaXQgdGhlIGFtb3VudCBvZiBmcmFtZXMgcmVuZGVyZWQgaWYgZnJhbWVzID09PSBJbmZpbml0eSwgdXN1YWxseSB0byBnZXQgc29tZSBwZXJmb3JtYW5jZSBiYWNrIG9uY2UgYSBtb3ZhYmxlIHNjZW5lIGhhcyBzZXR0bGVkLCBJbmZpbml0eSAqL1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgLyoqIFNjYWxlIG9mIHRoZSBwbGFuZSwgICovXG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICAvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG4gICAgdGVtcG9yYWw6IGJvb2xlYW47XG4gICAgLyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIC8qKiBEaXNjYXJkcyBhbHBoYSBwaXhlbHMsIDAuNjUgKi9cbiAgICBhbHBoYVRlc3Q6IG51bWJlcjtcbiAgICAvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgLyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG4gICAgY29sb3JCbGVuZDogbnVtYmVyO1xuICAgIC8qKiBCdWZmZXIgcmVzb2x1dGlvbiwgMTAyNCAqL1xuICAgIHJlc29sdXRpb246IG51bWJlcjtcbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIHRvbmVNYXBwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGkgPSB7IHVwZGF0ZTogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzQXBpIHtcbiAgICBsaWdodHM6IE1hcDxzdHJpbmcsIFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpPj47XG4gICAgdGVtcG9yYWw6IGJvb2xlYW47XG4gICAgZnJhbWVzOiBudW1iZXI7XG4gICAgYmxlbmQ6IG51bWJlcjtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGdldE1lc2g6ICgpID0+IFRIUkVFLk1lc2g8VEhSRUUuUGxhbmVHZW9tZXRyeSwgU29mdFNoYWRvd01hdGVyaWFsSW5wdXRzICYgVEhSRUUuU2hhZGVyTWF0ZXJpYWw+O1xuICAgIHJlc2V0OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZTogKGZyYW1lcz86IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJID0gbmV3IEluamVjdGlvblRva2VuPFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaT4+KFxuICAgICdOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBBUEknXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgICAgICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJzogTmd0R3JvdXAgJiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LWdyb3VwIFtyZWZdPVwiYWNjdW11bGF0aXZlU2hhZG93c1JlZlwiIFt0cmF2ZXJzZV09XCJudWxsVHJhdmVyc2VcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgICAgICA8bmd0LW1lc2hcbiAgICAgICAgICAgICAgICBbcmVmXT1cIm1lc2hSZWZcIlxuICAgICAgICAgICAgICAgIFtyZWNlaXZlU2hhZG93XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJhY2N1bXVsYXRpdmVTaGFkb3dzU2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgW3JvdGF0aW9uXT1cIlstTWF0aC5QSSAvIDIsIDAsIDBdXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICAgICAgPG5ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvbmVNYXBwZWRdPVwiYWNjdW11bGF0aXZlU2hhZG93c1RvbmVNYXBwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtibGVuZF09XCJhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3JCbGVuZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcF09XCJwTE0oKS5wcm9ncmVzc2l2ZUxpZ2h0TWFwMi50ZXh0dXJlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9uZ3QtbWVzaD5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdUU19BQ0NVTVVMQVRJVkVfU0hBRE9XU19BUEksXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoc2hhZG93czogTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MpID0+IHNoYWRvd3MuYXBpLFxuICAgICAgICAgICAgZGVwczogW05ndHNBY2N1bXVsYXRpdmVTaGFkb3dzXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlPiB7XG4gICAgcmVhZG9ubHkgbnVsbFRyYXZlcnNlID0gKCkgPT4gbnVsbDtcbiAgICByZWFkb25seSBNYXRoID0gTWF0aDtcblxuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG4gICAgQElucHV0KCkgc2V0IGJsZW5kKGJsZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibGVuZCB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgbGltaXQobGltaXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGxpbWl0IH0pO1xuICAgIH1cblxuICAgIC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuICAgIEBJbnB1dCgpIHNldCBzY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgLyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuICAgIEBJbnB1dCgpIHNldCB0ZW1wb3JhbCh0ZW1wb3JhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHRlbXBvcmFsIH0pO1xuICAgIH1cblxuICAgIC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbHBoYVRlc3QgfSk7XG4gICAgfVxuXG4gICAgLyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBjb2xvckJsZW5kKGNvbG9yQmxlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yQmxlbmQgfSk7XG4gICAgfVxuXG4gICAgLyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIEBJbnB1dCgpIHNldCB0b25lTWFwcGVkKHRvbmVNYXBwZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b25lTWFwcGVkIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI2dsID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdnbCcpO1xuICAgIHJlYWRvbmx5ICNzY2VuZSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnc2NlbmUnKTtcbiAgICByZWFkb25seSAjY2FtZXJhID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblxuICAgIHJlYWRvbmx5ICNyZXNvbHV0aW9uID0gdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKTtcbiAgICByZWFkb25seSAjdGVtcG9yYWwgPSB0aGlzLnNlbGVjdCgndGVtcG9yYWwnKTtcbiAgICByZWFkb25seSAjYmxlbmQgPSB0aGlzLnNlbGVjdCgnYmxlbmQnKTtcbiAgICByZWFkb25seSAjZnJhbWVzID0gdGhpcy5zZWxlY3QoJ2ZyYW1lcycpO1xuICAgIHJlYWRvbmx5ICNvcGFjaXR5ID0gdGhpcy5zZWxlY3QoJ29wYWNpdHknKTtcbiAgICByZWFkb25seSAjYWxwaGFUZXN0ID0gdGhpcy5zZWxlY3QoJ2FscGhhVGVzdCcpO1xuXG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1NjYWxlID0gdGhpcy5zZWxlY3QoJ3NjYWxlJyk7XG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1RvbmVNYXBwZWQgPSB0aGlzLnNlbGVjdCgndG9uZU1hcHBlZCcpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NDb2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NDb2xvckJsZW5kID0gdGhpcy5zZWxlY3QoJ2NvbG9yQmxlbmQnKTtcblxuICAgIHJlYWRvbmx5IG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaDxUSFJFRS5QbGFuZUdlb21ldHJ5LCBTb2Z0U2hhZG93TWF0ZXJpYWxJbnB1dHMgJiBUSFJFRS5TaGFkZXJNYXRlcmlhbD4+KCk7XG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1JlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5Hcm91cD4oKTtcblxuICAgIHJlYWRvbmx5IHBMTSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiBuZXcgUHJvZ3Jlc3NpdmVMaWdodE1hcCh1bnRyYWNrZWQodGhpcy4jZ2wpLCB1bnRyYWNrZWQodGhpcy4jc2NlbmUpLCB0aGlzLiNyZXNvbHV0aW9uKCkpXG4gICAgKTtcblxuICAgIHJlYWRvbmx5IGFwaSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcExNID0gdGhpcy5wTE0oKTtcbiAgICAgICAgY29uc3QgYWxwaGFUZXN0ID0gdGhpcy4jYWxwaGFUZXN0KCk7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLiNvcGFjaXR5KCk7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuI2NhbWVyYSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaWdodHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIHRlbXBvcmFsOiB0aGlzLiN0ZW1wb3JhbCgpLFxuICAgICAgICAgICAgZnJhbWVzOiBNYXRoLm1heCgyLCB0aGlzLiNmcmFtZXMoKSksXG4gICAgICAgICAgICBibGVuZDogTWF0aC5tYXgoMiwgdGhpcy4jZnJhbWVzKCkgPT09IEluZmluaXR5ID8gdGhpcy4jYmxlbmQoKSA6IHRoaXMuI2ZyYW1lcygpKSxcbiAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgZ2V0TWVzaDogKCkgPT4gdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBidWZmZXJzLCByZXNldCBvcGFjaXRpZXMsIHNldCBmcmFtZSBjb3VudCB0byAwXG4gICAgICAgICAgICAgICAgcExNLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5hbHBoYVRlc3QgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpKCkuY291bnQgPSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGZyYW1lcyA9IDEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gQWRhcHQgdGhlIG9wYWNpdHktYmxlbmQgcmF0aW8gdG8gdGhlIG51bWJlciBvZiBmcmFtZXNcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcGkoKS50ZW1wb3JhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gYWxwaGFUZXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBNYXRoLm1pbihvcGFjaXR5LCBtYXRlcmlhbC5vcGFjaXR5ICsgb3BhY2l0eSAvIHRoaXMuYXBpKCkuYmxlbmQpO1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5hbHBoYVRlc3QgPSBNYXRoLm1pbihhbHBoYVRlc3QsIG1hdGVyaWFsLmFscGhhVGVzdCArIGFscGhhVGVzdCAvIHRoaXMuYXBpKCkuYmxlbmQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBhY2N1bXVsYXRpdmUgbGlnaHRzIG9uXG4gICAgICAgICAgICAgICAgdGhpcy5hY2N1bXVsYXRpdmVTaGFkb3dzUmVmLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuICAgICAgICAgICAgICAgIHBMTS5wcmVwYXJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGxpZ2h0bWFwIGFuZCB0aGUgYWNjdW11bGF0aXZlIGxpZ2h0c1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGkoKS5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IGxpZ2h0KCkudXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICBwTE0udXBkYXRlKGNhbWVyYSwgdGhpcy5hcGkoKS5ibGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBsaWdodHMgb2ZmXG4gICAgICAgICAgICAgICAgdGhpcy5hY2N1bXVsYXRpdmVTaGFkb3dzUmVmLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbGlnaHRzIGFuZCBtZXNoZXNcbiAgICAgICAgICAgICAgICBwTE0uZmluaXNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGZyYW1lczogNDAsXG4gICAgICAgICAgICBsaW1pdDogSW5maW5pdHksXG4gICAgICAgICAgICBibGVuZDogMjAsXG4gICAgICAgICAgICBzY2FsZTogMTAsXG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgYWxwaGFUZXN0OiAwLjc1LFxuICAgICAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICBjb2xvckJsZW5kOiAyLFxuICAgICAgICAgICAgcmVzb2x1dGlvbjogMTAyNCxcbiAgICAgICAgICAgIHRvbmVNYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICB0ZW1wb3JhbDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uSW5JbmplY3Rpb25Db250ZXh0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI2NvbmZpZ3VyZSgpO1xuICAgICAgICAgICAgdGhpcy4jcmVzZXRBbmRVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcih0aGlzLiNvbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAjb25CZWZvcmVSZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLiNzdG9yZS5nZXQoJ2ludmFsaWRhdGUnKTtcbiAgICAgICAgY29uc3QgbGltaXQgPSB0aGlzLmdldCgnbGltaXQnKTtcbiAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGkoKTtcbiAgICAgICAgaWYgKChhcGkudGVtcG9yYWwgfHwgYXBpLmZyYW1lcyA9PT0gSW5maW5pdHkpICYmIGFwaS5jb3VudCA8IGFwaS5mcmFtZXMgJiYgYXBpLmNvdW50IDwgbGltaXQpIHtcbiAgICAgICAgICAgIGludmFsaWRhdGUoKTtcbiAgICAgICAgICAgIGFwaS51cGRhdGUoKTtcbiAgICAgICAgICAgIGFwaS5jb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2NvbmZpZ3VyZSgpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IGNvbXB1dGVkKCgpID0+ICh7IHBMTTogdGhpcy5wTE0oKSwgbWVzaDogdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQgfSkpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBwTE0sIG1lc2ggfSA9IHRyaWdnZXIoKTtcbiAgICAgICAgICAgIGlmICghbWVzaCkgcmV0dXJuO1xuICAgICAgICAgICAgcExNLmNvbmZpZ3VyZShtZXNoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI3Jlc2V0QW5kVXBkYXRlKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLnNlbGVjdCgpKCksXG4gICAgICAgICAgICBvYmplY3RzOiBnZXRMb2NhbFN0YXRlKHRoaXMuI3N0b3JlLmdldCgnc2NlbmUnKSkub2JqZWN0cygpLFxuICAgICAgICAgICAgbWVzaDogdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNoIH0gPSB0cmlnZ2VyKCk7XG4gICAgICAgICAgICBpZiAoIW1lc2gpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHVudHJhY2tlZCh0aGlzLmFwaSk7XG4gICAgICAgICAgICAvLyBSZXNldCBpbnRlcm5hbHMsIGJ1ZmZlcnMsIC4uLlxuICAgICAgICAgICAgYXBpLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgbGlnaHRtYXBcbiAgICAgICAgICAgIGlmICghYXBpLnRlbXBvcmFsICYmIGFwaS5mcmFtZXMgIT09IEluZmluaXR5KSBhcGkudXBkYXRlKGFwaS5ibGVuZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { DiscardMaterial } from 'angular-three-soba/shaders';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
function isLight(object) {
|
|
4
|
+
return object.isLight;
|
|
5
|
+
}
|
|
6
|
+
function isGeometry(object) {
|
|
7
|
+
return !!object.geometry;
|
|
8
|
+
}
|
|
9
|
+
// Based on "Progressive Light Map Accumulator", by [zalo](https://github.com/zalo/)
|
|
10
|
+
export class ProgressiveLightMap {
|
|
11
|
+
constructor(renderer, scene, res = 1024) {
|
|
12
|
+
this.renderer = renderer;
|
|
13
|
+
this.res = res;
|
|
14
|
+
this.scene = scene;
|
|
15
|
+
this.buffer1Active = false;
|
|
16
|
+
this.lights = [];
|
|
17
|
+
this.meshes = [];
|
|
18
|
+
this.object = null;
|
|
19
|
+
this.clearColor = new THREE.Color();
|
|
20
|
+
this.clearAlpha = 0;
|
|
21
|
+
// Create the Progressive LightMap Texture
|
|
22
|
+
const format = /(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent) ? THREE.HalfFloatType : THREE.FloatType;
|
|
23
|
+
this.progressiveLightMap1 = new THREE.WebGLRenderTarget(this.res, this.res, {
|
|
24
|
+
type: format,
|
|
25
|
+
});
|
|
26
|
+
this.progressiveLightMap2 = new THREE.WebGLRenderTarget(this.res, this.res, {
|
|
27
|
+
type: format,
|
|
28
|
+
});
|
|
29
|
+
// Inject some spicy new logic into a standard phong material
|
|
30
|
+
this.discardMat = new DiscardMaterial();
|
|
31
|
+
this.targetMat = new THREE.MeshLambertMaterial({ fog: false });
|
|
32
|
+
this.previousShadowMap = { value: this.progressiveLightMap1.texture };
|
|
33
|
+
this.averagingWindow = { value: 100 };
|
|
34
|
+
this.targetMat.onBeforeCompile = (shader) => {
|
|
35
|
+
// Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions
|
|
36
|
+
shader.vertexShader =
|
|
37
|
+
'varying vec2 vUv;\n' +
|
|
38
|
+
shader.vertexShader.slice(0, -1) +
|
|
39
|
+
'vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';
|
|
40
|
+
// Fragment Shader: Set Pixels to average in the Previous frame's Shadows
|
|
41
|
+
const bodyStart = shader.fragmentShader.indexOf('void main() {');
|
|
42
|
+
shader.fragmentShader =
|
|
43
|
+
'varying vec2 vUv;\n' +
|
|
44
|
+
shader.fragmentShader.slice(0, bodyStart) +
|
|
45
|
+
'uniform sampler2D previousShadowMap;\n uniform float averagingWindow;\n' +
|
|
46
|
+
shader.fragmentShader.slice(bodyStart - 1, -1) +
|
|
47
|
+
`\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
|
|
48
|
+
gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/ averagingWindow);
|
|
49
|
+
}`;
|
|
50
|
+
// Set the Previous Frame's Texture Buffer and Averaging Window
|
|
51
|
+
// Set the Previous Frame's Texture Buffer and Averaging Window
|
|
52
|
+
shader.uniforms['previousShadowMap'] = this.previousShadowMap;
|
|
53
|
+
shader.uniforms['averagingWindow'] = this.averagingWindow;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
clear() {
|
|
57
|
+
this.renderer.getClearColor(this.clearColor);
|
|
58
|
+
this.clearAlpha = this.renderer.getClearAlpha();
|
|
59
|
+
this.renderer.setClearColor('black', 1);
|
|
60
|
+
this.renderer.setRenderTarget(this.progressiveLightMap1);
|
|
61
|
+
this.renderer.clear();
|
|
62
|
+
this.renderer.setRenderTarget(this.progressiveLightMap2);
|
|
63
|
+
this.renderer.clear();
|
|
64
|
+
this.renderer.setRenderTarget(null);
|
|
65
|
+
this.renderer.setClearColor(this.clearColor, this.clearAlpha);
|
|
66
|
+
this.lights = [];
|
|
67
|
+
this.meshes = [];
|
|
68
|
+
this.scene.traverse((object) => {
|
|
69
|
+
if (isGeometry(object)) {
|
|
70
|
+
this.meshes.push({ object, material: object.material });
|
|
71
|
+
}
|
|
72
|
+
else if (isLight(object)) {
|
|
73
|
+
this.lights.push({ object, intensity: object.intensity });
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
prepare() {
|
|
78
|
+
this.lights.forEach((light) => (light.object.intensity = 0));
|
|
79
|
+
this.meshes.forEach((mesh) => (mesh.object.material = this.discardMat));
|
|
80
|
+
}
|
|
81
|
+
finish() {
|
|
82
|
+
this.lights.forEach((light) => (light.object.intensity = light.intensity));
|
|
83
|
+
this.meshes.forEach((mesh) => (mesh.object.material = mesh.material));
|
|
84
|
+
}
|
|
85
|
+
configure(object) {
|
|
86
|
+
this.object = object;
|
|
87
|
+
}
|
|
88
|
+
update(camera, blendWindow = 100) {
|
|
89
|
+
if (!this.object)
|
|
90
|
+
return;
|
|
91
|
+
// Set each object's material to the UV Unwrapped Surface Mapping Version
|
|
92
|
+
this.averagingWindow.value = blendWindow;
|
|
93
|
+
this.object.material = this.targetMat;
|
|
94
|
+
// Ping-pong two surface buffers for reading/writing
|
|
95
|
+
const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
|
|
96
|
+
const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;
|
|
97
|
+
// Render the object's surface maps
|
|
98
|
+
const oldBg = this.scene.background;
|
|
99
|
+
this.scene.background = null;
|
|
100
|
+
this.renderer.setRenderTarget(activeMap);
|
|
101
|
+
this.previousShadowMap.value = inactiveMap.texture;
|
|
102
|
+
this.buffer1Active = !this.buffer1Active;
|
|
103
|
+
this.renderer.render(this.scene, camera);
|
|
104
|
+
this.renderer.setRenderTarget(null);
|
|
105
|
+
this.scene.background = oldBg;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NpdmUtbGlnaHQtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsU0FBUyxPQUFPLENBQUMsTUFBVztJQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQVc7SUFDM0IsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUM3QixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLFlBQVksUUFBNkIsRUFBRSxLQUFrQixFQUFFLE1BQWMsSUFBSTtRQUM3RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FB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ZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNjYXJkTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmZ1bmN0aW9uIGlzTGlnaHQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgVEhSRUUuTGlnaHQge1xuICAgIHJldHVybiBvYmplY3QuaXNMaWdodDtcbn1cblxuZnVuY3Rpb24gaXNHZW9tZXRyeShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBUSFJFRS5NZXNoIHtcbiAgICByZXR1cm4gISFvYmplY3QuZ2VvbWV0cnk7XG59XG5cbi8vIEJhc2VkIG9uIFwiUHJvZ3Jlc3NpdmUgTGlnaHQgTWFwIEFjY3VtdWxhdG9yXCIsIGJ5IFt6YWxvXShodHRwczovL2dpdGh1Yi5jb20vemFsby8pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NpdmVMaWdodE1hcCB7XG4gICAgcmVuZGVyZXI6IFRIUkVFLldlYkdMUmVuZGVyZXI7XG4gICAgcmVzOiBudW1iZXI7XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIG9iamVjdDogVEhSRUUuTWVzaCB8IG51bGw7XG4gICAgYnVmZmVyMUFjdGl2ZTogYm9vbGVhbjtcbiAgICBwcm9ncmVzc2l2ZUxpZ2h0TWFwMTogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ7XG4gICAgcHJvZ3Jlc3NpdmVMaWdodE1hcDI6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0O1xuICAgIGRpc2NhcmRNYXQ6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuICAgIHRhcmdldE1hdDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcbiAgICBwcmV2aW91c1NoYWRvd01hcDogeyB2YWx1ZTogVEhSRUUuVGV4dHVyZSB9O1xuICAgIGF2ZXJhZ2luZ1dpbmRvdzogeyB2YWx1ZTogbnVtYmVyIH07XG4gICAgY2xlYXJDb2xvcjogVEhSRUUuQ29sb3I7XG4gICAgY2xlYXJBbHBoYTogbnVtYmVyO1xuICAgIGxpZ2h0czogeyBvYmplY3Q6IFRIUkVFLkxpZ2h0OyBpbnRlbnNpdHk6IG51bWJlciB9W107XG4gICAgbWVzaGVzOiB7IG9iamVjdDogVEhSRUUuTWVzaDsgbWF0ZXJpYWw6IFRIUkVFLk1hdGVyaWFsIHwgVEhSRUUuTWF0ZXJpYWxbXSB9W107XG5cbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlciwgc2NlbmU6IFRIUkVFLlNjZW5lLCByZXM6IG51bWJlciA9IDEwMjQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnJlcyA9IHJlcztcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXNoZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcbiAgICAgICAgdGhpcy5jbGVhckFscGhhID0gMDtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIFByb2dyZXNzaXZlIExpZ2h0TWFwIFRleHR1cmVcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gLyhBbmRyb2lkfGlQYWR8aVBob25lfGlQb2QpL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IFRIUkVFLkhhbGZGbG9hdFR5cGUgOiBUSFJFRS5GbG9hdFR5cGU7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5yZXMsIHRoaXMucmVzLCB7XG4gICAgICAgICAgICB0eXBlOiBmb3JtYXQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHRoaXMucmVzLCB0aGlzLnJlcywge1xuICAgICAgICAgICAgdHlwZTogZm9ybWF0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbmplY3Qgc29tZSBzcGljeSBuZXcgbG9naWMgaW50byBhIHN0YW5kYXJkIHBob25nIG1hdGVyaWFsXG4gICAgICAgIHRoaXMuZGlzY2FyZE1hdCA9IG5ldyBEaXNjYXJkTWF0ZXJpYWwoKTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7IGZvZzogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAgPSB7IHZhbHVlOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxLnRleHR1cmUgfTtcbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cgPSB7IHZhbHVlOiAxMDAgfTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQub25CZWZvcmVDb21waWxlID0gKHNoYWRlcikgPT4ge1xuICAgICAgICAgICAgLy8gVmVydGV4IFNoYWRlcjogU2V0IFZlcnRleCBQb3NpdGlvbnMgdG8gdGhlIFVud3JhcHBlZCBVViBQb3NpdGlvbnNcbiAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPVxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlV2O1xcbicgK1xuICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIuc2xpY2UoMCwgLTEpICtcbiAgICAgICAgICAgICAgICAndlV2ID0gdXY7IGdsX1Bvc2l0aW9uID0gdmVjNCgodXYgLSAwLjUpICogMi4wLCAxLjAsIDEuMCk7IH0nO1xuXG4gICAgICAgICAgICAvLyBGcmFnbWVudCBTaGFkZXI6IFNldCBQaXhlbHMgdG8gYXZlcmFnZSBpbiB0aGUgUHJldmlvdXMgZnJhbWUncyBTaGFkb3dzXG4gICAgICAgICAgICBjb25zdCBib2R5U3RhcnQgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuaW5kZXhPZigndm9pZCBtYWluKCkgeycpO1xuICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID1cbiAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVdjtcXG4nICtcbiAgICAgICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuc2xpY2UoMCwgYm9keVN0YXJ0KSArXG4gICAgICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzU2hhZG93TWFwO1xcblx0dW5pZm9ybSBmbG9hdCBhdmVyYWdpbmdXaW5kb3c7XFxuJyArXG4gICAgICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyLnNsaWNlKGJvZHlTdGFydCAtIDEsIC0xKSArXG4gICAgICAgICAgICAgICAgYFxcbnZlYzMgdGV4ZWxPbGQgPSB0ZXh0dXJlMkQocHJldmlvdXNTaGFkb3dNYXAsIHZVdikucmdiO1xuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KHRleGVsT2xkLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAvIGF2ZXJhZ2luZ1dpbmRvdyk7XG4gICAgICB9YDtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBQcmV2aW91cyBGcmFtZSdzIFRleHR1cmUgQnVmZmVyIGFuZCBBdmVyYWdpbmcgV2luZG93XG4gICAgICAgICAgICAvLyBTZXQgdGhlIFByZXZpb3VzIEZyYW1lJ3MgVGV4dHVyZSBCdWZmZXIgYW5kIEF2ZXJhZ2luZyBXaW5kb3dcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtc1sncHJldmlvdXNTaGFkb3dNYXAnXSA9IHRoaXMucHJldmlvdXNTaGFkb3dNYXA7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2F2ZXJhZ2luZ1dpbmRvdyddID0gdGhpcy5hdmVyYWdpbmdXaW5kb3c7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2V0Q2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3IpO1xuICAgICAgICB0aGlzLmNsZWFyQWxwaGEgPSB0aGlzLnJlbmRlcmVyLmdldENsZWFyQWxwaGEoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKCdibGFjaycsIDEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvciwgdGhpcy5jbGVhckFscGhhKTtcblxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xuICAgICAgICB0aGlzLm1lc2hlcyA9IFtdO1xuICAgICAgICB0aGlzLnNjZW5lLnRyYXZlcnNlKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0dlb21ldHJ5KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc2hlcy5wdXNoKHsgb2JqZWN0LCBtYXRlcmlhbDogb2JqZWN0Lm1hdGVyaWFsIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpZ2h0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5wdXNoKHsgb2JqZWN0LCBpbnRlbnNpdHk6IG9iamVjdC5pbnRlbnNpdHkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiAobGlnaHQub2JqZWN0LmludGVuc2l0eSA9IDApKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gdGhpcy5kaXNjYXJkTWF0KSk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmxpZ2h0cy5mb3JFYWNoKChsaWdodCkgPT4gKGxpZ2h0Lm9iamVjdC5pbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHkpKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbCkpO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyZShvYmplY3Q6IFRIUkVFLk1lc2gpIHtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgfVxuXG4gICAgdXBkYXRlKGNhbWVyYTogVEhSRUUuQ2FtZXJhLCBibGVuZFdpbmRvdyA9IDEwMCkge1xuICAgICAgICBpZiAoIXRoaXMub2JqZWN0KSByZXR1cm47XG4gICAgICAgIC8vIFNldCBlYWNoIG9iamVjdCdzIG1hdGVyaWFsIHRvIHRoZSBVViBVbndyYXBwZWQgU3VyZmFjZSBNYXBwaW5nIFZlcnNpb25cbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cudmFsdWUgPSBibGVuZFdpbmRvdztcbiAgICAgICAgdGhpcy5vYmplY3QubWF0ZXJpYWwgPSB0aGlzLnRhcmdldE1hdDtcbiAgICAgICAgLy8gUGluZy1wb25nIHR3byBzdXJmYWNlIGJ1ZmZlcnMgZm9yIHJlYWRpbmcvd3JpdGluZ1xuICAgICAgICBjb25zdCBhY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMjtcbiAgICAgICAgY29uc3QgaW5hY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMTtcbiAgICAgICAgLy8gUmVuZGVyIHRoZSBvYmplY3QncyBzdXJmYWNlIG1hcHNcbiAgICAgICAgY29uc3Qgb2xkQmcgPSB0aGlzLnNjZW5lLmJhY2tncm91bmQ7XG4gICAgICAgIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGFjdGl2ZU1hcCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAudmFsdWUgPSBpbmFjdGl2ZU1hcC50ZXh0dXJlO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSAhdGhpcy5idWZmZXIxQWN0aXZlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCBjYW1lcmEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gb2xkQmc7XG4gICAgfVxufVxuIl19
|