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
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
export const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
|
|
4
|
-
export function provideNgtsMeshDistortMaterialShader(distortShader) {
|
|
5
|
-
return {
|
|
6
|
-
provide: NGTS_DISTORT_MATERIAL_SHADER,
|
|
7
|
-
useFactory: () => {
|
|
8
|
-
return class extends THREE.MeshPhysicalMaterial {
|
|
9
|
-
constructor(parameters = {}) {
|
|
10
|
-
super(parameters);
|
|
11
|
-
this.setValues(parameters);
|
|
12
|
-
this._time = { value: 0 };
|
|
13
|
-
this._distort = { value: 0.4 };
|
|
14
|
-
this._radius = { value: 1 };
|
|
15
|
-
}
|
|
16
|
-
onBeforeCompile(shader) {
|
|
17
|
-
shader.uniforms['time'] = this._time;
|
|
18
|
-
shader.uniforms['radius'] = this._radius;
|
|
19
|
-
shader.uniforms['distort'] = this._distort;
|
|
20
|
-
shader.vertexShader = `
|
|
21
|
-
uniform float time;
|
|
22
|
-
uniform float radius;
|
|
23
|
-
uniform float distort;
|
|
24
|
-
${distortShader}
|
|
25
|
-
${shader.vertexShader}
|
|
26
|
-
`;
|
|
27
|
-
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
|
|
28
|
-
float updateTime = time / 50.0;
|
|
29
|
-
float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
|
|
30
|
-
vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
|
|
31
|
-
`);
|
|
32
|
-
}
|
|
33
|
-
get time() {
|
|
34
|
-
return this._time.value;
|
|
35
|
-
}
|
|
36
|
-
set time(v) {
|
|
37
|
-
this._time.value = v;
|
|
38
|
-
}
|
|
39
|
-
get distort() {
|
|
40
|
-
return this._distort.value;
|
|
41
|
-
}
|
|
42
|
-
set distort(v) {
|
|
43
|
-
this._distort.value = v;
|
|
44
|
-
}
|
|
45
|
-
get radius() {
|
|
46
|
-
return this._radius.value;
|
|
47
|
-
}
|
|
48
|
-
set radius(v) {
|
|
49
|
-
this._radius.value = v;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWUvQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztBQUU3RyxNQUFNLFVBQVUsb0NBQW9DLENBQUMsYUFBcUI7SUFDdEUsT0FBTztRQUNILE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sS0FBTSxTQUFRLEtBQUssQ0FBQyxvQkFBb0I7Z0JBSzNDLFlBQVksYUFBbUQsRUFBRTtvQkFDN0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUVRLGVBQWUsQ0FBQyxNQUFvQjtvQkFDekMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFFM0MsTUFBTSxDQUFDLFlBQVksR0FBRzs7OztlQUkzQixhQUFhO2VBQ2IsTUFBTSxDQUFDLFlBQVk7WUFDdEIsQ0FBQztvQkFDTyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3Qyx5QkFBeUIsRUFDekI7Ozs7Z0JBSVIsQ0FDSyxDQUFDO2dCQUNOLENBQUM7Z0JBRUQsSUFBSSxJQUFJO29CQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7Z0JBRUQsSUFBSSxPQUFPO29CQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQztvQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSSxNQUFNO29CQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsQ0FBQztvQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7YUFDSixDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuaW50ZXJmYWNlIFVuaWZvcm08VD4ge1xuICAgIHZhbHVlOiBUO1xufVxuXG4vKipcbiAqIG5wbSBpIC1EIHJhdy1sb2FkZXIgZ2xzbGlmeS1sb2FkZXJcbiAqIFVzYWdlOiBpbXBvcnQgZGlzdG9ydCBmcm9tICdyYXctbG9hZGVyIWdsc2xpZnktbG9hZGVyIWFuZ3VsYXItdGhyZWUtc29iYS9hc3NldHMvZGlzdG9ydC52ZXJ0Lmdsc2wnXG4gKlxuICogcHJvdmlkZU5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU2hhZGVyKGRpc3RvcnQpXG4gKi9cblxuZXhwb3J0IHR5cGUgTWVzaERpc3RvcnRNYXRlcmlhbCA9IFR5cGU8eyB0aW1lOiBudW1iZXI7IGRpc3RvcnQ6IG51bWJlcjsgcmFkaXVzOiBudW1iZXIgfSAmIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsPjtcblxuZXhwb3J0IGNvbnN0IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVzaERpc3RvcnRNYXRlcmlhbD4oJ0Rpc3RvcnRNYXRlcmlhbFNoYWRlcicpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU2hhZGVyKGRpc3RvcnRTaGFkZXI6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb3ZpZGU6IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIsXG4gICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzcyBleHRlbmRzIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIHtcbiAgICAgICAgICAgICAgICBfdGltZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICAgICAgICAgIF9kaXN0b3J0OiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgICAgICAgICAgX3JhZGl1czogVW5pZm9ybTxudW1iZXI+O1xuXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lID0geyB2YWx1ZTogMCB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0ID0geyB2YWx1ZTogMC40IH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhZGl1cyA9IHsgdmFsdWU6IDEgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ3JhZGl1cyddID0gdGhpcy5fcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2Rpc3RvcnQnXSA9IHRoaXMuX2Rpc3RvcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLnZlcnRleFNoYWRlciA9IGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7ZGlzdG9ydFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHQgIGA7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgdXBkYXRlVGltZSA9IHRpbWUgLyA1MC4wO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgZmxvYXQgbm9pc2UgPSBzbm9pc2UodmVjMyhwb3NpdGlvbiAvIDIuMCArIHVwZGF0ZVRpbWUgKiA1LjApKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIHZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKHBvc2l0aW9uICogKG5vaXNlICogcG93KGRpc3RvcnQsIDIuMCkgKyByYWRpdXMpKTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgdGltZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IHRpbWUodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lLnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgZGlzdG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0IGRpc3RvcnQodikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0b3J0LnZhbHVlID0gdjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgcmFkaXVzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmFkaXVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNldCByYWRpdXModikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYWRpdXMudmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import { MeshStandardMaterial } from 'three';
|
|
2
|
-
export class MeshReflectorMaterial extends MeshStandardMaterial {
|
|
3
|
-
constructor(parameters = {}) {
|
|
4
|
-
super(parameters);
|
|
5
|
-
this._tDepth = { value: null };
|
|
6
|
-
this._distortionMap = { value: null };
|
|
7
|
-
this._tDiffuse = { value: null };
|
|
8
|
-
this._tDiffuseBlur = { value: null };
|
|
9
|
-
this._textureMatrix = { value: null };
|
|
10
|
-
this._hasBlur = { value: false };
|
|
11
|
-
this._mirror = { value: 0.0 };
|
|
12
|
-
this._mixBlur = { value: 0.0 };
|
|
13
|
-
this._blurStrength = { value: 0.5 };
|
|
14
|
-
this._minDepthThreshold = { value: 0.9 };
|
|
15
|
-
this._maxDepthThreshold = { value: 1 };
|
|
16
|
-
this._depthScale = { value: 0 };
|
|
17
|
-
this._depthToBlurRatioBias = { value: 0.25 };
|
|
18
|
-
this._distortion = { value: 1 };
|
|
19
|
-
this._mixContrast = { value: 1.0 };
|
|
20
|
-
this.setValues(parameters);
|
|
21
|
-
}
|
|
22
|
-
onBeforeCompile(shader) {
|
|
23
|
-
if (!shader.defines?.USE_UV) {
|
|
24
|
-
shader.defines.USE_UV = '';
|
|
25
|
-
}
|
|
26
|
-
shader.uniforms.hasBlur = this._hasBlur;
|
|
27
|
-
shader.uniforms.tDiffuse = this._tDiffuse;
|
|
28
|
-
shader.uniforms.tDepth = this._tDepth;
|
|
29
|
-
shader.uniforms.distortionMap = this._distortionMap;
|
|
30
|
-
shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
|
|
31
|
-
shader.uniforms.textureMatrix = this._textureMatrix;
|
|
32
|
-
shader.uniforms.mirror = this._mirror;
|
|
33
|
-
shader.uniforms.mixBlur = this._mixBlur;
|
|
34
|
-
shader.uniforms.mixStrength = this._blurStrength;
|
|
35
|
-
shader.uniforms.minDepthThreshold = this._minDepthThreshold;
|
|
36
|
-
shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
|
|
37
|
-
shader.uniforms.depthScale = this._depthScale;
|
|
38
|
-
shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
|
|
39
|
-
shader.uniforms.distortion = this._distortion;
|
|
40
|
-
shader.uniforms.mixContrast = this._mixContrast;
|
|
41
|
-
shader.vertexShader = `
|
|
42
|
-
uniform mat4 textureMatrix;
|
|
43
|
-
varying vec4 my_vUv;
|
|
44
|
-
${shader.vertexShader}`;
|
|
45
|
-
shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
|
|
46
|
-
my_vUv = textureMatrix * vec4( position, 1.0 );
|
|
47
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
|
|
48
|
-
shader.fragmentShader = `
|
|
49
|
-
uniform sampler2D tDiffuse;
|
|
50
|
-
uniform sampler2D tDiffuseBlur;
|
|
51
|
-
uniform sampler2D tDepth;
|
|
52
|
-
uniform sampler2D distortionMap;
|
|
53
|
-
uniform float distortion;
|
|
54
|
-
uniform float cameraNear;
|
|
55
|
-
uniform float cameraFar;
|
|
56
|
-
uniform bool hasBlur;
|
|
57
|
-
uniform float mixBlur;
|
|
58
|
-
uniform float mirror;
|
|
59
|
-
uniform float mixStrength;
|
|
60
|
-
uniform float minDepthThreshold;
|
|
61
|
-
uniform float maxDepthThreshold;
|
|
62
|
-
uniform float mixContrast;
|
|
63
|
-
uniform float depthScale;
|
|
64
|
-
uniform float depthToBlurRatioBias;
|
|
65
|
-
varying vec4 my_vUv;
|
|
66
|
-
${shader.fragmentShader}`;
|
|
67
|
-
shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
|
|
68
|
-
|
|
69
|
-
float distortionFactor = 0.0;
|
|
70
|
-
#ifdef USE_DISTORTION
|
|
71
|
-
distortionFactor = texture2D(distortionMap, vUv).r * distortion;
|
|
72
|
-
#endif
|
|
73
|
-
|
|
74
|
-
vec4 new_vUv = my_vUv;
|
|
75
|
-
new_vUv.x += distortionFactor;
|
|
76
|
-
new_vUv.y += distortionFactor;
|
|
77
|
-
|
|
78
|
-
vec4 base = texture2DProj(tDiffuse, new_vUv);
|
|
79
|
-
vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
|
|
80
|
-
|
|
81
|
-
vec4 merge = base;
|
|
82
|
-
|
|
83
|
-
#ifdef USE_NORMALMAP
|
|
84
|
-
vec2 normal_uv = vec2(0.0);
|
|
85
|
-
vec4 normalColor = texture2D(normalMap, vUv * normalScale);
|
|
86
|
-
vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );
|
|
87
|
-
vec3 coord = new_vUv.xyz / new_vUv.w;
|
|
88
|
-
normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
|
|
89
|
-
vec4 base_normal = texture2D(tDiffuse, normal_uv);
|
|
90
|
-
vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
|
|
91
|
-
merge = base_normal;
|
|
92
|
-
blur = blur_normal;
|
|
93
|
-
#endif
|
|
94
|
-
|
|
95
|
-
float depthFactor = 0.0001;
|
|
96
|
-
float blurFactor = 0.0;
|
|
97
|
-
|
|
98
|
-
#ifdef USE_DEPTH
|
|
99
|
-
vec4 depth = texture2DProj(tDepth, new_vUv);
|
|
100
|
-
depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
|
|
101
|
-
depthFactor *= depthScale;
|
|
102
|
-
depthFactor = max(0.0001, min(1.0, depthFactor));
|
|
103
|
-
|
|
104
|
-
#ifdef USE_BLUR
|
|
105
|
-
blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
|
|
106
|
-
merge = merge * min(1.0, depthFactor + 0.5);
|
|
107
|
-
#else
|
|
108
|
-
merge = merge * depthFactor;
|
|
109
|
-
#endif
|
|
110
|
-
|
|
111
|
-
#endif
|
|
112
|
-
|
|
113
|
-
float reflectorRoughnessFactor = roughness;
|
|
114
|
-
#ifdef USE_ROUGHNESSMAP
|
|
115
|
-
vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
|
|
116
|
-
reflectorRoughnessFactor *= reflectorTexelRoughness.g;
|
|
117
|
-
#endif
|
|
118
|
-
|
|
119
|
-
#ifdef USE_BLUR
|
|
120
|
-
blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
|
|
121
|
-
merge = mix(merge, blur, blurFactor);
|
|
122
|
-
#endif
|
|
123
|
-
|
|
124
|
-
vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
|
|
125
|
-
newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
|
|
126
|
-
newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
|
|
127
|
-
newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
|
|
128
|
-
|
|
129
|
-
diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
|
|
130
|
-
`);
|
|
131
|
-
}
|
|
132
|
-
get tDiffuse() {
|
|
133
|
-
return this._tDiffuse.value;
|
|
134
|
-
}
|
|
135
|
-
set tDiffuse(v) {
|
|
136
|
-
this._tDiffuse.value = v;
|
|
137
|
-
}
|
|
138
|
-
get tDepth() {
|
|
139
|
-
return this._tDepth.value;
|
|
140
|
-
}
|
|
141
|
-
set tDepth(v) {
|
|
142
|
-
this._tDepth.value = v;
|
|
143
|
-
}
|
|
144
|
-
get distortionMap() {
|
|
145
|
-
return this._distortionMap.value;
|
|
146
|
-
}
|
|
147
|
-
set distortionMap(v) {
|
|
148
|
-
this._distortionMap.value = v;
|
|
149
|
-
}
|
|
150
|
-
get tDiffuseBlur() {
|
|
151
|
-
return this._tDiffuseBlur.value;
|
|
152
|
-
}
|
|
153
|
-
set tDiffuseBlur(v) {
|
|
154
|
-
this._tDiffuseBlur.value = v;
|
|
155
|
-
}
|
|
156
|
-
get textureMatrix() {
|
|
157
|
-
return this._textureMatrix.value;
|
|
158
|
-
}
|
|
159
|
-
set textureMatrix(v) {
|
|
160
|
-
this._textureMatrix.value = v;
|
|
161
|
-
}
|
|
162
|
-
get hasBlur() {
|
|
163
|
-
return this._hasBlur.value;
|
|
164
|
-
}
|
|
165
|
-
set hasBlur(v) {
|
|
166
|
-
this._hasBlur.value = v;
|
|
167
|
-
}
|
|
168
|
-
get mirror() {
|
|
169
|
-
return this._mirror.value;
|
|
170
|
-
}
|
|
171
|
-
set mirror(v) {
|
|
172
|
-
this._mirror.value = v;
|
|
173
|
-
}
|
|
174
|
-
get mixBlur() {
|
|
175
|
-
return this._mixBlur.value;
|
|
176
|
-
}
|
|
177
|
-
set mixBlur(v) {
|
|
178
|
-
this._mixBlur.value = v;
|
|
179
|
-
}
|
|
180
|
-
get mixStrength() {
|
|
181
|
-
return this._blurStrength.value;
|
|
182
|
-
}
|
|
183
|
-
set mixStrength(v) {
|
|
184
|
-
this._blurStrength.value = v;
|
|
185
|
-
}
|
|
186
|
-
get minDepthThreshold() {
|
|
187
|
-
return this._minDepthThreshold.value;
|
|
188
|
-
}
|
|
189
|
-
set minDepthThreshold(v) {
|
|
190
|
-
this._minDepthThreshold.value = v;
|
|
191
|
-
}
|
|
192
|
-
get maxDepthThreshold() {
|
|
193
|
-
return this._maxDepthThreshold.value;
|
|
194
|
-
}
|
|
195
|
-
set maxDepthThreshold(v) {
|
|
196
|
-
this._maxDepthThreshold.value = v;
|
|
197
|
-
}
|
|
198
|
-
get depthScale() {
|
|
199
|
-
return this._depthScale.value;
|
|
200
|
-
}
|
|
201
|
-
set depthScale(v) {
|
|
202
|
-
this._depthScale.value = v;
|
|
203
|
-
}
|
|
204
|
-
get depthToBlurRatioBias() {
|
|
205
|
-
return this._depthToBlurRatioBias.value;
|
|
206
|
-
}
|
|
207
|
-
set depthToBlurRatioBias(v) {
|
|
208
|
-
this._depthToBlurRatioBias.value = v;
|
|
209
|
-
}
|
|
210
|
-
get distortion() {
|
|
211
|
-
return this._distortion.value;
|
|
212
|
-
}
|
|
213
|
-
set distortion(v) {
|
|
214
|
-
this._distortion.value = v;
|
|
215
|
-
}
|
|
216
|
-
get mixContrast() {
|
|
217
|
-
return this._mixContrast.value;
|
|
218
|
-
}
|
|
219
|
-
set mixContrast(v) {
|
|
220
|
-
this._mixContrast.value = v;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLG9CQUFvQixFQUFXLE1BQU0sT0FBTyxDQUFDO0FBSS9ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFpQjNELFlBQVksVUFBVSxHQUFHLEVBQUU7UUFDdkIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBakJkLFlBQU8sR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQsbUJBQWMsR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEUsY0FBUyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxrQkFBYSxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRCxtQkFBYyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoRSxhQUFRLEdBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2hELFlBQU8sR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxrQkFBYSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsRCx1QkFBa0IsR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdkQsdUJBQWtCLEdBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JELGdCQUFXLEdBQXNCLEVBQUUsS0FB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VUFBVSxDQUFDLENBQVM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxDQUFTO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXRyaXg0LCBNZXNoU3RhbmRhcmRNYXRlcmlhbCwgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxudHlwZSBVbmluaXRpYWxpemVkVW5pZm9ybTxWYWx1ZT4gPSB7IHZhbHVlOiBWYWx1ZSB8IG51bGwgfTtcblxuZXhwb3J0IGNsYXNzIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCBleHRlbmRzIE1lc2hTdGFuZGFyZE1hdGVyaWFsIHtcbiAgICBwcml2YXRlIF90RGVwdGg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX2Rpc3RvcnRpb25NYXA6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX3REaWZmdXNlOiBVbmluaXRpYWxpemVkVW5pZm9ybTxUZXh0dXJlPiA9IHsgdmFsdWU6IG51bGwgfTtcbiAgICBwcml2YXRlIF90RGlmZnVzZUJsdXI6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX3RleHR1cmVNYXRyaXg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPE1hdHJpeDQ+ID0geyB2YWx1ZTogbnVsbCB9O1xuICAgIHByaXZhdGUgX2hhc0JsdXI6IHsgdmFsdWU6IGJvb2xlYW4gfSA9IHsgdmFsdWU6IGZhbHNlIH07XG4gICAgcHJpdmF0ZSBfbWlycm9yOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuMCB9O1xuICAgIHByaXZhdGUgX21peEJsdXI6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC4wIH07XG4gICAgcHJpdmF0ZSBfYmx1clN0cmVuZ3RoOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuNSB9O1xuICAgIHByaXZhdGUgX21pbkRlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuOSB9O1xuICAgIHByaXZhdGUgX21heERlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDEgfTtcbiAgICBwcml2YXRlIF9kZXB0aFNjYWxlOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAgfTtcbiAgICBwcml2YXRlIF9kZXB0aFRvQmx1clJhdGlvQmlhczogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAwLjI1IH07XG4gICAgcHJpdmF0ZSBfZGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAxIH07XG4gICAgcHJpdmF0ZSBfbWl4Q29udHJhc3Q6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMS4wIH07XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG9uQmVmb3JlQ29tcGlsZShzaGFkZXI6IGFueSkge1xuICAgICAgICBpZiAoIXNoYWRlci5kZWZpbmVzPy5VU0VfVVYpIHtcbiAgICAgICAgICAgIHNoYWRlci5kZWZpbmVzLlVTRV9VViA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5oYXNCbHVyID0gdGhpcy5faGFzQmx1cjtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlID0gdGhpcy5fdERpZmZ1c2U7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy50RGVwdGggPSB0aGlzLl90RGVwdGg7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5kaXN0b3J0aW9uTWFwID0gdGhpcy5fZGlzdG9ydGlvbk1hcDtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlQmx1ciA9IHRoaXMuX3REaWZmdXNlQmx1cjtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLnRleHR1cmVNYXRyaXggPSB0aGlzLl90ZXh0dXJlTWF0cml4O1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMubWlycm9yID0gdGhpcy5fbWlycm9yO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMubWl4Qmx1ciA9IHRoaXMuX21peEJsdXI7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5taXhTdHJlbmd0aCA9IHRoaXMuX2JsdXJTdHJlbmd0aDtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zLm1pbkRlcHRoVGhyZXNob2xkID0gdGhpcy5fbWluRGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5tYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuX21heERlcHRoVGhyZXNob2xkO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuZGVwdGhTY2FsZSA9IHRoaXMuX2RlcHRoU2NhbGU7XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5kZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuX2RlcHRoVG9CbHVyUmF0aW9CaWFzO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXMuZGlzdG9ydGlvbiA9IHRoaXMuX2Rpc3RvcnRpb247XG4gICAgICAgIHNoYWRlci51bmlmb3Jtcy5taXhDb250cmFzdCA9IHRoaXMuX21peENvbnRyYXN0O1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gYFxuICAgICAgICB1bmlmb3JtIG1hdDQgdGV4dHVyZU1hdHJpeDtcbiAgICAgICAgdmFyeWluZyB2ZWM0IG15X3ZVdjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1gO1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgJyNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4nLFxuICAgICAgICAgICAgYCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbiAgICAgICAgbXlfdlV2ID0gdGV4dHVyZU1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO2BcbiAgICAgICAgKTtcbiAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gYFxuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGlmZnVzZTtcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdERpZmZ1c2VCbHVyO1xuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGVwdGg7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGRpc3RvcnRpb25NYXA7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuXHRcdFx0ICB1bmlmb3JtIGZsb2F0IGNhbWVyYUZhcjtcbiAgICAgICAgdW5pZm9ybSBib29sIGhhc0JsdXI7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4Qmx1cjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaXJyb3I7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4U3RyZW5ndGg7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWluRGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWF4RGVwdGhUaHJlc2hvbGQ7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWl4Q29udHJhc3Q7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGVwdGhTY2FsZTtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBkZXB0aFRvQmx1clJhdGlvQmlhcztcbiAgICAgICAgdmFyeWluZyB2ZWM0IG15X3ZVdjtcbiAgICAgICAgJHtzaGFkZXIuZnJhZ21lbnRTaGFkZXJ9YDtcbiAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAnI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PicsXG4gICAgICAgICAgICBgI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXG4gICAgICBmbG9hdCBkaXN0b3J0aW9uRmFjdG9yID0gMC4wO1xuICAgICAgI2lmZGVmIFVTRV9ESVNUT1JUSU9OXG4gICAgICAgIGRpc3RvcnRpb25GYWN0b3IgPSB0ZXh0dXJlMkQoZGlzdG9ydGlvbk1hcCwgdlV2KS5yICogZGlzdG9ydGlvbjtcbiAgICAgICNlbmRpZlxuXG4gICAgICB2ZWM0IG5ld192VXYgPSBteV92VXY7XG4gICAgICBuZXdfdlV2LnggKz0gZGlzdG9ydGlvbkZhY3RvcjtcbiAgICAgIG5ld192VXYueSArPSBkaXN0b3J0aW9uRmFjdG9yO1xuXG4gICAgICB2ZWM0IGJhc2UgPSB0ZXh0dXJlMkRQcm9qKHREaWZmdXNlLCBuZXdfdlV2KTtcbiAgICAgIHZlYzQgYmx1ciA9IHRleHR1cmUyRFByb2oodERpZmZ1c2VCbHVyLCBuZXdfdlV2KTtcblxuICAgICAgdmVjNCBtZXJnZSA9IGJhc2U7XG5cbiAgICAgICNpZmRlZiBVU0VfTk9STUFMTUFQXG4gICAgICAgIHZlYzIgbm9ybWFsX3V2ID0gdmVjMigwLjApO1xuICAgICAgICB2ZWM0IG5vcm1hbENvbG9yID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdlV2ICogbm9ybWFsU2NhbGUpO1xuICAgICAgICB2ZWMzIG15X25vcm1hbCA9IG5vcm1hbGl6ZSggdmVjMyggbm9ybWFsQ29sb3IuciAqIDIuMCAtIDEuMCwgbm9ybWFsQ29sb3IuYiwgIG5vcm1hbENvbG9yLmcgKiAyLjAgLSAxLjAgKSApO1xuICAgICAgICB2ZWMzIGNvb3JkID0gbmV3X3ZVdi54eXogLyBuZXdfdlV2Lnc7XG4gICAgICAgIG5vcm1hbF91diA9IGNvb3JkLnh5ICsgY29vcmQueiAqIG15X25vcm1hbC54eiAqIDAuMDU7XG4gICAgICAgIHZlYzQgYmFzZV9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2UsIG5vcm1hbF91dik7XG4gICAgICAgIHZlYzQgYmx1cl9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2VCbHVyLCBub3JtYWxfdXYpO1xuICAgICAgICBtZXJnZSA9IGJhc2Vfbm9ybWFsO1xuICAgICAgICBibHVyID0gYmx1cl9ub3JtYWw7XG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgZGVwdGhGYWN0b3IgPSAwLjAwMDE7XG4gICAgICBmbG9hdCBibHVyRmFjdG9yID0gMC4wO1xuXG4gICAgICAjaWZkZWYgVVNFX0RFUFRIXG4gICAgICAgIHZlYzQgZGVwdGggPSB0ZXh0dXJlMkRQcm9qKHREZXB0aCwgbmV3X3ZVdik7XG4gICAgICAgIGRlcHRoRmFjdG9yID0gc21vb3Roc3RlcChtaW5EZXB0aFRocmVzaG9sZCwgbWF4RGVwdGhUaHJlc2hvbGQsIDEuMC0oZGVwdGguciAqIGRlcHRoLmEpKTtcbiAgICAgICAgZGVwdGhGYWN0b3IgKj0gZGVwdGhTY2FsZTtcbiAgICAgICAgZGVwdGhGYWN0b3IgPSBtYXgoMC4wMDAxLCBtaW4oMS4wLCBkZXB0aEZhY3RvcikpO1xuXG4gICAgICAgICNpZmRlZiBVU0VfQkxVUlxuICAgICAgICAgIGJsdXIgPSBibHVyICogbWluKDEuMCwgZGVwdGhGYWN0b3IgKyBkZXB0aFRvQmx1clJhdGlvQmlhcyk7XG4gICAgICAgICAgbWVyZ2UgPSBtZXJnZSAqIG1pbigxLjAsIGRlcHRoRmFjdG9yICsgMC41KTtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICBtZXJnZSA9IG1lcmdlICogZGVwdGhGYWN0b3I7XG4gICAgICAgICNlbmRpZlxuXG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuICAgICAgI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcbiAgICAgICAgdmVjNCByZWZsZWN0b3JUZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcbiAgICAgICAgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yICo9IHJlZmxlY3RvclRleGVsUm91Z2huZXNzLmc7XG4gICAgICAjZW5kaWZcblxuICAgICAgI2lmZGVmIFVTRV9CTFVSXG4gICAgICAgIGJsdXJGYWN0b3IgPSBtaW4oMS4wLCBtaXhCbHVyICogcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yKTtcbiAgICAgICAgbWVyZ2UgPSBtaXgobWVyZ2UsIGJsdXIsIGJsdXJGYWN0b3IpO1xuICAgICAgI2VuZGlmXG5cbiAgICAgIHZlYzQgbmV3TWVyZ2UgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgICBuZXdNZXJnZS5yID0gKG1lcmdlLnIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5nID0gKG1lcmdlLmcgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5iID0gKG1lcmdlLmIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG5cbiAgICAgIGRpZmZ1c2VDb2xvci5yZ2IgPSBkaWZmdXNlQ29sb3IucmdiICogKCgxLjAgLSBtaW4oMS4wLCBtaXJyb3IpKSArIG5ld01lcmdlLnJnYiAqIG1peFN0cmVuZ3RoKTtcbiAgICAgIGBcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZ2V0IHREaWZmdXNlKCk6IFRleHR1cmUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3REaWZmdXNlLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgdERpZmZ1c2UodjogVGV4dHVyZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdERpZmZ1c2UudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgdERlcHRoKCk6IFRleHR1cmUgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3REZXB0aC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IHREZXB0aCh2OiBUZXh0dXJlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl90RGVwdGgudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgZGlzdG9ydGlvbk1hcCgpOiBUZXh0dXJlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGlzdG9ydGlvbk1hcCh2OiBUZXh0dXJlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IHREaWZmdXNlQmx1cigpOiBUZXh0dXJlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90RGlmZnVzZUJsdXIudmFsdWU7XG4gICAgfVxuICAgIHNldCB0RGlmZnVzZUJsdXIodjogVGV4dHVyZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdERpZmZ1c2VCbHVyLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IHRleHR1cmVNYXRyaXgoKTogTWF0cml4NCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZU1hdHJpeC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IHRleHR1cmVNYXRyaXgodjogTWF0cml4NCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZU1hdHJpeC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBoYXNCbHVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQmx1ci52YWx1ZTtcbiAgICB9XG4gICAgc2V0IGhhc0JsdXIodjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCbHVyLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IG1pcnJvcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWlycm9yLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWlycm9yKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taXJyb3IudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4Qmx1cigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWl4Qmx1ci52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1peEJsdXIodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21peEJsdXIudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4U3RyZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJTdHJlbmd0aC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1peFN0cmVuZ3RoKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9ibHVyU3RyZW5ndGgudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWluRGVwdGhUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRlcHRoVGhyZXNob2xkLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWluRGVwdGhUaHJlc2hvbGQodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbkRlcHRoVGhyZXNob2xkLnZhbHVlID0gdjtcbiAgICB9XG4gICAgZ2V0IG1heERlcHRoVGhyZXNob2xkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEZXB0aFRocmVzaG9sZC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IG1heERlcHRoVGhyZXNob2xkKHY6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9tYXhEZXB0aFRocmVzaG9sZC52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBkZXB0aFNjYWxlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXB0aFNjYWxlLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGVwdGhTY2FsZSh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZGVwdGhTY2FsZS52YWx1ZSA9IHY7XG4gICAgfVxuICAgIGdldCBkZXB0aFRvQmx1clJhdGlvQmlhcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGhUb0JsdXJSYXRpb0JpYXMudmFsdWU7XG4gICAgfVxuICAgIHNldCBkZXB0aFRvQmx1clJhdGlvQmlhcyh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZGVwdGhUb0JsdXJSYXRpb0JpYXMudmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgZGlzdG9ydGlvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbi52YWx1ZTtcbiAgICB9XG4gICAgc2V0IGRpc3RvcnRpb24odjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2Rpc3RvcnRpb24udmFsdWUgPSB2O1xuICAgIH1cbiAgICBnZXQgbWl4Q29udHJhc3QoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21peENvbnRyYXN0LnZhbHVlO1xuICAgIH1cbiAgICBzZXQgbWl4Q29udHJhc3QodjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21peENvbnRyYXN0LnZhbHVlID0gdjtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
// Author: N8Programs
|
|
2
|
-
// https://github.com/N8python/diamonds
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
import { MeshBVHUniformStruct, shaderIntersectFunction, shaderStructs } from 'three-mesh-bvh';
|
|
6
|
-
import { shaderMaterial } from '../shader-material/shader-material';
|
|
7
|
-
export const MeshRefractionMaterial = shaderMaterial({
|
|
8
|
-
envMap: null,
|
|
9
|
-
bounces: 3,
|
|
10
|
-
ior: 2.4,
|
|
11
|
-
correctMips: true,
|
|
12
|
-
aberrationStrength: 0.01,
|
|
13
|
-
fresnel: 0,
|
|
14
|
-
bvh: new MeshBVHUniformStruct(),
|
|
15
|
-
color: new THREE.Color('white'),
|
|
16
|
-
resolution: new THREE.Vector2(),
|
|
17
|
-
viewMatrixInverse: new THREE.Matrix4(),
|
|
18
|
-
projectionMatrixInverse: new THREE.Matrix4(),
|
|
19
|
-
},
|
|
20
|
-
/*glsl*/ `
|
|
21
|
-
uniform mat4 viewMatrixInverse;
|
|
22
|
-
|
|
23
|
-
varying vec3 vWorldPosition;
|
|
24
|
-
varying vec3 vNormal;
|
|
25
|
-
varying mat4 vModelMatrixInverse;
|
|
26
|
-
|
|
27
|
-
#ifdef USE_INSTANCING_COLOR
|
|
28
|
-
varying vec3 vInstanceColor;
|
|
29
|
-
#endif
|
|
30
|
-
|
|
31
|
-
void main() {
|
|
32
|
-
vec4 transformedNormal = vec4(normal, 0.0);
|
|
33
|
-
vec4 transformedPosition = vec4(position, 1.0);
|
|
34
|
-
#ifdef USE_INSTANCING
|
|
35
|
-
transformedNormal = instanceMatrix * transformedNormal;
|
|
36
|
-
transformedPosition = instanceMatrix * transformedPosition;
|
|
37
|
-
#endif
|
|
38
|
-
|
|
39
|
-
#ifdef USE_INSTANCING
|
|
40
|
-
vModelMatrixInverse = inverse(modelMatrix * instanceMatrix);
|
|
41
|
-
#else
|
|
42
|
-
vModelMatrixInverse = inverse(modelMatrix);
|
|
43
|
-
#endif
|
|
44
|
-
|
|
45
|
-
#ifdef USE_INSTANCING_COLOR
|
|
46
|
-
vInstanceColor = instanceColor.rgb;
|
|
47
|
-
#endif
|
|
48
|
-
|
|
49
|
-
vWorldPosition = (modelMatrix * transformedPosition).xyz;
|
|
50
|
-
vNormal = normalize((viewMatrixInverse * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz);
|
|
51
|
-
gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;
|
|
52
|
-
}`,
|
|
53
|
-
/*glsl*/ `
|
|
54
|
-
#define ENVMAP_TYPE_CUBE_UV
|
|
55
|
-
precision highp isampler2D;
|
|
56
|
-
precision highp usampler2D;
|
|
57
|
-
varying vec3 vWorldPosition;
|
|
58
|
-
varying vec3 vNormal;
|
|
59
|
-
varying mat4 vModelMatrixInverse;
|
|
60
|
-
|
|
61
|
-
#ifdef USE_INSTANCING_COLOR
|
|
62
|
-
varying vec3 vInstanceColor;
|
|
63
|
-
#endif
|
|
64
|
-
|
|
65
|
-
#ifdef ENVMAP_TYPE_CUBEM
|
|
66
|
-
uniform samplerCube envMap;
|
|
67
|
-
#else
|
|
68
|
-
uniform sampler2D envMap;
|
|
69
|
-
#endif
|
|
70
|
-
|
|
71
|
-
uniform float bounces;
|
|
72
|
-
${shaderStructs}
|
|
73
|
-
${shaderIntersectFunction}
|
|
74
|
-
uniform BVH bvh;
|
|
75
|
-
uniform float ior;
|
|
76
|
-
uniform bool correctMips;
|
|
77
|
-
uniform vec2 resolution;
|
|
78
|
-
uniform float fresnel;
|
|
79
|
-
uniform mat4 modelMatrix;
|
|
80
|
-
uniform mat4 projectionMatrixInverse;
|
|
81
|
-
uniform mat4 viewMatrixInverse;
|
|
82
|
-
uniform float aberrationStrength;
|
|
83
|
-
uniform vec3 color;
|
|
84
|
-
|
|
85
|
-
float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {
|
|
86
|
-
return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {
|
|
90
|
-
vec3 rayOrigin = ro;
|
|
91
|
-
vec3 rayDirection = rd;
|
|
92
|
-
rayDirection = refract(rayDirection, normal, 1.0 / ior);
|
|
93
|
-
rayOrigin = vWorldPosition + rayDirection * 0.001;
|
|
94
|
-
rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;
|
|
95
|
-
rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);
|
|
96
|
-
for(float i = 0.0; i < bounces; i++) {
|
|
97
|
-
uvec4 faceIndices = uvec4( 0u );
|
|
98
|
-
vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );
|
|
99
|
-
vec3 barycoord = vec3( 0.0 );
|
|
100
|
-
float side = 1.0;
|
|
101
|
-
float dist = 0.0;
|
|
102
|
-
bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );
|
|
103
|
-
vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0);
|
|
104
|
-
vec3 tempDir = refract(rayDirection, faceNormal, ior);
|
|
105
|
-
if (length(tempDir) != 0.0) {
|
|
106
|
-
rayDirection = tempDir;
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
rayDirection = reflect(rayDirection, faceNormal);
|
|
110
|
-
rayOrigin = hitPos + rayDirection * 0.01;
|
|
111
|
-
}
|
|
112
|
-
rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);
|
|
113
|
-
return rayDirection;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
#include <common>
|
|
117
|
-
#include <cube_uv_reflection_fragment>
|
|
118
|
-
|
|
119
|
-
#ifdef ENVMAP_TYPE_CUBEM
|
|
120
|
-
vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {
|
|
121
|
-
return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));
|
|
122
|
-
}
|
|
123
|
-
#else
|
|
124
|
-
vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {
|
|
125
|
-
vec2 uvv = equirectUv( rayDirection );
|
|
126
|
-
vec2 smoothUv = equirectUv( directionCamPerfect );
|
|
127
|
-
return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));
|
|
128
|
-
}
|
|
129
|
-
#endif
|
|
130
|
-
|
|
131
|
-
void main() {
|
|
132
|
-
vec2 uv = gl_FragCoord.xy / resolution;
|
|
133
|
-
vec3 directionCamPerfect = (projectionMatrixInverse * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;
|
|
134
|
-
directionCamPerfect = (viewMatrixInverse * vec4(directionCamPerfect, 0.0)).xyz;
|
|
135
|
-
directionCamPerfect = normalize(directionCamPerfect);
|
|
136
|
-
vec3 normal = vNormal;
|
|
137
|
-
vec3 rayOrigin = cameraPosition;
|
|
138
|
-
vec3 rayDirection = normalize(vWorldPosition - cameraPosition);
|
|
139
|
-
vec3 finalColor;
|
|
140
|
-
#ifdef CHROMATIC_ABERRATIONS
|
|
141
|
-
vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);
|
|
142
|
-
#ifdef FAST_CHROMA
|
|
143
|
-
vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));
|
|
144
|
-
vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));
|
|
145
|
-
#else
|
|
146
|
-
vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), vModelMatrixInverse);
|
|
147
|
-
vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), vModelMatrixInverse);
|
|
148
|
-
#endif
|
|
149
|
-
float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;
|
|
150
|
-
float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;
|
|
151
|
-
float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;
|
|
152
|
-
finalColor = vec3(finalColorR, finalColorG, finalColorB);
|
|
153
|
-
#else
|
|
154
|
-
rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);
|
|
155
|
-
finalColor = textureGradient(envMap, rayDirection, directionCamPerfect).rgb;
|
|
156
|
-
#endif
|
|
157
|
-
|
|
158
|
-
finalColor *= color;
|
|
159
|
-
#ifdef USE_INSTANCING_COLOR
|
|
160
|
-
finalColor *= vInstanceColor;
|
|
161
|
-
#endif
|
|
162
|
-
|
|
163
|
-
vec3 viewDirection = normalize(vWorldPosition - cameraPosition);
|
|
164
|
-
float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;
|
|
165
|
-
gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0);
|
|
166
|
-
#include <tonemapping_fragment>
|
|
167
|
-
#include <encodings_fragment>
|
|
168
|
-
}`);
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLHVDQUF1QztBQUV2QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixhQUFhO0FBQ2IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQ2hEO0lBQ0ksTUFBTSxFQUFFLElBQUk7SUFDWixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsV0FBVyxFQUFFLElBQUk7SUFDakIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxJQUFJLG9CQUFvQixFQUFTO0lBQ3RDLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQy9CLFVBQVUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDL0IsaUJBQWlCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ3RDLHVCQUF1QixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtDQUMvQztBQUNELFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQ1Q7QUFDQSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFtQlQsYUFBYTtJQUNiLHVCQUF1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUErRnZCLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEF1dGhvcjogTjhQcm9ncmFtc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL044cHl0aG9uL2RpYW1vbmRzXG5cbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IE1lc2hCVkhVbmlmb3JtU3RydWN0LCBzaGFkZXJJbnRlcnNlY3RGdW5jdGlvbiwgc2hhZGVyU3RydWN0cyB9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcbmltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBNZXNoUmVmcmFjdGlvbk1hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG4gICAge1xuICAgICAgICBlbnZNYXA6IG51bGwsXG4gICAgICAgIGJvdW5jZXM6IDMsXG4gICAgICAgIGlvcjogMi40LFxuICAgICAgICBjb3JyZWN0TWlwczogdHJ1ZSxcbiAgICAgICAgYWJlcnJhdGlvblN0cmVuZ3RoOiAwLjAxLFxuICAgICAgICBmcmVzbmVsOiAwLFxuICAgICAgICBidmg6IG5ldyBNZXNoQlZIVW5pZm9ybVN0cnVjdCgpIGFzIGFueSxcbiAgICAgICAgY29sb3I6IG5ldyBUSFJFRS5Db2xvcignd2hpdGUnKSxcbiAgICAgICAgcmVzb2x1dGlvbjogbmV3IFRIUkVFLlZlY3RvcjIoKSxcbiAgICAgICAgdmlld01hdHJpeEludmVyc2U6IG5ldyBUSFJFRS5NYXRyaXg0KCksXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXhJbnZlcnNlOiBuZXcgVEhSRUUuTWF0cml4NCgpLFxuICAgIH0sXG4gICAgLypnbHNsKi8gYFxuICB1bmlmb3JtIG1hdDQgdmlld01hdHJpeEludmVyc2U7XG5cbiAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgdmFyeWluZyBtYXQ0IHZNb2RlbE1hdHJpeEludmVyc2U7XG5cbiAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG4gICAgdmFyeWluZyB2ZWMzIHZJbnN0YW5jZUNvbG9yO1xuICAjZW5kaWZcblxuICB2b2lkIG1haW4oKSB7XG4gICAgdmVjNCB0cmFuc2Zvcm1lZE5vcm1hbCA9IHZlYzQobm9ybWFsLCAwLjApO1xuICAgIHZlYzQgdHJhbnNmb3JtZWRQb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG4gICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IGluc3RhbmNlTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4gICAgICB0cmFuc2Zvcm1lZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB0cmFuc2Zvcm1lZFBvc2l0aW9uO1xuICAgICNlbmRpZlxuXG4gICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG4gICAgICB2TW9kZWxNYXRyaXhJbnZlcnNlID0gaW52ZXJzZShtb2RlbE1hdHJpeCAqIGluc3RhbmNlTWF0cml4KTtcbiAgICAjZWxzZVxuICAgICAgdk1vZGVsTWF0cml4SW52ZXJzZSA9IGludmVyc2UobW9kZWxNYXRyaXgpO1xuICAgICNlbmRpZlxuXG4gICAgI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG4gICAgICB2SW5zdGFuY2VDb2xvciA9IGluc3RhbmNlQ29sb3IucmdiO1xuICAgICNlbmRpZlxuXG4gICAgdldvcmxkUG9zaXRpb24gPSAobW9kZWxNYXRyaXggKiB0cmFuc2Zvcm1lZFBvc2l0aW9uKS54eXo7XG4gICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSgodmlld01hdHJpeEludmVyc2UgKiB2ZWM0KG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsLnh5eiwgMC4wKSkueHl6KTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3TWF0cml4ICogbW9kZWxNYXRyaXggKiB0cmFuc2Zvcm1lZFBvc2l0aW9uO1xuICB9YCxcbiAgICAvKmdsc2wqLyBgXG4gICNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuICBwcmVjaXNpb24gaGlnaHAgaXNhbXBsZXIyRDtcbiAgcHJlY2lzaW9uIGhpZ2hwIHVzYW1wbGVyMkQ7XG4gIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gIHZhcnlpbmcgbWF0NCB2TW9kZWxNYXRyaXhJbnZlcnNlO1xuXG4gICNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuICAgIHZhcnlpbmcgdmVjMyB2SW5zdGFuY2VDb2xvcjtcbiAgI2VuZGlmXG5cbiAgI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVNXG4gICAgdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG4gICNlbHNlXG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuICAjZW5kaWZcblxuICB1bmlmb3JtIGZsb2F0IGJvdW5jZXM7XG4gICR7c2hhZGVyU3RydWN0c31cbiAgJHtzaGFkZXJJbnRlcnNlY3RGdW5jdGlvbn1cbiAgdW5pZm9ybSBCVkggYnZoO1xuICB1bmlmb3JtIGZsb2F0IGlvcjtcbiAgdW5pZm9ybSBib29sIGNvcnJlY3RNaXBzO1xuICB1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbiAgdW5pZm9ybSBmbG9hdCBmcmVzbmVsO1xuICB1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7XG4gIHVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4SW52ZXJzZTtcbiAgdW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXhJbnZlcnNlO1xuICB1bmlmb3JtIGZsb2F0IGFiZXJyYXRpb25TdHJlbmd0aDtcbiAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuXG4gIGZsb2F0IGZyZXNuZWxGdW5jKHZlYzMgdmlld0RpcmVjdGlvbiwgdmVjMyB3b3JsZE5vcm1hbCkge1xuICAgIHJldHVybiBwb3coIDEuMCArIGRvdCggdmlld0RpcmVjdGlvbiwgd29ybGROb3JtYWwpLCAxMC4wICk7XG4gIH1cblxuICB2ZWMzIHRvdGFsSW50ZXJuYWxSZWZsZWN0aW9uKHZlYzMgcm8sIHZlYzMgcmQsIHZlYzMgbm9ybWFsLCBmbG9hdCBpb3IsIG1hdDQgbW9kZWxNYXRyaXhJbnZlcnNlKSB7XG4gICAgdmVjMyByYXlPcmlnaW4gPSBybztcbiAgICB2ZWMzIHJheURpcmVjdGlvbiA9IHJkO1xuICAgIHJheURpcmVjdGlvbiA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBub3JtYWwsIDEuMCAvIGlvcik7XG4gICAgcmF5T3JpZ2luID0gdldvcmxkUG9zaXRpb24gKyByYXlEaXJlY3Rpb24gKiAwLjAwMTtcbiAgICByYXlPcmlnaW4gPSAobW9kZWxNYXRyaXhJbnZlcnNlICogdmVjNChyYXlPcmlnaW4sIDEuMCkpLnh5ejtcbiAgICByYXlEaXJlY3Rpb24gPSBub3JtYWxpemUoKG1vZGVsTWF0cml4SW52ZXJzZSAqIHZlYzQocmF5RGlyZWN0aW9uLCAwLjApKS54eXopO1xuICAgIGZvcihmbG9hdCBpID0gMC4wOyBpIDwgYm91bmNlczsgaSsrKSB7XG4gICAgICB1dmVjNCBmYWNlSW5kaWNlcyA9IHV2ZWM0KCAwdSApO1xuICAgICAgdmVjMyBmYWNlTm9ybWFsID0gdmVjMyggMC4wLCAwLjAsIDEuMCApO1xuICAgICAgdmVjMyBiYXJ5Y29vcmQgPSB2ZWMzKCAwLjAgKTtcbiAgICAgIGZsb2F0IHNpZGUgPSAxLjA7XG4gICAgICBmbG9hdCBkaXN0ID0gMC4wO1xuICAgICAgYnZoSW50ZXJzZWN0Rmlyc3RIaXQoIGJ2aCwgcmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIGZhY2VJbmRpY2VzLCBmYWNlTm9ybWFsLCBiYXJ5Y29vcmQsIHNpZGUsIGRpc3QgKTtcbiAgICAgIHZlYzMgaGl0UG9zID0gcmF5T3JpZ2luICsgcmF5RGlyZWN0aW9uICogbWF4KGRpc3QgLSAwLjAwMSwgMC4wKTtcbiAgICAgIHZlYzMgdGVtcERpciA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBmYWNlTm9ybWFsLCBpb3IpO1xuICAgICAgaWYgKGxlbmd0aCh0ZW1wRGlyKSAhPSAwLjApIHtcbiAgICAgICAgcmF5RGlyZWN0aW9uID0gdGVtcERpcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByYXlEaXJlY3Rpb24gPSByZWZsZWN0KHJheURpcmVjdGlvbiwgZmFjZU5vcm1hbCk7XG4gICAgICByYXlPcmlnaW4gPSBoaXRQb3MgKyByYXlEaXJlY3Rpb24gKiAwLjAxO1xuICAgIH1cbiAgICByYXlEaXJlY3Rpb24gPSBub3JtYWxpemUoKG1vZGVsTWF0cml4ICogdmVjNChyYXlEaXJlY3Rpb24sIDAuMCkpLnh5eik7XG4gICAgcmV0dXJuIHJheURpcmVjdGlvbjtcbiAgfVxuXG4gICNpbmNsdWRlIDxjb21tb24+XG4gICNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cbiAgI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVNXG4gICAgdmVjNCB0ZXh0dXJlR3JhZGllbnQoc2FtcGxlckN1YmUgZW52TWFwLCB2ZWMzIHJheURpcmVjdGlvbiwgdmVjMyBkaXJlY3Rpb25DYW1QZXJmZWN0KSB7XG4gICAgICByZXR1cm4gdGV4dHVyZUdyYWQoZW52TWFwLCByYXlEaXJlY3Rpb24sIGRGZHgoY29ycmVjdE1pcHMgPyBkaXJlY3Rpb25DYW1QZXJmZWN0OiByYXlEaXJlY3Rpb24pLCBkRmR5KGNvcnJlY3RNaXBzID8gZGlyZWN0aW9uQ2FtUGVyZmVjdDogcmF5RGlyZWN0aW9uKSk7XG4gICAgfVxuICAjZWxzZVxuICAgIHZlYzQgdGV4dHVyZUdyYWRpZW50KHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgcmF5RGlyZWN0aW9uLCB2ZWMzIGRpcmVjdGlvbkNhbVBlcmZlY3QpIHtcbiAgICAgIHZlYzIgdXZ2ID0gZXF1aXJlY3RVdiggcmF5RGlyZWN0aW9uICk7XG4gICAgICB2ZWMyIHNtb290aFV2ID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uQ2FtUGVyZmVjdCApO1xuICAgICAgcmV0dXJuIHRleHR1cmVHcmFkKGVudk1hcCwgdXZ2LCBkRmR4KGNvcnJlY3RNaXBzID8gc21vb3RoVXYgOiB1dnYpLCBkRmR5KGNvcnJlY3RNaXBzID8gc21vb3RoVXYgOiB1dnYpKTtcbiAgICB9XG4gICNlbmRpZlxuXG4gIHZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gcmVzb2x1dGlvbjtcbiAgICB2ZWMzIGRpcmVjdGlvbkNhbVBlcmZlY3QgPSAocHJvamVjdGlvbk1hdHJpeEludmVyc2UgKiB2ZWM0KHV2ICogMi4wIC0gMS4wLCAwLjAsIDEuMCkpLnh5ejtcbiAgICBkaXJlY3Rpb25DYW1QZXJmZWN0ID0gKHZpZXdNYXRyaXhJbnZlcnNlICogdmVjNChkaXJlY3Rpb25DYW1QZXJmZWN0LCAwLjApKS54eXo7XG4gICAgZGlyZWN0aW9uQ2FtUGVyZmVjdCA9IG5vcm1hbGl6ZShkaXJlY3Rpb25DYW1QZXJmZWN0KTtcbiAgICB2ZWMzIG5vcm1hbCA9IHZOb3JtYWw7XG4gICAgdmVjMyByYXlPcmlnaW4gPSBjYW1lcmFQb3NpdGlvbjtcbiAgICB2ZWMzIHJheURpcmVjdGlvbiA9IG5vcm1hbGl6ZSh2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uKTtcbiAgICB2ZWMzIGZpbmFsQ29sb3I7XG4gICAgI2lmZGVmIENIUk9NQVRJQ19BQkVSUkFUSU9OU1xuICAgICAgdmVjMyByYXlEaXJlY3Rpb25HID0gdG90YWxJbnRlcm5hbFJlZmxlY3Rpb24ocmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIG5vcm1hbCwgbWF4KGlvciwgMS4wKSwgdk1vZGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICAjaWZkZWYgRkFTVF9DSFJPTUFcbiAgICAgICAgdmVjMyByYXlEaXJlY3Rpb25SID0gbm9ybWFsaXplKHJheURpcmVjdGlvbkcgKyAxLjAgKiB2ZWMzKGFiZXJyYXRpb25TdHJlbmd0aCAvIDIuMCkpO1xuICAgICAgICB2ZWMzIHJheURpcmVjdGlvbkIgPSBub3JtYWxpemUocmF5RGlyZWN0aW9uRyAtIDEuMCAqIHZlYzMoYWJlcnJhdGlvblN0cmVuZ3RoIC8gMi4wKSk7XG4gICAgICAjZWxzZVxuICAgICAgICB2ZWMzIHJheURpcmVjdGlvblIgPSB0b3RhbEludGVybmFsUmVmbGVjdGlvbihyYXlPcmlnaW4sIHJheURpcmVjdGlvbiwgbm9ybWFsLCBtYXgoaW9yICogKDEuMCAtIGFiZXJyYXRpb25TdHJlbmd0aCksIDEuMCksIHZNb2RlbE1hdHJpeEludmVyc2UpO1xuICAgICAgICB2ZWMzIHJheURpcmVjdGlvbkIgPSB0b3RhbEludGVybmFsUmVmbGVjdGlvbihyYXlPcmlnaW4sIHJheURpcmVjdGlvbiwgbm9ybWFsLCBtYXgoaW9yICogKDEuMCArIGFiZXJyYXRpb25TdHJlbmd0aCksIDEuMCksIHZNb2RlbE1hdHJpeEludmVyc2UpO1xuICAgICAgI2VuZGlmXG4gICAgICBmbG9hdCBmaW5hbENvbG9yUiA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvblIsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLnI7XG4gICAgICBmbG9hdCBmaW5hbENvbG9yRyA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvbkcsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLmc7XG4gICAgICBmbG9hdCBmaW5hbENvbG9yQiA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvbkIsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLmI7XG4gICAgICBmaW5hbENvbG9yID0gdmVjMyhmaW5hbENvbG9yUiwgZmluYWxDb2xvckcsIGZpbmFsQ29sb3JCKTtcbiAgICAjZWxzZVxuICAgICAgcmF5RGlyZWN0aW9uID0gdG90YWxJbnRlcm5hbFJlZmxlY3Rpb24ocmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIG5vcm1hbCwgbWF4KGlvciwgMS4wKSwgdk1vZGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICBmaW5hbENvbG9yID0gdGV4dHVyZUdyYWRpZW50KGVudk1hcCwgcmF5RGlyZWN0aW9uLCBkaXJlY3Rpb25DYW1QZXJmZWN0KS5yZ2I7XG4gICAgI2VuZGlmXG5cbiAgICBmaW5hbENvbG9yICo9IGNvbG9yO1xuICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuICAgICAgZmluYWxDb2xvciAqPSB2SW5zdGFuY2VDb2xvcjtcbiAgICAjZW5kaWZcblxuICAgIHZlYzMgdmlld0RpcmVjdGlvbiA9IG5vcm1hbGl6ZSh2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uKTtcbiAgICBmbG9hdCBuRnJlc25lbCA9IGZyZXNuZWxGdW5jKHZpZXdEaXJlY3Rpb24sIG5vcm1hbCkgKiBmcmVzbmVsO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KGZpbmFsQ29sb3IsIHZlYzMoMS4wKSwgbkZyZXNuZWwpLCAxLjApO1xuICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgICAjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuICB9YFxuKTtcbiJdfQ==
|