angular-three-soba 1.14.1 → 2.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +28 -0
  3. package/abstractions/detailed/detailed.d.ts +26 -0
  4. package/abstractions/edges/edges.d.ts +34 -0
  5. package/abstractions/grid/grid.d.ts +50 -0
  6. package/abstractions/index.d.ts +6 -11
  7. package/abstractions/text/text.d.ts +82 -0
  8. package/abstractions/text-3d/text-3d.d.ts +81 -0
  9. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  10. package/cameras/camera/camera.d.ts +26 -0
  11. package/cameras/cube-camera/cube-camera.d.ts +69 -0
  12. package/cameras/index.d.ts +4 -4
  13. package/cameras/orthographic-camera/orthographic-camera.d.ts +37 -0
  14. package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +10 -1
  15. package/controls/index.d.ts +1 -1
  16. package/controls/orbit-controls/orbit-controls.d.ts +54 -0
  17. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
  18. package/esm2022/abstractions/billboard/billboard.mjs +74 -0
  19. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  20. package/esm2022/abstractions/edges/edges.mjs +88 -0
  21. package/esm2022/abstractions/grid/grid.mjs +180 -0
  22. package/esm2022/abstractions/index.mjs +7 -12
  23. package/esm2022/abstractions/text/text.mjs +274 -0
  24. package/esm2022/abstractions/text-3d/text-3d.mjs +165 -0
  25. package/esm2022/angular-three-soba.mjs +1 -1
  26. package/esm2022/cameras/angular-three-soba-cameras.mjs +1 -1
  27. package/esm2022/cameras/camera/camera-content.mjs +20 -0
  28. package/esm2022/cameras/camera/camera.mjs +77 -0
  29. package/esm2022/cameras/cube-camera/cube-camera.mjs +161 -0
  30. package/esm2022/cameras/index.mjs +5 -5
  31. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +102 -0
  32. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +46 -0
  33. package/esm2022/controls/angular-three-soba-controls.mjs +1 -1
  34. package/esm2022/controls/index.mjs +2 -2
  35. package/esm2022/controls/orbit-controls/orbit-controls.mjs +181 -0
  36. package/esm2022/index.mjs +1 -1
  37. package/esm2022/loaders/angular-three-soba-loaders.mjs +1 -1
  38. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +30 -0
  39. package/esm2022/loaders/index.mjs +5 -6
  40. package/esm2022/loaders/loader/loader.mjs +138 -0
  41. package/esm2022/loaders/progress/progress.mjs +45 -0
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  43. package/esm2022/materials/angular-three-soba-materials.mjs +1 -1
  44. package/esm2022/materials/index.mjs +7 -6
  45. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +82 -0
  46. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +367 -0
  47. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +171 -0
  48. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +278 -0
  49. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
  50. package/esm2022/materials/point-material/point-material.mjs +46 -0
  51. package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
  52. package/esm2022/misc/animations/animations.mjs +59 -0
  53. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  54. package/esm2022/misc/caustics/caustics.mjs +387 -0
  55. package/esm2022/misc/decal/decal.mjs +187 -0
  56. package/esm2022/misc/depth-buffer/depth-buffer.mjs +44 -0
  57. package/esm2022/misc/example/example.mjs +160 -0
  58. package/esm2022/misc/fbo/fbo.mjs +47 -0
  59. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  60. package/esm2022/misc/html/html.mjs +304 -0
  61. package/esm2022/misc/index.mjs +14 -5
  62. package/esm2022/misc/sampler/sampler.mjs +142 -0
  63. package/esm2022/misc/shadow/shadow.mjs +111 -0
  64. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  65. package/esm2022/misc/trail/trail.mjs +209 -0
  66. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  67. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  68. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  69. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  70. package/esm2022/modifiers/index.mjs +2 -0
  71. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  72. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  73. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  74. package/esm2022/performances/index.mjs +6 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +329 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/angular-three-soba-shaders.mjs +1 -1
  81. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  82. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  83. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  84. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  85. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  86. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  87. package/esm2022/shaders/index.mjs +18 -15
  88. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +56 -0
  89. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  90. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  91. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  92. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  93. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  94. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +25 -0
  95. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +33 -0
  96. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  97. package/esm2022/shaders/star-field-material/star-field-material.mjs +33 -0
  98. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  99. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +267 -0
  100. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  101. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +206 -0
  102. package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
  103. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  104. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  105. package/esm2022/staging/bounds/bounds.mjs +308 -0
  106. package/esm2022/staging/camera-shake/camera-shake.mjs +123 -0
  107. package/esm2022/staging/center/center.mjs +163 -0
  108. package/esm2022/staging/cloud/cloud.mjs +158 -0
  109. package/esm2022/staging/contact-shadows/contact-shadows.mjs +246 -0
  110. package/esm2022/staging/environment/assets.mjs +13 -0
  111. package/esm2022/staging/environment/environment-cube.mjs +47 -0
  112. package/esm2022/staging/environment/environment-ground.mjs +41 -0
  113. package/esm2022/staging/environment/environment-input.mjs +119 -0
  114. package/esm2022/staging/environment/environment-map.mjs +53 -0
  115. package/esm2022/staging/environment/environment-portal.mjs +113 -0
  116. package/esm2022/staging/environment/environment.mjs +61 -0
  117. package/esm2022/staging/environment/utils.mjs +105 -0
  118. package/esm2022/staging/float/float.mjs +94 -0
  119. package/esm2022/staging/index.mjs +22 -18
  120. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  121. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  122. package/esm2022/staging/sky/sky.mjs +119 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +164 -0
  124. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  125. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  126. package/esm2022/staging/spot-light/spot-light-input.mjs +84 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +81 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +98 -0
  129. package/esm2022/staging/stage/stage.mjs +388 -0
  130. package/esm2022/staging/stars/stars.mjs +147 -0
  131. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  132. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  133. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  134. package/esm2022/utils/content/content.mjs +15 -0
  135. package/esm2022/utils/index.mjs +2 -0
  136. package/fesm2022/angular-three-soba-abstractions.mjs +668 -1882
  137. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-cameras.mjs +279 -232
  139. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-controls.mjs +104 -69
  141. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-loaders.mjs +177 -164
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +630 -482
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2248 -122
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +554 -209
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +3230 -2852
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/fesm2022/angular-three-soba.mjs.map +1 -1
  159. package/loaders/gltf-loader/gltf-loader.d.ts +10 -0
  160. package/loaders/index.d.ts +4 -5
  161. package/loaders/loader/loader.d.ts +33 -0
  162. package/loaders/progress/progress.d.ts +9 -0
  163. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  164. package/materials/index.d.ts +6 -5
  165. package/materials/mesh-distort-material/mesh-distort-material.d.ts +40 -0
  166. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +99 -0
  167. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +62 -0
  168. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +107 -0
  169. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +29 -0
  170. package/materials/point-material/point-material.d.ts +24 -0
  171. package/metadata.json +1 -0
  172. package/misc/animations/animations.d.ts +15 -0
  173. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  174. package/misc/caustics/caustics.d.ts +87 -0
  175. package/misc/decal/decal.d.ts +49 -0
  176. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  177. package/misc/example/example.d.ts +81 -0
  178. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  179. package/misc/html/html-wrapper.d.ts +559 -0
  180. package/misc/html/html.d.ts +214 -0
  181. package/misc/index.d.ts +13 -4
  182. package/misc/sampler/sampler.d.ts +67 -0
  183. package/misc/shadow/shadow.d.ts +37 -0
  184. package/misc/stats-gl/stats-gl.d.ts +24 -0
  185. package/misc/trail/trail.d.ts +57 -0
  186. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  187. package/misc/trail-texture/trail-texture.d.ts +50 -0
  188. package/modifiers/README.md +3 -0
  189. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  190. package/modifiers/index.d.ts +1 -0
  191. package/package.json +43 -32
  192. package/performances/README.md +3 -0
  193. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  194. package/{performance/lib/adaptive → performances/adaptive-events}/adaptive-events.d.ts +5 -6
  195. package/performances/index.d.ts +5 -0
  196. package/performances/points/points-input.d.ts +32 -0
  197. package/performances/points/points.d.ts +92 -0
  198. package/performances/points/position-point.d.ts +11 -0
  199. package/performances/segments/segment-object.d.ts +7 -0
  200. package/performances/segments/segments.d.ts +124 -0
  201. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  202. package/shaders/grid-material/grid-material.d.ts +37 -0
  203. package/shaders/index.d.ts +17 -14
  204. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +147 -2
  205. package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +1 -1
  206. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  207. package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +2 -2
  208. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +19 -0
  209. package/shaders/sparkles-material/sparkles-material.d.ts +17 -0
  210. package/shaders/spot-light-material/spot-light-material.d.ts +13 -0
  211. package/shaders/star-field-material/star-field-material.d.ts +13 -0
  212. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  213. package/staging/accumulative-shadows/accumulative-shadows.d.ts +146 -0
  214. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  215. package/staging/accumulative-shadows/randomized-lights.d.ts +90 -0
  216. package/staging/backdrop/backdrop.d.ts +30 -0
  217. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  218. package/staging/bounds/bounds.d.ts +134 -0
  219. package/staging/camera-shake/camera-shake.d.ts +43 -0
  220. package/staging/center/center.d.ts +70 -0
  221. package/staging/cloud/cloud.d.ts +51 -0
  222. package/staging/contact-shadows/contact-shadows.d.ts +70 -0
  223. package/staging/{lib/environment → environment}/assets.d.ts +9 -9
  224. package/staging/environment/environment-cube.d.ts +15 -0
  225. package/staging/environment/environment-ground.d.ts +13 -0
  226. package/staging/environment/environment-input.d.ts +68 -0
  227. package/staging/environment/environment-map.d.ts +16 -0
  228. package/staging/environment/environment-portal.d.ts +18 -0
  229. package/staging/{lib/environment → environment}/environment.d.ts +2 -6
  230. package/staging/environment/utils.d.ts +7 -0
  231. package/staging/float/float.d.ts +31 -0
  232. package/staging/index.d.ts +21 -17
  233. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  234. package/staging/normal-texture/normal-texture.d.ts +16 -0
  235. package/staging/sky/sky.d.ts +48 -0
  236. package/staging/sparkles/sparkles.d.ts +63 -0
  237. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  238. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  239. package/staging/spot-light/spot-light-input.d.ts +38 -0
  240. package/staging/spot-light/spot-light.d.ts +39 -0
  241. package/staging/spot-light/volumetric-mesh.d.ts +24 -0
  242. package/staging/stage/stage.d.ts +130 -0
  243. package/staging/stars/stars.d.ts +45 -0
  244. package/staging/wireframe/wireframe-input.d.ts +65 -0
  245. package/staging/wireframe/wireframe.d.ts +28 -0
  246. package/utils/README.md +3 -0
  247. package/utils/content/content.d.ts +8 -0
  248. package/utils/index.d.ts +1 -0
  249. package/web-types.json +1 -0
  250. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  251. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  252. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  253. package/abstractions/lib/edges/edges.d.ts +0 -18
  254. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  255. package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  256. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  257. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  258. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  259. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -15
  260. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  261. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  262. package/abstractions/lib/line/line-input.d.ts +0 -19
  263. package/abstractions/lib/line/line.d.ts +0 -21
  264. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  265. package/abstractions/lib/text/text.d.ts +0 -21
  266. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  267. package/assets/default-spot-light-shadow.glsl +0 -10
  268. package/cameras/lib/camera/camera.d.ts +0 -19
  269. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  270. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  271. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  272. package/esm2022/abstractions/lib/billboard/billboard.mjs +0 -74
  273. package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -120
  274. package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -99
  275. package/esm2022/abstractions/lib/edges/edges.mjs +0 -96
  276. package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -213
  277. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  278. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -92
  279. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -184
  280. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -46
  281. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -134
  282. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  283. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -267
  284. package/esm2022/abstractions/lib/line/line-input.mjs +0 -76
  285. package/esm2022/abstractions/lib/line/line.mjs +0 -133
  286. package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  287. package/esm2022/abstractions/lib/text/text.mjs +0 -115
  288. package/esm2022/abstractions/lib/text-3d/text-3d.mjs +0 -145
  289. package/esm2022/cameras/lib/camera/camera-content.mjs +0 -21
  290. package/esm2022/cameras/lib/camera/camera.mjs +0 -75
  291. package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +0 -131
  292. package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -93
  293. package/esm2022/cameras/lib/perspective-camera/perspective-camera.mjs +0 -47
  294. package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +0 -147
  295. package/esm2022/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  296. package/esm2022/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  297. package/esm2022/loaders/lib/loader/loader.mjs +0 -134
  298. package/esm2022/loaders/lib/progress/progress.mjs +0 -39
  299. package/esm2022/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  300. package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -75
  301. package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -328
  302. package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -158
  303. package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -238
  304. package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  305. package/esm2022/misc/lib/animations/animations.mjs +0 -52
  306. package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +0 -26
  307. package/esm2022/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  308. package/esm2022/misc/lib/fbo/fbo.mjs +0 -39
  309. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  310. package/esm2022/performance/index.mjs +0 -5
  311. package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +0 -47
  312. package/esm2022/performance/lib/adaptive/adaptive-events.mjs +0 -37
  313. package/esm2022/performance/lib/detailed/detailed.mjs +0 -54
  314. package/esm2022/performance/lib/stats/stats.mjs +0 -80
  315. package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  316. package/esm2022/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  317. package/esm2022/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  318. package/esm2022/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  319. package/esm2022/shaders/lib/discard-material/discard-material.mjs +0 -3
  320. package/esm2022/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  321. package/esm2022/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  322. package/esm2022/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  323. package/esm2022/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  324. package/esm2022/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  325. package/esm2022/shaders/lib/shader-material/shader-material.mjs +0 -34
  326. package/esm2022/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  327. package/esm2022/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  328. package/esm2022/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  329. package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -249
  330. package/esm2022/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  331. package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -201
  332. package/esm2022/staging/lib/bounds/bounds.mjs +0 -284
  333. package/esm2022/staging/lib/camera-shake/camera-shake.mjs +0 -122
  334. package/esm2022/staging/lib/caustics/caustics.mjs +0 -364
  335. package/esm2022/staging/lib/center/center.mjs +0 -143
  336. package/esm2022/staging/lib/cloud/cloud.mjs +0 -160
  337. package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +0 -228
  338. package/esm2022/staging/lib/environment/assets.mjs +0 -13
  339. package/esm2022/staging/lib/environment/environment-cube.mjs +0 -41
  340. package/esm2022/staging/lib/environment/environment-ground.mjs +0 -67
  341. package/esm2022/staging/lib/environment/environment-inputs.mjs +0 -87
  342. package/esm2022/staging/lib/environment/environment-map.mjs +0 -39
  343. package/esm2022/staging/lib/environment/environment-portal.mjs +0 -111
  344. package/esm2022/staging/lib/environment/environment.mjs +0 -165
  345. package/esm2022/staging/lib/environment/utils.mjs +0 -70
  346. package/esm2022/staging/lib/float/float.mjs +0 -77
  347. package/esm2022/staging/lib/sky/sky.mjs +0 -109
  348. package/esm2022/staging/lib/sparkles/sparkles.mjs +0 -210
  349. package/esm2022/staging/lib/spot-light/common.mjs +0 -42
  350. package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +0 -51
  351. package/esm2022/staging/lib/spot-light/spot-light-input.mjs +0 -62
  352. package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -74
  353. package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -126
  354. package/esm2022/staging/lib/spot-light/spot-light-shadow.mjs +0 -63
  355. package/esm2022/staging/lib/spot-light/spot-light.mjs +0 -117
  356. package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +0 -86
  357. package/esm2022/staging/lib/stage/stage.mjs +0 -368
  358. package/esm2022/staging/lib/stars/stars.mjs +0 -140
  359. package/fesm2022/angular-three-soba-performance.mjs +0 -210
  360. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  361. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  362. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  363. package/loaders/lib/loader/loader.d.ts +0 -26
  364. package/loaders/lib/progress/progress.d.ts +0 -16
  365. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  366. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  367. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  368. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  369. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  370. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  371. package/misc/lib/animations/animations.d.ts +0 -13
  372. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  373. package/performance/README.md +0 -3
  374. package/performance/index.d.ts +0 -4
  375. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  376. package/performance/lib/detailed/detailed.d.ts +0 -13
  377. package/performance/lib/stats/stats.d.ts +0 -15
  378. package/plugin/README.md +0 -11
  379. package/plugin/generators.json +0 -19
  380. package/plugin/package.json +0 -9
  381. package/plugin/src/generators/init/compat.d.ts +0 -2
  382. package/plugin/src/generators/init/compat.js +0 -6
  383. package/plugin/src/generators/init/compat.js.map +0 -1
  384. package/plugin/src/generators/init/init.d.ts +0 -4
  385. package/plugin/src/generators/init/init.js +0 -22
  386. package/plugin/src/generators/init/init.js.map +0 -1
  387. package/plugin/src/generators/init/schema.json +0 -6
  388. package/plugin/src/index.d.ts +0 -1
  389. package/plugin/src/index.js +0 -6
  390. package/plugin/src/index.js.map +0 -1
  391. package/shaders/lib/soft-shadow-material/soft-shadow-material.d.ts +0 -10
  392. package/shaders/lib/spot-light-material/spot-light-material.d.ts +0 -4
  393. package/shaders/lib/star-field-material/star-field-material.d.ts +0 -3
  394. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  395. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  396. package/staging/lib/bounds/bounds.d.ts +0 -48
  397. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  398. package/staging/lib/caustics/caustics.d.ts +0 -47
  399. package/staging/lib/center/center.d.ts +0 -40
  400. package/staging/lib/cloud/cloud.d.ts +0 -23
  401. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  402. package/staging/lib/environment/environment-cube.d.ts +0 -11
  403. package/staging/lib/environment/environment-ground.d.ts +0 -9
  404. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  405. package/staging/lib/environment/environment-map.d.ts +0 -10
  406. package/staging/lib/environment/environment-portal.d.ts +0 -15
  407. package/staging/lib/environment/utils.d.ts +0 -8
  408. package/staging/lib/float/float.d.ts +0 -16
  409. package/staging/lib/sky/sky.d.ts +0 -20
  410. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  411. package/staging/lib/spot-light/common.d.ts +0 -3
  412. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  413. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  414. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  415. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  416. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  417. package/staging/lib/spot-light/spot-light.d.ts +0 -17
  418. package/staging/lib/spot-light/volumetric-mesh.d.ts +0 -15
  419. package/staging/lib/stage/stage.d.ts +0 -87
  420. package/staging/lib/stars/stars.d.ts +0 -20
  421. /package/shaders/{lib/caustics-material → caustics}/caustics-material.d.ts +0 -0
  422. /package/shaders/{lib/caustics-projection-material → caustics}/caustics-projection-material.d.ts +0 -0
  423. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  424. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  425. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  426. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
@@ -0,0 +1,94 @@
1
+ import { NoBlending, ShaderMaterial, Uniform, Vector2 } from 'three';
2
+ export class ConvolutionMaterial extends ShaderMaterial {
3
+ constructor(texelSize = new Vector2()) {
4
+ super({
5
+ uniforms: {
6
+ inputBuffer: new Uniform(null),
7
+ depthBuffer: new Uniform(null),
8
+ resolution: new Uniform(new Vector2()),
9
+ texelSize: new Uniform(new Vector2()),
10
+ halfTexelSize: new Uniform(new Vector2()),
11
+ kernel: new Uniform(0.0),
12
+ scale: new Uniform(1.0),
13
+ cameraNear: new Uniform(0.0),
14
+ cameraFar: new Uniform(1.0),
15
+ minDepthThreshold: new Uniform(0.0),
16
+ maxDepthThreshold: new Uniform(1.0),
17
+ depthScale: new Uniform(0.0),
18
+ depthToBlurRatioBias: new Uniform(0.25),
19
+ },
20
+ fragmentShader: `#include <common>
21
+ #include <dithering_pars_fragment>
22
+ uniform sampler2D inputBuffer;
23
+ uniform sampler2D depthBuffer;
24
+ uniform float cameraNear;
25
+ uniform float cameraFar;
26
+ uniform float minDepthThreshold;
27
+ uniform float maxDepthThreshold;
28
+ uniform float depthScale;
29
+ uniform float depthToBlurRatioBias;
30
+ varying vec2 vUv;
31
+ varying vec2 vUv0;
32
+ varying vec2 vUv1;
33
+ varying vec2 vUv2;
34
+ varying vec2 vUv3;
35
+
36
+ void main() {
37
+ float depthFactor = 0.0;
38
+
39
+ #ifdef USE_DEPTH
40
+ vec4 depth = texture2D(depthBuffer, vUv);
41
+ depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
42
+ depthFactor *= depthScale;
43
+ depthFactor = max(0.0, min(1.0, depthFactor + 0.25));
44
+ #endif
45
+
46
+ vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));
47
+ sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));
48
+ sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));
49
+ sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));
50
+ gl_FragColor = sum * 0.25 ;
51
+
52
+ #include <dithering_fragment>
53
+ #include <tonemapping_fragment>
54
+ #include <encodings_fragment>
55
+ }`,
56
+ vertexShader: `uniform vec2 texelSize;
57
+ uniform vec2 halfTexelSize;
58
+ uniform float kernel;
59
+ uniform float scale;
60
+ varying vec2 vUv;
61
+ varying vec2 vUv0;
62
+ varying vec2 vUv1;
63
+ varying vec2 vUv2;
64
+ varying vec2 vUv3;
65
+
66
+ void main() {
67
+ vec2 uv = position.xy * 0.5 + 0.5;
68
+ vUv = uv;
69
+
70
+ vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;
71
+ vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);
72
+ vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);
73
+ vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);
74
+ vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);
75
+
76
+ gl_Position = vec4(position.xy, 1.0, 1.0);
77
+ }`,
78
+ blending: NoBlending,
79
+ depthWrite: false,
80
+ depthTest: false,
81
+ });
82
+ this.toneMapped = false;
83
+ this.setTexelSize(texelSize.x, texelSize.y);
84
+ this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);
85
+ }
86
+ setTexelSize(x, y) {
87
+ this.uniforms['texelSize'].value.set(x, y);
88
+ this.uniforms['halfTexelSize'].value.set(x, y).multiplyScalar(0.5);
89
+ }
90
+ setResolution(resolution) {
91
+ this.uniforms['resolution'].value.copy(resolution);
92
+ }
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb24tbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVyRSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsY0FBYztJQUV0RCxZQUFZLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRTtRQUNwQyxLQUFLLENBQUM7WUFDTCxRQUFRLEVBQUU7Z0JBQ1QsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDOUIsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDOUIsVUFBVSxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNyQyxhQUFhLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDdkIsVUFBVSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDM0IsaUJBQWlCLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNuQyxpQkFBaUIsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ25DLFVBQVUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzVCLG9CQUFvQixFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQzthQUN2QztZQUNELGNBQWMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUFtQ1Q7WUFDUCxZQUFZLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQXFCUDtZQUNQLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsYUFBYSxDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb0JsZW5kaW5nLCBTaGFkZXJNYXRlcmlhbCwgVW5pZm9ybSwgVmVjdG9yMiB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGNsYXNzIENvbnZvbHV0aW9uTWF0ZXJpYWwgZXh0ZW5kcyBTaGFkZXJNYXRlcmlhbCB7XG5cdHJlYWRvbmx5IGtlcm5lbDogRmxvYXQzMkFycmF5O1xuXHRjb25zdHJ1Y3Rvcih0ZXhlbFNpemUgPSBuZXcgVmVjdG9yMigpKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0dW5pZm9ybXM6IHtcblx0XHRcdFx0aW5wdXRCdWZmZXI6IG5ldyBVbmlmb3JtKG51bGwpLFxuXHRcdFx0XHRkZXB0aEJ1ZmZlcjogbmV3IFVuaWZvcm0obnVsbCksXG5cdFx0XHRcdHJlc29sdXRpb246IG5ldyBVbmlmb3JtKG5ldyBWZWN0b3IyKCkpLFxuXHRcdFx0XHR0ZXhlbFNpemU6IG5ldyBVbmlmb3JtKG5ldyBWZWN0b3IyKCkpLFxuXHRcdFx0XHRoYWxmVGV4ZWxTaXplOiBuZXcgVW5pZm9ybShuZXcgVmVjdG9yMigpKSxcblx0XHRcdFx0a2VybmVsOiBuZXcgVW5pZm9ybSgwLjApLFxuXHRcdFx0XHRzY2FsZTogbmV3IFVuaWZvcm0oMS4wKSxcblx0XHRcdFx0Y2FtZXJhTmVhcjogbmV3IFVuaWZvcm0oMC4wKSxcblx0XHRcdFx0Y2FtZXJhRmFyOiBuZXcgVW5pZm9ybSgxLjApLFxuXHRcdFx0XHRtaW5EZXB0aFRocmVzaG9sZDogbmV3IFVuaWZvcm0oMC4wKSxcblx0XHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQ6IG5ldyBVbmlmb3JtKDEuMCksXG5cdFx0XHRcdGRlcHRoU2NhbGU6IG5ldyBVbmlmb3JtKDAuMCksXG5cdFx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBuZXcgVW5pZm9ybSgwLjI1KSxcblx0XHRcdH0sXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogYCNpbmNsdWRlIDxjb21tb24+XG4gICAgICAgICNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgaW5wdXRCdWZmZXI7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoQnVmZmVyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGNhbWVyYU5lYXI7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgY2FtZXJhRmFyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1pbkRlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1heERlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGRlcHRoU2NhbGU7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGVwdGhUb0JsdXJSYXRpb0JpYXM7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYwO1xuICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2MTtcbiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjI7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYzO1xuXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICBmbG9hdCBkZXB0aEZhY3RvciA9IDAuMDtcblxuICAgICAgICAgICNpZmRlZiBVU0VfREVQVEhcbiAgICAgICAgICAgIHZlYzQgZGVwdGggPSB0ZXh0dXJlMkQoZGVwdGhCdWZmZXIsIHZVdik7XG4gICAgICAgICAgICBkZXB0aEZhY3RvciA9IHNtb290aHN0ZXAobWluRGVwdGhUaHJlc2hvbGQsIG1heERlcHRoVGhyZXNob2xkLCAxLjAtKGRlcHRoLnIgKiBkZXB0aC5hKSk7XG4gICAgICAgICAgICBkZXB0aEZhY3RvciAqPSBkZXB0aFNjYWxlO1xuICAgICAgICAgICAgZGVwdGhGYWN0b3IgPSBtYXgoMC4wLCBtaW4oMS4wLCBkZXB0aEZhY3RvciArIDAuMjUpKTtcbiAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgIHZlYzQgc3VtID0gdGV4dHVyZTJEKGlucHV0QnVmZmVyLCBtaXgodlV2MCwgdlV2LCBkZXB0aEZhY3RvcikpO1xuICAgICAgICAgIHN1bSArPSB0ZXh0dXJlMkQoaW5wdXRCdWZmZXIsIG1peCh2VXYxLCB2VXYsIGRlcHRoRmFjdG9yKSk7XG4gICAgICAgICAgc3VtICs9IHRleHR1cmUyRChpbnB1dEJ1ZmZlciwgbWl4KHZVdjIsIHZVdiwgZGVwdGhGYWN0b3IpKTtcbiAgICAgICAgICBzdW0gKz0gdGV4dHVyZTJEKGlucHV0QnVmZmVyLCBtaXgodlV2MywgdlV2LCBkZXB0aEZhY3RvcikpO1xuICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHN1bSAqIDAuMjUgO1xuXG4gICAgICAgICAgI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbiAgICAgICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICAgICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgICAgfWAsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6IGB1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuICAgICAgICB1bmlmb3JtIHZlYzIgaGFsZlRleGVsU2l6ZTtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBrZXJuZWw7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgc2NhbGU7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYwO1xuICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2MTtcbiAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjI7XG4gICAgICAgIHZhcnlpbmcgdmVjMiB2VXYzO1xuXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICB2ZWMyIHV2ID0gcG9zaXRpb24ueHkgKiAwLjUgKyAwLjU7XG4gICAgICAgICAgdlV2ID0gdXY7XG5cbiAgICAgICAgICB2ZWMyIGRVdiA9ICh0ZXhlbFNpemUgKiB2ZWMyKGtlcm5lbCkgKyBoYWxmVGV4ZWxTaXplKSAqIHNjYWxlO1xuICAgICAgICAgIHZVdjAgPSB2ZWMyKHV2LnggLSBkVXYueCwgdXYueSArIGRVdi55KTtcbiAgICAgICAgICB2VXYxID0gdmVjMih1di54ICsgZFV2LngsIHV2LnkgKyBkVXYueSk7XG4gICAgICAgICAgdlV2MiA9IHZlYzIodXYueCArIGRVdi54LCB1di55IC0gZFV2LnkpO1xuICAgICAgICAgIHZVdjMgPSB2ZWMyKHV2LnggLSBkVXYueCwgdXYueSAtIGRVdi55KTtcblxuICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMS4wLCAxLjApO1xuICAgICAgICB9YCxcblx0XHRcdGJsZW5kaW5nOiBOb0JsZW5kaW5nLFxuXHRcdFx0ZGVwdGhXcml0ZTogZmFsc2UsXG5cdFx0XHRkZXB0aFRlc3Q6IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy50b25lTWFwcGVkID0gZmFsc2U7XG5cdFx0dGhpcy5zZXRUZXhlbFNpemUodGV4ZWxTaXplLngsIHRleGVsU2l6ZS55KTtcblx0XHR0aGlzLmtlcm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAuMCwgMS4wLCAyLjAsIDIuMCwgMy4wXSk7XG5cdH1cblxuXHRzZXRUZXhlbFNpemUoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcblx0XHR0aGlzLnVuaWZvcm1zWyd0ZXhlbFNpemUnXS52YWx1ZS5zZXQoeCwgeSk7XG5cdFx0dGhpcy51bmlmb3Jtc1snaGFsZlRleGVsU2l6ZSddLnZhbHVlLnNldCh4LCB5KS5tdWx0aXBseVNjYWxhcigwLjUpO1xuXHR9XG5cdHNldFJlc29sdXRpb24ocmVzb2x1dGlvbjogVmVjdG9yMikge1xuXHRcdHRoaXMudW5pZm9ybXNbJ3Jlc29sdXRpb24nXS52YWx1ZS5jb3B5KHJlc29sdXRpb24pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { shaderMaterial } from '../shader-material/shader-material';
2
+ export const DiscardMaterial = shaderMaterial({}, 'void main() { }', 'void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY2FyZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9kaXNjYXJkLW1hdGVyaWFsL2Rpc2NhcmQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQzVDLEVBQUUsRUFDRixpQkFBaUIsRUFDakIsb0VBQW9FLENBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgRGlzY2FyZE1hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG5cdHt9LFxuXHQndm9pZCBtYWluKCkgeyB9Jyxcblx0J3ZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApOyBkaXNjYXJkOyAgfScsXG4pO1xuIl19
@@ -0,0 +1,77 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const GridMaterial = shaderMaterial({
4
+ cellSize: 0.5,
5
+ sectionSize: 1,
6
+ fadeDistance: 100,
7
+ fadeStrength: 1,
8
+ cellThickness: 0.5,
9
+ sectionThickness: 1,
10
+ cellColor: new THREE.Color(),
11
+ sectionColor: new THREE.Color(),
12
+ infiniteGrid: false,
13
+ followCamera: false,
14
+ worldCamProjPosition: new THREE.Vector3(),
15
+ worldPlanePosition: new THREE.Vector3(),
16
+ },
17
+ /* glsl */ `
18
+ varying vec3 localPosition;
19
+ varying vec4 worldPosition;
20
+
21
+ uniform vec3 worldCamProjPosition;
22
+ uniform vec3 worldPlanePosition;
23
+ uniform float fadeDistance;
24
+ uniform bool infiniteGrid;
25
+ uniform bool followCamera;
26
+
27
+ void main() {
28
+ localPosition = position.xzy;
29
+ if (infiniteGrid) localPosition *= 1.0 + fadeDistance;
30
+
31
+ worldPosition = modelMatrix * vec4(localPosition, 1.0);
32
+ if (followCamera) {
33
+ worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);
34
+ localPosition = (inverse(modelMatrix) * worldPosition).xyz;
35
+ }
36
+
37
+ gl_Position = projectionMatrix * viewMatrix * worldPosition;
38
+ }
39
+ `,
40
+ /* glsl */ `
41
+ varying vec3 localPosition;
42
+ varying vec4 worldPosition;
43
+
44
+ uniform vec3 worldCamProjPosition;
45
+ uniform float cellSize;
46
+ uniform float sectionSize;
47
+ uniform vec3 cellColor;
48
+ uniform vec3 sectionColor;
49
+ uniform float fadeDistance;
50
+ uniform float fadeStrength;
51
+ uniform float cellThickness;
52
+ uniform float sectionThickness;
53
+
54
+ float getGrid(float size, float thickness) {
55
+ vec2 r = localPosition.xz / size;
56
+ vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
57
+ float line = min(grid.x, grid.y) + 1.0 - thickness;
58
+ return 1.0 - min(line, 1.0);
59
+ }
60
+
61
+ void main() {
62
+ float g1 = getGrid(cellSize, cellThickness);
63
+ float g2 = getGrid(sectionSize, sectionThickness);
64
+
65
+ float dist = distance(worldCamProjPosition, worldPosition.xyz);
66
+ float d = 1.0 - min(dist / fadeDistance, 1.0);
67
+ vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));
68
+
69
+ gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));
70
+ gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
71
+ if (gl_FragColor.a <= 0.0) discard;
72
+
73
+ #include <tonemapping_fragment>
74
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
75
+ }
76
+ `);
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9ncmlkLW1hdGVyaWFsL2dyaWQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQ3pDO0lBQ0MsUUFBUSxFQUFFLEdBQUc7SUFDYixXQUFXLEVBQUUsQ0FBQztJQUNkLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFlBQVksRUFBRSxDQUFDO0lBQ2YsYUFBYSxFQUFFLEdBQUc7SUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQixTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFlBQVksRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDL0IsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsb0JBQW9CLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ3pDLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtDQUN2QztBQUNELFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtBQUNGLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFrQ00sUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjs7R0FFakgsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IEdyaWRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2VsbFNpemU6IDAuNSxcblx0XHRzZWN0aW9uU2l6ZTogMSxcblx0XHRmYWRlRGlzdGFuY2U6IDEwMCxcblx0XHRmYWRlU3RyZW5ndGg6IDEsXG5cdFx0Y2VsbFRoaWNrbmVzczogMC41LFxuXHRcdHNlY3Rpb25UaGlja25lc3M6IDEsXG5cdFx0Y2VsbENvbG9yOiBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRzZWN0aW9uQ29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdGluZmluaXRlR3JpZDogZmFsc2UsXG5cdFx0Zm9sbG93Q2FtZXJhOiBmYWxzZSxcblx0XHR3b3JsZENhbVByb2pQb3NpdGlvbjogbmV3IFRIUkVFLlZlY3RvcjMoKSxcblx0XHR3b3JsZFBsYW5lUG9zaXRpb246IG5ldyBUSFJFRS5WZWN0b3IzKCksXG5cdH0sXG5cdC8qIGdsc2wgKi8gYFxuICAgIHZhcnlpbmcgdmVjMyBsb2NhbFBvc2l0aW9uO1xuICAgIHZhcnlpbmcgdmVjNCB3b3JsZFBvc2l0aW9uO1xuXG4gICAgdW5pZm9ybSB2ZWMzIHdvcmxkQ2FtUHJvalBvc2l0aW9uO1xuICAgIHVuaWZvcm0gdmVjMyB3b3JsZFBsYW5lUG9zaXRpb247XG4gICAgdW5pZm9ybSBmbG9hdCBmYWRlRGlzdGFuY2U7XG4gICAgdW5pZm9ybSBib29sIGluZmluaXRlR3JpZDtcbiAgICB1bmlmb3JtIGJvb2wgZm9sbG93Q2FtZXJhO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgbG9jYWxQb3NpdGlvbiA9IHBvc2l0aW9uLnh6eTtcbiAgICAgIGlmIChpbmZpbml0ZUdyaWQpIGxvY2FsUG9zaXRpb24gKj0gMS4wICsgZmFkZURpc3RhbmNlO1xuXG4gICAgICB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KGxvY2FsUG9zaXRpb24sIDEuMCk7XG4gICAgICBpZiAoZm9sbG93Q2FtZXJhKSB7XG4gICAgICAgIHdvcmxkUG9zaXRpb24ueHl6ICs9ICh3b3JsZENhbVByb2pQb3NpdGlvbiAtIHdvcmxkUGxhbmVQb3NpdGlvbik7XG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSAoaW52ZXJzZShtb2RlbE1hdHJpeCkgKiB3b3JsZFBvc2l0aW9uKS54eXo7XG4gICAgICB9XG5cbiAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuICAgIH1cbiAgYCxcblx0LyogZ2xzbCAqLyBgXG4gICAgdmFyeWluZyB2ZWMzIGxvY2FsUG9zaXRpb247XG4gICAgdmFyeWluZyB2ZWM0IHdvcmxkUG9zaXRpb247XG5cbiAgICB1bmlmb3JtIHZlYzMgd29ybGRDYW1Qcm9qUG9zaXRpb247XG4gICAgdW5pZm9ybSBmbG9hdCBjZWxsU2l6ZTtcbiAgICB1bmlmb3JtIGZsb2F0IHNlY3Rpb25TaXplO1xuICAgIHVuaWZvcm0gdmVjMyBjZWxsQ29sb3I7XG4gICAgdW5pZm9ybSB2ZWMzIHNlY3Rpb25Db2xvcjtcbiAgICB1bmlmb3JtIGZsb2F0IGZhZGVEaXN0YW5jZTtcbiAgICB1bmlmb3JtIGZsb2F0IGZhZGVTdHJlbmd0aDtcbiAgICB1bmlmb3JtIGZsb2F0IGNlbGxUaGlja25lc3M7XG4gICAgdW5pZm9ybSBmbG9hdCBzZWN0aW9uVGhpY2tuZXNzO1xuXG4gICAgZmxvYXQgZ2V0R3JpZChmbG9hdCBzaXplLCBmbG9hdCB0aGlja25lc3MpIHtcbiAgICAgIHZlYzIgciA9IGxvY2FsUG9zaXRpb24ueHogLyBzaXplO1xuICAgICAgdmVjMiBncmlkID0gYWJzKGZyYWN0KHIgLSAwLjUpIC0gMC41KSAvIGZ3aWR0aChyKTtcbiAgICAgIGZsb2F0IGxpbmUgPSBtaW4oZ3JpZC54LCBncmlkLnkpICsgMS4wIC0gdGhpY2tuZXNzO1xuICAgICAgcmV0dXJuIDEuMCAtIG1pbihsaW5lLCAxLjApO1xuICAgIH1cblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIGZsb2F0IGcxID0gZ2V0R3JpZChjZWxsU2l6ZSwgY2VsbFRoaWNrbmVzcyk7XG4gICAgICBmbG9hdCBnMiA9IGdldEdyaWQoc2VjdGlvblNpemUsIHNlY3Rpb25UaGlja25lc3MpO1xuXG4gICAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2Uod29ybGRDYW1Qcm9qUG9zaXRpb24sIHdvcmxkUG9zaXRpb24ueHl6KTtcbiAgICAgIGZsb2F0IGQgPSAxLjAgLSBtaW4oZGlzdCAvIGZhZGVEaXN0YW5jZSwgMS4wKTtcbiAgICAgIHZlYzMgY29sb3IgPSBtaXgoY2VsbENvbG9yLCBzZWN0aW9uQ29sb3IsIG1pbigxLjAsIHNlY3Rpb25UaGlja25lc3MgKiBnMikpO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCAoZzEgKyBnMikgKiBwb3coZCwgZmFkZVN0cmVuZ3RoKSk7XG4gICAgICBnbF9GcmFnQ29sb3IuYSA9IG1peCgwLjc1ICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5hLCBnMik7XG4gICAgICBpZiAoZ2xfRnJhZ0NvbG9yLmEgPD0gMC4wKSBkaXNjYXJkO1xuXG4gICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICAgICAjaW5jbHVkZSA8JHtwYXJzZUludChUSFJFRS5SRVZJU0lPTi5yZXBsYWNlKC9cXEQrL2csICcnKSkgPj0gMTU0ID8gJ2NvbG9yc3BhY2VfZnJhZ21lbnQnIDogJ2VuY29kaW5nc19mcmFnbWVudCd9PlxuICAgIH1cbiAgYCxcbik7XG5cbmV4cG9ydCB0eXBlIE5ndEdyaWRNYXRlcmlhbFN0YXRlID0ge1xuXHQvKiogQ2VsbCBzaXplLCBkZWZhdWx0OiAwLjUgKi9cblx0Y2VsbFNpemU/OiBudW1iZXI7XG5cdC8qKiBDZWxsIHRoaWNrbmVzcywgZGVmYXVsdDogMC41ICovXG5cdGNlbGxUaGlja25lc3M/OiBudW1iZXI7XG5cdC8qKiBDZWxsIGNvbG9yLCBkZWZhdWx0OiBibGFjayAqL1xuXHRjZWxsQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHQvKiogU2VjdGlvbiBzaXplLCBkZWZhdWx0OiAxICovXG5cdHNlY3Rpb25TaXplPzogbnVtYmVyO1xuXHQvKiogU2VjdGlvbiB0aGlja25lc3MsIGRlZmF1bHQ6IDEgKi9cblx0c2VjdGlvblRoaWNrbmVzcz86IG51bWJlcjtcblx0LyoqIFNlY3Rpb24gY29sb3IsIGRlZmF1bHQ6ICMyMDgwZmYgKi9cblx0c2VjdGlvbkNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0LyoqIEZvbGxvdyBjYW1lcmEsIGRlZmF1bHQ6IGZhbHNlICovXG5cdGZvbGxvd0NhbWVyYT86IGJvb2xlYW47XG5cdC8qKiBEaXNwbGF5IHRoZSBncmlkIGluZmluaXRlbHksIGRlZmF1bHQ6IGZhbHNlICovXG5cdGluZmluaXRlR3JpZD86IGJvb2xlYW47XG5cdC8qKiBGYWRlIGRpc3RhbmNlLCBkZWZhdWx0OiAxMDAgKi9cblx0ZmFkZURpc3RhbmNlPzogbnVtYmVyO1xuXHQvKiogRmFkZSBzdHJlbmd0aCwgZGVmYXVsdDogMSAqL1xuXHRmYWRlU3RyZW5ndGg/OiBudW1iZXI7XG5cdC8qKiBNYXRlcmlhbCBzaWRlLCBkZWZhdWx0OiBUSFJFRS5CYWNrU2lkZSAqL1xuXHRzaWRlPzogVEhSRUUuU2lkZTtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3QtZ3JpZC1tYXRlcmlhbCc6IE5ndEdyaWRNYXRlcmlhbFN0YXRlICYgTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdH1cbn1cbiJdfQ==
@@ -1,15 +1,18 @@
1
- export * from './lib/blur-pass/blur-pass';
2
- export * from './lib/caustics-material/caustics-material';
3
- export * from './lib/caustics-projection-material/caustics-projection-material';
4
- export * from './lib/convolution-material/convolution-material';
5
- export * from './lib/discard-material/discard-material';
6
- export * from './lib/mesh-distort-material/mesh-distort-material';
7
- export * from './lib/mesh-reflector-material/mesh-reflector-material';
8
- export * from './lib/mesh-refraction-material/mesh-refraction-material';
9
- export * from './lib/mesh-transmission-material/mesh-transmission-material';
10
- export * from './lib/mesh-wobble-material/mesh-wobble-material';
11
- export * from './lib/shader-material/shader-material';
12
- export * from './lib/soft-shadow-material/soft-shadow-material';
13
- export * from './lib/spot-light-material/spot-light-material';
14
- export * from './lib/star-field-material/star-field-material';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9ibHVyLXBhc3MvYmx1ci1wYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdXN0aWNzLW1hdGVyaWFsL2NhdXN0aWNzLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdXN0aWNzLXByb2plY3Rpb24tbWF0ZXJpYWwvY2F1c3RpY3MtcHJvamVjdGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb252b2x1dGlvbi1tYXRlcmlhbC9jb252b2x1dGlvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXNjYXJkLW1hdGVyaWFsL2Rpc2NhcmQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtdHJhbnNtaXNzaW9uLW1hdGVyaWFsL21lc2gtdHJhbnNtaXNzaW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtd29iYmxlLW1hdGVyaWFsL21lc2gtd29iYmxlLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc29mdC1zaGFkb3ctbWF0ZXJpYWwvc29mdC1zaGFkb3ctbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3BvdC1saWdodC1tYXRlcmlhbC9zcG90LWxpZ2h0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0YXItZmllbGQtbWF0ZXJpYWwvc3Rhci1maWVsZC1tYXRlcmlhbCc7XG4iXX0=
1
+ export * from './blur-pass/blur-pass';
2
+ export * from './caustics/caustics-material';
3
+ export * from './caustics/caustics-projection-material';
4
+ export * from './convolution-material/convolution-material';
5
+ export * from './discard-material/discard-material';
6
+ export * from './grid-material/grid-material';
7
+ export * from './mesh-distort-material/mesh-distort-material';
8
+ export * from './mesh-reflector-material/mesh-reflector-material';
9
+ export * from './mesh-refraction-material/mesh-refraction-material';
10
+ export * from './mesh-transmission-material/mesh-transmission-material';
11
+ export * from './mesh-wobble-material/mesh-wobble-material';
12
+ export * from './shader-material/shader-material';
13
+ export * from './soft-shadow-material/soft-shadow-material';
14
+ export * from './sparkles-material/sparkles-material';
15
+ export * from './spot-light-material/spot-light-material';
16
+ export * from './star-field-material/star-field-material';
17
+ export * from './wireframe-material/wireframe-material';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHlDQUF5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ibHVyLXBhc3MvYmx1ci1wYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vY2F1c3RpY3MvY2F1c3RpY3MtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXVzdGljcy9jYXVzdGljcy1wcm9qZWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vY29udm9sdXRpb24tbWF0ZXJpYWwvY29udm9sdXRpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXNjYXJkLW1hdGVyaWFsL2Rpc2NhcmQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkLW1hdGVyaWFsL2dyaWQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwvbWVzaC1kaXN0b3J0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNoLXdvYmJsZS1tYXRlcmlhbC9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zb2Z0LXNoYWRvdy1tYXRlcmlhbC9zb2Z0LXNoYWRvdy1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NwYXJrbGVzLW1hdGVyaWFsL3NwYXJrbGVzLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3BvdC1saWdodC1tYXRlcmlhbC9zcG90LWxpZ2h0LW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rhci1maWVsZC1tYXRlcmlhbC9zdGFyLWZpZWxkLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vd2lyZWZyYW1lLW1hdGVyaWFsL3dpcmVmcmFtZS1tYXRlcmlhbCc7XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+ import * as THREE from 'three';
3
+ export const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
4
+ export function injectNgtsMeshDistortMaterial() {
5
+ return inject(NGTS_DISTORT_MATERIAL_SHADER);
6
+ }
7
+ export function createMeshDistortMaterial(distortShader) {
8
+ return class extends THREE.MeshPhysicalMaterial {
9
+ constructor(parameters = {}) {
10
+ super(parameters);
11
+ this.setValues(parameters);
12
+ this._time = { value: 0 };
13
+ this._distort = { value: 0.4 };
14
+ this._radius = { value: 1 };
15
+ }
16
+ onBeforeCompile(shader) {
17
+ shader.uniforms['time'] = this._time;
18
+ shader.uniforms['radius'] = this._radius;
19
+ shader.uniforms['distort'] = this._distort;
20
+ shader.vertexShader = `
21
+ uniform float time;
22
+ uniform float radius;
23
+ uniform float distort;
24
+ ${distortShader}
25
+ ${shader.vertexShader}
26
+ `;
27
+ shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
28
+ float updateTime = time / 50.0;
29
+ float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
30
+ vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
31
+ `);
32
+ }
33
+ get time() {
34
+ return this._time.value;
35
+ }
36
+ set time(v) {
37
+ this._time.value = v;
38
+ }
39
+ get distort() {
40
+ return this._distort.value;
41
+ }
42
+ set distort(v) {
43
+ this._distort.value = v;
44
+ }
45
+ get radius() {
46
+ return this._radius.value;
47
+ }
48
+ set radius(v) {
49
+ this._radius.value = v;
50
+ }
51
+ };
52
+ }
53
+ export function provideNgtsMeshDistortMaterialShader(distortShader) {
54
+ return { provide: NGTS_DISTORT_MATERIAL_SHADER, useFactory: () => createMeshDistortMaterial(distortShader) };
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFzQi9CLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFzQix1QkFBdUIsQ0FBQyxDQUFDO0FBRTdHLE1BQU0sVUFBVSw2QkFBNkI7SUFDNUMsT0FBTyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLGFBQXFCO0lBQzlELE9BQU8sS0FBTSxTQUFRLEtBQUssQ0FBQyxvQkFBb0I7UUFLOUMsWUFBWSxhQUFtRCxFQUFFO1lBQ2hFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFUSxlQUFlLENBQUMsTUFBb0I7WUFDNUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFM0MsTUFBTSxDQUFDLFlBQVksR0FBRzs7OztlQUlWLGFBQWE7ZUFDYixNQUFNLENBQUMsWUFBWTtZQUN0QixDQUFDO1lBQ1YsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDaEQseUJBQXlCLEVBQ3pCOzs7O2dCQUlZLENBQ1osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUk7WUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE9BQU87WUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLE1BQU07WUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxhQUFxQjtJQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO0FBQzlHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmludGVyZmFjZSBVbmlmb3JtPFQ+IHtcblx0dmFsdWU6IFQ7XG59XG5cbi8qKlxuICogbnBtIGkgLUQgcmF3LWxvYWRlciBnbHNsaWZ5LWxvYWRlciBnbHNsLW5vaXNlXG4gKiBVc2FnZTogaW1wb3J0IGRpc3RvcnQgZnJvbSAncmF3LWxvYWRlciFnbHNsaWZ5LWxvYWRlciFhbmd1bGFyLXRocmVlLXNvYmEvYXNzZXRzL2Rpc3RvcnQudmVydC5nbHNsJ1xuICpcbiAqIHVzaW5nIHByb3ZpZGVyOlxuICogLSBwcm92aWRlTmd0c01lc2hEaXN0b3J0TWF0ZXJpYWxTaGFkZXIoZGlzdG9ydClcbiAqIC0gcmVhZG9ubHkgTWVzaERpc3RvcnRNYXRlcmlhbCA9IGluamVjdE5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsKClcbiAqIC0gbWF0ZXJpYWwgPSBuZXcgdGhpcy5NZXNoRGlzdG9ydE1hdGVyaWFsKCk7IC8vIHRoZW4gdXNlIHRoaXMgd2l0aCBwcmltaXRpdmVcbiAqXG4gKiB1c2luZyBjcmVhdGVNZXNoRGlzdG9ydE1hdGVyaWFsOiBjcmVhdGVNZXNoRGlzdG9ydE1hdGVyaWFsKGRpc3RvcnQpO1xuICogLSBjb25zdCBNZXNoRGlzdG9ydE1hdGVyaWFsID0gY3JlYXRlTWVzaERpc3RvcnRNYXRlcmlhbChkaXN0b3J0KTtcbiAqIC0gZXh0ZW5kKHsgTWVzaERpc3RvcnRNYXRlcmlhbCB9KTsgLy8gdGhlbiB1c2UgYXMgbmd0LW1lc2gtZGlzdG9ydC1tYXRlcmlhbFxuICovXG5cbmV4cG9ydCB0eXBlIE1lc2hEaXN0b3J0TWF0ZXJpYWwgPSBUeXBlPHsgdGltZTogbnVtYmVyOyBkaXN0b3J0OiBudW1iZXI7IHJhZGl1czogbnVtYmVyIH0gJiBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbD47XG5cbmV4cG9ydCBjb25zdCBOR1RTX0RJU1RPUlRfTUFURVJJQUxfU0hBREVSID0gbmV3IEluamVjdGlvblRva2VuPE1lc2hEaXN0b3J0TWF0ZXJpYWw+KCdEaXN0b3J0TWF0ZXJpYWxTaGFkZXInKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsKCkge1xuXHRyZXR1cm4gaW5qZWN0KE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVzaERpc3RvcnRNYXRlcmlhbChkaXN0b3J0U2hhZGVyOiBzdHJpbmcpIHtcblx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWwge1xuXHRcdF90aW1lOiBVbmlmb3JtPG51bWJlcj47XG5cdFx0X2Rpc3RvcnQ6IFVuaWZvcm08bnVtYmVyPjtcblx0XHRfcmFkaXVzOiBVbmlmb3JtPG51bWJlcj47XG5cblx0XHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbFBhcmFtZXRlcnMgPSB7fSkge1xuXHRcdFx0c3VwZXIocGFyYW1ldGVycyk7XG5cdFx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0XHRcdHRoaXMuX3RpbWUgPSB7IHZhbHVlOiAwIH07XG5cdFx0XHR0aGlzLl9kaXN0b3J0ID0geyB2YWx1ZTogMC40IH07XG5cdFx0XHR0aGlzLl9yYWRpdXMgPSB7IHZhbHVlOiAxIH07XG5cdFx0fVxuXG5cdFx0b3ZlcnJpZGUgb25CZWZvcmVDb21waWxlKHNoYWRlcjogVEhSRUUuU2hhZGVyKSB7XG5cdFx0XHRzaGFkZXIudW5pZm9ybXNbJ3RpbWUnXSA9IHRoaXMuX3RpbWU7XG5cdFx0XHRzaGFkZXIudW5pZm9ybXNbJ3JhZGl1cyddID0gdGhpcy5fcmFkaXVzO1xuXHRcdFx0c2hhZGVyLnVuaWZvcm1zWydkaXN0b3J0J10gPSB0aGlzLl9kaXN0b3J0O1xuXG5cdFx0XHRzaGFkZXIudmVydGV4U2hhZGVyID0gYFxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgIHVuaWZvcm0gZmxvYXQgdGltZTtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHJhZGl1cztcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IGRpc3RvcnQ7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgJHtkaXN0b3J0U2hhZGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgYDtcblx0XHRcdHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG5cdFx0XHRcdCcjaW5jbHVkZSA8YmVnaW5fdmVydGV4PicsXG5cdFx0XHRcdGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGZsb2F0IHVwZGF0ZVRpbWUgPSB0aW1lIC8gNTAuMDtcblx0XHRcdFx0XHRcdFx0XHRcdCAgICAgIGZsb2F0IG5vaXNlID0gc25vaXNlKHZlYzMocG9zaXRpb24gLyAyLjAgKyB1cGRhdGVUaW1lICogNS4wKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgICB2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyhwb3NpdGlvbiAqIChub2lzZSAqIHBvdyhkaXN0b3J0LCAyLjApICsgcmFkaXVzKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgICBgLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRnZXQgdGltZSgpIHtcblx0XHRcdHJldHVybiB0aGlzLl90aW1lLnZhbHVlO1xuXHRcdH1cblxuXHRcdHNldCB0aW1lKHYpIHtcblx0XHRcdHRoaXMuX3RpbWUudmFsdWUgPSB2O1xuXHRcdH1cblxuXHRcdGdldCBkaXN0b3J0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2Rpc3RvcnQudmFsdWU7XG5cdFx0fVxuXG5cdFx0c2V0IGRpc3RvcnQodikge1xuXHRcdFx0dGhpcy5fZGlzdG9ydC52YWx1ZSA9IHY7XG5cdFx0fVxuXG5cdFx0Z2V0IHJhZGl1cygpIHtcblx0XHRcdHJldHVybiB0aGlzLl9yYWRpdXMudmFsdWU7XG5cdFx0fVxuXG5cdFx0c2V0IHJhZGl1cyh2KSB7XG5cdFx0XHR0aGlzLl9yYWRpdXMudmFsdWUgPSB2O1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOZ3RzTWVzaERpc3RvcnRNYXRlcmlhbFNoYWRlcihkaXN0b3J0U2hhZGVyOiBzdHJpbmcpIHtcblx0cmV0dXJuIHsgcHJvdmlkZTogTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUiwgdXNlRmFjdG9yeTogKCkgPT4gY3JlYXRlTWVzaERpc3RvcnRNYXRlcmlhbChkaXN0b3J0U2hhZGVyKSB9O1xufVxuIl19
@@ -0,0 +1,223 @@
1
+ import { MeshStandardMaterial } from 'three';
2
+ export class MeshReflectorMaterial extends MeshStandardMaterial {
3
+ constructor(parameters = {}) {
4
+ super(parameters);
5
+ this._tDepth = { value: null };
6
+ this._distortionMap = { value: null };
7
+ this._tDiffuse = { value: null };
8
+ this._tDiffuseBlur = { value: null };
9
+ this._textureMatrix = { value: null };
10
+ this._hasBlur = { value: false };
11
+ this._mirror = { value: 0.0 };
12
+ this._mixBlur = { value: 0.0 };
13
+ this._blurStrength = { value: 0.5 };
14
+ this._minDepthThreshold = { value: 0.9 };
15
+ this._maxDepthThreshold = { value: 1 };
16
+ this._depthScale = { value: 0 };
17
+ this._depthToBlurRatioBias = { value: 0.25 };
18
+ this._distortion = { value: 1 };
19
+ this._mixContrast = { value: 1.0 };
20
+ this.setValues(parameters);
21
+ }
22
+ onBeforeCompile(shader) {
23
+ if (!shader.defines?.USE_UV) {
24
+ shader.defines.USE_UV = '';
25
+ }
26
+ shader.uniforms.hasBlur = this._hasBlur;
27
+ shader.uniforms.tDiffuse = this._tDiffuse;
28
+ shader.uniforms.tDepth = this._tDepth;
29
+ shader.uniforms.distortionMap = this._distortionMap;
30
+ shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
31
+ shader.uniforms.textureMatrix = this._textureMatrix;
32
+ shader.uniforms.mirror = this._mirror;
33
+ shader.uniforms.mixBlur = this._mixBlur;
34
+ shader.uniforms.mixStrength = this._blurStrength;
35
+ shader.uniforms.minDepthThreshold = this._minDepthThreshold;
36
+ shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
37
+ shader.uniforms.depthScale = this._depthScale;
38
+ shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
39
+ shader.uniforms.distortion = this._distortion;
40
+ shader.uniforms.mixContrast = this._mixContrast;
41
+ shader.vertexShader = `
42
+ uniform mat4 textureMatrix;
43
+ varying vec4 my_vUv;
44
+ ${shader.vertexShader}`;
45
+ shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
46
+ my_vUv = textureMatrix * vec4( position, 1.0 );
47
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
48
+ shader.fragmentShader = `
49
+ uniform sampler2D tDiffuse;
50
+ uniform sampler2D tDiffuseBlur;
51
+ uniform sampler2D tDepth;
52
+ uniform sampler2D distortionMap;
53
+ uniform float distortion;
54
+ uniform float cameraNear;
55
+ uniform float cameraFar;
56
+ uniform bool hasBlur;
57
+ uniform float mixBlur;
58
+ uniform float mirror;
59
+ uniform float mixStrength;
60
+ uniform float minDepthThreshold;
61
+ uniform float maxDepthThreshold;
62
+ uniform float mixContrast;
63
+ uniform float depthScale;
64
+ uniform float depthToBlurRatioBias;
65
+ varying vec4 my_vUv;
66
+ ${shader.fragmentShader}`;
67
+ shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
68
+
69
+ float distortionFactor = 0.0;
70
+ #ifdef USE_DISTORTION
71
+ distortionFactor = texture2D(distortionMap, vUv).r * distortion;
72
+ #endif
73
+
74
+ vec4 new_vUv = my_vUv;
75
+ new_vUv.x += distortionFactor;
76
+ new_vUv.y += distortionFactor;
77
+
78
+ vec4 base = texture2DProj(tDiffuse, new_vUv);
79
+ vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
80
+
81
+ vec4 merge = base;
82
+
83
+ #ifdef USE_NORMALMAP
84
+ vec2 normal_uv = vec2(0.0);
85
+ vec4 normalColor = texture2D(normalMap, vUv * normalScale);
86
+ vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );
87
+ vec3 coord = new_vUv.xyz / new_vUv.w;
88
+ normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
89
+ vec4 base_normal = texture2D(tDiffuse, normal_uv);
90
+ vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
91
+ merge = base_normal;
92
+ blur = blur_normal;
93
+ #endif
94
+
95
+ float depthFactor = 0.0001;
96
+ float blurFactor = 0.0;
97
+
98
+ #ifdef USE_DEPTH
99
+ vec4 depth = texture2DProj(tDepth, new_vUv);
100
+ depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
101
+ depthFactor *= depthScale;
102
+ depthFactor = max(0.0001, min(1.0, depthFactor));
103
+
104
+ #ifdef USE_BLUR
105
+ blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
106
+ merge = merge * min(1.0, depthFactor + 0.5);
107
+ #else
108
+ merge = merge * depthFactor;
109
+ #endif
110
+
111
+ #endif
112
+
113
+ float reflectorRoughnessFactor = roughness;
114
+ #ifdef USE_ROUGHNESSMAP
115
+ vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
116
+ reflectorRoughnessFactor *= reflectorTexelRoughness.g;
117
+ #endif
118
+
119
+ #ifdef USE_BLUR
120
+ blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
121
+ merge = mix(merge, blur, blurFactor);
122
+ #endif
123
+
124
+ vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
125
+ newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
126
+ newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
127
+ newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
128
+
129
+ diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
130
+ `);
131
+ }
132
+ get tDiffuse() {
133
+ return this._tDiffuse.value;
134
+ }
135
+ set tDiffuse(v) {
136
+ this._tDiffuse.value = v;
137
+ }
138
+ get tDepth() {
139
+ return this._tDepth.value;
140
+ }
141
+ set tDepth(v) {
142
+ this._tDepth.value = v;
143
+ }
144
+ get distortionMap() {
145
+ return this._distortionMap.value;
146
+ }
147
+ set distortionMap(v) {
148
+ this._distortionMap.value = v;
149
+ }
150
+ get tDiffuseBlur() {
151
+ return this._tDiffuseBlur.value;
152
+ }
153
+ set tDiffuseBlur(v) {
154
+ this._tDiffuseBlur.value = v;
155
+ }
156
+ get textureMatrix() {
157
+ return this._textureMatrix.value;
158
+ }
159
+ set textureMatrix(v) {
160
+ this._textureMatrix.value = v;
161
+ }
162
+ get hasBlur() {
163
+ return this._hasBlur.value;
164
+ }
165
+ set hasBlur(v) {
166
+ this._hasBlur.value = v;
167
+ }
168
+ get mirror() {
169
+ return this._mirror.value;
170
+ }
171
+ set mirror(v) {
172
+ this._mirror.value = v;
173
+ }
174
+ get mixBlur() {
175
+ return this._mixBlur.value;
176
+ }
177
+ set mixBlur(v) {
178
+ this._mixBlur.value = v;
179
+ }
180
+ get mixStrength() {
181
+ return this._blurStrength.value;
182
+ }
183
+ set mixStrength(v) {
184
+ this._blurStrength.value = v;
185
+ }
186
+ get minDepthThreshold() {
187
+ return this._minDepthThreshold.value;
188
+ }
189
+ set minDepthThreshold(v) {
190
+ this._minDepthThreshold.value = v;
191
+ }
192
+ get maxDepthThreshold() {
193
+ return this._maxDepthThreshold.value;
194
+ }
195
+ set maxDepthThreshold(v) {
196
+ this._maxDepthThreshold.value = v;
197
+ }
198
+ get depthScale() {
199
+ return this._depthScale.value;
200
+ }
201
+ set depthScale(v) {
202
+ this._depthScale.value = v;
203
+ }
204
+ get depthToBlurRatioBias() {
205
+ return this._depthToBlurRatioBias.value;
206
+ }
207
+ set depthToBlurRatioBias(v) {
208
+ this._depthToBlurRatioBias.value = v;
209
+ }
210
+ get distortion() {
211
+ return this._distortion.value;
212
+ }
213
+ set distortion(v) {
214
+ this._distortion.value = v;
215
+ }
216
+ get mixContrast() {
217
+ return this._mixContrast.value;
218
+ }
219
+ set mixContrast(v) {
220
+ this._mixContrast.value = v;
221
+ }
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLG9CQUFvQixFQUFXLE1BQU0sT0FBTyxDQUFDO0FBSS9ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFpQjlELFlBQVksVUFBVSxHQUFHLEVBQUU7UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBakJYLFlBQU8sR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQsbUJBQWMsR0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEUsY0FBUyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxrQkFBYSxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRCxtQkFBYyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoRSxhQUFRLEdBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2hELFlBQU8sR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUMsYUFBUSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM3QyxrQkFBYSxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsRCx1QkFBa0IsR0FBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdkQsdUJBQWtCLEdBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JELGdCQUFXLEdBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFD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QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLENBQVM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdHJpeDQsIE1lc2hTdGFuZGFyZE1hdGVyaWFsLCBUZXh0dXJlIH0gZnJvbSAndGhyZWUnO1xuXG50eXBlIFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFZhbHVlPiA9IHsgdmFsdWU6IFZhbHVlIHwgbnVsbCB9O1xuXG5leHBvcnQgY2xhc3MgTWVzaFJlZmxlY3Rvck1hdGVyaWFsIGV4dGVuZHMgTWVzaFN0YW5kYXJkTWF0ZXJpYWwge1xuXHRwcml2YXRlIF90RGVwdGg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuXHRwcml2YXRlIF9kaXN0b3J0aW9uTWFwOiBVbmluaXRpYWxpemVkVW5pZm9ybTxUZXh0dXJlPiA9IHsgdmFsdWU6IG51bGwgfTtcblx0cHJpdmF0ZSBfdERpZmZ1c2U6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuXHRwcml2YXRlIF90RGlmZnVzZUJsdXI6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuXHRwcml2YXRlIF90ZXh0dXJlTWF0cml4OiBVbmluaXRpYWxpemVkVW5pZm9ybTxNYXRyaXg0PiA9IHsgdmFsdWU6IG51bGwgfTtcblx0cHJpdmF0ZSBfaGFzQmx1cjogeyB2YWx1ZTogYm9vbGVhbiB9ID0geyB2YWx1ZTogZmFsc2UgfTtcblx0cHJpdmF0ZSBfbWlycm9yOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuMCB9O1xuXHRwcml2YXRlIF9taXhCbHVyOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuMCB9O1xuXHRwcml2YXRlIF9ibHVyU3RyZW5ndGg6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC41IH07XG5cdHByaXZhdGUgX21pbkRlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuOSB9O1xuXHRwcml2YXRlIF9tYXhEZXB0aFRocmVzaG9sZDogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAxIH07XG5cdHByaXZhdGUgX2RlcHRoU2NhbGU6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMCB9O1xuXHRwcml2YXRlIF9kZXB0aFRvQmx1clJhdGlvQmlhczogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAwLjI1IH07XG5cdHByaXZhdGUgX2Rpc3RvcnRpb246IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMSB9O1xuXHRwcml2YXRlIF9taXhDb250cmFzdDogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAxLjAgfTtcblxuXHRjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcblx0XHRzdXBlcihwYXJhbWV0ZXJzKTtcblx0XHR0aGlzLnNldFZhbHVlcyhwYXJhbWV0ZXJzKTtcblx0fVxuXHRvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBhbnkpIHtcblx0XHRpZiAoIXNoYWRlci5kZWZpbmVzPy5VU0VfVVYpIHtcblx0XHRcdHNoYWRlci5kZWZpbmVzLlVTRV9VViA9ICcnO1xuXHRcdH1cblx0XHRzaGFkZXIudW5pZm9ybXMuaGFzQmx1ciA9IHRoaXMuX2hhc0JsdXI7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlID0gdGhpcy5fdERpZmZ1c2U7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLnREZXB0aCA9IHRoaXMuX3REZXB0aDtcblx0XHRzaGFkZXIudW5pZm9ybXMuZGlzdG9ydGlvbk1hcCA9IHRoaXMuX2Rpc3RvcnRpb25NYXA7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlQmx1ciA9IHRoaXMuX3REaWZmdXNlQmx1cjtcblx0XHRzaGFkZXIudW5pZm9ybXMudGV4dHVyZU1hdHJpeCA9IHRoaXMuX3RleHR1cmVNYXRyaXg7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLm1pcnJvciA9IHRoaXMuX21pcnJvcjtcblx0XHRzaGFkZXIudW5pZm9ybXMubWl4Qmx1ciA9IHRoaXMuX21peEJsdXI7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLm1peFN0cmVuZ3RoID0gdGhpcy5fYmx1clN0cmVuZ3RoO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5taW5EZXB0aFRocmVzaG9sZCA9IHRoaXMuX21pbkRlcHRoVGhyZXNob2xkO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5tYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuX21heERlcHRoVGhyZXNob2xkO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5kZXB0aFNjYWxlID0gdGhpcy5fZGVwdGhTY2FsZTtcblx0XHRzaGFkZXIudW5pZm9ybXMuZGVwdGhUb0JsdXJSYXRpb0JpYXMgPSB0aGlzLl9kZXB0aFRvQmx1clJhdGlvQmlhcztcblx0XHRzaGFkZXIudW5pZm9ybXMuZGlzdG9ydGlvbiA9IHRoaXMuX2Rpc3RvcnRpb247XG5cdFx0c2hhZGVyLnVuaWZvcm1zLm1peENvbnRyYXN0ID0gdGhpcy5fbWl4Q29udHJhc3Q7XG5cdFx0c2hhZGVyLnZlcnRleFNoYWRlciA9IGBcbiAgICAgICAgdW5pZm9ybSBtYXQ0IHRleHR1cmVNYXRyaXg7XG4gICAgICAgIHZhcnlpbmcgdmVjNCBteV92VXY7XG4gICAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9YDtcblx0XHRzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0JyNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4nLFxuXHRcdFx0YCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbiAgICAgICAgbXlfdlV2ID0gdGV4dHVyZU1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO2AsXG5cdFx0KTtcblx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPSBgXG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHREaWZmdXNlO1xuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0RGlmZnVzZUJsdXI7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHREZXB0aDtcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgZGlzdG9ydGlvbk1hcDtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0aW9uO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGNhbWVyYU5lYXI7XG5cdFx0XHQgIHVuaWZvcm0gZmxvYXQgY2FtZXJhRmFyO1xuICAgICAgICB1bmlmb3JtIGJvb2wgaGFzQmx1cjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaXhCbHVyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1pcnJvcjtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaXhTdHJlbmd0aDtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaW5EZXB0aFRocmVzaG9sZDtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtYXhEZXB0aFRocmVzaG9sZDtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBtaXhDb250cmFzdDtcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBkZXB0aFNjYWxlO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGRlcHRoVG9CbHVyUmF0aW9CaWFzO1xuICAgICAgICB2YXJ5aW5nIHZlYzQgbXlfdlV2O1xuICAgICAgICAke3NoYWRlci5mcmFnbWVudFNoYWRlcn1gO1xuXHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0JyNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4nLFxuXHRcdFx0YCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblxuICAgICAgZmxvYXQgZGlzdG9ydGlvbkZhY3RvciA9IDAuMDtcbiAgICAgICNpZmRlZiBVU0VfRElTVE9SVElPTlxuICAgICAgICBkaXN0b3J0aW9uRmFjdG9yID0gdGV4dHVyZTJEKGRpc3RvcnRpb25NYXAsIHZVdikuciAqIGRpc3RvcnRpb247XG4gICAgICAjZW5kaWZcblxuICAgICAgdmVjNCBuZXdfdlV2ID0gbXlfdlV2O1xuICAgICAgbmV3X3ZVdi54ICs9IGRpc3RvcnRpb25GYWN0b3I7XG4gICAgICBuZXdfdlV2LnkgKz0gZGlzdG9ydGlvbkZhY3RvcjtcblxuICAgICAgdmVjNCBiYXNlID0gdGV4dHVyZTJEUHJvaih0RGlmZnVzZSwgbmV3X3ZVdik7XG4gICAgICB2ZWM0IGJsdXIgPSB0ZXh0dXJlMkRQcm9qKHREaWZmdXNlQmx1ciwgbmV3X3ZVdik7XG5cbiAgICAgIHZlYzQgbWVyZ2UgPSBiYXNlO1xuXG4gICAgICAjaWZkZWYgVVNFX05PUk1BTE1BUFxuICAgICAgICB2ZWMyIG5vcm1hbF91diA9IHZlYzIoMC4wKTtcbiAgICAgICAgdmVjNCBub3JtYWxDb2xvciA9IHRleHR1cmUyRChub3JtYWxNYXAsIHZVdiAqIG5vcm1hbFNjYWxlKTtcbiAgICAgICAgdmVjMyBteV9ub3JtYWwgPSBub3JtYWxpemUoIHZlYzMoIG5vcm1hbENvbG9yLnIgKiAyLjAgLSAxLjAsIG5vcm1hbENvbG9yLmIsICBub3JtYWxDb2xvci5nICogMi4wIC0gMS4wICkgKTtcbiAgICAgICAgdmVjMyBjb29yZCA9IG5ld192VXYueHl6IC8gbmV3X3ZVdi53O1xuICAgICAgICBub3JtYWxfdXYgPSBjb29yZC54eSArIGNvb3JkLnogKiBteV9ub3JtYWwueHogKiAwLjA1O1xuICAgICAgICB2ZWM0IGJhc2Vfbm9ybWFsID0gdGV4dHVyZTJEKHREaWZmdXNlLCBub3JtYWxfdXYpO1xuICAgICAgICB2ZWM0IGJsdXJfbm9ybWFsID0gdGV4dHVyZTJEKHREaWZmdXNlQmx1ciwgbm9ybWFsX3V2KTtcbiAgICAgICAgbWVyZ2UgPSBiYXNlX25vcm1hbDtcbiAgICAgICAgYmx1ciA9IGJsdXJfbm9ybWFsO1xuICAgICAgI2VuZGlmXG5cbiAgICAgIGZsb2F0IGRlcHRoRmFjdG9yID0gMC4wMDAxO1xuICAgICAgZmxvYXQgYmx1ckZhY3RvciA9IDAuMDtcblxuICAgICAgI2lmZGVmIFVTRV9ERVBUSFxuICAgICAgICB2ZWM0IGRlcHRoID0gdGV4dHVyZTJEUHJvaih0RGVwdGgsIG5ld192VXYpO1xuICAgICAgICBkZXB0aEZhY3RvciA9IHNtb290aHN0ZXAobWluRGVwdGhUaHJlc2hvbGQsIG1heERlcHRoVGhyZXNob2xkLCAxLjAtKGRlcHRoLnIgKiBkZXB0aC5hKSk7XG4gICAgICAgIGRlcHRoRmFjdG9yICo9IGRlcHRoU2NhbGU7XG4gICAgICAgIGRlcHRoRmFjdG9yID0gbWF4KDAuMDAwMSwgbWluKDEuMCwgZGVwdGhGYWN0b3IpKTtcblxuICAgICAgICAjaWZkZWYgVVNFX0JMVVJcbiAgICAgICAgICBibHVyID0gYmx1ciAqIG1pbigxLjAsIGRlcHRoRmFjdG9yICsgZGVwdGhUb0JsdXJSYXRpb0JpYXMpO1xuICAgICAgICAgIG1lcmdlID0gbWVyZ2UgKiBtaW4oMS4wLCBkZXB0aEZhY3RvciArIDAuNSk7XG4gICAgICAgICNlbHNlXG4gICAgICAgICAgbWVyZ2UgPSBtZXJnZSAqIGRlcHRoRmFjdG9yO1xuICAgICAgICAjZW5kaWZcblxuICAgICAgI2VuZGlmXG5cbiAgICAgIGZsb2F0IHJlZmxlY3RvclJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzcztcbiAgICAgICNpZmRlZiBVU0VfUk9VR0hORVNTTUFQXG4gICAgICAgIHZlYzQgcmVmbGVjdG9yVGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7XG4gICAgICAgIHJlZmxlY3RvclJvdWdobmVzc0ZhY3RvciAqPSByZWZsZWN0b3JUZXhlbFJvdWdobmVzcy5nO1xuICAgICAgI2VuZGlmXG5cbiAgICAgICNpZmRlZiBVU0VfQkxVUlxuICAgICAgICBibHVyRmFjdG9yID0gbWluKDEuMCwgbWl4Qmx1ciAqIHJlZmxlY3RvclJvdWdobmVzc0ZhY3Rvcik7XG4gICAgICAgIG1lcmdlID0gbWl4KG1lcmdlLCBibHVyLCBibHVyRmFjdG9yKTtcbiAgICAgICNlbmRpZlxuXG4gICAgICB2ZWM0IG5ld01lcmdlID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgICAgbmV3TWVyZ2UuciA9IChtZXJnZS5yIC0gMC41KSAqIG1peENvbnRyYXN0ICsgMC41O1xuICAgICAgbmV3TWVyZ2UuZyA9IChtZXJnZS5nIC0gMC41KSAqIG1peENvbnRyYXN0ICsgMC41O1xuICAgICAgbmV3TWVyZ2UuYiA9IChtZXJnZS5iIC0gMC41KSAqIG1peENvbnRyYXN0ICsgMC41O1xuXG4gICAgICBkaWZmdXNlQ29sb3IucmdiID0gZGlmZnVzZUNvbG9yLnJnYiAqICgoMS4wIC0gbWluKDEuMCwgbWlycm9yKSkgKyBuZXdNZXJnZS5yZ2IgKiBtaXhTdHJlbmd0aCk7XG4gICAgICBgLFxuXHRcdCk7XG5cdH1cblx0Z2V0IHREaWZmdXNlKCk6IFRleHR1cmUgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fdERpZmZ1c2UudmFsdWU7XG5cdH1cblx0c2V0IHREaWZmdXNlKHY6IFRleHR1cmUgfCBudWxsKSB7XG5cdFx0dGhpcy5fdERpZmZ1c2UudmFsdWUgPSB2O1xuXHR9XG5cdGdldCB0RGVwdGgoKTogVGV4dHVyZSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl90RGVwdGgudmFsdWU7XG5cdH1cblx0c2V0IHREZXB0aCh2OiBUZXh0dXJlIHwgbnVsbCkge1xuXHRcdHRoaXMuX3REZXB0aC52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IGRpc3RvcnRpb25NYXAoKTogVGV4dHVyZSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlO1xuXHR9XG5cdHNldCBkaXN0b3J0aW9uTWFwKHY6IFRleHR1cmUgfCBudWxsKSB7XG5cdFx0dGhpcy5fZGlzdG9ydGlvbk1hcC52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IHREaWZmdXNlQmx1cigpOiBUZXh0dXJlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3REaWZmdXNlQmx1ci52YWx1ZTtcblx0fVxuXHRzZXQgdERpZmZ1c2VCbHVyKHY6IFRleHR1cmUgfCBudWxsKSB7XG5cdFx0dGhpcy5fdERpZmZ1c2VCbHVyLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgdGV4dHVyZU1hdHJpeCgpOiBNYXRyaXg0IHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVNYXRyaXgudmFsdWU7XG5cdH1cblx0c2V0IHRleHR1cmVNYXRyaXgodjogTWF0cml4NCB8IG51bGwpIHtcblx0XHR0aGlzLl90ZXh0dXJlTWF0cml4LnZhbHVlID0gdjtcblx0fVxuXHRnZXQgaGFzQmx1cigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5faGFzQmx1ci52YWx1ZTtcblx0fVxuXHRzZXQgaGFzQmx1cih2OiBib29sZWFuKSB7XG5cdFx0dGhpcy5faGFzQmx1ci52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IG1pcnJvcigpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9taXJyb3IudmFsdWU7XG5cdH1cblx0c2V0IG1pcnJvcih2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9taXJyb3IudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBtaXhCbHVyKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX21peEJsdXIudmFsdWU7XG5cdH1cblx0c2V0IG1peEJsdXIodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fbWl4Qmx1ci52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IG1peFN0cmVuZ3RoKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2JsdXJTdHJlbmd0aC52YWx1ZTtcblx0fVxuXHRzZXQgbWl4U3RyZW5ndGgodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fYmx1clN0cmVuZ3RoLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgbWluRGVwdGhUaHJlc2hvbGQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWluRGVwdGhUaHJlc2hvbGQudmFsdWU7XG5cdH1cblx0c2V0IG1pbkRlcHRoVGhyZXNob2xkKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21pbkRlcHRoVGhyZXNob2xkLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgbWF4RGVwdGhUaHJlc2hvbGQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWF4RGVwdGhUaHJlc2hvbGQudmFsdWU7XG5cdH1cblx0c2V0IG1heERlcHRoVGhyZXNob2xkKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21heERlcHRoVGhyZXNob2xkLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgZGVwdGhTY2FsZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9kZXB0aFNjYWxlLnZhbHVlO1xuXHR9XG5cdHNldCBkZXB0aFNjYWxlKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX2RlcHRoU2NhbGUudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBkZXB0aFRvQmx1clJhdGlvQmlhcygpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9kZXB0aFRvQmx1clJhdGlvQmlhcy52YWx1ZTtcblx0fVxuXHRzZXQgZGVwdGhUb0JsdXJSYXRpb0JpYXModjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fZGVwdGhUb0JsdXJSYXRpb0JpYXMudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBkaXN0b3J0aW9uKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3RvcnRpb24udmFsdWU7XG5cdH1cblx0c2V0IGRpc3RvcnRpb24odjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fZGlzdG9ydGlvbi52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IG1peENvbnRyYXN0KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX21peENvbnRyYXN0LnZhbHVlO1xuXHR9XG5cdHNldCBtaXhDb250cmFzdCh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9taXhDb250cmFzdC52YWx1ZSA9IHY7XG5cdH1cbn1cbiJdfQ==