@zephyr3d/scene 0.6.1 → 0.7.0

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 (722) hide show
  1. package/dist/animation/animation.js +149 -27
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +173 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +65 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +41 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +14 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +190 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +29 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +29 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +241 -78
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +30 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +43 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +153 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +312 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +220 -0
  34. package/dist/app/scriptingsystem.js.map +1 -0
  35. package/dist/app/scriptregistry.js +432 -0
  36. package/dist/app/scriptregistry.js.map +1 -0
  37. package/dist/asset/assetmanager.js +772 -291
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +7 -43
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +17 -93
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +27 -14
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +17 -12
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  54. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +158 -4
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js +0 -1
  59. package/dist/blitter/bilateralblur.js.map +1 -1
  60. package/dist/blitter/blitter.js +22 -23
  61. package/dist/blitter/blitter.js.map +1 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js +23 -23
  65. package/dist/blitter/gaussianblur.js.map +1 -1
  66. package/dist/camera/base.js +141 -34
  67. package/dist/camera/base.js.map +1 -1
  68. package/dist/camera/camera.js +653 -149
  69. package/dist/camera/camera.js.map +1 -1
  70. package/dist/camera/fps.js +2 -10
  71. package/dist/camera/fps.js.map +1 -1
  72. package/dist/camera/orbit.js +132 -59
  73. package/dist/camera/orbit.js.map +1 -1
  74. package/dist/camera/orthocamera.js +37 -12
  75. package/dist/camera/orthocamera.js.map +1 -1
  76. package/dist/camera/perspectivecamera.js +37 -20
  77. package/dist/camera/perspectivecamera.js.map +1 -1
  78. package/dist/index.d.ts +18268 -6982
  79. package/dist/index.js +49 -16
  80. package/dist/index.js.map +1 -1
  81. package/dist/material/blinn.js +5 -0
  82. package/dist/material/blinn.js.map +1 -1
  83. package/dist/material/grassmaterial.js +6 -1
  84. package/dist/material/grassmaterial.js.map +1 -1
  85. package/dist/material/lambert.js +6 -1
  86. package/dist/material/lambert.js.map +1 -1
  87. package/dist/material/material.js +346 -73
  88. package/dist/material/material.js.map +1 -1
  89. package/dist/material/meshmaterial.js +498 -156
  90. package/dist/material/meshmaterial.js.map +1 -1
  91. package/dist/material/mixins/albedocolor.js +5 -1
  92. package/dist/material/mixins/albedocolor.js.map +1 -1
  93. package/dist/material/mixins/foliage.js +3 -3
  94. package/dist/material/mixins/foliage.js.map +1 -1
  95. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  96. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  97. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  98. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  101. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  105. package/dist/material/mixins/lit.js +16 -4
  106. package/dist/material/mixins/lit.js.map +1 -1
  107. package/dist/material/mixins/pbr/brdf.js +134 -0
  108. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  109. package/dist/material/mixins/pbr/common.js +68 -85
  110. package/dist/material/mixins/pbr/common.js.map +1 -1
  111. package/dist/material/mixins/texture.js +98 -83
  112. package/dist/material/mixins/texture.js.map +1 -1
  113. package/dist/material/mixins/vertexcolor.js +6 -2
  114. package/dist/material/mixins/vertexcolor.js.map +1 -1
  115. package/dist/material/particle.js +272 -0
  116. package/dist/material/particle.js.map +1 -0
  117. package/dist/material/pbrblueprint.js +186 -0
  118. package/dist/material/pbrblueprint.js.map +1 -0
  119. package/dist/material/pbrmr.js +10 -0
  120. package/dist/material/pbrmr.js.map +1 -1
  121. package/dist/material/pbrsg.js +10 -0
  122. package/dist/material/pbrsg.js.map +1 -1
  123. package/dist/material/shader/helper.js +521 -287
  124. package/dist/material/shader/helper.js.map +1 -1
  125. package/dist/material/terrain-cm.js +607 -0
  126. package/dist/material/terrain-cm.js.map +1 -0
  127. package/dist/material/terrainmaterial.js +59 -54
  128. package/dist/material/terrainmaterial.js.map +1 -1
  129. package/dist/material/unlit.js +5 -0
  130. package/dist/material/unlit.js.map +1 -1
  131. package/dist/material/water.js +415 -0
  132. package/dist/material/water.js.map +1 -0
  133. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  141. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  143. package/dist/posteffect/bloom.js +39 -54
  144. package/dist/posteffect/bloom.js.map +1 -1
  145. package/dist/posteffect/compositor.js +95 -128
  146. package/dist/posteffect/compositor.js.map +1 -1
  147. package/dist/posteffect/fxaa.js +10 -18
  148. package/dist/posteffect/fxaa.js.map +1 -1
  149. package/dist/posteffect/grayscale.js +9 -17
  150. package/dist/posteffect/grayscale.js.map +1 -1
  151. package/dist/posteffect/motionblur.js +105 -0
  152. package/dist/posteffect/motionblur.js.map +1 -0
  153. package/dist/posteffect/posteffect.js +66 -35
  154. package/dist/posteffect/posteffect.js.map +1 -1
  155. package/dist/posteffect/sao.js +13 -21
  156. package/dist/posteffect/sao.js.map +1 -1
  157. package/dist/posteffect/ssr.js +60 -100
  158. package/dist/posteffect/ssr.js.map +1 -1
  159. package/dist/posteffect/taa.js +175 -0
  160. package/dist/posteffect/taa.js.map +1 -0
  161. package/dist/posteffect/tonemap.js +12 -20
  162. package/dist/posteffect/tonemap.js.map +1 -1
  163. package/dist/render/abuffer_oit.js +30 -19
  164. package/dist/render/abuffer_oit.js.map +1 -1
  165. package/dist/render/clipmap.js +429 -101
  166. package/dist/render/clipmap.js.map +1 -1
  167. package/dist/render/cluster_light.js +7 -5
  168. package/dist/render/cluster_light.js.map +1 -1
  169. package/dist/render/cull_visitor.js +43 -3
  170. package/dist/render/cull_visitor.js.map +1 -1
  171. package/dist/render/depthpass.js +14 -5
  172. package/dist/render/depthpass.js.map +1 -1
  173. package/dist/render/drawable_mixin.js +113 -40
  174. package/dist/render/drawable_mixin.js.map +1 -1
  175. package/dist/render/envlight.js +86 -141
  176. package/dist/render/envlight.js.map +1 -1
  177. package/dist/render/fbm_wavegenerator.js +234 -0
  178. package/dist/render/fbm_wavegenerator.js.map +1 -0
  179. package/dist/render/fft_wavegenerator.js +64 -50
  180. package/dist/render/fft_wavegenerator.js.map +1 -1
  181. package/dist/render/fullscreenquad.js +2 -2
  182. package/dist/render/fullscreenquad.js.map +1 -1
  183. package/dist/render/gerstner_wavegenerator.js +98 -48
  184. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  185. package/dist/render/globalbindgroup_allocator.js +4 -2
  186. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  187. package/dist/render/hzb.js +6 -3
  188. package/dist/render/hzb.js.map +1 -1
  189. package/dist/render/lightpass.js +19 -18
  190. package/dist/render/lightpass.js.map +1 -1
  191. package/dist/render/objectcolorpass.js +4 -4
  192. package/dist/render/objectcolorpass.js.map +1 -1
  193. package/dist/render/primitive.js +213 -104
  194. package/dist/render/primitive.js.map +1 -1
  195. package/dist/render/render_queue.js +40 -20
  196. package/dist/render/render_queue.js.map +1 -1
  197. package/dist/render/renderbundle_wrapper.js +65 -15
  198. package/dist/render/renderbundle_wrapper.js.map +1 -1
  199. package/dist/render/renderer.js +326 -185
  200. package/dist/render/renderer.js.map +1 -1
  201. package/dist/render/renderpass.js +20 -36
  202. package/dist/render/renderpass.js.map +1 -1
  203. package/dist/render/shadowmap_pass.js +3 -3
  204. package/dist/render/shadowmap_pass.js.map +1 -1
  205. package/dist/render/sky.js +864 -541
  206. package/dist/render/sky.js.map +1 -1
  207. package/dist/render/weightedblended_oit.js +13 -15
  208. package/dist/render/weightedblended_oit.js.map +1 -1
  209. package/dist/scene/batchgroup.js +18 -5
  210. package/dist/scene/batchgroup.js.map +1 -1
  211. package/dist/scene/environment.js +78 -48
  212. package/dist/scene/environment.js.map +1 -1
  213. package/dist/scene/graph_node.js +2 -3
  214. package/dist/scene/graph_node.js.map +1 -1
  215. package/dist/scene/light.js +28 -89
  216. package/dist/scene/light.js.map +1 -1
  217. package/dist/scene/mesh.js +218 -87
  218. package/dist/scene/mesh.js.map +1 -1
  219. package/dist/scene/octree.js +371 -162
  220. package/dist/scene/octree.js.map +1 -1
  221. package/dist/scene/particlesys.js +684 -0
  222. package/dist/scene/particlesys.js.map +1 -0
  223. package/dist/scene/raycast_visitor.js +34 -5
  224. package/dist/scene/raycast_visitor.js.map +1 -1
  225. package/dist/scene/scene.js +309 -85
  226. package/dist/scene/scene.js.map +1 -1
  227. package/dist/scene/scene_node.js +675 -102
  228. package/dist/scene/scene_node.js.map +1 -1
  229. package/dist/scene/terrain/grass.js +48 -49
  230. package/dist/scene/terrain/grass.js.map +1 -1
  231. package/dist/scene/terrain/heightfield.js +46 -44
  232. package/dist/scene/terrain/heightfield.js.map +1 -1
  233. package/dist/scene/terrain/patch.js +20 -29
  234. package/dist/scene/terrain/patch.js.map +1 -1
  235. package/dist/scene/terrain/quadtree.js +58 -27
  236. package/dist/scene/terrain/quadtree.js.map +1 -1
  237. package/dist/scene/terrain/terrain.js +31 -45
  238. package/dist/scene/terrain/terrain.js.map +1 -1
  239. package/dist/scene/terrain-cm/grass.js +603 -0
  240. package/dist/scene/terrain-cm/grass.js.map +1 -0
  241. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  243. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  245. package/dist/scene/water.js +378 -0
  246. package/dist/scene/water.js.map +1 -0
  247. package/dist/shaders/atmosphere.js +957 -0
  248. package/dist/shaders/atmosphere.js.map +1 -0
  249. package/dist/shaders/fog.js +116 -0
  250. package/dist/shaders/fog.js.map +1 -0
  251. package/dist/shaders/misc.js.map +1 -1
  252. package/dist/shaders/noise.js +217 -8
  253. package/dist/shaders/noise.js.map +1 -1
  254. package/dist/shaders/pbr.js.map +1 -1
  255. package/dist/shaders/shadow.js +8 -8
  256. package/dist/shaders/shadow.js.map +1 -1
  257. package/dist/shaders/ssr.js +87 -39
  258. package/dist/shaders/ssr.js.map +1 -1
  259. package/dist/shaders/temporal.js +216 -0
  260. package/dist/shaders/temporal.js.map +1 -0
  261. package/dist/shaders/water.js +42 -20
  262. package/dist/shaders/water.js.map +1 -1
  263. package/dist/shadow/esm.js +31 -13
  264. package/dist/shadow/esm.js.map +1 -1
  265. package/dist/shadow/pcf_opt.js +12 -13
  266. package/dist/shadow/pcf_opt.js.map +1 -1
  267. package/dist/shadow/pcf_pd.js +12 -13
  268. package/dist/shadow/pcf_pd.js.map +1 -1
  269. package/dist/shadow/shader.js +38 -0
  270. package/dist/shadow/shader.js.map +1 -0
  271. package/dist/shadow/shadow_impl.js.map +1 -1
  272. package/dist/shadow/shadowmapper.js +67 -26
  273. package/dist/shadow/shadowmapper.js.map +1 -1
  274. package/dist/shadow/ssm.js +15 -16
  275. package/dist/shadow/ssm.js.map +1 -1
  276. package/dist/shadow/vsm.js +33 -16
  277. package/dist/shadow/vsm.js.map +1 -1
  278. package/dist/shapes/box.js +181 -83
  279. package/dist/shapes/box.js.map +1 -1
  280. package/dist/shapes/cylinder.js +101 -43
  281. package/dist/shapes/cylinder.js.map +1 -1
  282. package/dist/shapes/plane.js +70 -29
  283. package/dist/shapes/plane.js.map +1 -1
  284. package/dist/shapes/shape.js +120 -17
  285. package/dist/shapes/shape.js.map +1 -1
  286. package/dist/shapes/sphere.js +78 -44
  287. package/dist/shapes/sphere.js.map +1 -1
  288. package/dist/shapes/tetrahedron.js +256 -0
  289. package/dist/shapes/tetrahedron.js.map +1 -0
  290. package/dist/shapes/torus.js +76 -55
  291. package/dist/shapes/torus.js.map +1 -1
  292. package/dist/src/animation/animation.js +127 -0
  293. package/dist/src/animation/animation.js.map +1 -0
  294. package/dist/src/animation/animationset.js +255 -0
  295. package/dist/src/animation/animationset.js.map +1 -0
  296. package/dist/src/animation/animationtrack.js +34 -0
  297. package/dist/src/animation/animationtrack.js.map +1 -0
  298. package/dist/src/animation/eulerrotationtrack.js +52 -0
  299. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  300. package/dist/src/animation/morphtarget.js +93 -0
  301. package/dist/src/animation/morphtarget.js.map +1 -0
  302. package/dist/src/animation/morphtrack.js +70 -0
  303. package/dist/src/animation/morphtrack.js.map +1 -0
  304. package/dist/src/animation/proptrack.js +161 -0
  305. package/dist/src/animation/proptrack.js.map +1 -0
  306. package/dist/src/animation/rotationtrack.js +51 -0
  307. package/dist/src/animation/rotationtrack.js.map +1 -0
  308. package/dist/src/animation/scaletrack.js +50 -0
  309. package/dist/src/animation/scaletrack.js.map +1 -0
  310. package/dist/src/animation/skeleton.js +204 -0
  311. package/dist/src/animation/skeleton.js.map +1 -0
  312. package/dist/src/animation/translationtrack.js +50 -0
  313. package/dist/src/animation/translationtrack.js.map +1 -0
  314. package/dist/{app.js → src/app/app.js} +18 -40
  315. package/dist/src/app/app.js.map +1 -0
  316. package/dist/{input → src/app}/inputmgr.js +41 -16
  317. package/dist/src/app/inputmgr.js.map +1 -0
  318. package/dist/src/asset/assetmanager.js +404 -0
  319. package/dist/src/asset/assetmanager.js.map +1 -0
  320. package/dist/src/asset/builtin.js +337 -0
  321. package/dist/src/asset/builtin.js.map +1 -0
  322. package/dist/src/asset/loaders/dds/dds.js +470 -0
  323. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  324. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  326. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  328. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  330. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  332. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  334. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  336. package/dist/src/asset/loaders/loader.js +45 -0
  337. package/dist/src/asset/loaders/loader.js.map +1 -0
  338. package/dist/src/asset/model.js +414 -0
  339. package/dist/src/asset/model.js.map +1 -0
  340. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  341. package/dist/src/blitter/bilateralblur.js.map +1 -0
  342. package/dist/src/blitter/blitter.js +390 -0
  343. package/dist/src/blitter/blitter.js.map +1 -0
  344. package/dist/src/blitter/box.js +118 -0
  345. package/dist/src/blitter/box.js.map +1 -0
  346. package/dist/src/blitter/copy.js +22 -0
  347. package/dist/src/blitter/copy.js.map +1 -0
  348. package/dist/src/blitter/gaussianblur.js +228 -0
  349. package/dist/src/blitter/gaussianblur.js.map +1 -0
  350. package/dist/src/camera/base.js +92 -0
  351. package/dist/src/camera/base.js.map +1 -0
  352. package/dist/src/camera/camera.js +1005 -0
  353. package/dist/src/camera/camera.js.map +1 -0
  354. package/dist/src/camera/fps.js +238 -0
  355. package/dist/src/camera/fps.js.map +1 -0
  356. package/dist/src/camera/orbit.js +245 -0
  357. package/dist/src/camera/orbit.js.map +1 -0
  358. package/dist/src/camera/orthocamera.js +167 -0
  359. package/dist/src/camera/orthocamera.js.map +1 -0
  360. package/dist/src/camera/perspectivecamera.js +141 -0
  361. package/dist/src/camera/perspectivecamera.js.map +1 -0
  362. package/dist/src/index.js +120 -0
  363. package/dist/src/index.js.map +1 -0
  364. package/dist/src/material/blinn.js +81 -0
  365. package/dist/src/material/blinn.js.map +1 -0
  366. package/dist/src/material/grassmaterial.js +113 -0
  367. package/dist/src/material/grassmaterial.js.map +1 -0
  368. package/dist/src/material/lambert.js +92 -0
  369. package/dist/src/material/lambert.js.map +1 -0
  370. package/dist/src/material/material.js +301 -0
  371. package/dist/src/material/material.js.map +1 -0
  372. package/dist/src/material/meshmaterial.js +704 -0
  373. package/dist/src/material/meshmaterial.js.map +1 -0
  374. package/dist/src/material/mixins/albedocolor.js +76 -0
  375. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  376. package/dist/src/material/mixins/foliage.js +47 -0
  377. package/dist/src/material/mixins/foliage.js.map +1 -0
  378. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  380. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  382. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  384. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  386. package/dist/src/material/mixins/lit.js +476 -0
  387. package/dist/src/material/mixins/lit.js.map +1 -0
  388. package/dist/src/material/mixins/pbr/common.js +918 -0
  389. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  390. package/dist/src/material/mixins/texture.js +172 -0
  391. package/dist/src/material/mixins/texture.js.map +1 -0
  392. package/dist/src/material/mixins/vertexcolor.js +56 -0
  393. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  394. package/dist/src/material/particle.js +178 -0
  395. package/dist/src/material/particle.js.map +1 -0
  396. package/dist/src/material/pbrmr.js +97 -0
  397. package/dist/src/material/pbrmr.js.map +1 -0
  398. package/dist/src/material/pbrsg.js +97 -0
  399. package/dist/src/material/pbrsg.js.map +1 -0
  400. package/dist/src/material/shader/helper.js +1209 -0
  401. package/dist/src/material/shader/helper.js.map +1 -0
  402. package/dist/src/material/terrain-cm.js +606 -0
  403. package/dist/src/material/terrain-cm.js.map +1 -0
  404. package/dist/src/material/terrainmaterial.js +375 -0
  405. package/dist/src/material/terrainmaterial.js.map +1 -0
  406. package/dist/src/material/unlit.js +41 -0
  407. package/dist/src/material/unlit.js.map +1 -0
  408. package/dist/src/material/water.js +417 -0
  409. package/dist/src/material/water.js.map +1 -0
  410. package/dist/src/posteffect/bloom.js +361 -0
  411. package/dist/src/posteffect/bloom.js.map +1 -0
  412. package/dist/src/posteffect/compositor.js +226 -0
  413. package/dist/src/posteffect/compositor.js.map +1 -0
  414. package/dist/src/posteffect/fxaa.js +273 -0
  415. package/dist/src/posteffect/fxaa.js.map +1 -0
  416. package/dist/src/posteffect/grayscale.js +69 -0
  417. package/dist/src/posteffect/grayscale.js.map +1 -0
  418. package/dist/src/posteffect/motionblur.js +96 -0
  419. package/dist/src/posteffect/motionblur.js.map +1 -0
  420. package/dist/src/posteffect/posteffect.js +126 -0
  421. package/dist/src/posteffect/posteffect.js.map +1 -0
  422. package/dist/src/posteffect/sao.js +324 -0
  423. package/dist/src/posteffect/sao.js.map +1 -0
  424. package/dist/src/posteffect/ssr.js +489 -0
  425. package/dist/src/posteffect/ssr.js.map +1 -0
  426. package/dist/src/posteffect/taa.js +172 -0
  427. package/dist/src/posteffect/taa.js.map +1 -0
  428. package/dist/src/posteffect/tonemap.js +94 -0
  429. package/dist/src/posteffect/tonemap.js.map +1 -0
  430. package/dist/src/render/abuffer_oit.js +361 -0
  431. package/dist/src/render/abuffer_oit.js.map +1 -0
  432. package/dist/src/render/clipmap.js +851 -0
  433. package/dist/src/render/clipmap.js.map +1 -0
  434. package/dist/src/render/cluster_light.js +333 -0
  435. package/dist/src/render/cluster_light.js.map +1 -0
  436. package/dist/src/render/cull_visitor.js +187 -0
  437. package/dist/src/render/cull_visitor.js.map +1 -0
  438. package/dist/src/render/depthpass.js +68 -0
  439. package/dist/src/render/depthpass.js.map +1 -0
  440. package/dist/src/render/drawable_mixin.js +227 -0
  441. package/dist/src/render/drawable_mixin.js.map +1 -0
  442. package/dist/src/render/envlight.js +463 -0
  443. package/dist/src/render/envlight.js.map +1 -0
  444. package/dist/src/render/fbm_wavegenerator.js +251 -0
  445. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  446. package/dist/src/render/fft_wavegenerator.js +1006 -0
  447. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  448. package/dist/src/render/fullscreenquad.js +38 -0
  449. package/dist/src/render/fullscreenquad.js.map +1 -0
  450. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  451. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  452. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  453. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  454. package/dist/src/render/hzb.js +273 -0
  455. package/dist/src/render/hzb.js.map +1 -0
  456. package/dist/src/render/lightpass.js +172 -0
  457. package/dist/src/render/lightpass.js.map +1 -0
  458. package/dist/src/render/objectcolorpass.js +51 -0
  459. package/dist/src/render/objectcolorpass.js.map +1 -0
  460. package/dist/src/render/primitive.js +364 -0
  461. package/dist/src/render/primitive.js.map +1 -0
  462. package/dist/src/render/render_queue.js +467 -0
  463. package/dist/src/render/render_queue.js.map +1 -0
  464. package/dist/src/render/renderbundle_wrapper.js +152 -0
  465. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  466. package/dist/src/render/renderer.js +455 -0
  467. package/dist/src/render/renderer.js.map +1 -0
  468. package/dist/src/render/renderpass.js +200 -0
  469. package/dist/src/render/renderpass.js.map +1 -0
  470. package/dist/src/render/shadowmap_pass.js +56 -0
  471. package/dist/src/render/shadowmap_pass.js.map +1 -0
  472. package/dist/src/render/sky.js +1103 -0
  473. package/dist/src/render/sky.js.map +1 -0
  474. package/dist/src/render/weightedblended_oit.js +168 -0
  475. package/dist/src/render/weightedblended_oit.js.map +1 -0
  476. package/dist/src/scene/batchgroup.js +162 -0
  477. package/dist/src/scene/batchgroup.js.map +1 -0
  478. package/dist/src/scene/environment.js +209 -0
  479. package/dist/src/scene/environment.js.map +1 -0
  480. package/dist/src/scene/graph_node.js +72 -0
  481. package/dist/src/scene/graph_node.js.map +1 -0
  482. package/dist/src/scene/light.js +416 -0
  483. package/dist/src/scene/light.js.map +1 -0
  484. package/dist/src/scene/mesh.js +341 -0
  485. package/dist/src/scene/mesh.js.map +1 -0
  486. package/dist/src/scene/octree.js +649 -0
  487. package/dist/src/scene/octree.js.map +1 -0
  488. package/dist/src/scene/particlesys.js +738 -0
  489. package/dist/src/scene/particlesys.js.map +1 -0
  490. package/dist/src/scene/raycast_visitor.js +103 -0
  491. package/dist/src/scene/raycast_visitor.js.map +1 -0
  492. package/dist/src/scene/scene.js +284 -0
  493. package/dist/src/scene/scene.js.map +1 -0
  494. package/dist/src/scene/scene_node.js +732 -0
  495. package/dist/src/scene/scene_node.js.map +1 -0
  496. package/dist/src/scene/terrain/grass.js +278 -0
  497. package/dist/src/scene/terrain/grass.js.map +1 -0
  498. package/dist/src/scene/terrain/heightfield.js +475 -0
  499. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  500. package/dist/src/scene/terrain/patch.js +530 -0
  501. package/dist/src/scene/terrain/patch.js.map +1 -0
  502. package/dist/src/scene/terrain/quadtree.js +461 -0
  503. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  504. package/dist/src/scene/terrain/terrain.js +246 -0
  505. package/dist/src/scene/terrain/terrain.js.map +1 -0
  506. package/dist/src/scene/terrain-cm/grass.js +594 -0
  507. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  508. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  510. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  512. package/dist/src/scene/water.js +374 -0
  513. package/dist/src/scene/water.js.map +1 -0
  514. package/dist/src/shaders/atmosphere.js +957 -0
  515. package/dist/src/shaders/atmosphere.js.map +1 -0
  516. package/dist/src/shaders/fog.js +112 -0
  517. package/dist/src/shaders/fog.js.map +1 -0
  518. package/dist/src/shaders/misc.js +266 -0
  519. package/dist/src/shaders/misc.js.map +1 -0
  520. package/dist/src/shaders/noise.js +222 -0
  521. package/dist/src/shaders/noise.js.map +1 -0
  522. package/dist/src/shaders/pbr.js +51 -0
  523. package/dist/src/shaders/pbr.js.map +1 -0
  524. package/dist/src/shaders/shadow.js +636 -0
  525. package/dist/src/shaders/shadow.js.map +1 -0
  526. package/dist/src/shaders/ssr.js +490 -0
  527. package/dist/src/shaders/ssr.js.map +1 -0
  528. package/dist/src/shaders/temporal.js +215 -0
  529. package/dist/src/shaders/temporal.js.map +1 -0
  530. package/dist/src/shaders/water.js +756 -0
  531. package/dist/src/shaders/water.js.map +1 -0
  532. package/dist/src/shadow/esm.js +237 -0
  533. package/dist/src/shadow/esm.js.map +1 -0
  534. package/dist/src/shadow/pcf_opt.js +181 -0
  535. package/dist/src/shadow/pcf_opt.js.map +1 -0
  536. package/dist/src/shadow/pcf_pd.js +189 -0
  537. package/dist/src/shadow/pcf_pd.js.map +1 -0
  538. package/dist/src/shadow/shader.js +37 -0
  539. package/dist/src/shadow/shader.js.map +1 -0
  540. package/dist/src/shadow/shadow_impl.js +15 -0
  541. package/dist/src/shadow/shadow_impl.js.map +1 -0
  542. package/dist/src/shadow/shadowmapper.js +790 -0
  543. package/dist/src/shadow/shadowmapper.js.map +1 -0
  544. package/dist/src/shadow/ssm.js +159 -0
  545. package/dist/src/shadow/ssm.js.map +1 -0
  546. package/dist/src/shadow/vsm.js +297 -0
  547. package/dist/src/shadow/vsm.js.map +1 -0
  548. package/dist/src/shapes/box.js +386 -0
  549. package/dist/src/shapes/box.js.map +1 -0
  550. package/dist/src/shapes/cylinder.js +125 -0
  551. package/dist/src/shapes/cylinder.js.map +1 -0
  552. package/dist/src/shapes/plane.js +88 -0
  553. package/dist/src/shapes/plane.js.map +1 -0
  554. package/dist/src/shapes/shape.js +87 -0
  555. package/dist/src/shapes/shape.js.map +1 -0
  556. package/dist/src/shapes/sphere.js +114 -0
  557. package/dist/src/shapes/sphere.js.map +1 -0
  558. package/dist/src/shapes/tetrahedron.js +188 -0
  559. package/dist/src/shapes/tetrahedron.js.map +1 -0
  560. package/dist/src/shapes/torus.js +111 -0
  561. package/dist/src/shapes/torus.js.map +1 -0
  562. package/dist/src/utility/aabbtree.js +400 -0
  563. package/dist/src/utility/aabbtree.js.map +1 -0
  564. package/dist/src/utility/bounding_volume.js +29 -0
  565. package/dist/src/utility/bounding_volume.js.map +1 -0
  566. package/dist/src/utility/debug.js +28 -0
  567. package/dist/src/utility/debug.js.map +1 -0
  568. package/dist/src/utility/draco/decoder.js +116 -0
  569. package/dist/src/utility/draco/decoder.js.map +1 -0
  570. package/dist/src/utility/misc.js +105 -0
  571. package/dist/src/utility/misc.js.map +1 -0
  572. package/dist/src/utility/panorama.js +163 -0
  573. package/dist/src/utility/panorama.js.map +1 -0
  574. package/dist/src/utility/pmrem.js +354 -0
  575. package/dist/src/utility/pmrem.js.map +1 -0
  576. package/dist/src/utility/rendermipmap.js +115 -0
  577. package/dist/src/utility/rendermipmap.js.map +1 -0
  578. package/dist/src/utility/serialization/json.js +402 -0
  579. package/dist/src/utility/serialization/json.js.map +1 -0
  580. package/dist/src/utility/serialization/manager.js +623 -0
  581. package/dist/src/utility/serialization/manager.js.map +1 -0
  582. package/dist/src/utility/serialization/scene/animation.js +248 -0
  583. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  584. package/dist/src/utility/serialization/scene/batch.js +59 -0
  585. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  586. package/dist/src/utility/serialization/scene/camera.js +790 -0
  587. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  588. package/dist/src/utility/serialization/scene/common.js +222 -0
  589. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  590. package/dist/src/utility/serialization/scene/light.js +575 -0
  591. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  592. package/dist/src/utility/serialization/scene/material.js +1111 -0
  593. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  594. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  595. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  596. package/dist/src/utility/serialization/scene/misc.js +39 -0
  597. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  598. package/dist/src/utility/serialization/scene/node.js +451 -0
  599. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  600. package/dist/src/utility/serialization/scene/particle.js +425 -0
  601. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  602. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  603. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  604. package/dist/src/utility/serialization/scene/scene.js +704 -0
  605. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  606. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  607. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  608. package/dist/src/utility/serialization/scene/water.js +465 -0
  609. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  610. package/dist/src/utility/shprojector.js +297 -0
  611. package/dist/src/utility/shprojector.js.map +1 -0
  612. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  613. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  614. package/dist/src/utility/textures/gradientnoise.js +62 -0
  615. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  616. package/dist/src/utility/textures/randomnoise.js +41 -0
  617. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  618. package/dist/src/values.js +162 -0
  619. package/dist/src/values.js.map +1 -0
  620. package/dist/utility/aabbtree.js +15 -5
  621. package/dist/utility/aabbtree.js.map +1 -1
  622. package/dist/utility/blueprint/common/constants.js +851 -0
  623. package/dist/utility/blueprint/common/constants.js.map +1 -0
  624. package/dist/utility/blueprint/common/math.js +2045 -0
  625. package/dist/utility/blueprint/common/math.js.map +1 -0
  626. package/dist/utility/blueprint/common.js +7 -0
  627. package/dist/utility/blueprint/common.js.map +1 -0
  628. package/dist/utility/blueprint/material/common.js +7 -0
  629. package/dist/utility/blueprint/material/common.js.map +1 -0
  630. package/dist/utility/blueprint/material/func.js +521 -0
  631. package/dist/utility/blueprint/material/func.js.map +1 -0
  632. package/dist/utility/blueprint/material/inputs.js +1659 -0
  633. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  634. package/dist/utility/blueprint/material/ir.js +1311 -0
  635. package/dist/utility/blueprint/material/ir.js.map +1 -0
  636. package/dist/utility/blueprint/material/pbr.js +362 -0
  637. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  638. package/dist/utility/blueprint/material/texture.js +1099 -0
  639. package/dist/utility/blueprint/material/texture.js.map +1 -0
  640. package/dist/utility/blueprint/node.js +187 -0
  641. package/dist/utility/blueprint/node.js.map +1 -0
  642. package/dist/utility/bounding_volume.js +0 -1
  643. package/dist/utility/bounding_volume.js.map +1 -1
  644. package/dist/utility/debug.js +26 -0
  645. package/dist/utility/debug.js.map +1 -0
  646. package/dist/utility/draco/decoder.js +1 -1
  647. package/dist/utility/draco/decoder.js.map +1 -1
  648. package/dist/utility/misc.js +18 -6
  649. package/dist/utility/misc.js.map +1 -1
  650. package/dist/utility/panorama.js +8 -6
  651. package/dist/utility/panorama.js.map +1 -1
  652. package/dist/utility/pmrem.js +30 -18
  653. package/dist/utility/pmrem.js.map +1 -1
  654. package/dist/utility/rendermipmap.js +116 -0
  655. package/dist/utility/rendermipmap.js.map +1 -0
  656. package/dist/utility/serialization/blueprint/constants.js +255 -0
  657. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  658. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  660. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  662. package/dist/utility/serialization/json.js +402 -0
  663. package/dist/utility/serialization/json.js.map +1 -0
  664. package/dist/utility/serialization/manager.js +1176 -0
  665. package/dist/utility/serialization/manager.js.map +1 -0
  666. package/dist/utility/serialization/scene/animation.js +699 -0
  667. package/dist/utility/serialization/scene/animation.js.map +1 -0
  668. package/dist/utility/serialization/scene/batch.js +53 -0
  669. package/dist/utility/serialization/scene/batch.js.map +1 -0
  670. package/dist/utility/serialization/scene/camera.js +808 -0
  671. package/dist/utility/serialization/scene/camera.js.map +1 -0
  672. package/dist/utility/serialization/scene/common.js +224 -0
  673. package/dist/utility/serialization/scene/common.js.map +1 -0
  674. package/dist/utility/serialization/scene/light.js +589 -0
  675. package/dist/utility/serialization/scene/light.js.map +1 -0
  676. package/dist/utility/serialization/scene/material.js +942 -0
  677. package/dist/utility/serialization/scene/material.js.map +1 -0
  678. package/dist/utility/serialization/scene/mesh.js +374 -0
  679. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  680. package/dist/utility/serialization/scene/misc.js +39 -0
  681. package/dist/utility/serialization/scene/misc.js.map +1 -0
  682. package/dist/utility/serialization/scene/node.js +391 -0
  683. package/dist/utility/serialization/scene/node.js.map +1 -0
  684. package/dist/utility/serialization/scene/particle.js +425 -0
  685. package/dist/utility/serialization/scene/particle.js.map +1 -0
  686. package/dist/utility/serialization/scene/primitive.js +582 -0
  687. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  688. package/dist/utility/serialization/scene/scene.js +763 -0
  689. package/dist/utility/serialization/scene/scene.js.map +1 -0
  690. package/dist/utility/serialization/scene/terrain.js +495 -0
  691. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  692. package/dist/utility/serialization/scene/water.js +465 -0
  693. package/dist/utility/serialization/scene/water.js.map +1 -0
  694. package/dist/utility/shprojector.js +313 -0
  695. package/dist/utility/shprojector.js.map +1 -0
  696. package/dist/utility/textures/ggxlut.js +4 -5
  697. package/dist/utility/textures/ggxlut.js.map +1 -1
  698. package/dist/utility/textures/gradientnoise.js +2 -1
  699. package/dist/utility/textures/gradientnoise.js.map +1 -1
  700. package/dist/utility/textures/randomnoise.js +1 -0
  701. package/dist/utility/textures/randomnoise.js.map +1 -1
  702. package/dist/values.js +91 -4
  703. package/dist/values.js.map +1 -1
  704. package/package.json +29 -15
  705. package/dist/app.js.map +0 -1
  706. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  707. package/dist/input/inputmgr.js.map +0 -1
  708. package/dist/material/mixins/ggxlut.js.map +0 -1
  709. package/dist/posteffect/water.js +0 -508
  710. package/dist/posteffect/water.js.map +0 -1
  711. package/dist/render/oit.js +0 -16
  712. package/dist/render/oit.js.map +0 -1
  713. package/dist/render/scatteringlut.js +0 -634
  714. package/dist/render/scatteringlut.js.map +0 -1
  715. package/dist/render/watermesh.js +0 -193
  716. package/dist/render/watermesh.js.map +0 -1
  717. package/dist/render/wavegenerator.js +0 -8
  718. package/dist/render/wavegenerator.js.map +0 -1
  719. package/dist/scene/xform.js +0 -247
  720. package/dist/scene/xform.js.map +0 -1
  721. package/dist/utility/shprojection.js +0 -442
  722. package/dist/utility/shprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"clipmap.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"clipmap.js","sources":["../../src/render/clipmap.ts"],"sourcesContent":["/**\r\n * copy from http://git.mikejsavage.co.uk/medfall/file/clipmap.cc.html#l197\r\n */\r\n\r\nimport type { Vector4 } from '@zephyr3d/base';\r\nimport { AABB, ClipState, Disposable, Matrix4x4, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n getVertexAttributeFormat,\r\n getVertexAttributeIndex,\r\n VERTEX_ATTRIB_POSITION,\r\n VERTEX_ATTRIB_TEXCOORD0,\r\n type VertexAttribFormat\r\n} from '@zephyr3d/device';\r\n\r\nconst tmpAABB = new AABB();\r\nconst tmpV3 = new Vector3();\r\nconst rotationValues = [0, Math.PI * 1.5, Math.PI * 0.5, Math.PI] as const;\r\n\r\n/** @internal */\r\nexport type PrimitiveInstanceInfo = {\r\n primitive: Primitive;\r\n numInstances: number;\r\n instanceDatas: Float32Array<ArrayBuffer>;\r\n mipLevels: Float32Array<ArrayBuffer>;\r\n maxMiplevel: number;\r\n};\r\n/** @internal */\r\nexport interface ClipmapGatherContext {\r\n camera: Camera;\r\n gridScale: number;\r\n minMaxWorldPos: Vector4;\r\n userData: unknown;\r\n frustumCulling: boolean;\r\n calcAABB(\r\n userData: unknown,\r\n minX: number,\r\n maxX: number,\r\n minZ: number,\r\n maxZ: number,\r\n outAABB: AABB,\r\n level: number\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport interface ClipmapDrawContext extends ClipmapGatherContext {\r\n drawPrimitive(\r\n prim: Primitive,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport class Clipmap extends Disposable {\r\n private readonly _instanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _instanceDataPoolSize: number;\r\n private readonly _mipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _mipLevelDataPoolSize: number;\r\n private readonly _nonInstanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceDataPoolSize: number;\r\n private readonly _nonInstanceMipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceMipLevelDataPoolSize: number;\r\n private readonly _extraInstanceBuffers: VertexAttribFormat[];\r\n private _tileResolution: number;\r\n private readonly _maxMipLevels: number;\r\n\r\n private _tileMesh: Primitive;\r\n private _tileMeshLines: Primitive;\r\n private _tileMeshBBox: AABB;\r\n\r\n private _fillerMesh: Primitive;\r\n private _fillerMeshLines: Primitive;\r\n private _fillerMeshAABB: AABB;\r\n\r\n private _trimMesh: Primitive;\r\n private _trimMeshLines: Primitive;\r\n private _trimMeshAABB: AABB;\r\n\r\n private _crossMesh: Primitive;\r\n private _crossMeshLines: Primitive;\r\n private _crossMeshAABB: AABB;\r\n\r\n private _seamMesh: Primitive;\r\n private _seamMeshLines: Primitive;\r\n private _seamMeshAABB: AABB;\r\n\r\n private _wireframe: boolean;\r\n\r\n constructor(resolution: number, extraInstanceBuffers: VertexAttribFormat[], maxMipLevels = 64) {\r\n super();\r\n if (\r\n extraInstanceBuffers &&\r\n extraInstanceBuffers.findIndex(\r\n (val) =>\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_POSITION ||\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_TEXCOORD0 ||\r\n getVertexAttributeFormat(val) !== 'f32'\r\n ) >= 0\r\n ) {\r\n throw new Error(\r\n 'Extra instance buffers must be f32 format and cannot have vertex attribute of POSITOIN and TEXCOORD0'\r\n );\r\n }\r\n this._extraInstanceBuffers = extraInstanceBuffers?.slice() ?? [];\r\n this._tileResolution = resolution;\r\n this._maxMipLevels = Math.min(64, Math.max(1, maxMipLevels >>> 0));\r\n this._instanceDataPool = [];\r\n this._instanceDataPoolSize = 0;\r\n this._mipLevelDataPool = [];\r\n this._mipLevelDataPoolSize = 0;\r\n this._nonInstanceDataPool = [];\r\n this._nonInstanceDataPoolSize = 0;\r\n this._nonInstanceMipLevelDataPool = [];\r\n this._nonInstanceMipLevelDataPoolSize = 0;\r\n this._wireframe = false;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n get wireframe() {\r\n return this._wireframe;\r\n }\r\n set wireframe(val: boolean) {\r\n this._wireframe = !!val;\r\n }\r\n get tileResolution() {\r\n return this._tileResolution;\r\n }\r\n set tileResolution(val: number) {\r\n if (val !== this._tileResolution) {\r\n this._tileResolution = val;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n }\r\n private allocInstanceBuffer(): Float32Array<ArrayBuffer> {\r\n if (this._instanceDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16 * 4);\r\n this._instanceDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._instanceDataPool[--this._instanceDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceBuffer(x: number, y: number, z: number, w: number): Float32Array<ArrayBuffer> {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceDataPoolSize === 0) {\r\n buffer = new Float32Array(4);\r\n this._nonInstanceDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceDataPool[--this._nonInstanceDataPoolSize];\r\n }\r\n buffer[0] = x;\r\n buffer[1] = y;\r\n buffer[2] = z;\r\n buffer[3] = w;\r\n return buffer;\r\n }\r\n private allocMipLevelBuffer(): Float32Array<ArrayBuffer> {\r\n if (this._mipLevelDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16);\r\n this._mipLevelDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._mipLevelDataPool[--this._mipLevelDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceMipLevelBuffer(val: number): Float32Array<ArrayBuffer> {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceMipLevelDataPoolSize === 0) {\r\n buffer = new Float32Array(1);\r\n this._nonInstanceMipLevelDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceMipLevelDataPool[--this._nonInstanceMipLevelDataPoolSize];\r\n }\r\n buffer[0] = val;\r\n return buffer;\r\n }\r\n private patch2d(tileResolution: number, x: number, y: number) {\r\n return y * (tileResolution + 1) + x;\r\n }\r\n private calcAABB(vertices: Float32Array): AABB {\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n for (let i = 0; i < vertices.length / 3; i++) {\r\n const x = vertices[i * 3 + 0];\r\n const y = vertices[i * 3 + 1];\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n }\r\n return new AABB(new Vector3(minX, minY, 0), new Vector3(maxX, maxY, 0));\r\n }\r\n generateTileMesh() {\r\n this._tileMesh?.dispose();\r\n this._tileMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * patchVertResolution * 3);\r\n let n = 0;\r\n for (let y = 0; y < patchVertResolution; y++) {\r\n for (let x = 0; x < patchVertResolution; x++) {\r\n vertices[n++] = x;\r\n vertices[n++] = y;\r\n vertices[n++] = 0;\r\n }\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * this._tileResolution * 6);\r\n for (let y = 0; y < this._tileResolution; y++) {\r\n for (let x = 0; x < this._tileResolution; x++) {\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y);\r\n }\r\n }\r\n this._tileMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._tileMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMesh.createAndSetIndexBuffer(indices);\r\n this._tileMesh.indexStart = 0;\r\n this._tileMesh.indexCount = indices.length;\r\n this._tileMesh.primitiveType = 'triangle-list';\r\n this._tileMeshBBox = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._tileMeshLines?.dispose();\r\n this._tileMeshLines = new Primitive();\r\n this._tileMeshLines.setVertexBuffer(this._tileMesh.getVertexBuffer('position'));\r\n this._tileMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._tileMeshLines.indexStart = 0;\r\n this._tileMeshLines.indexCount = indicesLines.length;\r\n this._tileMeshLines.primitiveType = 'line-list';\r\n }\r\n generateFillerMesh() {\r\n this._fillerMesh?.dispose();\r\n this._fillerMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n const offset = this._tileResolution;\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 1;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24);\r\n for (let i = 0; i < this._tileResolution * 4; i++) {\r\n const arm = (i / this._tileResolution) >> 0;\r\n const bl = (arm + i) * 2 + 0;\r\n const br = (arm + i) * 2 + 1;\r\n const tl = (arm + i) * 2 + 2;\r\n const tr = (arm + i) * 2 + 3;\r\n if (arm % 2 === 0) {\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n } else {\r\n indices[n++] = br;\r\n indices[n++] = tl;\r\n indices[n++] = bl;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n }\r\n this._fillerMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._fillerMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMesh.createAndSetIndexBuffer(indices);\r\n this._fillerMesh.indexStart = 0;\r\n this._fillerMesh.indexCount = indices.length;\r\n this._fillerMesh.primitiveType = 'triangle-list';\r\n this._fillerMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._fillerMeshLines?.dispose();\r\n this._fillerMeshLines = new Primitive();\r\n this._fillerMeshLines.setVertexBuffer(this._fillerMesh.getVertexBuffer('position'));\r\n this._fillerMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._fillerMeshLines.indexStart = 0;\r\n this._fillerMeshLines.indexCount = indicesLines.length;\r\n this._fillerMeshLines.primitiveType = 'line-list';\r\n }\r\n generateTrimMesh() {\r\n this._trimMesh?.dispose();\r\n this._trimMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array((clipmapVertResolution * 2 + 1) * 2 * 3);\r\n let n = 0;\r\n const d = 0.5 * (clipmapVertResolution + 1);\r\n for (let i = 0; i < clipmapVertResolution + 1; i++) {\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n }\r\n const startOfHorizonal = n / 3;\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array((clipmapVertResolution * 2 - 1) * 6);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n indices[n++] = (i + 0) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 0;\r\n indices[n++] = (i + 1) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 1;\r\n }\r\n for (let i = 0; i < clipmapVertResolution - 1; i++) {\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n }\r\n this._trimMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._trimMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMesh.createAndSetIndexBuffer(indices);\r\n this._trimMesh.indexStart = 0;\r\n this._trimMesh.indexCount = indices.length;\r\n this._trimMesh.primitiveType = 'triangle-list';\r\n this._trimMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._trimMeshLines?.dispose();\r\n this._trimMeshLines = new Primitive();\r\n this._trimMeshLines.setVertexBuffer(this._trimMesh.getVertexBuffer('position'));\r\n this._trimMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._trimMeshLines.indexStart = 0;\r\n this._trimMeshLines.indexCount = indicesLines.length;\r\n this._trimMeshLines.primitiveType = 'line-list';\r\n }\r\n generateCrossMesh() {\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n const startOfVertical = n / 3;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24 + 6);\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n if (i === this._tileResolution) {\r\n continue;\r\n }\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = startOfVertical + br;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tr;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tl;\r\n indices[n++] = startOfVertical + tr;\r\n }\r\n this._crossMesh?.dispose();\r\n this._crossMesh = new Primitive();\r\n this._crossMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._crossMesh.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMesh.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMesh.createAndSetIndexBuffer(indices);\r\n this._crossMesh.indexStart = 0;\r\n this._crossMesh.indexCount = indices.length;\r\n this._crossMesh.primitiveType = 'triangle-list';\r\n this._crossMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._crossMeshLines?.dispose();\r\n this._crossMeshLines = new Primitive();\r\n this._crossMeshLines.setVertexBuffer(this._crossMesh.getVertexBuffer('position'));\r\n this._crossMeshLines.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMeshLines.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._crossMeshLines.indexStart = 0;\r\n this._crossMeshLines.indexCount = indicesLines.length;\r\n this._crossMeshLines.primitiveType = 'line-list';\r\n }\r\n generateSeamMesh() {\r\n this._seamMesh?.dispose();\r\n this._seamMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array(clipmapVertResolution * 4 * 3);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 0] = i;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 1] = 0;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 0] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 1] = i;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 0] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 1] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 0] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 1] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 2] = 0;\r\n }\r\n const indices = new Uint16Array(clipmapVertResolution * 6);\r\n let n = 0;\r\n for (let i = 0; i < clipmapVertResolution * 4; i += 2) {\r\n indices[n++] = i + 1;\r\n indices[n++] = i + 2;\r\n indices[n++] = i;\r\n }\r\n indices[indices.length - 1] = 0;\r\n this._seamMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._seamMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMesh.createAndSetIndexBuffer(indices);\r\n this._seamMesh.indexStart = 0;\r\n this._seamMesh.indexCount = indices.length;\r\n this._seamMesh.primitiveType = 'triangle-list';\r\n this._seamMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._seamMeshLines?.dispose();\r\n this._seamMeshLines = new Primitive();\r\n this._seamMeshLines.setVertexBuffer(this._seamMesh.getVertexBuffer('position'));\r\n this._seamMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._seamMeshLines.indexStart = 0;\r\n this._seamMeshLines.indexCount = indicesLines.length;\r\n this._seamMeshLines.primitiveType = 'line-list';\r\n }\r\n private intervalsOverlap(a0: number, a1: number, b0: number, b1: number) {\r\n return a0 <= b1 && b0 <= a1;\r\n }\r\n private updateAABB(\r\n aabb: AABB,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n outAABB: AABB\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n if (minX < outAABB.minPoint.x) {\r\n outAABB.minPoint.x = minX;\r\n }\r\n if (maxX > outAABB.maxPoint.x) {\r\n outAABB.maxPoint.x = maxX;\r\n }\r\n if (minZ < outAABB.minPoint.z) {\r\n outAABB.minPoint.z = minZ;\r\n }\r\n if (maxZ > outAABB.maxPoint.z) {\r\n outAABB.maxPoint.z = maxZ;\r\n }\r\n }\r\n private visible(\r\n ctx: ClipmapGatherContext,\r\n aabb: AABB,\r\n camera: Camera,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB, level);\r\n return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;\r\n }\r\n calcLevelAABB(camera: Camera, minMaxWorldPos: Vector4, gridScale: number): AABB[] {\r\n const mipLevels = this.calcMipLevels(camera, minMaxWorldPos, gridScale);\r\n camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / gridScale;\r\n const posY = tmpV3.z / gridScale;\r\n\r\n const outAABB: AABB[] = [];\r\n for (let i = 0; i < mipLevels; i++) {\r\n const aabb = new AABB();\r\n aabb.beginExtend();\r\n outAABB.push(aabb);\r\n }\r\n\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n\r\n // cross\r\n this.updateAABB(this._crossMeshAABB, null, snappedPos, 1, gridScale, outAABB[0]);\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const aabb = outAABB[l];\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n this.updateAABB(this._tileMeshBBox, null, offset, scale, gridScale, aabb);\r\n }\r\n }\r\n // draw filler\r\n this.updateAABB(this._fillerMeshAABB, null, snappedPos, scale, gridScale, aabb);\r\n\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n this.updateAABB(this._trimMeshAABB, rotationValues[r], tileCentre, scale, gridScale, aabb);\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n this.updateAABB(this._seamMeshAABB, null, nextBase, scale, gridScale, aabb);\r\n }\r\n return outAABB;\r\n }\r\n private calcMipLevels(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\r\n camera.getWorldPosition(tmpV3);\r\n const distX = Math.max(Math.abs(tmpV3.x - minMaxWorldPos.x), Math.abs(tmpV3.x - minMaxWorldPos.z));\r\n const distY = Math.max(Math.abs(tmpV3.z - minMaxWorldPos.y), Math.abs(tmpV3.z - minMaxWorldPos.w));\r\n const maxDist = Math.min(Math.max(distX, distY), camera.getFarPlane());\r\n return Math.min(\r\n Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * gridScale))), 0) + 1,\r\n this._maxMipLevels\r\n );\r\n }\r\n private addInstance(\r\n info: PrimitiveInstanceInfo,\r\n rotation: number,\r\n offsetX: number,\r\n offsetY: number,\r\n scale: number,\r\n mipLevel: number\r\n ) {\r\n info.mipLevels[info.numInstances] = mipLevel;\r\n info.instanceDatas[info.numInstances * 4 + 0] = rotation;\r\n info.instanceDatas[info.numInstances * 4 + 1] = scale;\r\n info.instanceDatas[info.numInstances * 4 + 2] = offsetX;\r\n info.instanceDatas[info.numInstances * 4 + 3] = offsetY;\r\n info.maxMiplevel = mipLevel;\r\n info.numInstances++;\r\n }\r\n\r\n gather(context: ClipmapGatherContext): PrimitiveInstanceInfo[] {\r\n this._instanceDataPoolSize = this._instanceDataPool.length;\r\n this._mipLevelDataPoolSize = this._mipLevelDataPool.length;\r\n this._nonInstanceDataPoolSize = this._nonInstanceDataPool.length;\r\n this._nonInstanceMipLevelDataPoolSize = this._nonInstanceMipLevelDataPool.length;\r\n const renderData: PrimitiveInstanceInfo[] = [];\r\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\r\n context.camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / context.gridScale;\r\n const posY = tmpV3.z / context.gridScale;\r\n\r\n // draw cross\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\r\n ) {\r\n const crossPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._crossMeshLines : this._crossMesh,\r\n numInstances: 1,\r\n instanceDatas: this.allocNonInstanceBuffer(rotationValues[0], 1, snappedPos.x, snappedPos.y),\r\n mipLevels: this.allocNonInstanceMipLevelBuffer(0),\r\n maxMiplevel: 0\r\n };\r\n renderData.push(crossPrimitives);\r\n }\r\n\r\n const tilePrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._tileMeshLines : this._tileMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const fillerPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._fillerMeshLines : this._fillerMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const trimPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._trimMeshLines : this._trimMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const seamPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._seamMeshLines : this._seamMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n if (\r\n this.intervalsOverlap(\r\n offset.x * context.gridScale,\r\n (offset.x + tileSize.x) * context.gridScale,\r\n context.minMaxWorldPos.x,\r\n context.minMaxWorldPos.z\r\n ) &&\r\n this.intervalsOverlap(\r\n offset.y * context.gridScale,\r\n (offset.y + tileSize.y) * context.gridScale,\r\n context.minMaxWorldPos.y,\r\n context.minMaxWorldPos.w\r\n )\r\n ) {\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._tileMeshBBox,\r\n context.camera,\r\n null,\r\n offset,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(tilePrimitives, rotationValues[0], offset.x, offset.y, scale, l);\r\n }\r\n }\r\n }\r\n }\r\n // draw filler\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._fillerMeshAABB,\r\n context.camera,\r\n null,\r\n snappedPos,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(fillerPrimitives, rotationValues[0], snappedPos.x, snappedPos.y, scale, l);\r\n }\r\n\r\n if (l !== mipLevels - 1) {\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._trimMeshAABB,\r\n context.camera,\r\n rotationValues[r],\r\n tileCentre,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(trimPrimitives, rotationValues[r], tileCentre.x, tileCentre.y, scale, l);\r\n }\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._seamMeshAABB,\r\n context.camera,\r\n null,\r\n nextBase,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(seamPrimitives, rotationValues[0], nextBase.x, nextBase.y, scale, l);\r\n }\r\n }\r\n }\r\n if (tilePrimitives.numInstances > 0) {\r\n renderData.push(tilePrimitives);\r\n }\r\n if (fillerPrimitives.numInstances > 0) {\r\n renderData.push(fillerPrimitives);\r\n }\r\n if (trimPrimitives.numInstances > 0) {\r\n renderData.push(trimPrimitives);\r\n }\r\n if (seamPrimitives.numInstances > 0) {\r\n renderData.push(seamPrimitives);\r\n }\r\n for (const info of renderData) {\r\n info.primitive\r\n .getVertexBuffer('texCoord0')\r\n .bufferSubData(0, info.instanceDatas, 0, info.numInstances * 4);\r\n }\r\n return renderData;\r\n }\r\n /** Disposes the clipmap and release all meshes */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._crossMesh.dispose();\r\n this._crossMesh = null;\r\n this._crossMeshLines.dispose();\r\n this._crossMeshLines = null;\r\n this._fillerMesh.dispose();\r\n this._fillerMesh = null;\r\n this._fillerMeshLines.dispose();\r\n this._fillerMeshLines = null;\r\n this._seamMesh.dispose();\r\n this._seamMesh = null;\r\n this._seamMeshLines.dispose();\r\n this._seamMeshLines = null;\r\n this._trimMesh.dispose();\r\n this._trimMesh = null;\r\n this._trimMeshLines.dispose();\r\n this._trimMeshLines = null;\r\n this._tileMesh.dispose();\r\n this._tileMesh = null;\r\n this._tileMeshLines.dispose();\r\n this._tileMeshLines = null;\r\n }\r\n}\r\n"],"names":["tmpAABB","AABB","tmpV3","Vector3","rotationValues","Math","PI","Clipmap","Disposable","_instanceDataPool","_instanceDataPoolSize","_mipLevelDataPool","_mipLevelDataPoolSize","_nonInstanceDataPool","_nonInstanceDataPoolSize","_nonInstanceMipLevelDataPool","_nonInstanceMipLevelDataPoolSize","_extraInstanceBuffers","_tileResolution","_maxMipLevels","_tileMesh","_tileMeshLines","_tileMeshBBox","_fillerMesh","_fillerMeshLines","_fillerMeshAABB","_trimMesh","_trimMeshLines","_trimMeshAABB","_crossMesh","_crossMeshLines","_crossMeshAABB","_seamMesh","_seamMeshLines","_seamMeshAABB","_wireframe","resolution","extraInstanceBuffers","maxMipLevels","findIndex","val","getVertexAttributeIndex","VERTEX_ATTRIB_POSITION","VERTEX_ATTRIB_TEXCOORD0","getVertexAttributeFormat","Error","slice","min","max","generateCrossMesh","generateFillerMesh","generateSeamMesh","generateTileMesh","generateTrimMesh","wireframe","tileResolution","allocInstanceBuffer","buffer","Float32Array","push","allocNonInstanceBuffer","x","y","z","w","allocMipLevelBuffer","allocNonInstanceMipLevelBuffer","patch2d","calcAABB","vertices","maxX","Number","MAX_VALUE","maxY","minX","minY","i","length","dispose","Primitive","patchVertResolution","n","indices","Uint16Array","createAndSetVertexBuffer","fmt","createAndSetIndexBuffer","indexStart","indexCount","primitiveType","indicesLines","setVertexBuffer","getVertexBuffer","offset","arm","bl","br","tl","tr","clipmapVertResolution","d","startOfHorizonal","startOfVertical","intervalsOverlap","a0","a1","b0","b1","updateAABB","aabb","rotation","scale","gridScale","outAABB","minPoint","set","maxPoint","transform","Matrix4x4","rotationZ","minZ","maxZ","visible","ctx","camera","level","userData","getClipStateWithFrustum","frustum","ClipState","NOT_CLIPPED","calcLevelAABB","minMaxWorldPos","mipLevels","calcMipLevels","getWorldPosition","snappedPos","Vector2","tileSize","base","posX","posY","beginExtend","setXY","floor","l","fillX","fillY","nextScale","nextSnappedPos","tileCentre","r","nextBase","distX","abs","distY","maxDist","getFarPlane","ceil","log2","addInstance","info","offsetX","offsetY","mipLevel","numInstances","instanceDatas","maxMiplevel","gather","context","renderData","frustumCulling","crossPrimitives","primitive","tilePrimitives","fillerPrimitives","trimPrimitives","seamPrimitives","bufferSubData","onDispose"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Vector4, Matrix4x4 } from '@zephyr3d/base';
2
- import { Application } from '../app.js';
3
2
  import { MAX_CLUSTERED_LIGHTS } from '../values.js';
4
3
  import { ShaderHelper } from '../material/shader/helper.js';
4
+ import { getDevice } from '../app/api.js';
5
5
 
6
6
  class ClusteredLight {
7
7
  _tileCountX;
@@ -240,6 +240,7 @@ class ClusteredLight {
240
240
  });
241
241
  }
242
242
  });
243
+ this._lightIndexProgram.name = '@ClusteredLight_Index';
243
244
  this._bindGroup = device.createBindGroup(this._lightIndexProgram.bindGroupLayouts[0]);
244
245
  this._lightBuffer?.dispose();
245
246
  const lightBufferType = this._lightIndexProgram.getBindingInfo(ShaderHelper.getLightBufferUniformName()).type;
@@ -257,9 +258,7 @@ class ClusteredLight {
257
258
  throw new Error('Internal error');
258
259
  }
259
260
  this._lightIndexTexture = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rgba32ui', textureWidth, textureHeight, {
260
- samplerOptions: {
261
- mipFilter: 'none'
262
- }
261
+ mipmapping: false
263
262
  });
264
263
  this._lightIndexTexture.name = 'ClusterLightIndex';
265
264
  this._lightIndexFramebuffer?.dispose();
@@ -269,7 +268,7 @@ class ClusteredLight {
269
268
  }
270
269
  calculateLightIndex(camera, renderQueue) {
271
270
  const numLights = this.getVisibleLights(renderQueue, this._lights);
272
- const device = Application.instance.device;
271
+ const device = getDevice();
273
272
  if (!this._lightIndexTexture) {
274
273
  this.createLightIndexTexture(device);
275
274
  }
@@ -291,6 +290,9 @@ class ClusteredLight {
291
290
  device.pushDeviceStates();
292
291
  device.setFramebuffer(this._lightIndexFramebuffer);
293
292
  if (numLights > 0) {
293
+ if (this._lightBuffer.disposed) {
294
+ this._lightBuffer.reload();
295
+ }
294
296
  this._lightBuffer.bufferSubData(0, this._lights);
295
297
  this._sizeParam.setXYZW(vw, vh, camera.getNearPlane(), camera.getFarPlane());
296
298
  this._countParam[0] = this._tileCountX;
@@ -1 +1 @@
1
- {"version":3,"file":"cluster_light.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"cluster_light.js","sources":["../../src/render/cluster_light.ts"],"sourcesContent":["import { Matrix4x4, Vector4 } from '@zephyr3d/base';\r\nimport { MAX_CLUSTERED_LIGHTS } from '../values';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n PBStructTypeInfo,\r\n RenderStateSet,\r\n StructuredBuffer,\r\n Texture2D,\r\n VertexLayout\r\n} from '@zephyr3d/device';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { RenderQueue } from './render_queue';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { getDevice } from '../app/api';\r\n\r\nexport class ClusteredLight {\r\n private readonly _tileCountX: number;\r\n private readonly _tileCountY: number;\r\n private readonly _tileCountZ: number;\r\n private readonly _lights: Float32Array<ArrayBuffer>;\r\n private _lightIndexTexture: Texture2D;\r\n private _lightIndexFramebuffer: FrameBuffer;\r\n private _lightIndexProgram: GPUProgram;\r\n private _bindGroup: BindGroup;\r\n private _lightIndexVertexLayout: VertexLayout;\r\n private _lightIndexRenderStates: RenderStateSet;\r\n private _lightBuffer: StructuredBuffer;\r\n private readonly _sizeParam: Vector4;\r\n private _countParam: Int32Array<ArrayBuffer>;\r\n private readonly _clusterParam: Vector4;\r\n constructor() {\r\n this._tileCountX = 16;\r\n this._tileCountY = 16;\r\n this._tileCountZ = 32;\r\n this._lights = new Float32Array(12 * (MAX_CLUSTERED_LIGHTS + 1));\r\n this._lightIndexTexture = null;\r\n this._lightIndexFramebuffer = null;\r\n this._lightIndexProgram = null;\r\n this._lightBuffer = null;\r\n this._bindGroup = null;\r\n this._lightIndexVertexLayout = null;\r\n this._lightIndexRenderStates = null;\r\n this._sizeParam = new Vector4();\r\n this._countParam = new Int32Array(4);\r\n this._clusterParam = new Vector4();\r\n }\r\n get lightBuffer() {\r\n return this._lightBuffer;\r\n }\r\n get clusterParam() {\r\n return this._clusterParam;\r\n }\r\n get countParam() {\r\n return this._countParam;\r\n }\r\n get lightIndexTexture() {\r\n return this._lightIndexTexture;\r\n }\r\n private createVertexLayout(device: AbstractDevice, textureWidth: number, textureHeight: number) {\r\n let vb: StructuredBuffer;\r\n if (device.type === 'webgl') {\r\n const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 3);\r\n for (let i = 0; i < vertices.length; i++) {\r\n const ix = i % textureWidth;\r\n const iy = Math.floor(i / textureWidth);\r\n vertices[i * 3 + 0] = (2 * (ix + 0.5)) / textureWidth - 1;\r\n vertices[i * 3 + 1] = (2 * (iy + 0.5)) / textureHeight - 1;\r\n vertices[i * 3 + 2] = i;\r\n }\r\n vb = device.createVertexBuffer('position_f32x3', vertices);\r\n } else {\r\n const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 2);\r\n for (let i = 0; i < vertices.length; i++) {\r\n const ix = i % textureWidth;\r\n const iy = Math.floor(i / textureWidth);\r\n vertices[i * 2 + 0] = (2 * (ix + 0.5)) / textureWidth - 1;\r\n vertices[i * 2 + 1] = (2 * (iy + 0.5)) / textureHeight - 1;\r\n }\r\n vb = device.createVertexBuffer('position_f32x2', vertices);\r\n }\r\n this._lightIndexVertexLayout = device.createVertexLayout({\r\n vertexBuffers: [{ buffer: vb }]\r\n });\r\n }\r\n private createRenderState(device: AbstractDevice) {\r\n this._lightIndexRenderStates = device.createRenderStateSet();\r\n this._lightIndexRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._lightIndexRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n private createProgram(device: AbstractDevice) {\r\n const webgl1 = device.type === 'webgl';\r\n this._lightIndexProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = (webgl1 ? pb.vec3() : pb.vec2()).attrib('position');\r\n this.$outputs.value = webgl1 ? pb.vec4() : pb.uvec4();\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.sizeParam = pb.vec4().uniform(0);\r\n this.countParam = pb.ivec4().uniform(0);\r\n this[ShaderHelper.getLightBufferUniformName()] =\r\n pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 3]().uniformBuffer(0);\r\n pb.func('lineIntersectionToZPlane', [pb.vec3('a'), pb.vec3('b'), pb.float('zDistance')], function () {\r\n this.$l.normal = pb.vec3(0, 0, 1);\r\n this.$l.ab = pb.sub(this.b, this.a);\r\n this.$l.t = pb.div(\r\n pb.sub(this.zDistance, pb.dot(this.normal, this.a)),\r\n pb.dot(this.normal, this.ab)\r\n );\r\n this.$return(pb.add(this.a, pb.mul(this.t, this.ab)));\r\n });\r\n pb.func('clipToView', [pb.vec4('clip')], function () {\r\n this.$l.view = pb.mul(this.invProjMatrix, this.clip);\r\n this.$return(pb.div(this.view, this.view.w));\r\n });\r\n pb.func('screenToView', [pb.vec4('screen')], function () {\r\n this.$l.texCoord = pb.div(this.screen.xy, this.sizeParam.xy);\r\n this.$l.clip = pb.vec4(\r\n pb.sub(pb.mul(pb.vec2(this.texCoord.x, pb.sub(1, this.texCoord.y)), 2), pb.vec2(1)),\r\n this.screen.z,\r\n this.screen.w\r\n );\r\n this.$return(this.clipToView(this.clip));\r\n });\r\n pb.func(\r\n 'sphereIntersectsAABB',\r\n [pb.vec4('sphere'), pb.vec3('aabbMin'), pb.vec3('aabbMax')],\r\n function () {\r\n this.$l.dmin = pb.float(0);\r\n this.$if(pb.lessThanEqual(this.sphere.w, 0), function () {\r\n this.$return(true);\r\n });\r\n this.$for(pb.int('i'), 0, 3, function () {\r\n this.$if(pb.lessThan(this.sphere.at(this.i), this.aabbMin.at(this.i)), function () {\r\n this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMin.at(this.i));\r\n this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));\r\n }).$elseif(pb.greaterThan(this.sphere.at(this.i), this.aabbMax.at(this.i)), function () {\r\n this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMax.at(this.i));\r\n this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));\r\n });\r\n });\r\n this.$if(pb.lessThanEqual(this.dmin, pb.mul(this.sphere.w, this.sphere.w)), function () {\r\n this.$return(true);\r\n });\r\n this.$return(false);\r\n }\r\n );\r\n pb.main(function () {\r\n if (pb.getDevice().type !== 'webgpu') {\r\n this.$builtins.pointSize = 1;\r\n }\r\n this.$builtins.position = pb.vec4(this.$inputs.pos.xy, 0, 1);\r\n if (pb.getDevice().type === 'webgpu') {\r\n this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));\r\n }\r\n this.$l.tileIndex = webgl1 ? pb.int(this.$inputs.pos.z) : pb.int(this.$builtins.vertexIndex);\r\n this.$l.tileSize = pb.div(this.sizeParam.xy, pb.vec2(this.countParam.xy));\r\n this.$l.zIndex = pb.div(this.tileIndex, pb.mul(this.countParam.x, this.countParam.y));\r\n this.$l.yIndex = pb.div(\r\n pb.sub(this.tileIndex, pb.mul(this.zIndex, this.countParam.x, this.countParam.y)),\r\n this.countParam.x\r\n );\r\n this.$l.xIndex = pb.sub(\r\n this.tileIndex,\r\n pb.add(\r\n pb.mul(this.zIndex, this.countParam.x, this.countParam.y),\r\n pb.mul(this.yIndex, this.countParam.x)\r\n )\r\n );\r\n this.$l.maxPoint_sS = pb.vec4(\r\n pb.mul(\r\n pb.vec2(pb.float(pb.add(this.xIndex, 1)), pb.float(pb.add(this.yIndex, 1))),\r\n this.tileSize\r\n ),\r\n 0.0,\r\n 1.0\r\n );\r\n this.$l.minPoint_sS = pb.vec4(\r\n pb.mul(pb.vec2(pb.float(this.xIndex), pb.float(this.yIndex)), this.tileSize),\r\n 0.0,\r\n 1.0\r\n );\r\n this.$l.maxPoint_vS = this.screenToView(this.maxPoint_sS).xyz;\r\n this.$l.minPoint_vS = this.screenToView(this.minPoint_sS).xyz;\r\n this.$l.tileNear = pb.mul(\r\n pb.neg(this.sizeParam.z),\r\n pb.pow(\r\n pb.div(this.sizeParam.w, this.sizeParam.z),\r\n pb.div(pb.float(this.zIndex), pb.float(this.countParam.z))\r\n )\r\n );\r\n this.$l.tileFar = pb.mul(\r\n pb.neg(this.sizeParam.z),\r\n pb.pow(\r\n pb.div(this.sizeParam.w, this.sizeParam.z),\r\n pb.div(pb.add(pb.float(this.zIndex), 1), pb.float(this.countParam.z))\r\n )\r\n );\r\n this.$l.eyePos = pb.vec3(0);\r\n this.$l.minPointNear = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileNear);\r\n this.$l.minPointFar = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileFar);\r\n this.$l.maxPointNear = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileNear);\r\n this.$l.maxPointFar = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileFar);\r\n this.$l.aabbMin = pb.min(\r\n pb.min(this.minPointNear, this.minPointFar),\r\n pb.min(this.maxPointNear, this.maxPointFar)\r\n );\r\n this.$l.aabbMax = pb.max(\r\n pb.max(this.minPointNear, this.minPointFar),\r\n pb.max(this.maxPointNear, this.maxPointFar)\r\n );\r\n this.$l.n = pb.int(0);\r\n if (webgl1) {\r\n this.$l.lightIndices = pb.float[8]();\r\n this.$for(pb.int('i'), 0, 8, function () {\r\n this.lightIndices.setAt(this.i, 0);\r\n });\r\n this.$for(pb.int('i'), 1, 256, function () {\r\n this.$if(pb.equal(this.i, this.countParam.w), function () {\r\n this.$break();\r\n });\r\n this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));\r\n this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));\r\n this.$l.lightPos.w = this.light.w;\r\n this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function () {\r\n this.$for(pb.int('j'), 0, 8, function () {\r\n this.$if(pb.equal(this.j, this.n), function () {\r\n this.lightIndices.setAt(this.j, pb.float(this.i));\r\n this.n = pb.add(this.n, 1);\r\n this.$break();\r\n });\r\n });\r\n this.$if(pb.equal(this.n, 8), function () {\r\n this.$break();\r\n });\r\n });\r\n });\r\n this.$outputs.value.r = pb.add(pb.mul(this.lightIndices[0], 256), this.lightIndices[1]);\r\n this.$outputs.value.g = pb.add(pb.mul(this.lightIndices[2], 256), this.lightIndices[3]);\r\n this.$outputs.value.b = pb.add(pb.mul(this.lightIndices[4], 256), this.lightIndices[5]);\r\n this.$outputs.value.a = pb.add(pb.mul(this.lightIndices[6], 256), this.lightIndices[7]);\r\n } else {\r\n this.$l.lightIndex = [\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0),\r\n pb.uint(0)\r\n ];\r\n this.$for(pb.uint('i'), 1, pb.uint(this.countParam.w), function () {\r\n this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));\r\n this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));\r\n this.$l.lightPos.w = this.light.w;\r\n this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function () {\r\n this.lightIndex.setAt(this.n, this.i);\r\n this.n = pb.add(this.n, 1);\r\n this.$if(pb.equal(this.n, 16), function () {\r\n this.$break();\r\n });\r\n });\r\n });\r\n this.$l.r = pb.add(\r\n pb.sal(this.lightIndex[0], 24),\r\n pb.sal(this.lightIndex[1], 16),\r\n pb.sal(this.lightIndex[2], 8),\r\n this.lightIndex[3]\r\n );\r\n this.$l.g = pb.add(\r\n pb.sal(this.lightIndex[4], 24),\r\n pb.sal(this.lightIndex[5], 16),\r\n pb.sal(this.lightIndex[6], 8),\r\n this.lightIndex[7]\r\n );\r\n this.$l.b = pb.add(\r\n pb.sal(this.lightIndex[8], 24),\r\n pb.sal(this.lightIndex[9], 16),\r\n pb.sal(this.lightIndex[10], 8),\r\n this.lightIndex[11]\r\n );\r\n this.$l.a = pb.add(\r\n pb.sal(this.lightIndex[12], 24),\r\n pb.sal(this.lightIndex[13], 16),\r\n pb.sal(this.lightIndex[14], 8),\r\n this.lightIndex[15]\r\n );\r\n this.$outputs.value = pb.uvec4(this.r, this.g, this.b, this.a);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = webgl1 ? pb.vec4() : pb.uvec4();\r\n pb.main(function () {\r\n this.$outputs.color = this.$inputs.value;\r\n });\r\n }\r\n });\r\n this._lightIndexProgram.name = '@ClusteredLight_Index';\r\n this._bindGroup = device.createBindGroup(this._lightIndexProgram.bindGroupLayouts[0]);\r\n this._lightBuffer?.dispose();\r\n const lightBufferType = this._lightIndexProgram.getBindingInfo(\r\n ShaderHelper.getLightBufferUniformName()\r\n ).type;\r\n this._lightBuffer = device.createStructuredBuffer(lightBufferType as PBStructTypeInfo, {\r\n usage: 'uniform'\r\n });\r\n }\r\n private createLightIndexTexture(device: AbstractDevice) {\r\n const exp = Math.log2(this._tileCountX * this._tileCountY * this._tileCountZ);\r\n const a = (exp + 1) >>> 1;\r\n const b = exp - a;\r\n const textureWidth = 2 << (a - 1);\r\n const textureHeight = 2 << (b - 1);\r\n if (textureWidth * textureHeight !== this._tileCountX * this._tileCountY * this._tileCountZ) {\r\n throw new Error('Internal error');\r\n }\r\n this._lightIndexTexture = device.createTexture2D(\r\n device.type === 'webgl' ? 'rgba32f' : 'rgba32ui',\r\n textureWidth,\r\n textureHeight,\r\n { mipmapping: false }\r\n );\r\n this._lightIndexTexture.name = 'ClusterLightIndex';\r\n this._lightIndexFramebuffer?.dispose();\r\n this._lightIndexFramebuffer = device.createFrameBuffer([this._lightIndexTexture], null);\r\n }\r\n calculateLightIndex(camera: Camera, renderQueue: RenderQueue) {\r\n const numLights = this.getVisibleLights(renderQueue, this._lights);\r\n const device = getDevice();\r\n if (!this._lightIndexTexture) {\r\n this.createLightIndexTexture(device);\r\n }\r\n if (!this._lightIndexProgram) {\r\n this.createProgram(device);\r\n }\r\n if (!this._lightIndexVertexLayout) {\r\n this.createVertexLayout(device, this._lightIndexTexture.width, this._lightIndexTexture.height);\r\n }\r\n if (!this._lightIndexRenderStates) {\r\n this.createRenderState(device);\r\n }\r\n const viewport = device.getViewport();\r\n const vw = device.screenToDevice(viewport.width);\r\n const vh = device.screenToDevice(viewport.height);\r\n const scale = this._tileCountZ / Math.log2(camera.getFarPlane() / camera.getNearPlane());\r\n const bias = -(\r\n (this._tileCountZ * Math.log2(camera.getNearPlane())) /\r\n Math.log2(camera.getFarPlane() / camera.getNearPlane())\r\n );\r\n this._clusterParam.setXYZW(vw, vh, scale, bias);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(this._lightIndexFramebuffer);\r\n if (numLights > 0) {\r\n if (this._lightBuffer.disposed) {\r\n this._lightBuffer.reload();\r\n }\r\n this._lightBuffer.bufferSubData(0, this._lights);\r\n this._sizeParam.setXYZW(vw, vh, camera.getNearPlane(), camera.getFarPlane());\r\n this._countParam[0] = this._tileCountX;\r\n this._countParam[1] = this._tileCountY;\r\n this._countParam[2] = this._tileCountZ;\r\n this._countParam[3] = numLights + 1;\r\n this._bindGroup.setValue('invProjMatrix', Matrix4x4.invert(camera.getProjectionMatrix()));\r\n this._bindGroup.setValue('viewMatrix', camera.viewMatrix);\r\n this._bindGroup.setValue('sizeParam', this._sizeParam);\r\n this._bindGroup.setValue('countParam', this._countParam);\r\n this._bindGroup.setBuffer(ShaderHelper.getLightBufferUniformName(), this._lightBuffer);\r\n device.setProgram(this._lightIndexProgram);\r\n device.setVertexLayout(this._lightIndexVertexLayout);\r\n device.setBindGroup(0, this._bindGroup);\r\n const savedRS = device.getRenderStates();\r\n device.setRenderStates(this._lightIndexRenderStates);\r\n device.draw('point-list', 0, this._tileCountX * this._tileCountY * this._tileCountZ);\r\n device.setRenderStates(savedRS);\r\n } else {\r\n device.clearFrameBuffer(new Vector4(0, 0, 0, 0), 1, 0);\r\n }\r\n device.popDeviceStates();\r\n }\r\n private getVisibleLights(renderQueue: RenderQueue, lights: Float32Array): number {\r\n const numLights = Math.min(renderQueue.unshadowedLights.length, MAX_CLUSTERED_LIGHTS);\r\n for (let i = 1; i <= numLights; i++) {\r\n const light = renderQueue.unshadowedLights[i - 1];\r\n lights.set(light.positionAndRange, i * 12);\r\n lights.set(light.directionAndCutoff, i * 12 + 4);\r\n lights.set(light.diffuseAndIntensity, i * 12 + 8);\r\n }\r\n return numLights;\r\n }\r\n}\r\n"],"names":["ClusteredLight","_tileCountX","_tileCountY","_tileCountZ","_lights","_lightIndexTexture","_lightIndexFramebuffer","_lightIndexProgram","_bindGroup","_lightIndexVertexLayout","_lightIndexRenderStates","_lightBuffer","_sizeParam","_countParam","_clusterParam","Float32Array","MAX_CLUSTERED_LIGHTS","Vector4","Int32Array","lightBuffer","clusterParam","countParam","lightIndexTexture","createVertexLayout","device","textureWidth","textureHeight","vb","type","vertices","i","length","ix","iy","Math","floor","createVertexBuffer","vertexBuffers","buffer","createRenderState","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","createProgram","webgl1","buildRenderProgram","vertex","pb","$inputs","pos","vec3","vec2","attrib","$outputs","value","vec4","uvec4","invProjMatrix","mat4","uniform","viewMatrix","sizeParam","ivec4","ShaderHelper","getLightBufferUniformName","uniformBuffer","func","float","$l","normal","ab","sub","b","a","t","div","zDistance","dot","$return","add","mul","view","clip","w","texCoord","screen","xy","x","y","z","clipToView","dmin","$if","lessThanEqual","sphere","$for","int","lessThan","at","aabbMin","delta","$elseif","greaterThan","aabbMax","main","getDevice","$builtins","pointSize","position","tileIndex","vertexIndex","tileSize","zIndex","yIndex","xIndex","maxPoint_sS","minPoint_sS","maxPoint_vS","screenToView","xyz","minPoint_vS","tileNear","neg","pow","tileFar","eyePos","minPointNear","lineIntersectionToZPlane","minPointFar","maxPointNear","maxPointFar","min","max","n","lightIndices","setAt","equal","$break","light","lightPos","sphereIntersectsAABB","j","r","g","lightIndex","uint","sal","fragment","color","name","createBindGroup","bindGroupLayouts","dispose","lightBufferType","getBindingInfo","createStructuredBuffer","usage","createLightIndexTexture","exp","log2","Error","createTexture2D","mipmapping","createFrameBuffer","calculateLightIndex","camera","renderQueue","numLights","getVisibleLights","width","height","viewport","getViewport","vw","screenToDevice","vh","scale","getFarPlane","getNearPlane","bias","setXYZW","pushDeviceStates","setFramebuffer","disposed","reload","bufferSubData","setValue","Matrix4x4","invert","getProjectionMatrix","setBuffer","setProgram","setVertexLayout","setBindGroup","savedRS","getRenderStates","setRenderStates","draw","clearFrameBuffer","popDeviceStates","lights","unshadowedLights","set","positionAndRange","directionAndCutoff","diffuseAndIntensity"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { ClipState } from '@zephyr3d/base';
2
2
  import { OctreeNode } from '../scene/octree.js';
3
- import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
3
+ import { RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
4
4
 
5
5
  /**
6
6
  * Node visitor for culling
@@ -11,6 +11,8 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
11
11
  /** @internal */ _skipClipTest;
12
12
  /** @internal */ _renderQueue;
13
13
  /** @internal */ _renderPass;
14
+ /** @internal */ _isGPUPicking;
15
+ /** @internal */ _isShadowMapping;
14
16
  /**
15
17
  * Creates an instance of CullVisitor
16
18
  * @param renderPass - Render pass for the culling task
@@ -23,6 +25,8 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
23
25
  this._renderQueue = renderQueue;
24
26
  this._skipClipTest = false;
25
27
  this._renderPass = renderPass;
28
+ this._isGPUPicking = this._renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;
29
+ this._isShadowMapping = this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP;
26
30
  }
27
31
  /** The camera that will be used for culling */ get camera() {
28
32
  return this._camera;
@@ -65,8 +69,14 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
65
69
  return this.visitOctreeNode(target);
66
70
  } else if (target.isMesh()) {
67
71
  return this.visitMesh(target);
72
+ } else if (target.isWater()) {
73
+ return this.visitWater(target);
74
+ } else if (target.isParticleSystem()) {
75
+ return this.visitParticleSystem(target);
68
76
  } else if (target.isTerrain()) {
69
77
  return this.visitTerrain(target);
78
+ } else if (target.isClipmapTerrain()) {
79
+ return this.visitClipmapTerrain(target);
70
80
  } else if (target.isPunctualLight()) {
71
81
  return this.visitPunctualLight(target);
72
82
  } else if (target.isBatchGroup()) {
@@ -84,7 +94,7 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
84
94
  return false;
85
95
  }
86
96
  /** @internal */ visitTerrain(node) {
87
- if (!node.hidden && (node.castShadow || this._renderPass.type !== RENDER_PASS_TYPE_SHADOWMAP)) {
97
+ if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
88
98
  const clipState = this.getClipStateWithNode(node);
89
99
  if (clipState !== ClipState.NOT_CLIPPED) {
90
100
  return node.cull(this) > 0;
@@ -92,6 +102,16 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
92
102
  }
93
103
  return false;
94
104
  }
105
+ /** @internal */ visitClipmapTerrain(node) {
106
+ if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
107
+ const clipState = this.getClipStateWithNode(node);
108
+ if (clipState !== ClipState.NOT_CLIPPED) {
109
+ this.push(this._camera, node);
110
+ return true;
111
+ }
112
+ }
113
+ return false;
114
+ }
95
115
  /** @internal */ visitBatchGroup(node) {
96
116
  if (!node.hidden) {
97
117
  const clipState = this.getClipStateWithNode(node);
@@ -102,8 +122,28 @@ import { RENDER_PASS_TYPE_SHADOWMAP } from '../values.js';
102
122
  }
103
123
  return false;
104
124
  }
125
+ /** @internal */ visitParticleSystem(node) {
126
+ if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {
127
+ const clipState = this.getClipStateWithNode(node);
128
+ if (clipState !== ClipState.NOT_CLIPPED) {
129
+ this.push(this._camera, node);
130
+ return true;
131
+ }
132
+ }
133
+ return false;
134
+ }
105
135
  /** @internal */ visitMesh(node) {
106
- if (!node.hidden && (node.castShadow || this._renderPass.type !== RENDER_PASS_TYPE_SHADOWMAP)) {
136
+ if (!node.hidden && (node.castShadow || !this._isShadowMapping) && (node.gpuPickable || !this._isGPUPicking)) {
137
+ const clipState = this.getClipStateWithNode(node);
138
+ if (clipState !== ClipState.NOT_CLIPPED) {
139
+ this.push(this._camera, node);
140
+ return true;
141
+ }
142
+ }
143
+ return false;
144
+ }
145
+ /** @internal */ visitWater(node) {
146
+ if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {
107
147
  const clipState = this.getClipStateWithNode(node);
108
148
  if (clipState !== ClipState.NOT_CLIPPED) {
109
149
  this.push(this._camera, node);
@@ -1 +1 @@
1
- {"version":3,"file":"cull_visitor.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"cull_visitor.js","sources":["../../src/render/cull_visitor.ts"],"sourcesContent":["import type { AABB } from '@zephyr3d/base';\r\nimport { ClipState } from '@zephyr3d/base';\r\nimport { OctreeNode } from '../scene/octree';\r\nimport { RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { GraphNode } from '../scene/graph_node';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { RenderPass, Drawable } from '.';\r\nimport type { Mesh } from '../scene/mesh';\r\nimport type { Terrain } from '../scene/terrain';\r\nimport type { ClipmapTerrain } from '../scene/terrain-cm';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { Visitor } from '../scene/visitor';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport type { BatchGroup } from '../scene/batchgroup';\r\nimport type { ParticleSystem } from '../scene';\r\nimport type { Water } from '../scene/water';\r\n\r\n/**\r\n * Node visitor for culling\r\n * @public\r\n */\r\nexport class CullVisitor implements Visitor<SceneNode | OctreeNode> {\r\n /** @internal */\r\n private readonly _primaryCamera: Camera;\r\n /** @internal */\r\n private _camera: Camera;\r\n /** @internal */\r\n private _skipClipTest: boolean;\r\n /** @internal */\r\n private _renderQueue: RenderQueue;\r\n /** @internal */\r\n private readonly _renderPass: RenderPass;\r\n /** @internal */\r\n private readonly _isGPUPicking: boolean;\r\n /** @internal */\r\n private readonly _isShadowMapping: boolean;\r\n /**\r\n * Creates an instance of CullVisitor\r\n * @param renderPass - Render pass for the culling task\r\n * @param camera - Camera that will be used for culling\r\n * @param rendeQueue - RenderQueue\r\n * @param viewPoint - Camera position of the primary render pass\r\n */\r\n constructor(renderPass: RenderPass, camera: Camera, renderQueue: RenderQueue, primaryCamera: Camera) {\r\n this._primaryCamera = primaryCamera;\r\n this._camera = camera;\r\n this._renderQueue = renderQueue;\r\n this._skipClipTest = false;\r\n this._renderPass = renderPass;\r\n this._isGPUPicking = this._renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n this._isShadowMapping = this._renderPass.type === RENDER_PASS_TYPE_SHADOWMAP;\r\n }\r\n /** The camera that will be used for culling */\r\n get camera() {\r\n return this._camera;\r\n }\r\n set camera(camera: Camera) {\r\n this._camera = camera || null;\r\n }\r\n /** true if cull with frustum culling, otherwise false. default is true */\r\n get frustumCulling(): boolean {\r\n return !this._skipClipTest;\r\n }\r\n set frustumCulling(val: boolean) {\r\n this._skipClipTest = !val;\r\n }\r\n /** The camera position of the primary render pass */\r\n get primaryCamera() {\r\n return this._primaryCamera;\r\n }\r\n /** Render pass for the culling task */\r\n get renderPass(): RenderPass {\r\n return this._renderPass;\r\n }\r\n /** The result of culling */\r\n get renderQueue() {\r\n return this._renderQueue;\r\n }\r\n set renderQueue(renderQueue: RenderQueue) {\r\n this._renderQueue = renderQueue;\r\n }\r\n /** Frustum for culling */\r\n get frustum() {\r\n return this._camera?.frustum || null;\r\n }\r\n /** @internal */\r\n push(camera: Camera, drawable: Drawable) {\r\n this.renderQueue.push(camera, drawable);\r\n }\r\n /** @internal */\r\n pushRenderQueue(renderQueue: RenderQueue) {\r\n this.renderQueue.pushRenderQueue(renderQueue);\r\n }\r\n /**\r\n * Visits a node\r\n * @param target - The node to be visit\r\n */\r\n visit(target: SceneNode | OctreeNode): unknown {\r\n if (target instanceof OctreeNode) {\r\n return this.visitOctreeNode(target);\r\n } else if (target.isMesh()) {\r\n return this.visitMesh(target);\r\n } else if (target.isWater()) {\r\n return this.visitWater(target);\r\n } else if (target.isParticleSystem()) {\r\n return this.visitParticleSystem(target);\r\n } else if (target.isTerrain()) {\r\n return this.visitTerrain(target);\r\n } else if (target.isClipmapTerrain()) {\r\n return this.visitClipmapTerrain(target);\r\n } else if (target.isPunctualLight()) {\r\n return this.visitPunctualLight(target);\r\n } else if (target.isBatchGroup()) {\r\n return this.visitBatchGroup(target);\r\n }\r\n }\r\n /** @internal */\r\n visitPunctualLight(node: PunctualLight) {\r\n if (!node.hidden) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.renderQueue.pushLight(node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitTerrain(node: Terrain) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n return node.cull(this) > 0;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitClipmapTerrain(node: ClipmapTerrain) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitBatchGroup(node: BatchGroup) {\r\n if (!node.hidden) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n node.cull(this);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitParticleSystem(node: ParticleSystem) {\r\n if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitMesh(node: Mesh) {\r\n if (\r\n !node.hidden &&\r\n (node.castShadow || !this._isShadowMapping) &&\r\n (node.gpuPickable || !this._isGPUPicking)\r\n ) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitWater(node: Water) {\r\n if (!node.hidden && !this._isShadowMapping && (node.gpuPickable || !this._isGPUPicking)) {\r\n const clipState = this.getClipStateWithNode(node);\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n this.push(this._camera, node);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n visitOctreeNode(node: OctreeNode) {\r\n const clipState =\r\n node.getLevel() > 0 ? this.getClipStateWithAABB(node.getBoxLoosed()) : ClipState.CLIPPED;\r\n if (clipState !== ClipState.NOT_CLIPPED) {\r\n const saveSkipFlag = this._skipClipTest;\r\n this._skipClipTest = this._skipClipTest || clipState === ClipState.A_INSIDE_B;\r\n const nodes = node.getNodes();\r\n for (let i = 0; i < nodes.length; i++) {\r\n this.visit(nodes[i]);\r\n }\r\n this._skipClipTest = saveSkipFlag;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** @internal */\r\n protected getClipStateWithNode(node: GraphNode): ClipState {\r\n let clipState: ClipState;\r\n if (this._skipClipTest) {\r\n clipState = ClipState.A_INSIDE_B;\r\n } else if (!node.clipTestEnabled) {\r\n clipState = ClipState.CLIPPED;\r\n } else {\r\n const bv = node.getWorldBoundingVolume();\r\n clipState = bv ? this.getClipStateWithAABB(bv.toAABB()) : ClipState.CLIPPED;\r\n }\r\n return clipState;\r\n }\r\n /** @internal */\r\n protected getClipStateWithAABB(aabb: AABB): ClipState {\r\n return this.camera.clipMask\r\n ? aabb.getClipStateWithFrustumMask(this.frustum, this.camera.clipMask)\r\n : aabb.getClipStateWithFrustum(this.frustum);\r\n }\r\n}\r\n"],"names":["CullVisitor","renderPass","camera","renderQueue","primaryCamera","_primaryCamera","_camera","_renderQueue","_skipClipTest","_renderPass","_isGPUPicking","type","RENDER_PASS_TYPE_OBJECT_COLOR","_isShadowMapping","RENDER_PASS_TYPE_SHADOWMAP","frustumCulling","val","frustum","push","drawable","pushRenderQueue","visit","target","OctreeNode","visitOctreeNode","isMesh","visitMesh","isWater","visitWater","isParticleSystem","visitParticleSystem","isTerrain","visitTerrain","isClipmapTerrain","visitClipmapTerrain","isPunctualLight","visitPunctualLight","isBatchGroup","visitBatchGroup","node","hidden","clipState","getClipStateWithNode","ClipState","NOT_CLIPPED","pushLight","castShadow","gpuPickable","cull","getLevel","getClipStateWithAABB","getBoxLoosed","CLIPPED","saveSkipFlag","A_INSIDE_B","nodes","getNodes","i","length","clipTestEnabled","bv","getWorldBoundingVolume","toAABB","aabb","clipMask","getClipStateWithFrustumMask","getClipStateWithFrustum"],"mappings":"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"}
@@ -11,12 +11,20 @@ import { ShaderHelper } from '../material/shader/helper.js';
11
11
  */ class DepthPass extends RenderPass {
12
12
  _renderBackface;
13
13
  _encodeDepth;
14
+ _transmission;
14
15
  /**
15
16
  * Creates an instance of DepthRenderPass
16
17
  */ constructor(){
17
18
  super(RENDER_PASS_TYPE_DEPTH);
18
19
  this._renderBackface = false;
19
20
  this._encodeDepth = false;
21
+ this._transmission = false;
22
+ }
23
+ get transmission() {
24
+ return this._transmission;
25
+ }
26
+ set transmission(val) {
27
+ this._transmission = val;
20
28
  }
21
29
  get renderBackface() {
22
30
  return this._renderBackface;
@@ -31,24 +39,25 @@ import { ShaderHelper } from '../material/shader/helper.js';
31
39
  this._encodeDepth = !!val;
32
40
  }
33
41
  /** @internal */ _getGlobalBindGroupHash(ctx) {
34
- return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}`;
42
+ return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}:${Number(ctx.motionVectors)}`;
35
43
  }
36
44
  /** @internal */ renderItems(ctx, renderQueue) {
37
45
  const items = renderQueue.itemList;
38
46
  if (items) {
39
- ctx.applyFog = null;
47
+ ctx.fogFlags = 0;
40
48
  ctx.drawEnvLight = false;
41
49
  ctx.env = null;
42
50
  ctx.flip = this.isAutoFlip(ctx);
43
51
  ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
44
52
  const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
45
53
  ctx.device.setBindGroup(0, bindGroup);
46
- ShaderHelper.setCameraUniforms(bindGroup, ctx.camera, ctx.flip, true);
54
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
47
55
  const reverseWinding = ctx.camera.worldMatrixDet < 0;
48
- for (const lit of items.opaque.lit){
56
+ const list = this._transmission ? items.transmission : items.opaque;
57
+ for (const lit of list.lit){
49
58
  this.drawItemList(lit, ctx, reverseWinding);
50
59
  }
51
- for (const unlit of items.opaque.unlit){
60
+ for (const unlit of list.unlit){
52
61
  this.drawItemList(unlit, ctx, reverseWinding);
53
62
  }
54
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"depthpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"depthpass.js","sources":["../../src/render/depthpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_DEPTH } from '../values';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Depth render pass\r\n *\r\n * Scene depth render pass\r\n *\r\n * @public\r\n */\r\nexport class DepthPass extends RenderPass {\r\n private _renderBackface: boolean;\r\n private _encodeDepth: boolean;\r\n private _transmission: boolean;\r\n /**\r\n * Creates an instance of DepthRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_DEPTH);\r\n this._renderBackface = false;\r\n this._encodeDepth = false;\r\n this._transmission = false;\r\n }\r\n get transmission() {\r\n return this._transmission;\r\n }\r\n set transmission(val: boolean) {\r\n this._transmission = val;\r\n }\r\n get renderBackface(): boolean {\r\n return this._renderBackface;\r\n }\r\n set renderBackface(val: boolean) {\r\n this._renderBackface = !!val;\r\n }\r\n get encodeDepth(): boolean {\r\n return this._encodeDepth;\r\n }\r\n set encodeDepth(val: boolean) {\r\n this._encodeDepth = !!val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${Number(this._renderBackface)}:${Number(this._encodeDepth)}:${Number(ctx.motionVectors)}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.fogFlags = 0;\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n const list = this._transmission ? items.transmission : items.opaque;\r\n for (const lit of list.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of list.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["DepthPass","RenderPass","_renderBackface","_encodeDepth","_transmission","RENDER_PASS_TYPE_DEPTH","transmission","val","renderBackface","encodeDepth","_getGlobalBindGroupHash","ctx","Number","motionVectors","renderItems","renderQueue","items","itemList","fogFlags","drawEnvLight","env","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","reverseWinding","camera","worldMatrixDet","list","opaque","lit","drawItemList","unlit"],"mappings":";;;;AAMA;;;;;;IAOO,MAAMA,SAAkBC,SAAAA,UAAAA,CAAAA;IACrBC,eAAyB;IACzBC,YAAsB;IACtBC,aAAuB;AAC/B;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,sBAAAA,CAAAA;QACN,IAAI,CAACH,eAAe,GAAG,KAAA;QACvB,IAAI,CAACC,YAAY,GAAG,KAAA;QACpB,IAAI,CAACC,aAAa,GAAG,KAAA;AACvB;AACA,IAAA,IAAIE,YAAe,GAAA;QACjB,OAAO,IAAI,CAACF,aAAa;AAC3B;IACA,IAAIE,YAAAA,CAAaC,GAAY,EAAE;QAC7B,IAAI,CAACH,aAAa,GAAGG,GAAAA;AACvB;AACA,IAAA,IAAIC,cAA0B,GAAA;QAC5B,OAAO,IAAI,CAACN,eAAe;AAC7B;IACA,IAAIM,cAAAA,CAAeD,GAAY,EAAE;AAC/B,QAAA,IAAI,CAACL,eAAe,GAAG,CAAC,CAACK,GAAAA;AAC3B;AACA,IAAA,IAAIE,WAAuB,GAAA;QACzB,OAAO,IAAI,CAACN,YAAY;AAC1B;IACA,IAAIM,WAAAA,CAAYF,GAAY,EAAE;AAC5B,QAAA,IAAI,CAACJ,YAAY,GAAG,CAAC,CAACI,GAAAA;AACxB;AACA,qBACUG,uBAAwBC,CAAAA,GAAgB,EAAE;AAClD,QAAA,OAAO,GAAGC,MAAO,CAAA,IAAI,CAACV,eAAe,CAAA,CAAE,CAAC,EAAEU,MAAAA,CAAO,IAAI,CAACT,YAAY,CAAE,CAAA,CAAC,EAAES,MAAOD,CAAAA,GAAAA,CAAIE,aAAa,CAAG,CAAA,CAAA;AACpG;AACA,qBACA,WAAUC,CAAYH,GAAgB,EAAEI,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTL,YAAAA,GAAAA,CAAIO,QAAQ,GAAG,CAAA;AACfP,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,IAAI,GAAG,IAAI,CAACC,UAAU,CAACX,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIY,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACb,GAAAA,CAAAA;AACjD,YAAA,MAAMc,SAAYd,GAAAA,GAAAA,CAAIe,wBAAwB,CAACC,kBAAkB,CAAChB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIiB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;YAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWd,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMqB,cAAiBrB,GAAAA,GAAAA,CAAIsB,MAAM,CAACC,cAAc,GAAG,CAAA;YACnD,MAAMC,IAAAA,GAAO,IAAI,CAAC/B,aAAa,GAAGY,KAAMV,CAAAA,YAAY,GAAGU,KAAAA,CAAMoB,MAAM;AACnE,YAAA,KAAK,MAAMC,GAAAA,IAAOF,IAAKE,CAAAA,GAAG,CAAE;AAC1B,gBAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAK1B,GAAKqB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMO,KAAAA,IAASJ,IAAKI,CAAAA,KAAK,CAAE;AAC9B,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO5B,GAAKqB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}