angular-three-soba 1.13.0 → 2.0.0-beta.2

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 (428) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +24 -0
  3. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +25 -0
  4. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +25 -0
  5. package/abstractions/edges/edges.d.ts +22 -0
  6. package/abstractions/gizmo-helper/gizmo-helper.d.ts +34 -0
  7. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  8. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +30 -0
  9. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +32 -0
  10. package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/gizmo-viewcube.d.ts +2 -3
  11. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +47 -0
  12. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +40 -0
  13. package/abstractions/index.d.ts +11 -11
  14. package/abstractions/line/line-input.d.ts +42 -0
  15. package/abstractions/line/line.d.ts +35 -0
  16. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +23 -0
  17. package/abstractions/text/text.d.ts +77 -0
  18. package/abstractions/text-3d/text-3d.d.ts +74 -0
  19. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  20. package/cameras/camera/camera.d.ts +23 -0
  21. package/cameras/cube-camera/cube-camera.d.ts +42 -0
  22. package/cameras/index.d.ts +5 -4
  23. package/cameras/orthographic-camera/orthographic-camera.d.ts +26 -0
  24. package/controls/index.d.ts +1 -1
  25. package/controls/orbit-controls/orbit-controls.d.ts +35 -0
  26. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +5 -0
  27. package/esm2022/abstractions/billboard/billboard.mjs +71 -0
  28. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +131 -0
  29. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +113 -0
  30. package/esm2022/abstractions/edges/edges.mjs +93 -0
  31. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +210 -0
  32. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  33. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +95 -0
  34. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +155 -0
  35. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +62 -0
  36. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +80 -0
  37. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +206 -0
  38. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +273 -0
  39. package/esm2022/abstractions/index.mjs +12 -0
  40. package/esm2022/abstractions/line/line-input.mjs +113 -0
  41. package/esm2022/abstractions/line/line.mjs +165 -0
  42. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +128 -0
  43. package/esm2022/abstractions/text/text.mjs +275 -0
  44. package/esm2022/abstractions/text-3d/text-3d.mjs +167 -0
  45. package/esm2022/angular-three-soba.mjs +5 -0
  46. package/esm2022/cameras/angular-three-soba-cameras.mjs +5 -0
  47. package/esm2022/cameras/camera/camera-content.mjs +21 -0
  48. package/esm2022/cameras/camera/camera.mjs +71 -0
  49. package/esm2022/cameras/cube-camera/cube-camera.mjs +131 -0
  50. package/esm2022/cameras/index.mjs +6 -0
  51. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +99 -0
  52. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +47 -0
  53. package/esm2022/controls/angular-three-soba-controls.mjs +5 -0
  54. package/esm2022/controls/index.mjs +2 -0
  55. package/esm2022/controls/orbit-controls/orbit-controls.mjs +165 -0
  56. package/esm2022/index.mjs +2 -0
  57. package/esm2022/loaders/angular-three-soba-loaders.mjs +5 -0
  58. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +33 -0
  59. package/esm2022/loaders/index.mjs +5 -0
  60. package/esm2022/loaders/loader/loader.mjs +133 -0
  61. package/esm2022/loaders/progress/progress.mjs +52 -0
  62. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  63. package/esm2022/materials/angular-three-soba-materials.mjs +5 -0
  64. package/esm2022/materials/index.mjs +6 -0
  65. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +73 -0
  66. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +383 -0
  67. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +168 -0
  68. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +257 -0
  69. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +66 -0
  70. package/esm2022/misc/angular-three-soba-misc.mjs +5 -0
  71. package/esm2022/misc/animations/animations.mjs +55 -0
  72. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  73. package/esm2022/misc/depth-buffer/depth-buffer.mjs +46 -0
  74. package/esm2022/misc/fbo/fbo.mjs +47 -0
  75. package/esm2022/misc/index.mjs +5 -0
  76. package/esm2022/performance/adaptive/adaptive-dpr.mjs +46 -0
  77. package/esm2022/performance/adaptive/adaptive-events.mjs +31 -0
  78. package/esm2022/performance/angular-three-soba-performance.mjs +5 -0
  79. package/esm2022/performance/detailed/detailed.mjs +61 -0
  80. package/esm2022/performance/index.mjs +7 -0
  81. package/esm2022/performance/instances/instance.mjs +48 -0
  82. package/esm2022/performance/instances/instances.mjs +189 -0
  83. package/esm2022/performance/instances/position-mesh.mjs +52 -0
  84. package/esm2022/performance/stats/stats.mjs +79 -0
  85. package/esm2022/shaders/angular-three-soba-shaders.mjs +5 -0
  86. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  87. package/esm2022/shaders/caustics-material/caustics-material.mjs +128 -0
  88. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +33 -0
  89. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  90. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  91. package/esm2022/shaders/index.mjs +15 -0
  92. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +55 -0
  93. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  94. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  95. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  96. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  97. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  98. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +33 -0
  99. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +47 -0
  100. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  101. package/esm2022/shaders/star-field-material/star-field-material.mjs +32 -0
  102. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +283 -0
  103. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  104. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +208 -0
  105. package/esm2022/staging/angular-three-soba-staging.mjs +5 -0
  106. package/esm2022/staging/bounds/bounds.mjs +307 -0
  107. package/esm2022/staging/camera-shake/camera-shake.mjs +117 -0
  108. package/esm2022/staging/caustics/caustisc.mjs +384 -0
  109. package/esm2022/staging/center/center.mjs +148 -0
  110. package/esm2022/staging/cloud/cloud.mjs +164 -0
  111. package/esm2022/staging/contact-shadows/contact-shadows.mjs +249 -0
  112. package/esm2022/staging/environment/assets.mjs +13 -0
  113. package/esm2022/staging/environment/environment-cube.mjs +49 -0
  114. package/esm2022/staging/environment/environment-ground.mjs +43 -0
  115. package/esm2022/staging/environment/environment-input.mjs +106 -0
  116. package/esm2022/staging/environment/environment-map.mjs +53 -0
  117. package/esm2022/staging/environment/environment-portal.mjs +135 -0
  118. package/esm2022/staging/environment/environment.mjs +78 -0
  119. package/esm2022/staging/environment/utils.mjs +84 -0
  120. package/esm2022/staging/float/float.mjs +82 -0
  121. package/esm2022/staging/index.mjs +18 -0
  122. package/esm2022/staging/sky/sky.mjs +114 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +161 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +75 -0
  125. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +57 -0
  126. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +256 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +94 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +101 -0
  129. package/esm2022/staging/stage/stage.mjs +374 -0
  130. package/esm2022/staging/stars/stars.mjs +148 -0
  131. package/fesm2022/angular-three-soba-abstractions.mjs +2271 -0
  132. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -0
  133. package/{fesm2015 → fesm2022}/angular-three-soba-cameras.mjs +141 -137
  134. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -0
  135. package/fesm2022/angular-three-soba-controls.mjs +171 -0
  136. package/fesm2022/angular-three-soba-controls.mjs.map +1 -0
  137. package/fesm2022/angular-three-soba-loaders.mjs +244 -0
  138. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -0
  139. package/{fesm2020 → fesm2022}/angular-three-soba-materials.mjs +363 -281
  140. package/fesm2022/angular-three-soba-materials.mjs.map +1 -0
  141. package/fesm2022/angular-three-soba-misc.mjs +169 -0
  142. package/fesm2022/angular-three-soba-misc.mjs.map +1 -0
  143. package/fesm2022/angular-three-soba-performance.mjs +487 -0
  144. package/fesm2022/angular-three-soba-performance.mjs.map +1 -0
  145. package/{fesm2020 → fesm2022}/angular-three-soba-shaders.mjs +58 -10
  146. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -0
  147. package/fesm2022/angular-three-soba-staging.mjs +3826 -0
  148. package/fesm2022/angular-three-soba-staging.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba.mjs.map +1 -0
  150. package/loaders/gltf-loader/gltf-loader.d.ts +9 -0
  151. package/loaders/index.d.ts +4 -5
  152. package/loaders/loader/loader.d.ts +31 -0
  153. package/loaders/progress/progress.d.ts +9 -0
  154. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  155. package/materials/index.d.ts +5 -5
  156. package/materials/mesh-distort-material/mesh-distort-material.d.ts +30 -0
  157. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +81 -0
  158. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +50 -0
  159. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +91 -0
  160. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +20 -0
  161. package/misc/animations/animations.d.ts +13 -0
  162. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  163. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  164. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  165. package/misc/index.d.ts +4 -4
  166. package/package.json +45 -68
  167. package/performance/adaptive/adaptive-dpr.d.ts +8 -0
  168. package/performance/{lib/adaptive → adaptive}/adaptive-events.d.ts +2 -6
  169. package/performance/detailed/detailed.d.ts +20 -0
  170. package/performance/index.d.ts +6 -4
  171. package/performance/instances/instance.d.ts +9 -0
  172. package/performance/instances/instances.d.ts +35 -0
  173. package/performance/instances/position-mesh.d.ts +10 -0
  174. package/performance/stats/stats.d.ts +18 -0
  175. package/plugin/package.json +1 -1
  176. package/plugin/src/generators/init/compat.js +1 -1
  177. package/plugin/src/generators/init/compat.js.map +1 -1
  178. package/plugin/src/generators/init/init.d.ts +2 -2
  179. package/plugin/src/generators/init/init.js +2 -2
  180. package/plugin/src/generators/init/init.js.map +1 -1
  181. package/plugin/src/index.js.map +1 -1
  182. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  183. package/shaders/index.d.ts +14 -14
  184. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +1 -1
  185. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  186. package/shaders/{lib/soft-shadow-material → soft-shadow-material}/soft-shadow-material.d.ts +2 -2
  187. package/shaders/sparkles-material/sparkles-material.d.ts +3 -0
  188. package/staging/accumulative-shadows/accumulative-shadows.d.ts +96 -0
  189. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  190. package/staging/accumulative-shadows/randomized-lights.d.ts +77 -0
  191. package/staging/bounds/bounds.d.ts +58 -0
  192. package/staging/camera-shake/camera-shake.d.ts +32 -0
  193. package/staging/caustics/caustisc.d.ts +70 -0
  194. package/staging/center/center.d.ts +62 -0
  195. package/staging/cloud/cloud.d.ts +48 -0
  196. package/staging/contact-shadows/contact-shadows.d.ts +57 -0
  197. package/staging/environment/environment-cube.d.ts +11 -0
  198. package/staging/environment/environment-ground.d.ts +13 -0
  199. package/staging/environment/environment-input.d.ts +68 -0
  200. package/staging/environment/environment-map.d.ts +11 -0
  201. package/staging/{lib/environment → environment}/environment-portal.d.ts +5 -7
  202. package/staging/{lib/environment → environment}/environment.d.ts +2 -2
  203. package/staging/environment/utils.d.ts +7 -0
  204. package/staging/float/float.d.ts +27 -0
  205. package/staging/index.d.ts +17 -17
  206. package/staging/sky/sky.d.ts +41 -0
  207. package/staging/sparkles/sparkles.d.ts +49 -0
  208. package/staging/spot-light/spot-light-input.d.ts +38 -0
  209. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +29 -0
  210. package/staging/spot-light/spot-light-shadow-mesh.d.ts +38 -0
  211. package/staging/{lib/spot-light → spot-light}/spot-light.d.ts +12 -6
  212. package/staging/{lib/spot-light → spot-light}/volumetric-mesh.d.ts +7 -4
  213. package/staging/{lib/stage → stage}/stage.d.ts +35 -16
  214. package/staging/stars/stars.d.ts +34 -0
  215. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  216. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  217. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  218. package/abstractions/lib/edges/edges.d.ts +0 -18
  219. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  220. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  221. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  222. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  223. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  224. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  225. package/abstractions/lib/line/line-input.d.ts +0 -19
  226. package/abstractions/lib/line/line.d.ts +0 -21
  227. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  228. package/abstractions/lib/text/text.d.ts +0 -21
  229. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  230. package/assets/default-spot-light-shadow.glsl +0 -10
  231. package/cameras/lib/camera/camera.d.ts +0 -19
  232. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  233. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  234. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  235. package/esm2020/abstractions/angular-three-soba-abstractions.mjs +0 -5
  236. package/esm2020/abstractions/index.mjs +0 -12
  237. package/esm2020/abstractions/lib/billboard/billboard.mjs +0 -73
  238. package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -119
  239. package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -98
  240. package/esm2020/abstractions/lib/edges/edges.mjs +0 -95
  241. package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -211
  242. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  243. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -91
  244. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -182
  245. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -45
  246. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -133
  247. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -193
  248. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -266
  249. package/esm2020/abstractions/lib/line/line-input.mjs +0 -75
  250. package/esm2020/abstractions/lib/line/line.mjs +0 -132
  251. package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -127
  252. package/esm2020/abstractions/lib/text/text.mjs +0 -114
  253. package/esm2020/abstractions/lib/text-3d/text-3d.mjs +0 -144
  254. package/esm2020/angular-three-soba.mjs +0 -5
  255. package/esm2020/cameras/angular-three-soba-cameras.mjs +0 -5
  256. package/esm2020/cameras/index.mjs +0 -5
  257. package/esm2020/cameras/lib/camera/camera-content.mjs +0 -20
  258. package/esm2020/cameras/lib/camera/camera.mjs +0 -74
  259. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +0 -130
  260. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -92
  261. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +0 -46
  262. package/esm2020/controls/angular-three-soba-controls.mjs +0 -5
  263. package/esm2020/controls/index.mjs +0 -2
  264. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +0 -146
  265. package/esm2020/index.mjs +0 -2
  266. package/esm2020/loaders/angular-three-soba-loaders.mjs +0 -5
  267. package/esm2020/loaders/index.mjs +0 -6
  268. package/esm2020/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  269. package/esm2020/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  270. package/esm2020/loaders/lib/loader/loader.mjs +0 -133
  271. package/esm2020/loaders/lib/progress/progress.mjs +0 -39
  272. package/esm2020/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  273. package/esm2020/materials/angular-three-soba-materials.mjs +0 -5
  274. package/esm2020/materials/index.mjs +0 -6
  275. package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -74
  276. package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -327
  277. package/esm2020/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -157
  278. package/esm2020/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -237
  279. package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -67
  280. package/esm2020/misc/angular-three-soba-misc.mjs +0 -5
  281. package/esm2020/misc/index.mjs +0 -5
  282. package/esm2020/misc/lib/animations/animations.mjs +0 -52
  283. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +0 -25
  284. package/esm2020/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  285. package/esm2020/misc/lib/fbo/fbo.mjs +0 -39
  286. package/esm2020/performance/angular-three-soba-performance.mjs +0 -5
  287. package/esm2020/performance/index.mjs +0 -5
  288. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +0 -46
  289. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +0 -36
  290. package/esm2020/performance/lib/detailed/detailed.mjs +0 -53
  291. package/esm2020/performance/lib/stats/stats.mjs +0 -79
  292. package/esm2020/shaders/angular-three-soba-shaders.mjs +0 -5
  293. package/esm2020/shaders/index.mjs +0 -15
  294. package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  295. package/esm2020/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  296. package/esm2020/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  297. package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  298. package/esm2020/shaders/lib/discard-material/discard-material.mjs +0 -3
  299. package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  300. package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  301. package/esm2020/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  302. package/esm2020/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  303. package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  304. package/esm2020/shaders/lib/shader-material/shader-material.mjs +0 -34
  305. package/esm2020/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  306. package/esm2020/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  307. package/esm2020/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  308. package/esm2020/staging/angular-three-soba-staging.mjs +0 -5
  309. package/esm2020/staging/index.mjs +0 -18
  310. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -247
  311. package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  312. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -199
  313. package/esm2020/staging/lib/bounds/bounds.mjs +0 -283
  314. package/esm2020/staging/lib/camera-shake/camera-shake.mjs +0 -121
  315. package/esm2020/staging/lib/caustics/caustics.mjs +0 -363
  316. package/esm2020/staging/lib/center/center.mjs +0 -142
  317. package/esm2020/staging/lib/cloud/cloud.mjs +0 -159
  318. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +0 -227
  319. package/esm2020/staging/lib/environment/assets.mjs +0 -13
  320. package/esm2020/staging/lib/environment/environment-cube.mjs +0 -40
  321. package/esm2020/staging/lib/environment/environment-ground.mjs +0 -66
  322. package/esm2020/staging/lib/environment/environment-inputs.mjs +0 -86
  323. package/esm2020/staging/lib/environment/environment-map.mjs +0 -38
  324. package/esm2020/staging/lib/environment/environment-portal.mjs +0 -110
  325. package/esm2020/staging/lib/environment/environment.mjs +0 -163
  326. package/esm2020/staging/lib/environment/utils.mjs +0 -70
  327. package/esm2020/staging/lib/float/float.mjs +0 -76
  328. package/esm2020/staging/lib/sky/sky.mjs +0 -108
  329. package/esm2020/staging/lib/sparkles/sparkles.mjs +0 -209
  330. package/esm2020/staging/lib/spot-light/common.mjs +0 -42
  331. package/esm2020/staging/lib/spot-light/shadow-mesh-input.mjs +0 -50
  332. package/esm2020/staging/lib/spot-light/spot-light-input.mjs +0 -61
  333. package/esm2020/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -73
  334. package/esm2020/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -125
  335. package/esm2020/staging/lib/spot-light/spot-light-shadow.mjs +0 -62
  336. package/esm2020/staging/lib/spot-light/spot-light.mjs +0 -116
  337. package/esm2020/staging/lib/spot-light/volumetric-mesh.mjs +0 -85
  338. package/esm2020/staging/lib/stage/stage.mjs +0 -366
  339. package/esm2020/staging/lib/stars/stars.mjs +0 -139
  340. package/fesm2015/angular-three-soba-abstractions.mjs +0 -2048
  341. package/fesm2015/angular-three-soba-abstractions.mjs.map +0 -1
  342. package/fesm2015/angular-three-soba-cameras.mjs.map +0 -1
  343. package/fesm2015/angular-three-soba-controls.mjs +0 -153
  344. package/fesm2015/angular-three-soba-controls.mjs.map +0 -1
  345. package/fesm2015/angular-three-soba-loaders.mjs +0 -229
  346. package/fesm2015/angular-three-soba-loaders.mjs.map +0 -1
  347. package/fesm2015/angular-three-soba-materials.mjs +0 -851
  348. package/fesm2015/angular-three-soba-materials.mjs.map +0 -1
  349. package/fesm2015/angular-three-soba-misc.mjs +0 -148
  350. package/fesm2015/angular-three-soba-misc.mjs.map +0 -1
  351. package/fesm2015/angular-three-soba-performance.mjs +0 -210
  352. package/fesm2015/angular-three-soba-performance.mjs.map +0 -1
  353. package/fesm2015/angular-three-soba-shaders.mjs +0 -1239
  354. package/fesm2015/angular-three-soba-shaders.mjs.map +0 -1
  355. package/fesm2015/angular-three-soba-staging.mjs +0 -3772
  356. package/fesm2015/angular-three-soba-staging.mjs.map +0 -1
  357. package/fesm2015/angular-three-soba.mjs.map +0 -1
  358. package/fesm2020/angular-three-soba-abstractions.mjs +0 -2045
  359. package/fesm2020/angular-three-soba-abstractions.mjs.map +0 -1
  360. package/fesm2020/angular-three-soba-cameras.mjs +0 -347
  361. package/fesm2020/angular-three-soba-cameras.mjs.map +0 -1
  362. package/fesm2020/angular-three-soba-controls.mjs +0 -153
  363. package/fesm2020/angular-three-soba-controls.mjs.map +0 -1
  364. package/fesm2020/angular-three-soba-loaders.mjs +0 -228
  365. package/fesm2020/angular-three-soba-loaders.mjs.map +0 -1
  366. package/fesm2020/angular-three-soba-materials.mjs.map +0 -1
  367. package/fesm2020/angular-three-soba-misc.mjs +0 -152
  368. package/fesm2020/angular-three-soba-misc.mjs.map +0 -1
  369. package/fesm2020/angular-three-soba-performance.mjs +0 -210
  370. package/fesm2020/angular-three-soba-performance.mjs.map +0 -1
  371. package/fesm2020/angular-three-soba-shaders.mjs.map +0 -1
  372. package/fesm2020/angular-three-soba-staging.mjs +0 -3778
  373. package/fesm2020/angular-three-soba-staging.mjs.map +0 -1
  374. package/fesm2020/angular-three-soba.mjs +0 -6
  375. package/fesm2020/angular-three-soba.mjs.map +0 -1
  376. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  377. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  378. package/loaders/lib/loader/loader.d.ts +0 -26
  379. package/loaders/lib/progress/progress.d.ts +0 -16
  380. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  381. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  382. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  383. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  384. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  385. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  386. package/misc/lib/animations/animations.d.ts +0 -13
  387. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  388. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  389. package/performance/lib/detailed/detailed.d.ts +0 -13
  390. package/performance/lib/stats/stats.d.ts +0 -15
  391. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  392. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  393. package/staging/lib/bounds/bounds.d.ts +0 -48
  394. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  395. package/staging/lib/caustics/caustics.d.ts +0 -47
  396. package/staging/lib/center/center.d.ts +0 -40
  397. package/staging/lib/cloud/cloud.d.ts +0 -23
  398. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  399. package/staging/lib/environment/environment-cube.d.ts +0 -11
  400. package/staging/lib/environment/environment-ground.d.ts +0 -9
  401. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  402. package/staging/lib/environment/environment-map.d.ts +0 -10
  403. package/staging/lib/environment/utils.d.ts +0 -8
  404. package/staging/lib/float/float.d.ts +0 -16
  405. package/staging/lib/sky/sky.d.ts +0 -20
  406. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  407. package/staging/lib/spot-light/common.d.ts +0 -3
  408. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  409. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  410. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  411. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  412. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  413. package/staging/lib/stars/stars.d.ts +0 -20
  414. /package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/constants.d.ts +0 -0
  415. /package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +0 -0
  416. /package/{fesm2015 → fesm2022}/angular-three-soba.mjs +0 -0
  417. /package/plugin/{README.md → libs/plugin/README.md} +0 -0
  418. /package/shaders/{lib/caustics-material → caustics-material}/caustics-material.d.ts +0 -0
  419. /package/shaders/{lib/caustics-projection-material → caustics-material}/caustics-projection-material.d.ts +0 -0
  420. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  421. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  422. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  423. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
  424. /package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +0 -0
  425. /package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +0 -0
  426. /package/shaders/{lib/spot-light-material → spot-light-material}/spot-light-material.d.ts +0 -0
  427. /package/shaders/{lib/star-field-material → star-field-material}/star-field-material.d.ts +0 -0
  428. /package/staging/{lib/environment → environment}/assets.d.ts +0 -0
@@ -0,0 +1,268 @@
1
+ import * as THREE from 'three';
2
+ export class MeshTransmissionMaterial extends THREE.MeshPhysicalMaterial {
3
+ constructor(samples = 6, transmissionSampler = false) {
4
+ super();
5
+ this.uniforms = {
6
+ chromaticAberration: { value: 0.05 },
7
+ // Transmission must always be 0, unless transmissionSampler is being used
8
+ transmission: { value: 0 },
9
+ // Instead a workaround is used, see below for reasons why
10
+ _transmission: { value: 1 },
11
+ transmissionMap: { value: null },
12
+ // Roughness is 1 in THREE.MeshPhysicalMaterial but it makes little sense in a transmission material
13
+ roughness: { value: 0 },
14
+ thickness: { value: 0 },
15
+ thicknessMap: { value: null },
16
+ attenuationDistance: { value: Infinity },
17
+ attenuationColor: { value: new THREE.Color('white') },
18
+ anisotropy: { value: 0.1 },
19
+ time: { value: 0 },
20
+ distortion: { value: 0.0 },
21
+ distortionScale: { value: 0.5 },
22
+ temporalDistortion: { value: 0.0 },
23
+ buffer: { value: null },
24
+ };
25
+ this.onBeforeCompile = (shader) => {
26
+ shader.uniforms = {
27
+ ...shader.uniforms,
28
+ ...this.uniforms,
29
+ };
30
+ // If the transmission sampler is active inject a flag
31
+ if (transmissionSampler)
32
+ shader.defines['USE_SAMPLER'] = '';
33
+ // Otherwise we do use use .transmission and must therefore force USE_TRANSMISSION
34
+ // because threejs won't inject it for us
35
+ else
36
+ shader.defines['USE_TRANSMISSION'] = '';
37
+ // Head
38
+ shader.fragmentShader =
39
+ /*glsl*/ `
40
+ uniform float chromaticAberration;
41
+ uniform float anisotropy;
42
+ uniform float time;
43
+ uniform float distortion;
44
+ uniform float distortionScale;
45
+ uniform float temporalDistortion;
46
+ uniform sampler2D buffer;
47
+
48
+ vec3 random3(vec3 c) {
49
+ float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));
50
+ vec3 r;
51
+ r.z = fract(512.0*j);
52
+ j *= .125;
53
+ r.x = fract(512.0*j);
54
+ j *= .125;
55
+ r.y = fract(512.0*j);
56
+ return r-0.5;
57
+ }
58
+
59
+ float seed = 0.0;
60
+ uint hash( uint x ) {
61
+ x += ( x << 10u );
62
+ x ^= ( x >> 6u );
63
+ x += ( x << 3u );
64
+ x ^= ( x >> 11u );
65
+ x += ( x << 15u );
66
+ return x;
67
+ }
68
+
69
+ // Compound versions of the hashing algorithm I whipped together.
70
+ uint hash( uvec2 v ) { return hash( v.x ^ hash(v.y) ); }
71
+ uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); }
72
+ uint hash( uvec4 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w) ); }
73
+
74
+ // Construct a float with half-open range [0:1] using low 23 bits.
75
+ // All zeroes yields 0.0, all ones yields the next smallest representable value below 1.0.
76
+ float floatConstruct( uint m ) {
77
+ const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask
78
+ const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32
79
+ m &= ieeeMantissa; // Keep only mantissa bits (fractional part)
80
+ m |= ieeeOne; // Add fractional part to 1.0
81
+ float f = uintBitsToFloat( m ); // Range [1:2]
82
+ return f - 1.0; // Range [0:1]
83
+ }
84
+
85
+ // Pseudo-random value in half-open range [0:1].
86
+ float random( float x ) { return floatConstruct(hash(floatBitsToUint(x))); }
87
+ float random( vec2 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
88
+ float random( vec3 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
89
+ float random( vec4 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
90
+
91
+ float rand() {
92
+ float result = random(vec3(gl_FragCoord.xy, seed));
93
+ seed += 1.0;
94
+ return result;
95
+ }
96
+
97
+ const float F3 = 0.3333333;
98
+ const float G3 = 0.1666667;
99
+
100
+ float snoise(vec3 p) {
101
+ vec3 s = floor(p + dot(p, vec3(F3)));
102
+ vec3 x = p - s + dot(s, vec3(G3));
103
+ vec3 e = step(vec3(0.0), x - x.yzx);
104
+ vec3 i1 = e*(1.0 - e.zxy);
105
+ vec3 i2 = 1.0 - e.zxy*(1.0 - e);
106
+ vec3 x1 = x - i1 + G3;
107
+ vec3 x2 = x - i2 + 2.0*G3;
108
+ vec3 x3 = x - 1.0 + 3.0*G3;
109
+ vec4 w, d;
110
+ w.x = dot(x, x);
111
+ w.y = dot(x1, x1);
112
+ w.z = dot(x2, x2);
113
+ w.w = dot(x3, x3);
114
+ w = max(0.6 - w, 0.0);
115
+ d.x = dot(random3(s), x);
116
+ d.y = dot(random3(s + i1), x1);
117
+ d.z = dot(random3(s + i2), x2);
118
+ d.w = dot(random3(s + 1.0), x3);
119
+ w *= w;
120
+ w *= w;
121
+ d *= w;
122
+ return dot(d, vec4(52.0));
123
+ }
124
+
125
+ float snoiseFractal(vec3 m) {
126
+ return 0.5333333* snoise(m)
127
+ +0.2666667* snoise(2.0*m)
128
+ +0.1333333* snoise(4.0*m)
129
+ +0.0666667* snoise(8.0*m);
130
+ }\n` + shader.fragmentShader;
131
+ // Remove transmission
132
+ shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_pars_fragment>',
133
+ /*glsl*/ `
134
+ #ifdef USE_TRANSMISSION
135
+ // Transmission code is based on glTF-Sampler-Viewer
136
+ // https://github.com/KhronosGroup/glTF-Sample-Viewer
137
+ uniform float _transmission;
138
+ uniform float thickness;
139
+ uniform float attenuationDistance;
140
+ uniform vec3 attenuationColor;
141
+ #ifdef USE_TRANSMISSIONMAP
142
+ uniform sampler2D transmissionMap;
143
+ #endif
144
+ #ifdef USE_THICKNESSMAP
145
+ uniform sampler2D thicknessMap;
146
+ #endif
147
+ uniform vec2 transmissionSamplerSize;
148
+ uniform sampler2D transmissionSamplerMap;
149
+ uniform mat4 modelMatrix;
150
+ uniform mat4 projectionMatrix;
151
+ varying vec3 vWorldPosition;
152
+ vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
153
+ // Direction of refracted light.
154
+ vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
155
+ // Compute rotation-independant scaling of the model matrix.
156
+ vec3 modelScale;
157
+ modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
158
+ modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
159
+ modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
160
+ // The thickness is specified in local space.
161
+ return normalize( refractionVector ) * thickness * modelScale;
162
+ }
163
+ float applyIorToRoughness( const in float roughness, const in float ior ) {
164
+ // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
165
+ // an IOR of 1.5 results in the default amount of microfacet refraction.
166
+ return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
167
+ }
168
+ vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
169
+ float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
170
+ #ifdef USE_SAMPLER
171
+ #ifdef texture2DLodEXT
172
+ return texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod);
173
+ #else
174
+ return texture2D(transmissionSamplerMap, fragCoord.xy, framebufferLod);
175
+ #endif
176
+ #else
177
+ return texture2D(buffer, fragCoord.xy);
178
+ #endif
179
+ }
180
+ vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
181
+ if ( isinf( attenuationDistance ) ) {
182
+ // Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.
183
+ return radiance;
184
+ } else {
185
+ // Compute light attenuation using Beer's law.
186
+ vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
187
+ vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law
188
+ return transmittance * radiance;
189
+ }
190
+ }
191
+ vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
192
+ const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
193
+ const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,
194
+ const in vec3 attenuationColor, const in float attenuationDistance ) {
195
+ vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
196
+ vec3 refractedRayExit = position + transmissionRay;
197
+ // Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
198
+ vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
199
+ vec2 refractionCoords = ndcPos.xy / ndcPos.w;
200
+ refractionCoords += 1.0;
201
+ refractionCoords /= 2.0;
202
+ // Sample framebuffer to get pixel the refracted ray hits.
203
+ vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
204
+ vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );
205
+ // Get the specular component.
206
+ vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
207
+ return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );
208
+ }
209
+ #endif\n`);
210
+ // Add refraction
211
+ shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_fragment>',
212
+ /*glsl*/ `
213
+ // Improve the refraction to use the world pos
214
+ material.transmission = _transmission;
215
+ material.transmissionAlpha = 1.0;
216
+ material.thickness = thickness;
217
+ material.attenuationDistance = attenuationDistance;
218
+ material.attenuationColor = attenuationColor;
219
+ #ifdef USE_TRANSMISSIONMAP
220
+ material.transmission *= texture2D( transmissionMap, vUv ).r;
221
+ #endif
222
+ #ifdef USE_THICKNESSMAP
223
+ material.thickness *= texture2D( thicknessMap, vUv ).g;
224
+ #endif
225
+
226
+ vec3 pos = vWorldPosition;
227
+ vec3 v = normalize( cameraPosition - pos );
228
+ vec3 n = inverseTransformDirection( normal, viewMatrix );
229
+ vec3 transmission = vec3(0.0);
230
+ float transmissionR, transmissionB, transmissionG;
231
+ float randomCoords = rand();
232
+ float thickness_smear = thickness * max(pow(roughnessFactor, 0.33), anisotropy);
233
+ vec3 distortionNormal = vec3(0.0);
234
+ vec3 temporalOffset = vec3(time, -time, -time) * temporalDistortion;
235
+ if (distortion > 0.0) {
236
+ distortionNormal = distortion * vec3(snoiseFractal(vec3((pos * distortionScale + temporalOffset))), snoiseFractal(vec3(pos.zxy * distortionScale - temporalOffset)), snoiseFractal(vec3(pos.yxz * distortionScale + temporalOffset)));
237
+ }
238
+ for (float i = 0.0; i < ${samples}.0; i ++) {
239
+ vec3 sampleNorm = normalize(n + roughnessFactor * roughnessFactor * 2.0 * normalize(vec3(rand() - 0.5, rand() - 0.5, rand() - 0.5)) * pow(rand(), 0.33) + distortionNormal);
240
+ transmissionR = getIBLVolumeRefraction(
241
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
242
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
243
+ material.attenuationColor, material.attenuationDistance
244
+ ).r;
245
+ transmissionG = getIBLVolumeRefraction(
246
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
247
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + chromaticAberration * (i + randomCoords) / float(${samples})) , material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
248
+ material.attenuationColor, material.attenuationDistance
249
+ ).g;
250
+ transmissionB = getIBLVolumeRefraction(
251
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
252
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + 2.0 * chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
253
+ material.attenuationColor, material.attenuationDistance
254
+ ).b;
255
+ transmission.r += transmissionR;
256
+ transmission.g += transmissionG;
257
+ transmission.b += transmissionB;
258
+ }
259
+ transmission /= ${samples}.0;
260
+ totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n`);
261
+ };
262
+ Object.keys(this.uniforms).forEach((name) => Object.defineProperty(this, name, {
263
+ get: () => this.uniforms[name].value,
264
+ set: (v) => (this.uniforms[name].value = v),
265
+ }));
266
+ }
267
+ }
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFNL0IsTUFBTSxPQUFPLHdCQUF5QixTQUFRLEtBQUssQ0FBQyxvQkFBb0I7SUFtQnBFLFlBQVksT0FBTyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxLQUFLO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNwQywwRUFBMEU7WUFDMUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMxQiwwREFBMEQ7WUFDMUQsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMzQixlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2hDLG9HQUFvRztZQUNwRyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDdkIsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUM3QixtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDeEMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDMUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUNsQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQzFCLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDL0Isa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDMUIsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxNQUE2RCxFQUFFLEVBQUU7WUFDckYsTUFBTSxDQUFDLFFBQVEsR0FBRztnQkFDZCxHQUFHLE1BQU0sQ0FBQyxRQUFRO2dCQUNsQixHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ25CLENBQUM7WUFFRixzREFBc0Q7WUFDdEQsSUFBSSxtQkFBbUI7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUQsa0ZBQWtGO1lBQ2xGLHlDQUF5Qzs7Z0JBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFN0MsT0FBTztZQUNQLE1BQU0sQ0FBQyxjQUFjO2dCQUNqQixRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUEyRmYsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBRXZCLHNCQUFzQjtZQUN0QixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUNqRCx1Q0FBdUM7WUFDdkMsUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQTRFUixDQUNKLENBQUM7WUFFRixpQkFBaUI7WUFDakIsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDakQsa0NBQWtDO1lBQ2xDLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBMEJTLE9BQU87Ozs7K0lBSXNHLE9BQU87Ozs7O3NJQUtoQixPQUFPLDBFQUEwRSxPQUFPOzs7OzsySUFLbkYsT0FBTyx5RUFBeUUsT0FBTzs7Ozs7OzswQkFPeE0sT0FBTzt1RkFDc0QsQ0FDMUUsQ0FBQztRQUNOLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFrQyxDQUFDLENBQUMsS0FBSztZQUNsRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFrQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUM1RSxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuaW50ZXJmYWNlIFVuaWZvcm08VD4ge1xuICAgIHZhbHVlOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgTWVzaFRyYW5zbWlzc2lvbk1hdGVyaWFsIGV4dGVuZHMgVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWwge1xuICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIGNocm9tYXRpY0FiZXJyYXRpb246IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgdHJhbnNtaXNzaW9uOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIHRyYW5zbWlzc2lvbk1hcDogVW5pZm9ybTxUSFJFRS5UZXh0dXJlIHwgbnVsbD47XG4gICAgICAgIF90cmFuc21pc3Npb246IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgdGhpY2tuZXNzOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIHJvdWdobmVzczogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICB0aGlja25lc3NNYXA6IFVuaWZvcm08VEhSRUUuVGV4dHVyZSB8IG51bGw+O1xuICAgICAgICBhdHRlbnVhdGlvbkRpc3RhbmNlOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIGF0dGVudWF0aW9uQ29sb3I6IFVuaWZvcm08VEhSRUUuQ29sb3I+O1xuICAgICAgICBhbmlzb3Ryb3B5OiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIHRpbWU6IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgZGlzdG9ydGlvbjogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICBkaXN0b3J0aW9uU2NhbGU6IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgdGVtcG9yYWxEaXN0b3J0aW9uOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIGJ1ZmZlcjogVW5pZm9ybTxUSFJFRS5UZXh0dXJlIHwgbnVsbD47XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHNhbXBsZXMgPSA2LCB0cmFuc21pc3Npb25TYW1wbGVyID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLnVuaWZvcm1zID0ge1xuICAgICAgICAgICAgY2hyb21hdGljQWJlcnJhdGlvbjogeyB2YWx1ZTogMC4wNSB9LFxuICAgICAgICAgICAgLy8gVHJhbnNtaXNzaW9uIG11c3QgYWx3YXlzIGJlIDAsIHVubGVzcyB0cmFuc21pc3Npb25TYW1wbGVyIGlzIGJlaW5nIHVzZWRcbiAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgLy8gSW5zdGVhZCBhIHdvcmthcm91bmQgaXMgdXNlZCwgc2VlIGJlbG93IGZvciByZWFzb25zIHdoeVxuICAgICAgICAgICAgX3RyYW5zbWlzc2lvbjogeyB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgdHJhbnNtaXNzaW9uTWFwOiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICAvLyBSb3VnaG5lc3MgaXMgMSBpbiBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCBidXQgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIGluIGEgdHJhbnNtaXNzaW9uIG1hdGVyaWFsXG4gICAgICAgICAgICByb3VnaG5lc3M6IHsgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHRoaWNrbmVzczogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdGhpY2tuZXNzTWFwOiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICBhdHRlbnVhdGlvbkRpc3RhbmNlOiB7IHZhbHVlOiBJbmZpbml0eSB9LFxuICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpIH0sXG4gICAgICAgICAgICBhbmlzb3Ryb3B5OiB7IHZhbHVlOiAwLjEgfSxcbiAgICAgICAgICAgIHRpbWU6IHsgdmFsdWU6IDAgfSxcbiAgICAgICAgICAgIGRpc3RvcnRpb246IHsgdmFsdWU6IDAuMCB9LFxuICAgICAgICAgICAgZGlzdG9ydGlvblNjYWxlOiB7IHZhbHVlOiAwLjUgfSxcbiAgICAgICAgICAgIHRlbXBvcmFsRGlzdG9ydGlvbjogeyB2YWx1ZTogMC4wIH0sXG4gICAgICAgICAgICBidWZmZXI6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm9uQmVmb3JlQ29tcGlsZSA9IChzaGFkZXI6IFRIUkVFLlNoYWRlciAmIHsgZGVmaW5lczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2hhZGVyLnVuaWZvcm1zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgdHJhbnNtaXNzaW9uIHNhbXBsZXIgaXMgYWN0aXZlIGluamVjdCBhIGZsYWdcbiAgICAgICAgICAgIGlmICh0cmFuc21pc3Npb25TYW1wbGVyKSBzaGFkZXIuZGVmaW5lc1snVVNFX1NBTVBMRVInXSA9ICcnO1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGRvIHVzZSB1c2UgLnRyYW5zbWlzc2lvbiBhbmQgbXVzdCB0aGVyZWZvcmUgZm9yY2UgVVNFX1RSQU5TTUlTU0lPTlxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aHJlZWpzIHdvbid0IGluamVjdCBpdCBmb3IgdXNcbiAgICAgICAgICAgIGVsc2Ugc2hhZGVyLmRlZmluZXNbJ1VTRV9UUkFOU01JU1NJT04nXSA9ICcnO1xuXG4gICAgICAgICAgICAvLyBIZWFkXG4gICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPVxuICAgICAgICAgICAgICAgIC8qZ2xzbCovIGBcbiAgICAgIHVuaWZvcm0gZmxvYXQgY2hyb21hdGljQWJlcnJhdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYW5pc290cm9weTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgdGltZTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvblNjYWxlO1xuICAgICAgdW5pZm9ybSBmbG9hdCB0ZW1wb3JhbERpc3RvcnRpb247XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBidWZmZXI7XG5cbiAgICAgIHZlYzMgcmFuZG9tMyh2ZWMzIGMpIHtcbiAgICAgICAgZmxvYXQgaiA9IDQwOTYuMCpzaW4oZG90KGMsdmVjMygxNy4wLCA1OS40LCAxNS4wKSkpO1xuICAgICAgICB2ZWMzIHI7XG4gICAgICAgIHIueiA9IGZyYWN0KDUxMi4wKmopO1xuICAgICAgICBqICo9IC4xMjU7XG4gICAgICAgIHIueCA9IGZyYWN0KDUxMi4wKmopO1xuICAgICAgICBqICo9IC4xMjU7XG4gICAgICAgIHIueSA9IGZyYWN0KDUxMi4wKmopO1xuICAgICAgICByZXR1cm4gci0wLjU7XG4gICAgICB9XG5cbiAgICAgIGZsb2F0IHNlZWQgPSAwLjA7XG4gICAgICB1aW50IGhhc2goIHVpbnQgeCApIHtcbiAgICAgICAgeCArPSAoIHggPDwgMTB1ICk7XG4gICAgICAgIHggXj0gKCB4ID4+ICA2dSApO1xuICAgICAgICB4ICs9ICggeCA8PCAgM3UgKTtcbiAgICAgICAgeCBePSAoIHggPj4gMTF1ICk7XG4gICAgICAgIHggKz0gKCB4IDw8IDE1dSApO1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcG91bmQgdmVyc2lvbnMgb2YgdGhlIGhhc2hpbmcgYWxnb3JpdGhtIEkgd2hpcHBlZCB0b2dldGhlci5cbiAgICAgIHVpbnQgaGFzaCggdXZlYzIgdiApIHsgcmV0dXJuIGhhc2goIHYueCBeIGhhc2godi55KSAgICAgICAgICAgICAgICAgICAgICAgICApOyB9XG4gICAgICB1aW50IGhhc2goIHV2ZWMzIHYgKSB7IHJldHVybiBoYXNoKCB2LnggXiBoYXNoKHYueSkgXiBoYXNoKHYueikgICAgICAgICAgICAgKTsgfVxuICAgICAgdWludCBoYXNoKCB1dmVjNCB2ICkgeyByZXR1cm4gaGFzaCggdi54IF4gaGFzaCh2LnkpIF4gaGFzaCh2LnopIF4gaGFzaCh2LncpICk7IH1cblxuICAgICAgLy8gQ29uc3RydWN0IGEgZmxvYXQgd2l0aCBoYWxmLW9wZW4gcmFuZ2UgWzA6MV0gdXNpbmcgbG93IDIzIGJpdHMuXG4gICAgICAvLyBBbGwgemVyb2VzIHlpZWxkcyAwLjAsIGFsbCBvbmVzIHlpZWxkcyB0aGUgbmV4dCBzbWFsbGVzdCByZXByZXNlbnRhYmxlIHZhbHVlIGJlbG93IDEuMC5cbiAgICAgIGZsb2F0IGZsb2F0Q29uc3RydWN0KCB1aW50IG0gKSB7XG4gICAgICAgIGNvbnN0IHVpbnQgaWVlZU1hbnRpc3NhID0gMHgwMDdGRkZGRnU7IC8vIGJpbmFyeTMyIG1hbnRpc3NhIGJpdG1hc2tcbiAgICAgICAgY29uc3QgdWludCBpZWVlT25lICAgICAgPSAweDNGODAwMDAwdTsgLy8gMS4wIGluIElFRUUgYmluYXJ5MzJcbiAgICAgICAgbSAmPSBpZWVlTWFudGlzc2E7ICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCBvbmx5IG1hbnRpc3NhIGJpdHMgKGZyYWN0aW9uYWwgcGFydClcbiAgICAgICAgbSB8PSBpZWVlT25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGZyYWN0aW9uYWwgcGFydCB0byAxLjBcbiAgICAgICAgZmxvYXQgIGYgPSB1aW50Qml0c1RvRmxvYXQoIG0gKTsgICAgICAgLy8gUmFuZ2UgWzE6Ml1cbiAgICAgICAgcmV0dXJuIGYgLSAxLjA7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFuZ2UgWzA6MV1cbiAgICAgIH1cblxuICAgICAgLy8gUHNldWRvLXJhbmRvbSB2YWx1ZSBpbiBoYWxmLW9wZW4gcmFuZ2UgWzA6MV0uXG4gICAgICBmbG9hdCByYW5kb20oIGZsb2F0IHggKSB7IHJldHVybiBmbG9hdENvbnN0cnVjdChoYXNoKGZsb2F0Qml0c1RvVWludCh4KSkpOyB9XG4gICAgICBmbG9hdCByYW5kb20oIHZlYzIgIHYgKSB7IHJldHVybiBmbG9hdENvbnN0cnVjdChoYXNoKGZsb2F0Qml0c1RvVWludCh2KSkpOyB9XG4gICAgICBmbG9hdCByYW5kb20oIHZlYzMgIHYgKSB7IHJldHVybiBmbG9hdENvbnN0cnVjdChoYXNoKGZsb2F0Qml0c1RvVWludCh2KSkpOyB9XG4gICAgICBmbG9hdCByYW5kb20oIHZlYzQgIHYgKSB7IHJldHVybiBmbG9hdENvbnN0cnVjdChoYXNoKGZsb2F0Qml0c1RvVWludCh2KSkpOyB9XG5cbiAgICAgIGZsb2F0IHJhbmQoKSB7XG4gICAgICAgIGZsb2F0IHJlc3VsdCA9IHJhbmRvbSh2ZWMzKGdsX0ZyYWdDb29yZC54eSwgc2VlZCkpO1xuICAgICAgICBzZWVkICs9IDEuMDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxvYXQgRjMgPSAgMC4zMzMzMzMzO1xuICAgICAgY29uc3QgZmxvYXQgRzMgPSAgMC4xNjY2NjY3O1xuXG4gICAgICBmbG9hdCBzbm9pc2UodmVjMyBwKSB7XG4gICAgICAgIHZlYzMgcyA9IGZsb29yKHAgKyBkb3QocCwgdmVjMyhGMykpKTtcbiAgICAgICAgdmVjMyB4ID0gcCAtIHMgKyBkb3QocywgdmVjMyhHMykpO1xuICAgICAgICB2ZWMzIGUgPSBzdGVwKHZlYzMoMC4wKSwgeCAtIHgueXp4KTtcbiAgICAgICAgdmVjMyBpMSA9IGUqKDEuMCAtIGUuenh5KTtcbiAgICAgICAgdmVjMyBpMiA9IDEuMCAtIGUuenh5KigxLjAgLSBlKTtcbiAgICAgICAgdmVjMyB4MSA9IHggLSBpMSArIEczO1xuICAgICAgICB2ZWMzIHgyID0geCAtIGkyICsgMi4wKkczO1xuICAgICAgICB2ZWMzIHgzID0geCAtIDEuMCArIDMuMCpHMztcbiAgICAgICAgdmVjNCB3LCBkO1xuICAgICAgICB3LnggPSBkb3QoeCwgeCk7XG4gICAgICAgIHcueSA9IGRvdCh4MSwgeDEpO1xuICAgICAgICB3LnogPSBkb3QoeDIsIHgyKTtcbiAgICAgICAgdy53ID0gZG90KHgzLCB4Myk7XG4gICAgICAgIHcgPSBtYXgoMC42IC0gdywgMC4wKTtcbiAgICAgICAgZC54ID0gZG90KHJhbmRvbTMocyksIHgpO1xuICAgICAgICBkLnkgPSBkb3QocmFuZG9tMyhzICsgaTEpLCB4MSk7XG4gICAgICAgIGQueiA9IGRvdChyYW5kb20zKHMgKyBpMiksIHgyKTtcbiAgICAgICAgZC53ID0gZG90KHJhbmRvbTMocyArIDEuMCksIHgzKTtcbiAgICAgICAgdyAqPSB3O1xuICAgICAgICB3ICo9IHc7XG4gICAgICAgIGQgKj0gdztcbiAgICAgICAgcmV0dXJuIGRvdChkLCB2ZWM0KDUyLjApKTtcbiAgICAgIH1cblxuICAgICAgZmxvYXQgc25vaXNlRnJhY3RhbCh2ZWMzIG0pIHtcbiAgICAgICAgcmV0dXJuIDAuNTMzMzMzMyogc25vaXNlKG0pXG4gICAgICAgICAgICAgICswLjI2NjY2NjcqIHNub2lzZSgyLjAqbSlcbiAgICAgICAgICAgICAgKzAuMTMzMzMzMyogc25vaXNlKDQuMCptKVxuICAgICAgICAgICAgICArMC4wNjY2NjY3KiBzbm9pc2UoOC4wKm0pO1xuICAgICAgfVxcbmAgKyBzaGFkZXIuZnJhZ21lbnRTaGFkZXI7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0cmFuc21pc3Npb25cbiAgICAgICAgICAgIHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICcjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ+JyxcbiAgICAgICAgICAgICAgICAvKmdsc2wqLyBgXG4gICAgICAgICNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG4gICAgICAgICAgLy8gVHJhbnNtaXNzaW9uIGNvZGUgaXMgYmFzZWQgb24gZ2xURi1TYW1wbGVyLVZpZXdlclxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi1TYW1wbGUtVmlld2VyXG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBfdHJhbnNtaXNzaW9uO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzO1xuICAgICAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZTtcbiAgICAgICAgICB1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcbiAgICAgICAgICAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUFxuICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwO1xuICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQXG4gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7XG4gICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplO1xuICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7XG4gICAgICAgICAgdW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuICAgICAgICAgIHVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4O1xuICAgICAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgICAgICB2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuICAgICAgICAgICAgLy8gRGlyZWN0aW9uIG9mIHJlZnJhY3RlZCBsaWdodC5cbiAgICAgICAgICAgIHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuICAgICAgICAgICAgLy8gQ29tcHV0ZSByb3RhdGlvbi1pbmRlcGVuZGFudCBzY2FsaW5nIG9mIHRoZSBtb2RlbCBtYXRyaXguXG4gICAgICAgICAgICB2ZWMzIG1vZGVsU2NhbGU7XG4gICAgICAgICAgICBtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcbiAgICAgICAgICAgIG1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApO1xuICAgICAgICAgICAgbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7XG4gICAgICAgICAgICAvLyBUaGUgdGhpY2tuZXNzIGlzIHNwZWNpZmllZCBpbiBsb2NhbCBzcGFjZS5cbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuICAgICAgICAgICAgLy8gU2NhbGUgcm91Z2huZXNzIHdpdGggSU9SIHNvIHRoYXQgYW4gSU9SIG9mIDEuMCByZXN1bHRzIGluIG5vIG1pY3JvZmFjZXQgcmVmcmFjdGlvbiBhbmRcbiAgICAgICAgICAgIC8vIGFuIElPUiBvZiAxLjUgcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBhbW91bnQgb2YgbWljcm9mYWNldCByZWZyYWN0aW9uLlxuICAgICAgICAgICAgcmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKCBpb3IgKiAyLjAgLSAyLjAsIDAuMCwgMS4wICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG4gICAgICAgICAgICBmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7XG4gICAgICAgICAgICAjaWZkZWYgVVNFX1NBTVBMRVJcbiAgICAgICAgICAgICAgI2lmZGVmIHRleHR1cmUyRExvZEVYVFxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkRMb2RFWFQodHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCk7XG4gICAgICAgICAgICAgICNlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kKTtcbiAgICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjZWxzZVxuICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKGJ1ZmZlciwgZnJhZ0Nvb3JkLnh5KTtcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgIH1cbiAgICAgICAgICB2ZWMzIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIGZsb2F0IHRyYW5zbWlzc2lvbkRpc3RhbmNlLCBjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XG4gICAgICAgICAgICBpZiAoIGlzaW5mKCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgKSB7XG4gICAgICAgICAgICAgIC8vIEF0dGVudWF0aW9uIGRpc3RhbmNlIGlzICviiJ4sIGkuZS4gdGhlIHRyYW5zbWl0dGVkIGNvbG9yIGlzIG5vdCBhdHRlbnVhdGVkIGF0IGFsbC5cbiAgICAgICAgICAgICAgcmV0dXJuIHJhZGlhbmNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBsaWdodCBhdHRlbnVhdGlvbiB1c2luZyBCZWVyJ3MgbGF3LlxuICAgICAgICAgICAgICB2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuICAgICAgICAgICAgICB2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7IC8vIEJlZXIncyBsYXdcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvcixcbiAgICAgICAgICAgIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsXG4gICAgICAgICAgICBjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG4gICAgICAgICAgICBjb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7XG4gICAgICAgICAgICB2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7XG4gICAgICAgICAgICB2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcbiAgICAgICAgICAgIC8vIFByb2plY3QgcmVmcmFjdGVkIHZlY3RvciBvbiB0aGUgZnJhbWVidWZmZXIsIHdoaWxlIG1hcHBpbmcgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMuXG4gICAgICAgICAgICB2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG4gICAgICAgICAgICB2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudztcbiAgICAgICAgICAgIHJlZnJhY3Rpb25Db29yZHMgKz0gMS4wO1xuICAgICAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG4gICAgICAgICAgICAvLyBTYW1wbGUgZnJhbWVidWZmZXIgdG8gZ2V0IHBpeGVsIHRoZSByZWZyYWN0ZWQgcmF5IGhpdHMuXG4gICAgICAgICAgICB2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7XG4gICAgICAgICAgICB2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWN1bGFyIGNvbXBvbmVudC5cbiAgICAgICAgICAgIHZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApO1xuICAgICAgICAgICAgcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTtcbiAgICAgICAgICB9XG4gICAgICAgICNlbmRpZlxcbmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFkZCByZWZyYWN0aW9uXG4gICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIucmVwbGFjZShcbiAgICAgICAgICAgICAgICAnI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4nLFxuICAgICAgICAgICAgICAgIC8qZ2xzbCovIGBcbiAgICAgICAgLy8gSW1wcm92ZSB0aGUgcmVmcmFjdGlvbiB0byB1c2UgdGhlIHdvcmxkIHBvc1xuICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gPSBfdHJhbnNtaXNzaW9uO1xuICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcbiAgICAgICAgbWF0ZXJpYWwudGhpY2tuZXNzID0gdGhpY2tuZXNzO1xuICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlID0gYXR0ZW51YXRpb25EaXN0YW5jZTtcbiAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciA9IGF0dGVudWF0aW9uQ29sb3I7XG4gICAgICAgICNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG4gICAgICAgICAgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuICAgICAgICAjZW5kaWZcbiAgICAgICAgI2lmZGVmIFVTRV9USElDS05FU1NNQVBcbiAgICAgICAgICBtYXRlcmlhbC50aGlja25lc3MgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG4gICAgICAgICNlbmRpZlxuXG4gICAgICAgIHZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247XG4gICAgICAgIHZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTtcbiAgICAgICAgdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG4gICAgICAgIHZlYzMgdHJhbnNtaXNzaW9uID0gdmVjMygwLjApO1xuICAgICAgICBmbG9hdCB0cmFuc21pc3Npb25SLCB0cmFuc21pc3Npb25CLCB0cmFuc21pc3Npb25HO1xuICAgICAgICBmbG9hdCByYW5kb21Db29yZHMgPSByYW5kKCk7XG4gICAgICAgIGZsb2F0IHRoaWNrbmVzc19zbWVhciA9IHRoaWNrbmVzcyAqIG1heChwb3cocm91Z2huZXNzRmFjdG9yLCAwLjMzKSwgYW5pc290cm9weSk7XG4gICAgICAgIHZlYzMgZGlzdG9ydGlvbk5vcm1hbCA9IHZlYzMoMC4wKTtcbiAgICAgICAgdmVjMyB0ZW1wb3JhbE9mZnNldCA9IHZlYzModGltZSwgLXRpbWUsIC10aW1lKSAqIHRlbXBvcmFsRGlzdG9ydGlvbjtcbiAgICAgICAgaWYgKGRpc3RvcnRpb24gPiAwLjApIHtcbiAgICAgICAgICBkaXN0b3J0aW9uTm9ybWFsID0gZGlzdG9ydGlvbiAqIHZlYzMoc25vaXNlRnJhY3RhbCh2ZWMzKChwb3MgKiBkaXN0b3J0aW9uU2NhbGUgKyB0ZW1wb3JhbE9mZnNldCkpKSwgc25vaXNlRnJhY3RhbCh2ZWMzKHBvcy56eHkgKiBkaXN0b3J0aW9uU2NhbGUgLSB0ZW1wb3JhbE9mZnNldCkpLCBzbm9pc2VGcmFjdGFsKHZlYzMocG9zLnl4eiAqIGRpc3RvcnRpb25TY2FsZSArIHRlbXBvcmFsT2Zmc2V0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoZmxvYXQgaSA9IDAuMDsgaSA8ICR7c2FtcGxlc30uMDsgaSArKykge1xuICAgICAgICAgIHZlYzMgc2FtcGxlTm9ybSA9IG5vcm1hbGl6ZShuICsgcm91Z2huZXNzRmFjdG9yICogcm91Z2huZXNzRmFjdG9yICogMi4wICogbm9ybWFsaXplKHZlYzMocmFuZCgpIC0gMC41LCByYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSkpICogcG93KHJhbmQoKSwgMC4zMykgKyBkaXN0b3J0aW9uTm9ybWFsKTtcbiAgICAgICAgICB0cmFuc21pc3Npb25SID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbihcbiAgICAgICAgICAgIHNhbXBsZU5vcm0sIHYsIG1hdGVyaWFsLnJvdWdobmVzcywgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcbiAgICAgICAgICAgIHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIG1hdGVyaWFsLmlvciwgbWF0ZXJpYWwudGhpY2tuZXNzICArIHRoaWNrbmVzc19zbWVhciAqIChpICsgcmFuZG9tQ29vcmRzKSAvIGZsb2F0KCR7c2FtcGxlc30pLFxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciwgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZVxuICAgICAgICAgICkucjtcbiAgICAgICAgICB0cmFuc21pc3Npb25HID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbihcbiAgICAgICAgICAgIHNhbXBsZU5vcm0sIHYsIG1hdGVyaWFsLnJvdWdobmVzcywgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcbiAgICAgICAgICAgIHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIG1hdGVyaWFsLmlvciAgKiAoMS4wICsgY2hyb21hdGljQWJlcnJhdGlvbiAqIChpICsgcmFuZG9tQ29vcmRzKSAvIGZsb2F0KCR7c2FtcGxlc30pKSAsIG1hdGVyaWFsLnRoaWNrbmVzcyArIHRoaWNrbmVzc19zbWVhciAqIChpICsgcmFuZG9tQ29vcmRzKSAvIGZsb2F0KCR7c2FtcGxlc30pLFxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciwgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZVxuICAgICAgICAgICkuZztcbiAgICAgICAgICB0cmFuc21pc3Npb25CID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbihcbiAgICAgICAgICAgIHNhbXBsZU5vcm0sIHYsIG1hdGVyaWFsLnJvdWdobmVzcywgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCxcbiAgICAgICAgICAgIHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIG1hdGVyaWFsLmlvciAqICgxLjAgKyAyLjAgKiBjaHJvbWF0aWNBYmVycmF0aW9uICogKGkgKyByYW5kb21Db29yZHMpIC8gZmxvYXQoJHtzYW1wbGVzfSkpLCBtYXRlcmlhbC50aGlja25lc3MgKyB0aGlja25lc3Nfc21lYXIgKiAoaSArIHJhbmRvbUNvb3JkcykgLyBmbG9hdCgke3NhbXBsZXN9KSxcbiAgICAgICAgICAgIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3IsIG1hdGVyaWFsLmF0dGVudWF0aW9uRGlzdGFuY2VcbiAgICAgICAgICApLmI7XG4gICAgICAgICAgdHJhbnNtaXNzaW9uLnIgKz0gdHJhbnNtaXNzaW9uUjtcbiAgICAgICAgICB0cmFuc21pc3Npb24uZyArPSB0cmFuc21pc3Npb25HO1xuICAgICAgICAgIHRyYW5zbWlzc2lvbi5iICs9IHRyYW5zbWlzc2lvbkI7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNtaXNzaW9uIC89ICR7c2FtcGxlc30uMDtcbiAgICAgICAgdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiApO1xcbmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy51bmlmb3JtcykuZm9yRWFjaCgobmFtZSkgPT5cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnVuaWZvcm1zW25hbWUgYXMga2V5b2YgdHlwZW9mIHRoaXMudW5pZm9ybXNdLnZhbHVlLFxuICAgICAgICAgICAgICAgIHNldDogKHYpID0+ICh0aGlzLnVuaWZvcm1zW25hbWUgYXMga2V5b2YgdHlwZW9mIHRoaXMudW5pZm9ybXNdLnZhbHVlID0gdiksXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,37 @@
1
+ import * as THREE from 'three';
2
+ export class MeshWobbleMaterial extends THREE.MeshStandardMaterial {
3
+ constructor(parameters = {}) {
4
+ super(parameters);
5
+ this.setValues(parameters);
6
+ this._time = { value: 0 };
7
+ this._factor = { value: 1 };
8
+ }
9
+ onBeforeCompile(shader) {
10
+ shader.uniforms['time'] = this._time;
11
+ shader.uniforms['factor'] = this._factor;
12
+ shader.vertexShader = `
13
+ uniform float time;
14
+ uniform float factor;
15
+ ${shader.vertexShader}
16
+ `;
17
+ shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;
18
+ float c = cos( theta );
19
+ float s = sin( theta );
20
+ mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );
21
+ vec3 transformed = vec3( position ) * m;
22
+ vNormal = vNormal * m;`);
23
+ }
24
+ get time() {
25
+ return this._time.value;
26
+ }
27
+ set time(v) {
28
+ this._time.value = v;
29
+ }
30
+ get factor() {
31
+ return this._factor.value;
32
+ }
33
+ set factor(v) {
34
+ this._factor.value = v;
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC13b2JibGUtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvbWVzaC13b2JibGUtbWF0ZXJpYWwvbWVzaC13b2JibGUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFNL0IsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUssQ0FBQyxvQkFBb0I7SUFJOUQsWUFBWSxhQUFtRCxFQUFFO1FBQzdELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRVEsZUFBZSxDQUFDLE1BQW9CO1FBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFekMsTUFBTSxDQUFDLFlBQVksR0FBRzs7O1FBR3RCLE1BQU0sQ0FBQyxZQUFZO0tBQ3RCLENBQUM7UUFDRSxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3Qyx5QkFBeUIsRUFDekI7Ozs7OytCQUttQixDQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgVW5pZm9ybTxUPiB7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNZXNoV29iYmxlTWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG4gICAgX3RpbWU6IFVuaWZvcm08bnVtYmVyPjtcbiAgICBfZmFjdG9yOiBVbmlmb3JtPG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuX3RpbWUgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIHRoaXMuX2ZhY3RvciA9IHsgdmFsdWU6IDEgfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2ZhY3RvciddID0gdGhpcy5fZmFjdG9yO1xuXG4gICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG4gICAgICB1bmlmb3JtIGZsb2F0IGZhY3RvcjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1cbiAgICBgO1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgJyNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+JyxcbiAgICAgICAgICAgIGBmbG9hdCB0aGV0YSA9IHNpbiggdGltZSArIHBvc2l0aW9uLnkgKSAvIDIuMCAqIGZhY3RvcjtcbiAgICAgICAgZmxvYXQgYyA9IGNvcyggdGhldGEgKTtcbiAgICAgICAgZmxvYXQgcyA9IHNpbiggdGhldGEgKTtcbiAgICAgICAgbWF0MyBtID0gbWF0MyggYywgMCwgcywgMCwgMSwgMCwgLXMsIDAsIGMgKTtcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICkgKiBtO1xuICAgICAgICB2Tm9ybWFsID0gdk5vcm1hbCAqIG07YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCB0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZS52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdGltZSh2KSB7XG4gICAgICAgIHRoaXMuX3RpbWUudmFsdWUgPSB2O1xuICAgIH1cblxuICAgIGdldCBmYWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGZhY3Rvcih2KSB7XG4gICAgICAgIHRoaXMuX2ZhY3Rvci52YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgZGVjbGFyZSBzcGVlZDogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ import * as THREE from 'three';
2
+ export function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
3
+ const material = class extends THREE.ShaderMaterial {
4
+ constructor(parameters = {}) {
5
+ const entries = Object.entries(uniforms);
6
+ // Create unforms and shaders
7
+ super({
8
+ uniforms: entries.reduce((acc, [name, value]) => {
9
+ const uniform = THREE.UniformsUtils.clone({ [name]: { value } });
10
+ return {
11
+ ...acc,
12
+ ...uniform,
13
+ };
14
+ }, {}),
15
+ vertexShader,
16
+ fragmentShader,
17
+ });
18
+ this.key = '';
19
+ // Create getter/setters
20
+ entries.forEach(([name]) => Object.defineProperty(this, name, {
21
+ get: () => this.uniforms[name].value,
22
+ set: (v) => (this.uniforms[name].value = v),
23
+ }));
24
+ // Assign parameters, this might include uniforms
25
+ Object.assign(this, parameters);
26
+ // Call onInit
27
+ if (onInit)
28
+ onInit(this);
29
+ }
30
+ };
31
+ material.key = THREE.MathUtils.generateUUID();
32
+ return material;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsUUFpQkMsRUFDRCxZQUFvQixFQUNwQixjQUFzQixFQUN0QixNQUFrRDtJQUVsRCxNQUFNLFFBQVEsR0FBRyxLQUFNLFNBQVEsS0FBSyxDQUFDLGNBQWM7UUFFL0MsWUFBWSxVQUFVLEdBQUcsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLDZCQUE2QjtZQUM3QixLQUFLLENBQUM7Z0JBQ0YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxPQUFPO3dCQUNILEdBQUcsR0FBRzt3QkFDTixHQUFHLE9BQU87cUJBQ2IsQ0FBQztnQkFDTixDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNOLFlBQVk7Z0JBQ1osY0FBYzthQUNqQixDQUFDLENBQUM7WUFkQSxRQUFHLEdBQVcsRUFBRSxDQUFDO1lBZXBCLHdCQUF3QjtZQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDOUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztnQkFDcEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUM5QyxDQUFDLENBQ0wsQ0FBQztZQUVGLGlEQUFpRDtZQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoQyxjQUFjO1lBQ2QsSUFBSSxNQUFNO2dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0tBQ3dELENBQUM7SUFDOUQsUUFBUSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFkZXJNYXRlcmlhbChcbiAgICB1bmlmb3Jtczoge1xuICAgICAgICBbbmFtZTogc3RyaW5nXTpcbiAgICAgICAgICAgIHwgVEhSRUUuQ3ViZVRleHR1cmVcbiAgICAgICAgICAgIHwgVEhSRUUuVGV4dHVyZVxuICAgICAgICAgICAgfCBJbnQzMkFycmF5XG4gICAgICAgICAgICB8IEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgfCBUSFJFRS5NYXRyaXg0XG4gICAgICAgICAgICB8IFRIUkVFLk1hdHJpeDNcbiAgICAgICAgICAgIHwgVEhSRUUuUXVhdGVybmlvblxuICAgICAgICAgICAgfCBUSFJFRS5WZWN0b3I0XG4gICAgICAgICAgICB8IFRIUkVFLlZlY3RvcjNcbiAgICAgICAgICAgIHwgVEhSRUUuVmVjdG9yMlxuICAgICAgICAgICAgfCBUSFJFRS5Db2xvclxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgYm9vbGVhblxuICAgICAgICAgICAgfCBBcnJheTxhbnk+XG4gICAgICAgICAgICB8IG51bGw7XG4gICAgfSxcbiAgICB2ZXJ0ZXhTaGFkZXI6IHN0cmluZyxcbiAgICBmcmFnbWVudFNoYWRlcjogc3RyaW5nLFxuICAgIG9uSW5pdD86IChtYXRlcmlhbD86IFRIUkVFLlNoYWRlck1hdGVyaWFsKSA9PiB2b2lkXG4pIHtcbiAgICBjb25zdCBtYXRlcmlhbCA9IGNsYXNzIGV4dGVuZHMgVEhSRUUuU2hhZGVyTWF0ZXJpYWwge1xuICAgICAgICBwdWJsaWMga2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModW5pZm9ybXMpO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIHVuZm9ybXMgYW5kIHNoYWRlcnNcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtczogZW50cmllcy5yZWR1Y2UoKGFjYywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlmb3JtID0gVEhSRUUuVW5pZm9ybXNVdGlscy5jbG9uZSh7IFtuYW1lXTogeyB2YWx1ZSB9IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLFxuICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDcmVhdGUgZ2V0dGVyL3NldHRlcnNcbiAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoW25hbWVdKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy51bmlmb3Jtc1tuYW1lXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodikgPT4gKHRoaXMudW5pZm9ybXNbbmFtZV0udmFsdWUgPSB2KSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQXNzaWduIHBhcmFtZXRlcnMsIHRoaXMgbWlnaHQgaW5jbHVkZSB1bmlmb3Jtc1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIC8vIENhbGwgb25Jbml0XG4gICAgICAgICAgICBpZiAob25Jbml0KSBvbkluaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9IGFzIHVua25vd24gYXMgdHlwZW9mIFRIUkVFLlNoYWRlck1hdGVyaWFsICYgeyBrZXk6IHN0cmluZyB9O1xuICAgIG1hdGVyaWFsLmtleSA9IFRIUkVFLk1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKTtcbiAgICByZXR1cm4gbWF0ZXJpYWw7XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const SoftShadowMaterial = shaderMaterial({
4
+ color: new THREE.Color(),
5
+ blend: 2.0,
6
+ alphaTest: 0.75,
7
+ opacity: 0,
8
+ map: null,
9
+ },
10
+ // language=glsl
11
+ `
12
+ varying vec2 vUv;
13
+ void main() {
14
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
15
+ vUv = uv;
16
+ }
17
+ `,
18
+ // language=glsl
19
+ `
20
+ varying vec2 vUv;
21
+ uniform sampler2D map;
22
+ uniform vec3 color;
23
+ uniform float opacity;
24
+ uniform float alphaTest;
25
+ uniform float blend;
26
+ void main() {
27
+ vec4 sampledDiffuseColor = texture2D(map, vUv);
28
+ gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);
29
+ #include <tonemapping_fragment>
30
+ #include <encodings_fragment>
31
+ }
32
+ `);
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1zaGFkb3ctbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc29mdC1zaGFkb3ctbWF0ZXJpYWwvc29mdC1zaGFkb3ctbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FDNUM7SUFDSSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsU0FBUyxFQUFFLElBQUk7SUFDZixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxJQUFJO0NBQ1o7QUFDRCxnQkFBZ0I7QUFDaEI7Ozs7OztLQU1DO0FBQ0QsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7O0tBYUMsQ0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IFNvZnRTaGFkb3dNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHtcbiAgICAgICAgY29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuICAgICAgICBibGVuZDogMi4wLFxuICAgICAgICBhbHBoYVRlc3Q6IDAuNzUsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIG1hcDogbnVsbCxcbiAgICB9LFxuICAgIC8vIGxhbmd1YWdlPWdsc2xcbiAgICBgXG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3TWF0cml4ICogbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XG4gIHZVdiA9IHV2O1xufVxuICAgIGAsXG4gICAgLy8gbGFuZ3VhZ2U9Z2xzbFxuICAgIGBcbnZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG51bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IGFscGhhVGVzdDtcbnVuaWZvcm0gZmxvYXQgYmxlbmQ7XG52b2lkIG1haW4oKSB7XG4gIHZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRChtYXAsIHZVdik7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IgKiBzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKiBibGVuZCwgbWF4KDAuMCwgKDEuMCAtIChzYW1wbGVkRGlmZnVzZUNvbG9yLnIgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmcgKyBzYW1wbGVkRGlmZnVzZUNvbG9yLmIpIC8gYWxwaGFUZXN0KSkgKiBvcGFjaXR5KTtcbiAgI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuICAjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxufVxuICAgIGBcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdFNoYWRvd01hdGVyaWFsSW5wdXRzIHtcbiAgICBtYXA6IFRIUkVFLlRleHR1cmU7XG4gICAgY29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuICAgIGFscGhhVGVzdD86IG51bWJlcjtcbiAgICBibGVuZD86IG51bWJlcjtcbn1cbiJdfQ==
@@ -0,0 +1,47 @@
1
+ import { shaderMaterial } from '../shader-material/shader-material';
2
+ export const SparklesMaterial = shaderMaterial({ time: 0, pixelRatio: 1 },
3
+ // language=GLSL
4
+ `
5
+ uniform float pixelRatio;
6
+ uniform float time;
7
+
8
+ attribute float size;
9
+ attribute float speed;
10
+ attribute float opacity;
11
+ attribute vec3 noise;
12
+ attribute vec3 color;
13
+
14
+ varying vec3 vColor;
15
+ varying float vOpacity;
16
+
17
+ void main() {
18
+ vec4 modelPosition = modelMatrix * vec4(position, 1.0);
19
+
20
+ modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;
21
+ modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;
22
+ modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;
23
+
24
+ vec4 viewPosition = viewMatrix * modelPosition;
25
+ vec4 projectionPostion = projectionMatrix * viewPosition;
26
+
27
+ gl_Position = projectionPostion;
28
+ gl_PointSize = size * 25. * pixelRatio;
29
+ gl_PointSize *= (1.0 / - viewPosition.z);
30
+
31
+ vColor = color;
32
+ vOpacity = opacity;
33
+ }
34
+ `,
35
+ // language=GLSL
36
+ `
37
+ varying vec3 vColor;
38
+ varying float vOpacity;
39
+
40
+ void main() {
41
+ float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
42
+ float strength = 0.05 / distanceToCenter - 0.1;
43
+
44
+ gl_FragColor = vec4(vColor, strength * vOpacity);
45
+ }
46
+ `);
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDMUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7QUFDMUIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QkQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7R0FVRCxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgU3BhcmtsZXNNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMCwgcGl4ZWxSYXRpbzogMSB9LFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIGZsb2F0IHRpbWU7XG5cbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuYXR0cmlidXRlIGZsb2F0IHNwZWVkO1xuYXR0cmlidXRlIGZsb2F0IG9wYWNpdHk7XG5hdHRyaWJ1dGUgdmVjMyBub2lzZTtcbmF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IG1vZGVsUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG5cbiAgbW9kZWxQb3NpdGlvbi55ICs9IHNpbih0aW1lICogc3BlZWQgKyBtb2RlbFBvc2l0aW9uLnggKiBub2lzZS54ICogMTAwLjApICogMC4yO1xuICBtb2RlbFBvc2l0aW9uLnogKz0gY29zKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnkgKiAxMDAuMCkgKiAwLjI7XG4gIG1vZGVsUG9zaXRpb24ueCArPSBjb3ModGltZSAqIHNwZWVkICsgbW9kZWxQb3NpdGlvbi54ICogbm9pc2UueiAqIDEwMC4wKSAqIDAuMjtcblxuICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXdNYXRyaXggKiBtb2RlbFBvc2l0aW9uO1xuICB2ZWM0IHByb2plY3Rpb25Qb3N0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdQb3NpdGlvbjtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25Qb3N0aW9uO1xuICBnbF9Qb2ludFNpemUgPSBzaXplICogMjUuICogcGl4ZWxSYXRpbztcbiAgZ2xfUG9pbnRTaXplICo9ICgxLjAgLyAtIHZpZXdQb3NpdGlvbi56KTtcblxuICB2Q29sb3IgPSBjb2xvcjtcbiAgdk9wYWNpdHkgPSBvcGFjaXR5O1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkaXN0YW5jZVRvQ2VudGVyID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUpKTtcbiAgZmxvYXQgc3RyZW5ndGggPSAwLjA1IC8gZGlzdGFuY2VUb0NlbnRlciAtIDAuMTtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZDb2xvciwgc3RyZW5ndGggKiB2T3BhY2l0eSk7XG59XG4gIGBcbik7XG4iXX0=
@@ -0,0 +1,86 @@
1
+ import { Color, ShaderMaterial, Vector2, Vector3 } from 'three';
2
+ export class SpotLightMaterial extends ShaderMaterial {
3
+ constructor() {
4
+ super({
5
+ uniforms: {
6
+ depth: { value: null },
7
+ opacity: { value: 1 },
8
+ attenuation: { value: 2.5 },
9
+ anglePower: { value: 12 },
10
+ spotPosition: { value: new Vector3(0, 0, 0) },
11
+ lightColor: { value: new Color('white') },
12
+ cameraNear: { value: 0 },
13
+ cameraFar: { value: 1 },
14
+ resolution: { value: new Vector2(0, 0) },
15
+ },
16
+ transparent: true,
17
+ depthWrite: false,
18
+ vertexShader: /* glsl */ `
19
+ varying vec3 vNormal;
20
+ varying vec3 vWorldPosition;
21
+ varying float vViewZ;
22
+ varying float vIntensity;
23
+ uniform vec3 spotPosition;
24
+ uniform float attenuation;
25
+
26
+ void main() {
27
+ // compute intensity
28
+ vNormal = normalize( normalMatrix * normal );
29
+ vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
30
+ vWorldPosition = worldPosition.xyz;
31
+ vec4 viewPosition = viewMatrix * worldPosition;
32
+ vViewZ = viewPosition.z;
33
+ float intensity = distance(worldPosition.xyz, spotPosition) / attenuation;
34
+ intensity = 1.0 - clamp(intensity, 0.0, 1.0);
35
+ vIntensity = intensity;
36
+ // set gl_Position
37
+ gl_Position = projectionMatrix * viewPosition;
38
+
39
+ }`,
40
+ fragmentShader: /* glsl */ `
41
+ #include <packing>
42
+
43
+ varying vec3 vNormal;
44
+ varying vec3 vWorldPosition;
45
+ uniform vec3 lightColor;
46
+ uniform vec3 spotPosition;
47
+ uniform float attenuation;
48
+ uniform float anglePower;
49
+ uniform sampler2D depth;
50
+ uniform vec2 resolution;
51
+ uniform float cameraNear;
52
+ uniform float cameraFar;
53
+ varying float vViewZ;
54
+ varying float vIntensity;
55
+ uniform float opacity;
56
+
57
+ float readDepth( sampler2D depthSampler, vec2 coord ) {
58
+ float fragCoordZ = texture2D( depthSampler, coord ).x;
59
+ float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
60
+ return viewZ;
61
+ }
62
+
63
+ void main() {
64
+ float d = 1.0;
65
+ bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
66
+ if (isSoft) {
67
+ vec2 sUv = gl_FragCoord.xy / resolution;
68
+ d = readDepth(depth, sUv);
69
+ }
70
+ float intensity = vIntensity;
71
+ vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
72
+ float angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
73
+ intensity *= angleIntensity;
74
+ // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
75
+ if (isSoft) {
76
+ intensity *= smoothstep(0., 1., vViewZ - d);
77
+ }
78
+ gl_FragColor = vec4(lightColor, intensity * opacity);
79
+
80
+ #include <tonemapping_fragment>
81
+ #include <encodings_fragment>
82
+ }`,
83
+ });
84
+ }
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQUNqRDtRQUNJLEtBQUssQ0FBQztZQUNGLFFBQVEsRUFBRTtnQkFDTixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN0QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDN0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2FBQzNDO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBcUI3QjtZQUNJLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQTBDL0I7U0FDQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciwgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogeyB2YWx1ZTogMi41IH0sXG4gICAgICAgICAgICAgICAgYW5nbGVQb3dlcjogeyB2YWx1ZTogMTIgfSxcbiAgICAgICAgICAgICAgICBzcG90UG9zaXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IzKDAsIDAsIDApIH0sXG4gICAgICAgICAgICAgICAgbGlnaHRDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCd3aGl0ZScpIH0sXG4gICAgICAgICAgICAgICAgY2FtZXJhTmVhcjogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgICAgIGNhbWVyYUZhcjogeyB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgICAgIHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDAsIDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdlZpZXdaO1xuICAgICAgdmFyeWluZyBmbG9hdCB2SW50ZW5zaXR5O1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgLy8gY29tcHV0ZSBpbnRlbnNpdHlcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvblx0PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbiAgICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiAgICAgICAgdlZpZXdaID0gdmlld1Bvc2l0aW9uLno7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eVx0PSBkaXN0YW5jZSh3b3JsZFBvc2l0aW9uLnh5eiwgc3BvdFBvc2l0aW9uKSAvIGF0dGVudWF0aW9uO1xuICAgICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG4gICAgICAgIHZJbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG4gICAgICAgIC8vIHNldCBnbF9Qb3NpdGlvblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuXG4gICAgICB9YCxcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGFuZ2xlUG93ZXI7XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aDtcbiAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuICAgICAgZmxvYXQgcmVhZERlcHRoKCBzYW1wbGVyMkQgZGVwdGhTYW1wbGVyLCB2ZWMyIGNvb3JkICkge1xuICAgICAgICBmbG9hdCBmcmFnQ29vcmRaID0gdGV4dHVyZTJEKCBkZXB0aFNhbXBsZXIsIGNvb3JkICkueDtcbiAgICAgICAgZmxvYXQgdmlld1ogPSBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WihmcmFnQ29vcmRaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xuICAgICAgICByZXR1cm4gdmlld1o7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgZCA9IDEuMDtcbiAgICAgICAgYm9vbCBpc1NvZnQgPSByZXNvbHV0aW9uWzBdID4gMC4wICYmIHJlc29sdXRpb25bMV0gPiAwLjA7XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICB2ZWMyIHNVdiA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb247XG4gICAgICAgICAgZCA9IHJlYWREZXB0aChkZXB0aCwgc1V2KTtcbiAgICAgICAgfVxuICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSB2SW50ZW5zaXR5O1xuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyggZG90KG5vcm1hbCwgdmVjMygwLjAsIDAuMCwgMS4wKSksIGFuZ2xlUG93ZXIgKTtcbiAgICAgICAgaW50ZW5zaXR5XHQqPSBhbmdsZUludGVuc2l0eTtcbiAgICAgICAgLy8gZmFkZXMgd2hlbiB6IGlzIGNsb3NlIHRvIHNhbXBsZWQgZGVwdGgsIG1lYW5pbmcgdGhlIGNvbmUgaXMgaW50ZXJzZWN0aW5nIGV4aXN0aW5nIGdlb21ldHJ5XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICBpbnRlbnNpdHlcdCo9IHNtb290aHN0ZXAoMC4sIDEuLCB2Vmlld1ogLSBkKTtcbiAgICAgICAgfVxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpZ2h0Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpO1xuXG4gICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0ICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgIH1gLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { shaderMaterial } from '../shader-material/shader-material';
2
+ export const StarFieldMaterial = shaderMaterial({ time: 0.0, fade: 0.0 },
3
+ // language=GLSL
4
+ `
5
+ uniform float time;
6
+ attribute float size;
7
+ varying vec3 vColor;
8
+ void main() {
9
+ vColor = color;
10
+ vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
11
+ gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));
12
+ gl_Position = projectionMatrix * mvPosition;
13
+ }
14
+ `,
15
+ // language=GLSL
16
+ `
17
+ uniform sampler2D pointTexture;
18
+ uniform float fade;
19
+ varying vec3 vColor;
20
+ void main() {
21
+ float opacity = 1.0;
22
+ if (fade == 1.0) {
23
+ float d = distance(gl_PointCoord, vec2(0.5, 0.5));
24
+ opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
25
+ }
26
+ gl_FragColor = vec4(vColor, opacity);
27
+
28
+ #include <tonemapping_fragment>
29
+ #include <encodings_fragment>
30
+ }
31
+ `);
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1maWVsZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FDM0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7O0dBVUQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7Ozs7OztHQWVELENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBTdGFyRmllbGRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMC4wLCBmYWRlOiAwLjAgfSxcbiAgICAvLyBsYW5ndWFnZT1HTFNMXG4gICAgYFxudW5pZm9ybSBmbG9hdCB0aW1lO1xuYXR0cmlidXRlIGZsb2F0IHNpemU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICB2Q29sb3IgPSBjb2xvcjtcbiAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC41KTtcbiAgZ2xfUG9pbnRTaXplID0gc2l6ZSAqICgzMC4wIC8gLW12UG9zaXRpb24ueikgKiAoMy4wICsgc2luKHRpbWUgKyAxMDAuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIHNhbXBsZXIyRCBwb2ludFRleHR1cmU7XG51bmlmb3JtIGZsb2F0IGZhZGU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICBmbG9hdCBvcGFjaXR5ID0gMS4wO1xuICBpZiAoZmFkZSA9PSAxLjApIHtcbiAgICBmbG9hdCBkID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUsIDAuNSkpO1xuICAgIG9wYWNpdHkgPSAxLjAgLyAoMS4wICsgZXhwKDE2LjAgKiAoZCAtIDAuMjUpKSk7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2Q29sb3IsIG9wYWNpdHkpO1xuXG4gICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn1cbiAgYFxuKTtcbiJdfQ==