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.
Files changed (426) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +28 -0
  3. package/abstractions/detailed/detailed.d.ts +26 -0
  4. package/abstractions/edges/edges.d.ts +34 -0
  5. package/abstractions/grid/grid.d.ts +50 -0
  6. package/abstractions/index.d.ts +6 -11
  7. package/abstractions/text/text.d.ts +82 -0
  8. package/abstractions/text-3d/text-3d.d.ts +81 -0
  9. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  10. package/cameras/camera/camera.d.ts +26 -0
  11. package/cameras/cube-camera/cube-camera.d.ts +69 -0
  12. package/cameras/index.d.ts +4 -4
  13. package/cameras/orthographic-camera/orthographic-camera.d.ts +37 -0
  14. package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +10 -1
  15. package/controls/index.d.ts +1 -1
  16. package/controls/orbit-controls/orbit-controls.d.ts +54 -0
  17. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
  18. package/esm2022/abstractions/billboard/billboard.mjs +74 -0
  19. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  20. package/esm2022/abstractions/edges/edges.mjs +88 -0
  21. package/esm2022/abstractions/grid/grid.mjs +180 -0
  22. package/esm2022/abstractions/index.mjs +7 -12
  23. package/esm2022/abstractions/text/text.mjs +274 -0
  24. package/esm2022/abstractions/text-3d/text-3d.mjs +165 -0
  25. package/esm2022/angular-three-soba.mjs +1 -1
  26. package/esm2022/cameras/angular-three-soba-cameras.mjs +1 -1
  27. package/esm2022/cameras/camera/camera-content.mjs +20 -0
  28. package/esm2022/cameras/camera/camera.mjs +77 -0
  29. package/esm2022/cameras/cube-camera/cube-camera.mjs +161 -0
  30. package/esm2022/cameras/index.mjs +5 -5
  31. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +102 -0
  32. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +46 -0
  33. package/esm2022/controls/angular-three-soba-controls.mjs +1 -1
  34. package/esm2022/controls/index.mjs +2 -2
  35. package/esm2022/controls/orbit-controls/orbit-controls.mjs +181 -0
  36. package/esm2022/index.mjs +1 -1
  37. package/esm2022/loaders/angular-three-soba-loaders.mjs +1 -1
  38. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +30 -0
  39. package/esm2022/loaders/index.mjs +5 -6
  40. package/esm2022/loaders/loader/loader.mjs +138 -0
  41. package/esm2022/loaders/progress/progress.mjs +45 -0
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  43. package/esm2022/materials/angular-three-soba-materials.mjs +1 -1
  44. package/esm2022/materials/index.mjs +7 -6
  45. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +82 -0
  46. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +367 -0
  47. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +171 -0
  48. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +278 -0
  49. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
  50. package/esm2022/materials/point-material/point-material.mjs +46 -0
  51. package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
  52. package/esm2022/misc/animations/animations.mjs +59 -0
  53. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  54. package/esm2022/misc/caustics/caustics.mjs +387 -0
  55. package/esm2022/misc/decal/decal.mjs +187 -0
  56. package/esm2022/misc/depth-buffer/depth-buffer.mjs +44 -0
  57. package/esm2022/misc/example/example.mjs +160 -0
  58. package/esm2022/misc/fbo/fbo.mjs +47 -0
  59. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  60. package/esm2022/misc/html/html.mjs +304 -0
  61. package/esm2022/misc/index.mjs +14 -5
  62. package/esm2022/misc/sampler/sampler.mjs +142 -0
  63. package/esm2022/misc/shadow/shadow.mjs +111 -0
  64. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  65. package/esm2022/misc/trail/trail.mjs +209 -0
  66. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  67. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  68. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  69. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  70. package/esm2022/modifiers/index.mjs +2 -0
  71. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  72. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  73. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  74. package/esm2022/performances/index.mjs +6 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +329 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/angular-three-soba-shaders.mjs +1 -1
  81. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  82. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  83. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  84. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  85. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  86. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  87. package/esm2022/shaders/index.mjs +18 -15
  88. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +56 -0
  89. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  90. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  91. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  92. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  93. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  94. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +25 -0
  95. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +33 -0
  96. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  97. package/esm2022/shaders/star-field-material/star-field-material.mjs +33 -0
  98. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  99. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +267 -0
  100. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  101. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +206 -0
  102. package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
  103. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  104. package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
  105. package/esm2022/staging/bounds/bounds.mjs +308 -0
  106. package/esm2022/staging/camera-shake/camera-shake.mjs +123 -0
  107. package/esm2022/staging/center/center.mjs +163 -0
  108. package/esm2022/staging/cloud/cloud.mjs +158 -0
  109. package/esm2022/staging/contact-shadows/contact-shadows.mjs +246 -0
  110. package/esm2022/staging/environment/assets.mjs +13 -0
  111. package/esm2022/staging/environment/environment-cube.mjs +47 -0
  112. package/esm2022/staging/environment/environment-ground.mjs +41 -0
  113. package/esm2022/staging/environment/environment-input.mjs +119 -0
  114. package/esm2022/staging/environment/environment-map.mjs +53 -0
  115. package/esm2022/staging/environment/environment-portal.mjs +113 -0
  116. package/esm2022/staging/environment/environment.mjs +61 -0
  117. package/esm2022/staging/environment/utils.mjs +105 -0
  118. package/esm2022/staging/float/float.mjs +94 -0
  119. package/esm2022/staging/index.mjs +22 -18
  120. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  121. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  122. package/esm2022/staging/sky/sky.mjs +119 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +164 -0
  124. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  125. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  126. package/esm2022/staging/spot-light/spot-light-input.mjs +84 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +81 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +98 -0
  129. package/esm2022/staging/stage/stage.mjs +388 -0
  130. package/esm2022/staging/stars/stars.mjs +147 -0
  131. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  132. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  133. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  134. package/esm2022/utils/content/content.mjs +15 -0
  135. package/esm2022/utils/index.mjs +2 -0
  136. package/fesm2022/angular-three-soba-abstractions.mjs +668 -1882
  137. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-cameras.mjs +279 -232
  139. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-controls.mjs +104 -69
  141. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-loaders.mjs +177 -164
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +630 -482
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2248 -122
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +554 -209
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +3231 -2852
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/fesm2022/angular-three-soba.mjs.map +1 -1
  159. package/loaders/gltf-loader/gltf-loader.d.ts +10 -0
  160. package/loaders/index.d.ts +4 -5
  161. package/loaders/loader/loader.d.ts +33 -0
  162. package/loaders/progress/progress.d.ts +9 -0
  163. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  164. package/materials/index.d.ts +6 -5
  165. package/materials/mesh-distort-material/mesh-distort-material.d.ts +40 -0
  166. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +99 -0
  167. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +62 -0
  168. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +107 -0
  169. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +29 -0
  170. package/materials/point-material/point-material.d.ts +24 -0
  171. package/metadata.json +1 -0
  172. package/misc/animations/animations.d.ts +15 -0
  173. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  174. package/misc/caustics/caustics.d.ts +87 -0
  175. package/misc/decal/decal.d.ts +49 -0
  176. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  177. package/misc/example/example.d.ts +81 -0
  178. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  179. package/misc/html/html-wrapper.d.ts +559 -0
  180. package/misc/html/html.d.ts +214 -0
  181. package/misc/index.d.ts +13 -4
  182. package/misc/sampler/sampler.d.ts +67 -0
  183. package/misc/shadow/shadow.d.ts +37 -0
  184. package/misc/stats-gl/stats-gl.d.ts +24 -0
  185. package/misc/trail/trail.d.ts +57 -0
  186. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  187. package/misc/trail-texture/trail-texture.d.ts +50 -0
  188. package/modifiers/README.md +3 -0
  189. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  190. package/modifiers/index.d.ts +1 -0
  191. package/package.json +43 -32
  192. package/performances/README.md +3 -0
  193. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  194. package/{performance/lib/adaptive → performances/adaptive-events}/adaptive-events.d.ts +5 -6
  195. package/performances/index.d.ts +5 -0
  196. package/performances/points/points-input.d.ts +32 -0
  197. package/performances/points/points.d.ts +92 -0
  198. package/performances/points/position-point.d.ts +11 -0
  199. package/performances/segments/segment-object.d.ts +7 -0
  200. package/performances/segments/segments.d.ts +124 -0
  201. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  202. package/shaders/grid-material/grid-material.d.ts +37 -0
  203. package/shaders/index.d.ts +17 -14
  204. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +147 -2
  205. package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +1 -1
  206. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  207. package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +2 -2
  208. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +19 -0
  209. package/shaders/sparkles-material/sparkles-material.d.ts +17 -0
  210. package/shaders/spot-light-material/spot-light-material.d.ts +13 -0
  211. package/shaders/star-field-material/star-field-material.d.ts +13 -0
  212. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  213. package/staging/accumulative-shadows/accumulative-shadows.d.ts +146 -0
  214. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  215. package/staging/accumulative-shadows/randomized-lights.d.ts +90 -0
  216. package/staging/backdrop/backdrop.d.ts +30 -0
  217. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  218. package/staging/bounds/bounds.d.ts +134 -0
  219. package/staging/camera-shake/camera-shake.d.ts +43 -0
  220. package/staging/center/center.d.ts +70 -0
  221. package/staging/cloud/cloud.d.ts +51 -0
  222. package/staging/contact-shadows/contact-shadows.d.ts +70 -0
  223. package/staging/{lib/environment → environment}/assets.d.ts +9 -9
  224. package/staging/environment/environment-cube.d.ts +15 -0
  225. package/staging/environment/environment-ground.d.ts +13 -0
  226. package/staging/environment/environment-input.d.ts +68 -0
  227. package/staging/environment/environment-map.d.ts +16 -0
  228. package/staging/environment/environment-portal.d.ts +18 -0
  229. package/staging/{lib/environment → environment}/environment.d.ts +2 -6
  230. package/staging/environment/utils.d.ts +7 -0
  231. package/staging/float/float.d.ts +31 -0
  232. package/staging/index.d.ts +21 -17
  233. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  234. package/staging/normal-texture/normal-texture.d.ts +16 -0
  235. package/staging/sky/sky.d.ts +48 -0
  236. package/staging/sparkles/sparkles.d.ts +63 -0
  237. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  238. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  239. package/staging/spot-light/spot-light-input.d.ts +38 -0
  240. package/staging/spot-light/spot-light.d.ts +39 -0
  241. package/staging/spot-light/volumetric-mesh.d.ts +24 -0
  242. package/staging/stage/stage.d.ts +130 -0
  243. package/staging/stars/stars.d.ts +45 -0
  244. package/staging/wireframe/wireframe-input.d.ts +65 -0
  245. package/staging/wireframe/wireframe.d.ts +28 -0
  246. package/utils/README.md +3 -0
  247. package/utils/content/content.d.ts +8 -0
  248. package/utils/index.d.ts +1 -0
  249. package/web-types.json +1 -0
  250. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  251. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  252. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  253. package/abstractions/lib/edges/edges.d.ts +0 -18
  254. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  255. package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  256. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  257. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  258. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  259. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -15
  260. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  261. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  262. package/abstractions/lib/line/line-input.d.ts +0 -19
  263. package/abstractions/lib/line/line.d.ts +0 -21
  264. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  265. package/abstractions/lib/text/text.d.ts +0 -21
  266. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  267. package/assets/default-spot-light-shadow.glsl +0 -10
  268. package/cameras/lib/camera/camera.d.ts +0 -19
  269. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  270. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  271. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  272. package/esm2022/abstractions/lib/billboard/billboard.mjs +0 -74
  273. package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -120
  274. package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -99
  275. package/esm2022/abstractions/lib/edges/edges.mjs +0 -96
  276. package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -213
  277. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  278. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -92
  279. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -184
  280. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -46
  281. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -134
  282. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  283. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -267
  284. package/esm2022/abstractions/lib/line/line-input.mjs +0 -76
  285. package/esm2022/abstractions/lib/line/line.mjs +0 -133
  286. package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  287. package/esm2022/abstractions/lib/text/text.mjs +0 -115
  288. package/esm2022/abstractions/lib/text-3d/text-3d.mjs +0 -145
  289. package/esm2022/cameras/lib/camera/camera-content.mjs +0 -21
  290. package/esm2022/cameras/lib/camera/camera.mjs +0 -75
  291. package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +0 -131
  292. package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -93
  293. package/esm2022/cameras/lib/perspective-camera/perspective-camera.mjs +0 -47
  294. package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +0 -147
  295. package/esm2022/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  296. package/esm2022/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  297. package/esm2022/loaders/lib/loader/loader.mjs +0 -134
  298. package/esm2022/loaders/lib/progress/progress.mjs +0 -39
  299. package/esm2022/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  300. package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -75
  301. package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -328
  302. package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -158
  303. package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -238
  304. package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  305. package/esm2022/misc/lib/animations/animations.mjs +0 -52
  306. package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +0 -26
  307. package/esm2022/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  308. package/esm2022/misc/lib/fbo/fbo.mjs +0 -39
  309. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  310. package/esm2022/performance/index.mjs +0 -5
  311. package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +0 -47
  312. package/esm2022/performance/lib/adaptive/adaptive-events.mjs +0 -37
  313. package/esm2022/performance/lib/detailed/detailed.mjs +0 -54
  314. package/esm2022/performance/lib/stats/stats.mjs +0 -80
  315. package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  316. package/esm2022/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  317. package/esm2022/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  318. package/esm2022/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  319. package/esm2022/shaders/lib/discard-material/discard-material.mjs +0 -3
  320. package/esm2022/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  321. package/esm2022/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  322. package/esm2022/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  323. package/esm2022/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  324. package/esm2022/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  325. package/esm2022/shaders/lib/shader-material/shader-material.mjs +0 -34
  326. package/esm2022/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  327. package/esm2022/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  328. package/esm2022/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  329. package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -249
  330. package/esm2022/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  331. package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -201
  332. package/esm2022/staging/lib/bounds/bounds.mjs +0 -284
  333. package/esm2022/staging/lib/camera-shake/camera-shake.mjs +0 -122
  334. package/esm2022/staging/lib/caustics/caustics.mjs +0 -364
  335. package/esm2022/staging/lib/center/center.mjs +0 -143
  336. package/esm2022/staging/lib/cloud/cloud.mjs +0 -160
  337. package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +0 -228
  338. package/esm2022/staging/lib/environment/assets.mjs +0 -13
  339. package/esm2022/staging/lib/environment/environment-cube.mjs +0 -41
  340. package/esm2022/staging/lib/environment/environment-ground.mjs +0 -67
  341. package/esm2022/staging/lib/environment/environment-inputs.mjs +0 -87
  342. package/esm2022/staging/lib/environment/environment-map.mjs +0 -39
  343. package/esm2022/staging/lib/environment/environment-portal.mjs +0 -111
  344. package/esm2022/staging/lib/environment/environment.mjs +0 -165
  345. package/esm2022/staging/lib/environment/utils.mjs +0 -70
  346. package/esm2022/staging/lib/float/float.mjs +0 -77
  347. package/esm2022/staging/lib/sky/sky.mjs +0 -109
  348. package/esm2022/staging/lib/sparkles/sparkles.mjs +0 -210
  349. package/esm2022/staging/lib/spot-light/common.mjs +0 -42
  350. package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +0 -51
  351. package/esm2022/staging/lib/spot-light/spot-light-input.mjs +0 -62
  352. package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -74
  353. package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -126
  354. package/esm2022/staging/lib/spot-light/spot-light-shadow.mjs +0 -63
  355. package/esm2022/staging/lib/spot-light/spot-light.mjs +0 -117
  356. package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +0 -86
  357. package/esm2022/staging/lib/stage/stage.mjs +0 -368
  358. package/esm2022/staging/lib/stars/stars.mjs +0 -140
  359. package/fesm2022/angular-three-soba-performance.mjs +0 -210
  360. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  361. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  362. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  363. package/loaders/lib/loader/loader.d.ts +0 -26
  364. package/loaders/lib/progress/progress.d.ts +0 -16
  365. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  366. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  367. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  368. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  369. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  370. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  371. package/misc/lib/animations/animations.d.ts +0 -13
  372. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  373. package/performance/README.md +0 -3
  374. package/performance/index.d.ts +0 -4
  375. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  376. package/performance/lib/detailed/detailed.d.ts +0 -13
  377. package/performance/lib/stats/stats.d.ts +0 -15
  378. package/plugin/README.md +0 -11
  379. package/plugin/generators.json +0 -19
  380. package/plugin/package.json +0 -9
  381. package/plugin/src/generators/init/compat.d.ts +0 -2
  382. package/plugin/src/generators/init/compat.js +0 -6
  383. package/plugin/src/generators/init/compat.js.map +0 -1
  384. package/plugin/src/generators/init/init.d.ts +0 -4
  385. package/plugin/src/generators/init/init.js +0 -22
  386. package/plugin/src/generators/init/init.js.map +0 -1
  387. package/plugin/src/generators/init/schema.json +0 -6
  388. package/plugin/src/index.d.ts +0 -1
  389. package/plugin/src/index.js +0 -6
  390. package/plugin/src/index.js.map +0 -1
  391. package/shaders/lib/soft-shadow-material/soft-shadow-material.d.ts +0 -10
  392. package/shaders/lib/spot-light-material/spot-light-material.d.ts +0 -4
  393. package/shaders/lib/star-field-material/star-field-material.d.ts +0 -3
  394. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  395. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  396. package/staging/lib/bounds/bounds.d.ts +0 -48
  397. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  398. package/staging/lib/caustics/caustics.d.ts +0 -47
  399. package/staging/lib/center/center.d.ts +0 -40
  400. package/staging/lib/cloud/cloud.d.ts +0 -23
  401. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  402. package/staging/lib/environment/environment-cube.d.ts +0 -11
  403. package/staging/lib/environment/environment-ground.d.ts +0 -9
  404. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  405. package/staging/lib/environment/environment-map.d.ts +0 -10
  406. package/staging/lib/environment/environment-portal.d.ts +0 -15
  407. package/staging/lib/environment/utils.d.ts +0 -8
  408. package/staging/lib/float/float.d.ts +0 -16
  409. package/staging/lib/sky/sky.d.ts +0 -20
  410. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  411. package/staging/lib/spot-light/common.d.ts +0 -3
  412. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  413. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  414. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  415. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  416. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  417. package/staging/lib/spot-light/spot-light.d.ts +0 -17
  418. package/staging/lib/spot-light/volumetric-mesh.d.ts +0 -15
  419. package/staging/lib/stage/stage.d.ts +0 -87
  420. package/staging/lib/stars/stars.d.ts +0 -20
  421. /package/shaders/{lib/caustics-material → caustics}/caustics-material.d.ts +0 -0
  422. /package/shaders/{lib/caustics-projection-material → caustics}/caustics-projection-material.d.ts +0 -0
  423. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  424. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  425. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  426. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
@@ -0,0 +1,54 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import * as THREE from 'three';
3
+ const _inverseMatrix = /*@__PURE__*/ new THREE.Matrix4();
4
+ const _ray = /*@__PURE__*/ new THREE.Ray();
5
+ const _sphere = /*@__PURE__*/ new THREE.Sphere();
6
+ const _position = /*@__PURE__*/ new THREE.Vector3();
7
+ export class PositionPoint extends THREE.Group {
8
+ constructor() {
9
+ super();
10
+ this.size = 0;
11
+ this.color = new THREE.Color('white');
12
+ this.instance = new ElementRef(undefined);
13
+ this.instanceKey = new ElementRef(undefined);
14
+ }
15
+ // This will allow the virtual instance have bounds
16
+ get geometry() {
17
+ return this.instance.nativeElement?.geometry;
18
+ }
19
+ raycast(raycaster, intersects) {
20
+ const parent = this.instance.nativeElement;
21
+ if (!parent || !parent.geometry)
22
+ return;
23
+ const instanceId = parent.userData['instances'].indexOf(this.instanceKey);
24
+ // If the instance wasn't found or exceeds the parents draw range, bail out
25
+ if (instanceId === -1 || instanceId > parent.geometry.drawRange.count)
26
+ return;
27
+ const threshold = raycaster.params.Points?.threshold ?? 1;
28
+ _sphere.set(this.getWorldPosition(_position), threshold);
29
+ if (raycaster.ray.intersectsSphere(_sphere) === false)
30
+ return;
31
+ _inverseMatrix.copy(parent.matrixWorld).invert();
32
+ _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);
33
+ const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);
34
+ const localThresholdSq = localThreshold * localThreshold;
35
+ const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);
36
+ if (rayPointDistanceSq < localThresholdSq) {
37
+ const intersectPoint = new THREE.Vector3();
38
+ _ray.closestPointToPoint(this.position, intersectPoint);
39
+ intersectPoint.applyMatrix4(this.matrixWorld);
40
+ const distance = raycaster.ray.origin.distanceTo(intersectPoint);
41
+ if (distance < raycaster.near || distance > raycaster.far)
42
+ return;
43
+ intersects.push({
44
+ distance: distance,
45
+ distanceToRay: Math.sqrt(rayPointDistanceSq),
46
+ point: intersectPoint,
47
+ index: instanceId,
48
+ face: null,
49
+ object: this,
50
+ });
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9wb2ludHMvcG9zaXRpb24tcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFcEQsTUFBTSxPQUFPLGFBQWMsU0FBUSxLQUFLLENBQUMsS0FBSztJQU03QztRQUNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztJQUM5QyxDQUFDO0lBRVEsT0FBTyxDQUFDLFNBQTBCLEVBQUUsVUFBZ0M7UUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUUsMkVBQTJFO1FBQzNFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUU5RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLO1lBQUUsT0FBTztRQUU5RCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN6RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakUsSUFBSSxrQkFBa0IsR0FBRyxnQkFBZ0IsRUFBRTtZQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN4RCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUc7Z0JBQUUsT0FBTztZQUNsRSxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztTQUNIO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IC8qQF9fUFVSRV9fKi8gbmV3IFRIUkVFLk1hdHJpeDQoKTtcbmNvbnN0IF9yYXkgPSAvKkBfX1BVUkVfXyovIG5ldyBUSFJFRS5SYXkoKTtcbmNvbnN0IF9zcGhlcmUgPSAvKkBfX1BVUkVfXyovIG5ldyBUSFJFRS5TcGhlcmUoKTtcbmNvbnN0IF9wb3NpdGlvbiA9IC8qQF9fUFVSRV9fKi8gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uUG9pbnQgZXh0ZW5kcyBUSFJFRS5Hcm91cCB7XG5cdHNpemU6IG51bWJlcjtcblx0Y29sb3I6IFRIUkVFLkNvbG9yO1xuXHRpbnN0YW5jZTogRWxlbWVudFJlZjxUSFJFRS5Qb2ludHMgfCB1bmRlZmluZWQ+O1xuXHRpbnN0YW5jZUtleTogRWxlbWVudFJlZjxhbnk+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5zaXplID0gMDtcblx0XHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpO1xuXHRcdHRoaXMuaW5zdGFuY2UgPSBuZXcgRWxlbWVudFJlZih1bmRlZmluZWQpO1xuXHRcdHRoaXMuaW5zdGFuY2VLZXkgPSBuZXcgRWxlbWVudFJlZih1bmRlZmluZWQpO1xuXHR9XG5cblx0Ly8gVGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIGhhdmUgYm91bmRzXG5cdGdldCBnZW9tZXRyeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnN0YW5jZS5uYXRpdmVFbGVtZW50Py5nZW9tZXRyeTtcblx0fVxuXG5cdG92ZXJyaWRlIHJheWNhc3QocmF5Y2FzdGVyOiBUSFJFRS5SYXljYXN0ZXIsIGludGVyc2VjdHM6IFRIUkVFLkludGVyc2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5pbnN0YW5jZS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2VvbWV0cnkpIHJldHVybjtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMuaW5zdGFuY2VLZXkpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50Lmdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdGhyZXNob2xkID0gcmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHM/LnRocmVzaG9sZCA/PyAxO1xuXHRcdF9zcGhlcmUuc2V0KHRoaXMuZ2V0V29ybGRQb3NpdGlvbihfcG9zaXRpb24pLCB0aHJlc2hvbGQpO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm47XG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0X3JheS5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXHRcdGNvbnN0IHJheVBvaW50RGlzdGFuY2VTcSA9IF9yYXkuZGlzdGFuY2VTcVRvUG9pbnQodGhpcy5wb3NpdGlvbik7XG5cblx0XHRpZiAocmF5UG9pbnREaXN0YW5jZVNxIDwgbG9jYWxUaHJlc2hvbGRTcSkge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0UG9pbnQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRcdFx0X3JheS5jbG9zZXN0UG9pbnRUb1BvaW50KHRoaXMucG9zaXRpb24sIGludGVyc2VjdFBvaW50KTtcblx0XHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhpbnRlcnNlY3RQb2ludCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KHJheVBvaW50RGlzdGFuY2VTcSksXG5cdFx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdFx0aW5kZXg6IGluc3RhbmNlSWQsXG5cdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdG9iamVjdDogdGhpcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import * as THREE from 'three';
2
+ export class SegmentObject {
3
+ constructor() {
4
+ this.color = new THREE.Color('white');
5
+ this.start = new THREE.Vector3(0, 0, 0);
6
+ this.end = new THREE.Vector3(0, 0, 0);
7
+ }
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9zZWdtZW50cy9zZWdtZW50LW9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLE9BQU8sYUFBYTtJQUl6QjtRQUNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTZWdtZW50T2JqZWN0IHtcblx0Y29sb3I6IFRIUkVFLkNvbG9yO1xuXHRzdGFydDogVEhSRUUuVmVjdG9yMztcblx0ZW5kOiBUSFJFRS5WZWN0b3IzO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpO1xuXHRcdHRoaXMuc3RhcnQgPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKTtcblx0XHR0aGlzLmVuZCA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,182 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, NgZone, computed, effect, forwardRef, inject, signal, untracked, } from '@angular/core';
2
+ import { NgtArgs, createInjectionToken, extend, injectBeforeRender, injectNgtRef, is, signalStore, } from 'angular-three';
3
+ import * as THREE from 'three';
4
+ import { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';
5
+ import { SegmentObject } from './segment-object';
6
+ import * as i0 from "@angular/core";
7
+ const normPos = (pos) => pos instanceof THREE.Vector3
8
+ ? pos
9
+ : new THREE.Vector3(...(typeof pos === 'number' ? [pos, pos, pos] : pos));
10
+ extend({ SegmentObject });
11
+ export const [injectNgtsSegmentsApi, provideNgtsSegmentsApi] = createInjectionToken((segments) => segments.api, { isRoot: false, deps: [forwardRef(() => NgtsSegments)] });
12
+ export class NgtsSegment {
13
+ constructor() {
14
+ this.inputs = signalStore({});
15
+ this.segmentRef = injectNgtRef();
16
+ this.segmentsApi = injectNgtsSegmentsApi();
17
+ this.injector = inject(Injector);
18
+ this.zone = inject(NgZone);
19
+ this.start = this.inputs.select('start');
20
+ this.end = this.inputs.select('end');
21
+ this.normalizedStart = computed(() => normPos(this.start()));
22
+ this.normalizedEnd = computed(() => normPos(this.end()));
23
+ this.color = this.inputs.select('color');
24
+ }
25
+ set _start(start) {
26
+ this.inputs.set({ start });
27
+ }
28
+ set _end(end) {
29
+ this.inputs.set({ end });
30
+ }
31
+ set _color(color) {
32
+ this.inputs.set({ color });
33
+ }
34
+ ngOnInit() {
35
+ effect((onCleanup) => {
36
+ const cleanup = this.zone.runOutsideAngular(() => {
37
+ const api = this.segmentsApi();
38
+ return api.subscribe(this.segmentRef);
39
+ });
40
+ onCleanup(cleanup);
41
+ }, { injector: this.injector });
42
+ }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegment, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSegment, isStandalone: true, selector: "ngts-segment", inputs: { segmentRef: "segmentRef", _start: ["start", "_start"], _end: ["end", "_end"], _color: ["color", "_color"] }, ngImport: i0, template: `
45
+ <ngt-segment-object [ref]="segmentRef" [color]="color()" [start]="normalizedStart()" [end]="normalizedEnd()" />
46
+ `, isInline: true }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegment, decorators: [{
49
+ type: Component,
50
+ args: [{
51
+ selector: 'ngts-segment',
52
+ standalone: true,
53
+ template: `
54
+ <ngt-segment-object [ref]="segmentRef" [color]="color()" [start]="normalizedStart()" [end]="normalizedEnd()" />
55
+ `,
56
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
57
+ }]
58
+ }], propDecorators: { segmentRef: [{
59
+ type: Input
60
+ }], _start: [{
61
+ type: Input,
62
+ args: [{ alias: 'start' }]
63
+ }], _end: [{
64
+ type: Input,
65
+ args: [{ alias: 'end' }]
66
+ }], _color: [{
67
+ type: Input,
68
+ args: [{ alias: 'color' }]
69
+ }] } });
70
+ export class NgtsSegments {
71
+ set _limit(limit) {
72
+ this.inputs.set({ limit });
73
+ }
74
+ set _lineWidth(lineWidth) {
75
+ this.inputs.set({ lineWidth });
76
+ }
77
+ constructor() {
78
+ this.inputs = signalStore({ limit: 1000, lineWidth: 1 });
79
+ this.segmentsRef = injectNgtRef();
80
+ this.segments = signal([]);
81
+ this.limit = this.inputs.select('limit');
82
+ this.positions = computed(() => Array(this.limit() * 6).fill(0));
83
+ this.colors = computed(() => Array(this.limit() * 6).fill(0));
84
+ this.resolution = new THREE.Vector2(512, 512);
85
+ this.lineWidth = this.inputs.select('lineWidth');
86
+ this.line = new Line2();
87
+ this.material = new LineMaterial();
88
+ this.geometry = new LineSegmentsGeometry();
89
+ this.api = computed(() => ({
90
+ subscribe: (segmentRef) => {
91
+ untracked(() => {
92
+ this.segments.update((s) => [...s, segmentRef]);
93
+ });
94
+ return () => {
95
+ untracked(() => {
96
+ this.segments.update((s) => s.filter((segment) => segment !== segmentRef));
97
+ });
98
+ };
99
+ },
100
+ }));
101
+ this.beforeRender();
102
+ }
103
+ beforeRender() {
104
+ injectBeforeRender(() => {
105
+ const [segments, limit, positions, colors] = [
106
+ this.segments(),
107
+ this.limit(),
108
+ this.positions(),
109
+ this.colors(),
110
+ ];
111
+ for (let i = 0; i < limit; i++) {
112
+ const segmentRef = segments[i];
113
+ const segment = is.ref(segmentRef) ? segmentRef.nativeElement : segmentRef;
114
+ if (segment) {
115
+ positions[i * 6 + 0] = segment.start.x;
116
+ positions[i * 6 + 1] = segment.start.y;
117
+ positions[i * 6 + 2] = segment.start.z;
118
+ positions[i * 6 + 3] = segment.end.x;
119
+ positions[i * 6 + 4] = segment.end.y;
120
+ positions[i * 6 + 5] = segment.end.z;
121
+ colors[i * 6 + 0] = segment.color.r;
122
+ colors[i * 6 + 1] = segment.color.g;
123
+ colors[i * 6 + 2] = segment.color.b;
124
+ colors[i * 6 + 3] = segment.color.r;
125
+ colors[i * 6 + 4] = segment.color.g;
126
+ colors[i * 6 + 5] = segment.color.b;
127
+ }
128
+ }
129
+ this.geometry.setColors(colors);
130
+ this.geometry.setPositions(positions);
131
+ this.line.computeLineDistances();
132
+ });
133
+ }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegments, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsSegments, isStandalone: true, selector: "ngts-segments", inputs: { segmentsRef: "segmentsRef", _limit: ["limit", "_limit"], _lineWidth: ["lineWidth", "_lineWidth"] }, providers: [provideNgtsSegmentsApi()], ngImport: i0, template: `
136
+ <ngt-primitive *args="[line]" [ref]="segmentsRef">
137
+ <ngt-primitive *args="[geometry]" attach="geometry" />
138
+ <ngt-primitive
139
+ *args="[material]"
140
+ attach="material"
141
+ ngtCompound
142
+ [vertexColors]="true"
143
+ [resolution]="resolution"
144
+ [linewidth]="lineWidth()"
145
+ />
146
+ <ng-content />
147
+ </ngt-primitive>
148
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsSegments, decorators: [{
151
+ type: Component,
152
+ args: [{
153
+ selector: 'ngts-segments',
154
+ standalone: true,
155
+ template: `
156
+ <ngt-primitive *args="[line]" [ref]="segmentsRef">
157
+ <ngt-primitive *args="[geometry]" attach="geometry" />
158
+ <ngt-primitive
159
+ *args="[material]"
160
+ attach="material"
161
+ ngtCompound
162
+ [vertexColors]="true"
163
+ [resolution]="resolution"
164
+ [linewidth]="lineWidth()"
165
+ />
166
+ <ng-content />
167
+ </ngt-primitive>
168
+ `,
169
+ imports: [NgtArgs],
170
+ providers: [provideNgtsSegmentsApi()],
171
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
172
+ }]
173
+ }], ctorParameters: function () { return []; }, propDecorators: { segmentsRef: [{
174
+ type: Input
175
+ }], _limit: [{
176
+ type: Input,
177
+ args: [{ alias: 'limit' }]
178
+ }], _lineWidth: [{
179
+ type: Input,
180
+ args: [{ alias: 'lineWidth' }]
181
+ }] } });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9zZWdtZW50cy9zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sT0FBTyxFQUVQLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixFQUFFLEVBQ0YsV0FBVyxHQUdYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFxQmpELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBOEIsRUFBMEIsRUFBRSxDQUMxRSxHQUFHLFlBQVksS0FBSyxDQUFDLE9BQU87SUFDM0IsQ0FBQyxDQUFDLEdBQUc7SUFDTCxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUE4QixDQUFDLENBQUM7QUFFMUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUUxQixNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHNCQUFzQixDQUFDLEdBQUcsb0JBQW9C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QztnQkFDM0UsSUFBSSxPQUFPLEVBQUU7b0JBQ1osU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFdkMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFckMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFFcEMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDcEM7YUFDRDtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBNUVXLFlBQVk7a0dBQVosWUFBWSwwS0FIYixDQUFDLHNCQUFzQixFQUFFLENBQUMsMEJBZjNCOzs7Ozs7Ozs7Ozs7O0VBYVQsNERBQ1MsT0FBTzs7MkZBSUwsWUFBWTtrQkFyQnhCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7RUFhVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNqQzswRUFJUyxXQUFXO3NCQUFuQixLQUFLO2dCQUV5QixNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFJVSxVQUFVO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0SW5qZWN0b3IsXG5cdElucHV0LFxuXHROZ1pvbmUsXG5cdE9uSW5pdCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHROZ3RBcmdzLFxuXHROZ3RSZWYsXG5cdGNyZWF0ZUluamVjdGlvblRva2VuLFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpcyxcblx0c2lnbmFsU3RvcmUsXG5cdHR5cGUgTmd0Q29sb3IsXG5cdHR5cGUgTmd0VmVjdG9yMyxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBMaW5lMiwgTGluZU1hdGVyaWFsLCBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBTZWdtZW50T2JqZWN0IH0gZnJvbSAnLi9zZWdtZW50LW9iamVjdCc7XG5cbmV4cG9ydCB0eXBlIE5ndHNTZWdtZW50U3RhdGUgPSB7XG5cdHN0YXJ0PzogTmd0VmVjdG9yMztcblx0ZW5kPzogTmd0VmVjdG9yMztcblx0Y29sb3I/OiBOZ3RDb2xvcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndHNTZWdtZW50c1N0YXRlID0ge1xuXHRsaW1pdDogbnVtYmVyO1xuXHRsaW5lV2lkdGg6IG51bWJlcjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0J25ndC1zZWdtZW50LW9iamVjdCc6IFNlZ21lbnRPYmplY3Q7XG5cdFx0J25ndHMtc2VnbWVudCc6IE5ndHNTZWdtZW50U3RhdGU7XG5cdFx0J25ndHMtc2VnbWVudHMnOiBOZ3RzU2VnbWVudHNTdGF0ZTtcblx0fVxufVxuXG5jb25zdCBub3JtUG9zID0gKHBvczogTmd0c1NlZ21lbnRTdGF0ZVsnc3RhcnQnXSk6IFNlZ21lbnRPYmplY3RbJ3N0YXJ0J10gPT5cblx0cG9zIGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yM1xuXHRcdD8gcG9zXG5cdFx0OiBuZXcgVEhSRUUuVmVjdG9yMyguLi4oKHR5cGVvZiBwb3MgPT09ICdudW1iZXInID8gW3BvcywgcG9zLCBwb3NdIDogcG9zKSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKTtcblxuZXh0ZW5kKHsgU2VnbWVudE9iamVjdCB9KTtcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROZ3RzU2VnbWVudHNBcGksIHByb3ZpZGVOZ3RzU2VnbWVudHNBcGldID0gY3JlYXRlSW5qZWN0aW9uVG9rZW4oXG5cdChzZWdtZW50czogTmd0c1NlZ21lbnRzKSA9PiBzZWdtZW50cy5hcGksXG5cdHsgaXNSb290OiBmYWxzZSwgZGVwczogW2ZvcndhcmRSZWYoKCkgPT4gTmd0c1NlZ21lbnRzKV0gfSxcbik7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc2VnbWVudCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1zZWdtZW50LW9iamVjdCBbcmVmXT1cInNlZ21lbnRSZWZcIiBbY29sb3JdPVwiY29sb3IoKVwiIFtzdGFydF09XCJub3JtYWxpemVkU3RhcnQoKVwiIFtlbmRdPVwibm9ybWFsaXplZEVuZCgpXCIgLz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU2VnbWVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1NlZ21lbnRTdGF0ZT4oe30pO1xuXG5cdEBJbnB1dCgpIHNlZ21lbnRSZWYgPSBpbmplY3ROZ3RSZWY8U2VnbWVudE9iamVjdD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ3N0YXJ0JyB9KSBzZXQgX3N0YXJ0KHN0YXJ0OiBOZ3RWZWN0b3IzKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3RhcnQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2VuZCcgfSkgc2V0IF9lbmQoZW5kOiBOZ3RWZWN0b3IzKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZW5kIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvcicgfSkgc2V0IF9jb2xvcihjb2xvcjogTmd0Q29sb3IpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdHByaXZhdGUgc2VnbWVudHNBcGkgPSBpbmplY3ROZ3RzU2VnbWVudHNBcGkoKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cdHByaXZhdGUgc3RhcnQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3N0YXJ0Jyk7XG5cdHByaXZhdGUgZW5kID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdlbmQnKTtcblxuXHRub3JtYWxpemVkU3RhcnQgPSBjb21wdXRlZCgoKSA9PiBub3JtUG9zKHRoaXMuc3RhcnQoKSkpO1xuXHRub3JtYWxpemVkRW5kID0gY29tcHV0ZWQoKCkgPT4gbm9ybVBvcyh0aGlzLmVuZCgpKSk7XG5cdGNvbG9yID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvcicpO1xuXG5cdG5nT25Jbml0KCkge1xuXHRcdGVmZmVjdChcblx0XHRcdChvbkNsZWFudXApID0+IHtcblx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYXBpID0gdGhpcy5zZWdtZW50c0FwaSgpO1xuXHRcdFx0XHRcdHJldHVybiBhcGkuc3Vic2NyaWJlKHRoaXMuc2VnbWVudFJlZik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRvbkNsZWFudXAoY2xlYW51cCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdCk7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1zZWdtZW50cycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbGluZV1cIiBbcmVmXT1cInNlZ21lbnRzUmVmXCI+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltnZW9tZXRyeV1cIiBhdHRhY2g9XCJnZW9tZXRyeVwiIC8+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZVxuXHRcdFx0XHQqYXJncz1cIlttYXRlcmlhbF1cIlxuXHRcdFx0XHRhdHRhY2g9XCJtYXRlcmlhbFwiXG5cdFx0XHRcdG5ndENvbXBvdW5kXG5cdFx0XHRcdFt2ZXJ0ZXhDb2xvcnNdPVwidHJ1ZVwiXG5cdFx0XHRcdFtyZXNvbHV0aW9uXT1cInJlc29sdXRpb25cIlxuXHRcdFx0XHRbbGluZXdpZHRoXT1cImxpbmVXaWR0aCgpXCJcblx0XHRcdC8+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxuXHRwcm92aWRlcnM6IFtwcm92aWRlTmd0c1NlZ21lbnRzQXBpKCldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTZWdtZW50cyB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1NlZ21lbnRzU3RhdGU+KHsgbGltaXQ6IDEwMDAsIGxpbmVXaWR0aDogMSB9KTtcblxuXHRASW5wdXQoKSBzZWdtZW50c1JlZiA9IGluamVjdE5ndFJlZjxMaW5lMj4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2xpbWl0JyB9KSBzZXQgX2xpbWl0KGxpbWl0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBsaW1pdCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbGluZVdpZHRoJyB9KSBzZXQgX2xpbmVXaWR0aChsaW5lV2lkdGg6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGxpbmVXaWR0aCB9KTtcblx0fVxuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBzaWduYWw8Tmd0UmVmPFNlZ21lbnRPYmplY3Q+W10+KFtdKTtcblx0cHJpdmF0ZSBsaW1pdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbGltaXQnKTtcblxuXHRwcml2YXRlIHBvc2l0aW9ucyA9IGNvbXB1dGVkKCgpID0+IEFycmF5KHRoaXMubGltaXQoKSAqIDYpLmZpbGwoMCkpO1xuXHRwcml2YXRlIGNvbG9ycyA9IGNvbXB1dGVkKCgpID0+IEFycmF5KHRoaXMubGltaXQoKSAqIDYpLmZpbGwoMCkpO1xuXG5cdHJlc29sdXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMig1MTIsIDUxMik7XG5cdGxpbmVXaWR0aCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbGluZVdpZHRoJyk7XG5cdGxpbmUgPSBuZXcgTGluZTIoKTtcblx0bWF0ZXJpYWwgPSBuZXcgTGluZU1hdGVyaWFsKCk7XG5cdGdlb21ldHJ5ID0gbmV3IExpbmVTZWdtZW50c0dlb21ldHJ5KCk7XG5cblx0YXBpID0gY29tcHV0ZWQoKCkgPT4gKHtcblx0XHRzdWJzY3JpYmU6IChzZWdtZW50UmVmOiBOZ3RSZWY8U2VnbWVudE9iamVjdD4pID0+IHtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VnbWVudHMudXBkYXRlKChzKSA9PiBbLi4ucywgc2VnbWVudFJlZl0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zZWdtZW50cy51cGRhdGUoKHMpID0+IHMuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICE9PSBzZWdtZW50UmVmKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXHR9KSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbc2VnbWVudHMsIGxpbWl0LCBwb3NpdGlvbnMsIGNvbG9yc10gPSBbXG5cdFx0XHRcdHRoaXMuc2VnbWVudHMoKSxcblx0XHRcdFx0dGhpcy5saW1pdCgpLFxuXHRcdFx0XHR0aGlzLnBvc2l0aW9ucygpLFxuXHRcdFx0XHR0aGlzLmNvbG9ycygpLFxuXHRcdFx0XTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzZWdtZW50UmVmID0gc2VnbWVudHNbaV07XG5cdFx0XHRcdGNvbnN0IHNlZ21lbnQgPSBpcy5yZWYoc2VnbWVudFJlZikgPyBzZWdtZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBzZWdtZW50UmVmO1xuXHRcdFx0XHRpZiAoc2VnbWVudCkge1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDBdID0gc2VnbWVudC5zdGFydC54O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDFdID0gc2VnbWVudC5zdGFydC55O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDJdID0gc2VnbWVudC5zdGFydC56O1xuXG5cdFx0XHRcdFx0cG9zaXRpb25zW2kgKiA2ICsgM10gPSBzZWdtZW50LmVuZC54O1xuXHRcdFx0XHRcdHBvc2l0aW9uc1tpICogNiArIDRdID0gc2VnbWVudC5lbmQueTtcblx0XHRcdFx0XHRwb3NpdGlvbnNbaSAqIDYgKyA1XSA9IHNlZ21lbnQuZW5kLno7XG5cblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAwXSA9IHNlZ21lbnQuY29sb3Iucjtcblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAxXSA9IHNlZ21lbnQuY29sb3IuZztcblx0XHRcdFx0XHRjb2xvcnNbaSAqIDYgKyAyXSA9IHNlZ21lbnQuY29sb3IuYjtcblxuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDNdID0gc2VnbWVudC5jb2xvci5yO1xuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDRdID0gc2VnbWVudC5jb2xvci5nO1xuXHRcdFx0XHRcdGNvbG9yc1tpICogNiArIDVdID0gc2VnbWVudC5jb2xvci5iO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdlb21ldHJ5LnNldENvbG9ycyhjb2xvcnMpO1xuXHRcdFx0dGhpcy5nZW9tZXRyeS5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcblx0XHRcdHRoaXMubGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -2,4 +2,4 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLXNoYWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9hbmd1bGFyLXRocmVlLXNvYmEtc2hhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLXNoYWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLXNoYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,61 @@
1
+ import { BufferAttribute, BufferGeometry, HalfFloatType, LinearFilter, Mesh, PerspectiveCamera, Scene, Vector2, WebGLRenderTarget, } from 'three';
2
+ import { ConvolutionMaterial } from '../convolution-material/convolution-material';
3
+ export class BlurPass {
4
+ constructor({ gl, resolution, width = 500, height = 500, minDepthThreshold = 0, maxDepthThreshold = 1, depthScale = 0, depthToBlurRatioBias = 0.25, }) {
5
+ this.renderToScreen = false;
6
+ this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {
7
+ minFilter: LinearFilter,
8
+ magFilter: LinearFilter,
9
+ stencilBuffer: false,
10
+ depthBuffer: false,
11
+ type: HalfFloatType,
12
+ });
13
+ this.renderTargetB = this.renderTargetA.clone();
14
+ this.convolutionMaterial = new ConvolutionMaterial();
15
+ this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);
16
+ this.convolutionMaterial.setResolution(new Vector2(width, height));
17
+ this.scene = new Scene();
18
+ this.camera = new PerspectiveCamera();
19
+ this.convolutionMaterial.uniforms['minDepthThreshold'].value = minDepthThreshold;
20
+ this.convolutionMaterial.uniforms['maxDepthThreshold'].value = maxDepthThreshold;
21
+ this.convolutionMaterial.uniforms['depthScale'].value = depthScale;
22
+ this.convolutionMaterial.uniforms['depthToBlurRatioBias'].value = depthToBlurRatioBias;
23
+ this.convolutionMaterial.defines['USE_DEPTH'] = depthScale > 0;
24
+ const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);
25
+ const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);
26
+ const geometry = new BufferGeometry();
27
+ geometry.setAttribute('position', new BufferAttribute(vertices, 3));
28
+ geometry.setAttribute('uv', new BufferAttribute(uvs, 2));
29
+ this.screen = new Mesh(geometry, this.convolutionMaterial);
30
+ this.screen.frustumCulled = false;
31
+ this.scene.add(this.screen);
32
+ }
33
+ render(renderer, inputBuffer, outputBuffer) {
34
+ const scene = this.scene;
35
+ const camera = this.camera;
36
+ const renderTargetA = this.renderTargetA;
37
+ const renderTargetB = this.renderTargetB;
38
+ let material = this.convolutionMaterial;
39
+ let uniforms = material.uniforms;
40
+ uniforms['depthBuffer'].value = inputBuffer.depthTexture;
41
+ const kernel = material.kernel;
42
+ let lastRT = inputBuffer;
43
+ let destRT;
44
+ let i, l;
45
+ // Apply the multi-pass blur.
46
+ for (i = 0, l = kernel.length - 1; i < l; ++i) {
47
+ // Alternate between targets.
48
+ destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;
49
+ uniforms['kernel'].value = kernel[i];
50
+ uniforms['inputBuffer'].value = lastRT.texture;
51
+ renderer.setRenderTarget(destRT);
52
+ renderer.render(scene, camera);
53
+ lastRT = destRT;
54
+ }
55
+ uniforms['kernel'].value = kernel[i];
56
+ uniforms['inputBuffer'].value = lastRT.texture;
57
+ renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);
58
+ renderer.render(scene, camera);
59
+ }
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ci1wYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL2JsdXItcGFzcy9ibHVyLXBhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixjQUFjLEVBRWQsYUFBYSxFQUNiLFlBQVksRUFDWixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxPQUFPLEVBQ1AsaUJBQWlCLEdBRWpCLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFhbkYsTUFBTSxPQUFPLFFBQVE7SUFTcEIsWUFBWSxFQUNYLEVBQUUsRUFDRixVQUFVLEVBQ1YsS0FBSyxHQUFHLEdBQUcsRUFDWCxNQUFNLEdBQUcsR0FBRyxFQUNaLGlCQUFpQixHQUFHLENBQUMsRUFDckIsaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixVQUFVLEdBQUcsQ0FBQyxFQUNkLG9CQUFvQixHQUFHLElBQUksR0FDWjtRQVhoQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVkvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksaUJBQWlCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUNsRSxTQUFTLEVBQUUsWUFBWTtZQUN2QixTQUFTLEVBQUUsWUFBWTtZQUN2QixhQUFhLEVBQUUsS0FBSztZQUNwQixXQUFXLEVBQUUsS0FBSztZQUNsQixJQUFJLEVBQUUsYUFBYTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0s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QUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLDZCQUE2QjtZQUM3QixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUN2RCxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDL0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRCdWZmZXJBdHRyaWJ1dGUsXG5cdEJ1ZmZlckdlb21ldHJ5LFxuXHRDYW1lcmEsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWVzaCxcblx0UGVyc3BlY3RpdmVDYW1lcmEsXG5cdFNjZW5lLFxuXHRWZWN0b3IyLFxuXHRXZWJHTFJlbmRlclRhcmdldCxcblx0V2ViR0xSZW5kZXJlcixcbn0gZnJvbSAndGhyZWUnO1xuXG5pbXBvcnQgeyBDb252b2x1dGlvbk1hdGVyaWFsIH0gZnJvbSAnLi4vY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsdXJQYXNzUHJvcHMge1xuXHRnbDogV2ViR0xSZW5kZXJlcjtcblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHR3aWR0aD86IG51bWJlcjtcblx0aGVpZ2h0PzogbnVtYmVyO1xuXHRtaW5EZXB0aFRocmVzaG9sZD86IG51bWJlcjtcblx0bWF4RGVwdGhUaHJlc2hvbGQ/OiBudW1iZXI7XG5cdGRlcHRoU2NhbGU/OiBudW1iZXI7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQmx1clBhc3Mge1xuXHRyZWFkb25seSByZW5kZXJUYXJnZXRBOiBXZWJHTFJlbmRlclRhcmdldDtcblx0cmVhZG9ubHkgcmVuZGVyVGFyZ2V0QjogV2ViR0xSZW5kZXJUYXJnZXQ7XG5cdHJlYWRvbmx5IGNvbnZvbHV0aW9uTWF0ZXJpYWw6IENvbnZvbHV0aW9uTWF0ZXJpYWw7XG5cdHJlYWRvbmx5IHNjZW5lOiBTY2VuZTtcblx0cmVhZG9ubHkgY2FtZXJhOiBDYW1lcmE7XG5cdHJlYWRvbmx5IHNjcmVlbjogTWVzaDtcblx0cmVuZGVyVG9TY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcih7XG5cdFx0Z2wsXG5cdFx0cmVzb2x1dGlvbixcblx0XHR3aWR0aCA9IDUwMCxcblx0XHRoZWlnaHQgPSA1MDAsXG5cdFx0bWluRGVwdGhUaHJlc2hvbGQgPSAwLFxuXHRcdG1heERlcHRoVGhyZXNob2xkID0gMSxcblx0XHRkZXB0aFNjYWxlID0gMCxcblx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyA9IDAuMjUsXG5cdH06IEJsdXJQYXNzUHJvcHMpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldEEgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwge1xuXHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdHN0ZW5jaWxCdWZmZXI6IGZhbHNlLFxuXHRcdFx0ZGVwdGhCdWZmZXI6IGZhbHNlLFxuXHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHR9KTtcblx0XHR0aGlzLnJlbmRlclRhcmdldEIgPSB0aGlzLnJlbmRlclRhcmdldEEuY2xvbmUoKTtcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwgPSBuZXcgQ29udm9sdXRpb25NYXRlcmlhbCgpO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC5zZXRUZXhlbFNpemUoMS4wIC8gd2lkdGgsIDEuMCAvIGhlaWdodCk7XG5cdFx0dGhpcy5jb252b2x1dGlvbk1hdGVyaWFsLnNldFJlc29sdXRpb24obmV3IFZlY3RvcjIod2lkdGgsIGhlaWdodCkpO1xuXHRcdHRoaXMuc2NlbmUgPSBuZXcgU2NlbmUoKTtcblx0XHR0aGlzLmNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snbWluRGVwdGhUaHJlc2hvbGQnXS52YWx1ZSA9IG1pbkRlcHRoVGhyZXNob2xkO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snbWF4RGVwdGhUaHJlc2hvbGQnXS52YWx1ZSA9IG1heERlcHRoVGhyZXNob2xkO1xuXHRcdHRoaXMuY29udm9sdXRpb25NYXRlcmlhbC51bmlmb3Jtc1snZGVwdGhTY2FsZSddLnZhbHVlID0gZGVwdGhTY2FsZTtcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwudW5pZm9ybXNbJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJ10udmFsdWUgPSBkZXB0aFRvQmx1clJhdGlvQmlhcztcblx0XHR0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwuZGVmaW5lc1snVVNFX0RFUFRIJ10gPSBkZXB0aFNjYWxlID4gMDtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IG5ldyBGbG9hdDMyQXJyYXkoWy0xLCAtMSwgMCwgMywgLTEsIDAsIC0xLCAzLCAwXSk7XG5cdFx0Y29uc3QgdXZzID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMiwgMCwgMCwgMl0pO1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XG5cdFx0Z2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3V2JywgbmV3IEJ1ZmZlckF0dHJpYnV0ZSh1dnMsIDIpKTtcblx0XHR0aGlzLnNjcmVlbiA9IG5ldyBNZXNoKGdlb21ldHJ5LCB0aGlzLmNvbnZvbHV0aW9uTWF0ZXJpYWwpO1xuXHRcdHRoaXMuc2NyZWVuLmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNjZW5lLmFkZCh0aGlzLnNjcmVlbik7XG5cdH1cblxuXHRyZW5kZXIocmVuZGVyZXI6IFdlYkdMUmVuZGVyZXIsIGlucHV0QnVmZmVyOiBXZWJHTFJlbmRlclRhcmdldCwgb3V0cHV0QnVmZmVyOiBXZWJHTFJlbmRlclRhcmdldCkge1xuXHRcdGNvbnN0IHNjZW5lID0gdGhpcy5zY2VuZTtcblx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYTtcblx0XHRjb25zdCByZW5kZXJUYXJnZXRBID0gdGhpcy5yZW5kZXJUYXJnZXRBO1xuXHRcdGNvbnN0IHJlbmRlclRhcmdldEIgPSB0aGlzLnJlbmRlclRhcmdldEI7XG5cdFx0bGV0IG1hdGVyaWFsID0gdGhpcy5jb252b2x1dGlvbk1hdGVyaWFsO1xuXHRcdGxldCB1bmlmb3JtcyA9IG1hdGVyaWFsLnVuaWZvcm1zO1xuXHRcdHVuaWZvcm1zWydkZXB0aEJ1ZmZlciddLnZhbHVlID0gaW5wdXRCdWZmZXIuZGVwdGhUZXh0dXJlO1xuXHRcdGNvbnN0IGtlcm5lbCA9IG1hdGVyaWFsLmtlcm5lbDtcblx0XHRsZXQgbGFzdFJUID0gaW5wdXRCdWZmZXI7XG5cdFx0bGV0IGRlc3RSVDtcblx0XHRsZXQgaSwgbDtcblx0XHQvLyBBcHBseSB0aGUgbXVsdGktcGFzcyBibHVyLlxuXHRcdGZvciAoaSA9IDAsIGwgPSBrZXJuZWwubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkge1xuXHRcdFx0Ly8gQWx0ZXJuYXRlIGJldHdlZW4gdGFyZ2V0cy5cblx0XHRcdGRlc3RSVCA9IChpICYgMSkgPT09IDAgPyByZW5kZXJUYXJnZXRBIDogcmVuZGVyVGFyZ2V0Qjtcblx0XHRcdHVuaWZvcm1zWydrZXJuZWwnXS52YWx1ZSA9IGtlcm5lbFtpXTtcblx0XHRcdHVuaWZvcm1zWydpbnB1dEJ1ZmZlciddLnZhbHVlID0gbGFzdFJULnRleHR1cmU7XG5cdFx0XHRyZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZGVzdFJUKTtcblx0XHRcdHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcblx0XHRcdGxhc3RSVCA9IGRlc3RSVDtcblx0XHR9XG5cdFx0dW5pZm9ybXNbJ2tlcm5lbCddLnZhbHVlID0ga2VybmVsW2ldO1xuXHRcdHVuaWZvcm1zWydpbnB1dEJ1ZmZlciddLnZhbHVlID0gbGFzdFJULnRleHR1cmU7XG5cdFx0cmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucmVuZGVyVG9TY3JlZW4gPyBudWxsIDogb3V0cHV0QnVmZmVyKTtcblx0XHRyZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,130 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const CausticsMaterial = shaderMaterial({
4
+ cameraMatrixWorld: new THREE.Matrix4(),
5
+ cameraProjectionMatrixInv: new THREE.Matrix4(),
6
+ normalTexture: null,
7
+ depthTexture: null,
8
+ lightDir: new THREE.Vector3(0, 1, 0),
9
+ lightPlaneNormal: new THREE.Vector3(0, 1, 0),
10
+ lightPlaneConstant: 0,
11
+ near: 0.1,
12
+ far: 100,
13
+ modelMatrix: new THREE.Matrix4(),
14
+ worldRadius: 1 / 40,
15
+ ior: 1.1,
16
+ bounces: 0,
17
+ resolution: 1024,
18
+ size: 10,
19
+ intensity: 0.5,
20
+ },
21
+ /* glsl */ `
22
+ varying vec2 vUv;
23
+ void main() {
24
+ vUv = uv;
25
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
26
+ }`,
27
+ /* glsl */ `
28
+ uniform mat4 cameraMatrixWorld;
29
+ uniform mat4 cameraProjectionMatrixInv;
30
+ uniform vec3 lightDir;
31
+ uniform vec3 lightPlaneNormal;
32
+ uniform float lightPlaneConstant;
33
+ uniform float near;
34
+ uniform float far;
35
+ uniform float time;
36
+ uniform float worldRadius;
37
+ uniform float resolution;
38
+ uniform float size;
39
+ uniform float intensity;
40
+ uniform float ior;
41
+ precision highp isampler2D;
42
+ precision highp usampler2D;
43
+ uniform sampler2D normalTexture;
44
+ uniform sampler2D depthTexture;
45
+ uniform float bounces;
46
+ varying vec2 vUv;
47
+ vec3 WorldPosFromDepth(float depth, vec2 coord) {
48
+ float z = depth * 2.0 - 1.0;
49
+ vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);
50
+ vec4 viewSpacePosition = cameraProjectionMatrixInv * clipSpacePosition;
51
+ // Perspective division
52
+ viewSpacePosition /= viewSpacePosition.w;
53
+ vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;
54
+ return worldSpacePosition.xyz;
55
+ }
56
+ float sdPlane( vec3 p, vec3 n, float h ) {
57
+ // n must be normalized
58
+ return dot(p,n) + h;
59
+ }
60
+ float planeIntersect( vec3 ro, vec3 rd, vec4 p ) {
61
+ return -(dot(ro,p.xyz)+p.w)/dot(rd,p.xyz);
62
+ }
63
+ vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 pos, vec3 normal, float ior, out vec3 rayOrigin, out vec3 rayDirection) {
64
+ rayOrigin = ro;
65
+ rayDirection = rd;
66
+ rayDirection = refract(rayDirection, normal, 1.0 / ior);
67
+ rayOrigin = pos + rayDirection * 0.1;
68
+ return rayDirection;
69
+ }
70
+ void main() {
71
+ // Each sample consists of random offset in the x and y direction
72
+ float caustic = 0.0;
73
+ float causticTexelSize = (1.0 / resolution) * size * 2.0;
74
+ float texelsNeeded = worldRadius / causticTexelSize;
75
+ float sampleRadius = texelsNeeded / resolution;
76
+ float sum = 0.0;
77
+ if (texture2D(depthTexture, vUv).x == 1.0) {
78
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
79
+ return;
80
+ }
81
+ vec2 offset1 = vec2(-0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);
82
+ vec2 offset2 = vec2(-0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);
83
+ vec2 offset3 = vec2(0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);
84
+ vec2 offset4 = vec2(0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);
85
+ vec2 uv1 = vUv + offset1 * sampleRadius;
86
+ vec2 uv2 = vUv + offset2 * sampleRadius;
87
+ vec2 uv3 = vUv + offset3 * sampleRadius;
88
+ vec2 uv4 = vUv + offset4 * sampleRadius;
89
+ vec3 normal1 = texture2D(normalTexture, uv1, -10.0).rgb * 2.0 - 1.0;
90
+ vec3 normal2 = texture2D(normalTexture, uv2, -10.0).rgb * 2.0 - 1.0;
91
+ vec3 normal3 = texture2D(normalTexture, uv3, -10.0).rgb * 2.0 - 1.0;
92
+ vec3 normal4 = texture2D(normalTexture, uv4, -10.0).rgb * 2.0 - 1.0;
93
+ float depth1 = texture2D(depthTexture, uv1, -10.0).x;
94
+ float depth2 = texture2D(depthTexture, uv2, -10.0).x;
95
+ float depth3 = texture2D(depthTexture, uv3, -10.0).x;
96
+ float depth4 = texture2D(depthTexture, uv4, -10.0).x;
97
+ // Sanity check the depths
98
+ if (depth1 == 1.0 || depth2 == 1.0 || depth3 == 1.0 || depth4 == 1.0) {
99
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
100
+ return;
101
+ }
102
+ vec3 pos1 = WorldPosFromDepth(depth1, uv1);
103
+ vec3 pos2 = WorldPosFromDepth(depth2, uv2);
104
+ vec3 pos3 = WorldPosFromDepth(depth3, uv3);
105
+ vec3 pos4 = WorldPosFromDepth(depth4, uv4);
106
+ vec3 originPos1 = WorldPosFromDepth(0.0, uv1);
107
+ vec3 originPos2 = WorldPosFromDepth(0.0, uv2);
108
+ vec3 originPos3 = WorldPosFromDepth(0.0, uv3);
109
+ vec3 originPos4 = WorldPosFromDepth(0.0, uv4);
110
+ vec3 endPos1, endPos2, endPos3, endPos4;
111
+ vec3 endDir1, endDir2, endDir3, endDir4;
112
+ totalInternalReflection(originPos1, lightDir, pos1, normal1, ior, endPos1, endDir1);
113
+ totalInternalReflection(originPos2, lightDir, pos2, normal2, ior, endPos2, endDir2);
114
+ totalInternalReflection(originPos3, lightDir, pos3, normal3, ior, endPos3, endDir3);
115
+ totalInternalReflection(originPos4, lightDir, pos4, normal4, ior, endPos4, endDir4);
116
+ float lightPosArea = length(cross(originPos2 - originPos1, originPos3 - originPos1)) + length(cross(originPos3 - originPos1, originPos4 - originPos1));
117
+ float t1 = planeIntersect(endPos1, endDir1, vec4(lightPlaneNormal, lightPlaneConstant));
118
+ float t2 = planeIntersect(endPos2, endDir2, vec4(lightPlaneNormal, lightPlaneConstant));
119
+ float t3 = planeIntersect(endPos3, endDir3, vec4(lightPlaneNormal, lightPlaneConstant));
120
+ float t4 = planeIntersect(endPos4, endDir4, vec4(lightPlaneNormal, lightPlaneConstant));
121
+ vec3 finalPos1 = endPos1 + endDir1 * t1;
122
+ vec3 finalPos2 = endPos2 + endDir2 * t2;
123
+ vec3 finalPos3 = endPos3 + endDir3 * t3;
124
+ vec3 finalPos4 = endPos4 + endDir4 * t4;
125
+ float finalArea = length(cross(finalPos2 - finalPos1, finalPos3 - finalPos1)) + length(cross(finalPos3 - finalPos1, finalPos4 - finalPos1));
126
+ caustic += intensity * (lightPosArea / finalArea);
127
+ // Calculate the area of the triangle in light spaces
128
+ gl_FragColor = vec4(vec3(max(caustic, 0.0)), 1.0);
129
+ }`);
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1c3RpY3MtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvY2F1c3RpY3MvY2F1c3RpY3MtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDN0M7SUFDQyxpQkFBaUIsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDdEMseUJBQXlCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQzlDLGFBQWEsRUFBRSxJQUFJO0lBQ25CLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFFBQVEsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsZ0JBQWdCLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLGtCQUFrQixFQUFFLENBQUM7SUFDckIsSUFBSSxFQUFFLEdBQUc7SUFDVCxHQUFHLEVBQUUsR0FBRztJQUNSLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDaEMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFO0lBQ25CLEdBQUcsRUFBRSxHQUFHO0lBQ1IsT0FBTyxFQUFFLENBQUM7SUFDVixVQUFVLEVBQUUsSUFBSTtJQUNoQixJQUFJLEVBQUUsRUFBRTtJQUNSLFNBQVMsRUFBRSxHQUFHO0NBQ2Q7QUFDRCxVQUFVLENBQUM7Ozs7O0lBS1I7QUFDSCxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNHUixDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgQ2F1c3RpY3NNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2FtZXJhTWF0cml4V29ybGQ6IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cdFx0Y2FtZXJhUHJvamVjdGlvbk1hdHJpeEludjogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRub3JtYWxUZXh0dXJlOiBudWxsLFxuXHRcdGRlcHRoVGV4dHVyZTogbnVsbCxcblx0XHRsaWdodERpcjogbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCksXG5cdFx0bGlnaHRQbGFuZU5vcm1hbDogbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCksXG5cdFx0bGlnaHRQbGFuZUNvbnN0YW50OiAwLFxuXHRcdG5lYXI6IDAuMSxcblx0XHRmYXI6IDEwMCxcblx0XHRtb2RlbE1hdHJpeDogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHR3b3JsZFJhZGl1czogMSAvIDQwLFxuXHRcdGlvcjogMS4xLFxuXHRcdGJvdW5jZXM6IDAsXG5cdFx0cmVzb2x1dGlvbjogMTAyNCxcblx0XHRzaXplOiAxMCxcblx0XHRpbnRlbnNpdHk6IDAuNSxcblx0fSxcblx0LyogZ2xzbCAqLyBgXG4gIHZhcnlpbmcgdmVjMiB2VXY7XG4gIHZvaWQgbWFpbigpIHtcbiAgICAgIHZVdiA9IHV2O1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgfWAsXG5cdC8qIGdsc2wgKi8gYFxuICB1bmlmb3JtIG1hdDQgY2FtZXJhTWF0cml4V29ybGQ7XG4gIHVuaWZvcm0gbWF0NCBjYW1lcmFQcm9qZWN0aW9uTWF0cml4SW52O1xuICB1bmlmb3JtIHZlYzMgbGlnaHREaXI7XG4gIHVuaWZvcm0gdmVjMyBsaWdodFBsYW5lTm9ybWFsO1xuICB1bmlmb3JtIGZsb2F0IGxpZ2h0UGxhbmVDb25zdGFudDtcbiAgdW5pZm9ybSBmbG9hdCBuZWFyO1xuICB1bmlmb3JtIGZsb2F0IGZhcjtcbiAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuICB1bmlmb3JtIGZsb2F0IHdvcmxkUmFkaXVzO1xuICB1bmlmb3JtIGZsb2F0IHJlc29sdXRpb247XG4gIHVuaWZvcm0gZmxvYXQgc2l6ZTtcbiAgdW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7XG4gIHVuaWZvcm0gZmxvYXQgaW9yO1xuICBwcmVjaXNpb24gaGlnaHAgaXNhbXBsZXIyRDtcbiAgcHJlY2lzaW9uIGhpZ2hwIHVzYW1wbGVyMkQ7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbFRleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoVGV4dHVyZTtcbiAgdW5pZm9ybSBmbG9hdCBib3VuY2VzO1xuICB2YXJ5aW5nIHZlYzIgdlV2O1xuICB2ZWMzIFdvcmxkUG9zRnJvbURlcHRoKGZsb2F0IGRlcHRoLCB2ZWMyIGNvb3JkKSB7XG4gICAgZmxvYXQgeiA9IGRlcHRoICogMi4wIC0gMS4wO1xuICAgIHZlYzQgY2xpcFNwYWNlUG9zaXRpb24gPSB2ZWM0KGNvb3JkICogMi4wIC0gMS4wLCB6LCAxLjApO1xuICAgIHZlYzQgdmlld1NwYWNlUG9zaXRpb24gPSBjYW1lcmFQcm9qZWN0aW9uTWF0cml4SW52ICogY2xpcFNwYWNlUG9zaXRpb247XG4gICAgLy8gUGVyc3BlY3RpdmUgZGl2aXNpb25cbiAgICB2aWV3U3BhY2VQb3NpdGlvbiAvPSB2aWV3U3BhY2VQb3NpdGlvbi53O1xuICAgIHZlYzQgd29ybGRTcGFjZVBvc2l0aW9uID0gY2FtZXJhTWF0cml4V29ybGQgKiB2aWV3U3BhY2VQb3NpdGlvbjtcbiAgICByZXR1cm4gd29ybGRTcGFjZVBvc2l0aW9uLnh5ejtcbiAgfVxuICBmbG9hdCBzZFBsYW5lKCB2ZWMzIHAsIHZlYzMgbiwgZmxvYXQgaCApIHtcbiAgICAvLyBuIG11c3QgYmUgbm9ybWFsaXplZFxuICAgIHJldHVybiBkb3QocCxuKSArIGg7XG4gIH1cbiAgZmxvYXQgcGxhbmVJbnRlcnNlY3QoIHZlYzMgcm8sIHZlYzMgcmQsIHZlYzQgcCApIHtcbiAgICByZXR1cm4gLShkb3Qocm8scC54eXopK3AudykvZG90KHJkLHAueHl6KTtcbiAgfVxuICB2ZWMzIHRvdGFsSW50ZXJuYWxSZWZsZWN0aW9uKHZlYzMgcm8sIHZlYzMgcmQsIHZlYzMgcG9zLCB2ZWMzIG5vcm1hbCwgZmxvYXQgaW9yLCBvdXQgdmVjMyByYXlPcmlnaW4sIG91dCB2ZWMzIHJheURpcmVjdGlvbikge1xuICAgIHJheU9yaWdpbiA9IHJvO1xuICAgIHJheURpcmVjdGlvbiA9IHJkO1xuICAgIHJheURpcmVjdGlvbiA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBub3JtYWwsIDEuMCAvIGlvcik7XG4gICAgcmF5T3JpZ2luID0gcG9zICsgcmF5RGlyZWN0aW9uICogMC4xO1xuICAgIHJldHVybiByYXlEaXJlY3Rpb247XG4gIH1cbiAgdm9pZCBtYWluKCkge1xuICAgIC8vIEVhY2ggc2FtcGxlIGNvbnNpc3RzIG9mIHJhbmRvbSBvZmZzZXQgaW4gdGhlIHggYW5kIHkgZGlyZWN0aW9uXG4gICAgZmxvYXQgY2F1c3RpYyA9IDAuMDtcbiAgICBmbG9hdCBjYXVzdGljVGV4ZWxTaXplID0gKDEuMCAvIHJlc29sdXRpb24pICogc2l6ZSAqIDIuMDtcbiAgICBmbG9hdCB0ZXhlbHNOZWVkZWQgPSB3b3JsZFJhZGl1cyAvIGNhdXN0aWNUZXhlbFNpemU7XG4gICAgZmxvYXQgc2FtcGxlUmFkaXVzID0gdGV4ZWxzTmVlZGVkIC8gcmVzb2x1dGlvbjtcbiAgICBmbG9hdCBzdW0gPSAwLjA7XG4gICAgaWYgKHRleHR1cmUyRChkZXB0aFRleHR1cmUsIHZVdikueCA9PSAxLjApIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmVjMiBvZmZzZXQxID0gdmVjMigtMC41LCAtMC41KTsvL3ZlYzIocmFuZCgpIC0gMC41LCByYW5kKCkgLSAwLjUpO1xuICAgIHZlYzIgb2Zmc2V0MiA9IHZlYzIoLTAuNSwgMC41KTsvL3ZlYzIocmFuZCgpIC0gMC41LCByYW5kKCkgLSAwLjUpO1xuICAgIHZlYzIgb2Zmc2V0MyA9IHZlYzIoMC41LCAwLjUpOy8vdmVjMihyYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSk7XG4gICAgdmVjMiBvZmZzZXQ0ID0gdmVjMigwLjUsIC0wLjUpOy8vdmVjMihyYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSk7XG4gICAgdmVjMiB1djEgPSB2VXYgKyBvZmZzZXQxICogc2FtcGxlUmFkaXVzO1xuICAgIHZlYzIgdXYyID0gdlV2ICsgb2Zmc2V0MiAqIHNhbXBsZVJhZGl1cztcbiAgICB2ZWMyIHV2MyA9IHZVdiArIG9mZnNldDMgKiBzYW1wbGVSYWRpdXM7XG4gICAgdmVjMiB1djQgPSB2VXYgKyBvZmZzZXQ0ICogc2FtcGxlUmFkaXVzO1xuICAgIHZlYzMgbm9ybWFsMSA9IHRleHR1cmUyRChub3JtYWxUZXh0dXJlLCB1djEsIC0xMC4wKS5yZ2IgKiAyLjAgLSAxLjA7XG4gICAgdmVjMyBub3JtYWwyID0gdGV4dHVyZTJEKG5vcm1hbFRleHR1cmUsIHV2MiwgLTEwLjApLnJnYiAqIDIuMCAtIDEuMDtcbiAgICB2ZWMzIG5vcm1hbDMgPSB0ZXh0dXJlMkQobm9ybWFsVGV4dHVyZSwgdXYzLCAtMTAuMCkucmdiICogMi4wIC0gMS4wO1xuICAgIHZlYzMgbm9ybWFsNCA9IHRleHR1cmUyRChub3JtYWxUZXh0dXJlLCB1djQsIC0xMC4wKS5yZ2IgKiAyLjAgLSAxLjA7XG4gICAgZmxvYXQgZGVwdGgxID0gdGV4dHVyZTJEKGRlcHRoVGV4dHVyZSwgdXYxLCAtMTAuMCkueDtcbiAgICBmbG9hdCBkZXB0aDIgPSB0ZXh0dXJlMkQoZGVwdGhUZXh0dXJlLCB1djIsIC0xMC4wKS54O1xuICAgIGZsb2F0IGRlcHRoMyA9IHRleHR1cmUyRChkZXB0aFRleHR1cmUsIHV2MywgLTEwLjApLng7XG4gICAgZmxvYXQgZGVwdGg0ID0gdGV4dHVyZTJEKGRlcHRoVGV4dHVyZSwgdXY0LCAtMTAuMCkueDtcbiAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIGRlcHRoc1xuICAgIGlmIChkZXB0aDEgPT0gMS4wIHx8IGRlcHRoMiA9PSAxLjAgfHwgZGVwdGgzID09IDEuMCB8fCBkZXB0aDQgPT0gMS4wKSB7XG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZlYzMgcG9zMSA9IFdvcmxkUG9zRnJvbURlcHRoKGRlcHRoMSwgdXYxKTtcbiAgICB2ZWMzIHBvczIgPSBXb3JsZFBvc0Zyb21EZXB0aChkZXB0aDIsIHV2Mik7XG4gICAgdmVjMyBwb3MzID0gV29ybGRQb3NGcm9tRGVwdGgoZGVwdGgzLCB1djMpO1xuICAgIHZlYzMgcG9zNCA9IFdvcmxkUG9zRnJvbURlcHRoKGRlcHRoNCwgdXY0KTtcbiAgICB2ZWMzIG9yaWdpblBvczEgPSBXb3JsZFBvc0Zyb21EZXB0aCgwLjAsIHV2MSk7XG4gICAgdmVjMyBvcmlnaW5Qb3MyID0gV29ybGRQb3NGcm9tRGVwdGgoMC4wLCB1djIpO1xuICAgIHZlYzMgb3JpZ2luUG9zMyA9IFdvcmxkUG9zRnJvbURlcHRoKDAuMCwgdXYzKTtcbiAgICB2ZWMzIG9yaWdpblBvczQgPSBXb3JsZFBvc0Zyb21EZXB0aCgwLjAsIHV2NCk7XG4gICAgdmVjMyBlbmRQb3MxLCBlbmRQb3MyLCBlbmRQb3MzLCBlbmRQb3M0O1xuICAgIHZlYzMgZW5kRGlyMSwgZW5kRGlyMiwgZW5kRGlyMywgZW5kRGlyNDtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MxLCBsaWdodERpciwgcG9zMSwgbm9ybWFsMSwgaW9yLCBlbmRQb3MxLCBlbmREaXIxKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MyLCBsaWdodERpciwgcG9zMiwgbm9ybWFsMiwgaW9yLCBlbmRQb3MyLCBlbmREaXIyKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3MzLCBsaWdodERpciwgcG9zMywgbm9ybWFsMywgaW9yLCBlbmRQb3MzLCBlbmREaXIzKTtcbiAgICB0b3RhbEludGVybmFsUmVmbGVjdGlvbihvcmlnaW5Qb3M0LCBsaWdodERpciwgcG9zNCwgbm9ybWFsNCwgaW9yLCBlbmRQb3M0LCBlbmREaXI0KTtcbiAgICBmbG9hdCBsaWdodFBvc0FyZWEgPSBsZW5ndGgoY3Jvc3Mob3JpZ2luUG9zMiAtIG9yaWdpblBvczEsIG9yaWdpblBvczMgLSBvcmlnaW5Qb3MxKSkgKyBsZW5ndGgoY3Jvc3Mob3JpZ2luUG9zMyAtIG9yaWdpblBvczEsIG9yaWdpblBvczQgLSBvcmlnaW5Qb3MxKSk7XG4gICAgZmxvYXQgdDEgPSBwbGFuZUludGVyc2VjdChlbmRQb3MxLCBlbmREaXIxLCB2ZWM0KGxpZ2h0UGxhbmVOb3JtYWwsIGxpZ2h0UGxhbmVDb25zdGFudCkpO1xuICAgIGZsb2F0IHQyID0gcGxhbmVJbnRlcnNlY3QoZW5kUG9zMiwgZW5kRGlyMiwgdmVjNChsaWdodFBsYW5lTm9ybWFsLCBsaWdodFBsYW5lQ29uc3RhbnQpKTtcbiAgICBmbG9hdCB0MyA9IHBsYW5lSW50ZXJzZWN0KGVuZFBvczMsIGVuZERpcjMsIHZlYzQobGlnaHRQbGFuZU5vcm1hbCwgbGlnaHRQbGFuZUNvbnN0YW50KSk7XG4gICAgZmxvYXQgdDQgPSBwbGFuZUludGVyc2VjdChlbmRQb3M0LCBlbmREaXI0LCB2ZWM0KGxpZ2h0UGxhbmVOb3JtYWwsIGxpZ2h0UGxhbmVDb25zdGFudCkpO1xuICAgIHZlYzMgZmluYWxQb3MxID0gZW5kUG9zMSArIGVuZERpcjEgKiB0MTtcbiAgICB2ZWMzIGZpbmFsUG9zMiA9IGVuZFBvczIgKyBlbmREaXIyICogdDI7XG4gICAgdmVjMyBmaW5hbFBvczMgPSBlbmRQb3MzICsgZW5kRGlyMyAqIHQzO1xuICAgIHZlYzMgZmluYWxQb3M0ID0gZW5kUG9zNCArIGVuZERpcjQgKiB0NDtcbiAgICBmbG9hdCBmaW5hbEFyZWEgPSBsZW5ndGgoY3Jvc3MoZmluYWxQb3MyIC0gZmluYWxQb3MxLCBmaW5hbFBvczMgLSBmaW5hbFBvczEpKSArIGxlbmd0aChjcm9zcyhmaW5hbFBvczMgLSBmaW5hbFBvczEsIGZpbmFsUG9zNCAtIGZpbmFsUG9zMSkpO1xuICAgIGNhdXN0aWMgKz0gaW50ZW5zaXR5ICogKGxpZ2h0UG9zQXJlYSAvIGZpbmFsQXJlYSk7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhcmVhIG9mIHRoZSB0cmlhbmdsZSBpbiBsaWdodCBzcGFjZXNcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMobWF4KGNhdXN0aWMsIDAuMCkpLCAxLjApO1xuICB9YCxcbik7XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const CausticsProjectionMaterial = shaderMaterial({
4
+ causticsTexture: null,
5
+ causticsTextureB: null,
6
+ color: new THREE.Color(),
7
+ lightProjMatrix: new THREE.Matrix4(),
8
+ lightViewMatrix: new THREE.Matrix4(),
9
+ }, `varying vec3 vWorldPosition;
10
+ void main() {
11
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
12
+ vec4 worldPosition = modelMatrix * vec4(position, 1.);
13
+ vWorldPosition = worldPosition.xyz;
14
+ }`, `varying vec3 vWorldPosition;
15
+ uniform vec3 color;
16
+ uniform sampler2D causticsTexture;
17
+ uniform sampler2D causticsTextureB;
18
+ uniform mat4 lightProjMatrix;
19
+ uniform mat4 lightViewMatrix;
20
+ void main() {
21
+ // Apply caustics
22
+ vec4 lightSpacePos = lightProjMatrix * lightViewMatrix * vec4(vWorldPosition, 1.0);
23
+ lightSpacePos.xyz /= lightSpacePos.w;
24
+ lightSpacePos.xyz = lightSpacePos.xyz * 0.5 + 0.5;
25
+ vec3 front = texture2D(causticsTexture, lightSpacePos.xy).rgb;
26
+ vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb;
27
+ gl_FragColor = vec4((front + back) * color, 1.0);
28
+ #include <tonemapping_fragment>
29
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
30
+ }`);
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1c3RpY3MtcHJvamVjdGlvbi1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9jYXVzdGljcy9jYXVzdGljcy1wcm9qZWN0aW9uLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxjQUFjLENBQ3ZEO0lBQ0MsZUFBZSxFQUFFLElBQUk7SUFDckIsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QixLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLGVBQWUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7SUFDcEMsZUFBZSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtDQUNwQyxFQUNEOzs7OztLQUtJLEVBQ0o7Ozs7Ozs7Ozs7Ozs7OztnQkFlZSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0tBQzdHLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2F1c3RpY3NUZXh0dXJlOiBudWxsLFxuXHRcdGNhdXN0aWNzVGV4dHVyZUI6IG51bGwsXG5cdFx0Y29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdGxpZ2h0UHJvak1hdHJpeDogbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRsaWdodFZpZXdNYXRyaXg6IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cdH0sXG5cdGB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4gICB2b2lkIG1haW4oKSB7XG4gICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuKTtcbiAgICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XG4gICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4gICB9YCxcblx0YHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuICB1bmlmb3JtIHNhbXBsZXIyRCBjYXVzdGljc1RleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIGNhdXN0aWNzVGV4dHVyZUI7XG4gIHVuaWZvcm0gbWF0NCBsaWdodFByb2pNYXRyaXg7XG4gIHVuaWZvcm0gbWF0NCBsaWdodFZpZXdNYXRyaXg7XG4gICB2b2lkIG1haW4oKSB7XG4gICAgLy8gQXBwbHkgY2F1c3RpY3NcbiAgICB2ZWM0IGxpZ2h0U3BhY2VQb3MgPSBsaWdodFByb2pNYXRyaXggKiBsaWdodFZpZXdNYXRyaXggKiB2ZWM0KHZXb3JsZFBvc2l0aW9uLCAxLjApO1xuICAgIGxpZ2h0U3BhY2VQb3MueHl6IC89IGxpZ2h0U3BhY2VQb3MudztcbiAgICBsaWdodFNwYWNlUG9zLnh5eiA9IGxpZ2h0U3BhY2VQb3MueHl6ICogMC41ICsgMC41O1xuICAgIHZlYzMgZnJvbnQgPSB0ZXh0dXJlMkQoY2F1c3RpY3NUZXh0dXJlLCBsaWdodFNwYWNlUG9zLnh5KS5yZ2I7XG4gICAgdmVjMyBiYWNrID0gdGV4dHVyZTJEKGNhdXN0aWNzVGV4dHVyZUIsIGxpZ2h0U3BhY2VQb3MueHkpLnJnYjtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KChmcm9udCArIGJhY2spICogY29sb3IsIDEuMCk7XG4gICAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuICAgICNpbmNsdWRlIDwke3BhcnNlSW50KFRIUkVFLlJFVklTSU9OLnJlcGxhY2UoL1xcRCsvZywgJycpKSA+PSAxNTQgPyAnY29sb3JzcGFjZV9mcmFnbWVudCcgOiAnZW5jb2RpbmdzX2ZyYWdtZW50J30+XG4gICB9YCxcbik7XG4iXX0=