@zephyr3d/scene 0.9.2 → 0.9.4

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 (513) hide show
  1. package/dist/animation/animationset.js +135 -135
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/ik/ik_chain_builder.js +68 -0
  4. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  5. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  6. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  7. package/dist/animation/joint_dynamics/controller.js +146 -146
  8. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  9. package/dist/animation/joint_dynamics/math.js +16 -0
  10. package/dist/animation/joint_dynamics/math.js.map +1 -0
  11. package/dist/animation/spring/spring_system.js +75 -75
  12. package/dist/animation/spring/spring_system.js.map +1 -1
  13. package/dist/animation/spring2/constraints.js.map +1 -1
  14. package/dist/animation/spring2/controller.js +64 -64
  15. package/dist/animation/spring2/controller.js.map +1 -1
  16. package/dist/animation/spring2/math.js.map +1 -1
  17. package/dist/animation/spring2/spring_system.js +8 -8
  18. package/dist/animation/spring2/spring_system.js.map +1 -1
  19. package/dist/app/engine.js +119 -71
  20. package/dist/app/engine.js.map +1 -1
  21. package/dist/asset/assetmanager.js +296 -244
  22. package/dist/asset/assetmanager.js.map +1 -1
  23. package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
  24. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  25. package/dist/camera/camera.js +184 -184
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/index.d.ts +685 -38
  28. package/dist/index.js +11 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/material/material.js +290 -290
  31. package/dist/material/material.js.map +1 -1
  32. package/dist/material/msdf_text.js +180 -0
  33. package/dist/material/msdf_text.js.map +1 -0
  34. package/dist/material/msdf_text_sprite.js +64 -0
  35. package/dist/material/msdf_text_sprite.js.map +1 -0
  36. package/dist/material/pbrblueprint.js +123 -108
  37. package/dist/material/pbrblueprint.js.map +1 -1
  38. package/dist/material/shader/helper.js +6 -3
  39. package/dist/material/shader/helper.js.map +1 -1
  40. package/dist/material/sprite_sdf.js +106 -0
  41. package/dist/material/sprite_sdf.js.map +1 -0
  42. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  43. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  44. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  45. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  46. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  47. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  48. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  49. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  50. package/dist/posteffect/ssr.js +1 -0
  51. package/dist/posteffect/ssr.js.map +1 -1
  52. package/dist/render/abuffer_oit.js +1 -0
  53. package/dist/render/abuffer_oit.js.map +1 -1
  54. package/dist/render/cluster_light.js +3 -4
  55. package/dist/render/cluster_light.js.map +1 -1
  56. package/dist/render/cull_visitor.js +28 -0
  57. package/dist/render/cull_visitor.js.map +1 -1
  58. package/dist/render/drawable.js.map +1 -1
  59. package/dist/render/drawable_mixin.js +1 -0
  60. package/dist/render/drawable_mixin.js.map +1 -1
  61. package/dist/render/fbm_wavegenerator.js +1 -0
  62. package/dist/render/fbm_wavegenerator.js.map +1 -1
  63. package/dist/render/gerstner_wavegenerator.js +1 -0
  64. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  65. package/dist/render/globalbindgroup_allocator.js +1 -0
  66. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  67. package/dist/render/render_queue.js +1 -0
  68. package/dist/render/render_queue.js.map +1 -1
  69. package/dist/render/rendergraph/history_resource_manager.js +93 -93
  70. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  71. package/dist/render/rendergraph/history_resources.js +3 -3
  72. package/dist/render/rendergraph/history_resources.js.map +1 -1
  73. package/dist/render/rendergraph/types.js +22 -22
  74. package/dist/render/rendergraph/types.js.map +1 -1
  75. package/dist/scene/basesprite.js +1 -5
  76. package/dist/scene/basesprite.js.map +1 -1
  77. package/dist/scene/batchgroup.js +29 -17
  78. package/dist/scene/batchgroup.js.map +1 -1
  79. package/dist/scene/environment.js +1 -0
  80. package/dist/scene/environment.js.map +1 -1
  81. package/dist/scene/mesh.js +8 -9
  82. package/dist/scene/mesh.js.map +1 -1
  83. package/dist/scene/meshdrawable.js +96 -0
  84. package/dist/scene/meshdrawable.js.map +1 -0
  85. package/dist/scene/msdftext.js +341 -0
  86. package/dist/scene/msdftext.js.map +1 -0
  87. package/dist/scene/msdftextsprite.js +349 -0
  88. package/dist/scene/msdftextsprite.js.map +1 -0
  89. package/dist/scene/particlesys.js +1 -0
  90. package/dist/scene/particlesys.js.map +1 -1
  91. package/dist/scene/scene.js +1 -0
  92. package/dist/scene/scene.js.map +1 -1
  93. package/dist/scene/scene_node.js +6 -0
  94. package/dist/scene/scene_node.js.map +1 -1
  95. package/dist/scene/sdftextsprite.js +322 -0
  96. package/dist/scene/sdftextsprite.js.map +1 -0
  97. package/dist/scene/terrain-cm/grass.js +1 -0
  98. package/dist/scene/terrain-cm/grass.js.map +1 -1
  99. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  100. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  101. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  102. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  103. package/dist/scene/textsprite.js +120 -0
  104. package/dist/scene/textsprite.js.map +1 -0
  105. package/dist/scene/water.js +1 -0
  106. package/dist/scene/water.js.map +1 -1
  107. package/dist/shadow/shader.js +1 -0
  108. package/dist/shadow/shader.js.map +1 -1
  109. package/dist/shapes/torus.js +90 -59
  110. package/dist/shapes/torus.js.map +1 -1
  111. package/dist/src/animation/animation.js +127 -0
  112. package/dist/src/animation/animation.js.map +1 -0
  113. package/dist/src/animation/animationset.js +255 -0
  114. package/dist/src/animation/animationset.js.map +1 -0
  115. package/dist/src/animation/animationtrack.js +34 -0
  116. package/dist/src/animation/animationtrack.js.map +1 -0
  117. package/dist/src/animation/eulerrotationtrack.js +52 -0
  118. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  119. package/dist/src/animation/morphtarget.js +93 -0
  120. package/dist/src/animation/morphtarget.js.map +1 -0
  121. package/dist/src/animation/morphtrack.js +70 -0
  122. package/dist/src/animation/morphtrack.js.map +1 -0
  123. package/dist/src/animation/proptrack.js +161 -0
  124. package/dist/src/animation/proptrack.js.map +1 -0
  125. package/dist/src/animation/rotationtrack.js +51 -0
  126. package/dist/src/animation/rotationtrack.js.map +1 -0
  127. package/dist/src/animation/scaletrack.js +50 -0
  128. package/dist/src/animation/scaletrack.js.map +1 -0
  129. package/dist/src/animation/skeleton.js +204 -0
  130. package/dist/src/animation/skeleton.js.map +1 -0
  131. package/dist/src/animation/translationtrack.js +50 -0
  132. package/dist/src/animation/translationtrack.js.map +1 -0
  133. package/dist/src/app/app.js +129 -0
  134. package/dist/src/app/app.js.map +1 -0
  135. package/dist/src/app/inputmgr.js +267 -0
  136. package/dist/src/app/inputmgr.js.map +1 -0
  137. package/dist/src/asset/assetmanager.js +404 -0
  138. package/dist/src/asset/assetmanager.js.map +1 -0
  139. package/dist/src/asset/builtin.js +337 -0
  140. package/dist/src/asset/builtin.js.map +1 -0
  141. package/dist/src/asset/loaders/dds/dds.js +470 -0
  142. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  143. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  144. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  145. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  146. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  147. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  148. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  149. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  150. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  151. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  152. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  153. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  154. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  155. package/dist/src/asset/loaders/loader.js +45 -0
  156. package/dist/src/asset/loaders/loader.js.map +1 -0
  157. package/dist/src/asset/model.js +414 -0
  158. package/dist/src/asset/model.js.map +1 -0
  159. package/dist/src/blitter/bilateralblur.js +221 -0
  160. package/dist/src/blitter/bilateralblur.js.map +1 -0
  161. package/dist/src/blitter/blitter.js +390 -0
  162. package/dist/src/blitter/blitter.js.map +1 -0
  163. package/dist/src/blitter/box.js +118 -0
  164. package/dist/src/blitter/box.js.map +1 -0
  165. package/dist/src/blitter/copy.js +22 -0
  166. package/dist/src/blitter/copy.js.map +1 -0
  167. package/dist/src/blitter/gaussianblur.js +228 -0
  168. package/dist/src/blitter/gaussianblur.js.map +1 -0
  169. package/dist/src/camera/base.js +92 -0
  170. package/dist/src/camera/base.js.map +1 -0
  171. package/dist/src/camera/camera.js +1005 -0
  172. package/dist/src/camera/camera.js.map +1 -0
  173. package/dist/src/camera/fps.js +238 -0
  174. package/dist/src/camera/fps.js.map +1 -0
  175. package/dist/src/camera/orbit.js +245 -0
  176. package/dist/src/camera/orbit.js.map +1 -0
  177. package/dist/src/camera/orthocamera.js +167 -0
  178. package/dist/src/camera/orthocamera.js.map +1 -0
  179. package/dist/src/camera/perspectivecamera.js +141 -0
  180. package/dist/src/camera/perspectivecamera.js.map +1 -0
  181. package/dist/src/index.js +120 -0
  182. package/dist/src/index.js.map +1 -0
  183. package/dist/src/material/blinn.js +81 -0
  184. package/dist/src/material/blinn.js.map +1 -0
  185. package/dist/src/material/grassmaterial.js +113 -0
  186. package/dist/src/material/grassmaterial.js.map +1 -0
  187. package/dist/src/material/lambert.js +92 -0
  188. package/dist/src/material/lambert.js.map +1 -0
  189. package/dist/src/material/material.js +301 -0
  190. package/dist/src/material/material.js.map +1 -0
  191. package/dist/src/material/meshmaterial.js +704 -0
  192. package/dist/src/material/meshmaterial.js.map +1 -0
  193. package/dist/src/material/mixins/albedocolor.js +76 -0
  194. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  195. package/dist/src/material/mixins/foliage.js +47 -0
  196. package/dist/src/material/mixins/foliage.js.map +1 -0
  197. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  198. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  199. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  200. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  201. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  202. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  203. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  204. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  205. package/dist/src/material/mixins/lit.js +476 -0
  206. package/dist/src/material/mixins/lit.js.map +1 -0
  207. package/dist/src/material/mixins/pbr/common.js +918 -0
  208. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  209. package/dist/src/material/mixins/texture.js +172 -0
  210. package/dist/src/material/mixins/texture.js.map +1 -0
  211. package/dist/src/material/mixins/vertexcolor.js +56 -0
  212. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  213. package/dist/src/material/particle.js +178 -0
  214. package/dist/src/material/particle.js.map +1 -0
  215. package/dist/src/material/pbrmr.js +97 -0
  216. package/dist/src/material/pbrmr.js.map +1 -0
  217. package/dist/src/material/pbrsg.js +97 -0
  218. package/dist/src/material/pbrsg.js.map +1 -0
  219. package/dist/src/material/shader/helper.js +1209 -0
  220. package/dist/src/material/shader/helper.js.map +1 -0
  221. package/dist/src/material/terrain-cm.js +606 -0
  222. package/dist/src/material/terrain-cm.js.map +1 -0
  223. package/dist/src/material/terrainmaterial.js +375 -0
  224. package/dist/src/material/terrainmaterial.js.map +1 -0
  225. package/dist/src/material/unlit.js +41 -0
  226. package/dist/src/material/unlit.js.map +1 -0
  227. package/dist/src/material/water.js +417 -0
  228. package/dist/src/material/water.js.map +1 -0
  229. package/dist/src/posteffect/bloom.js +361 -0
  230. package/dist/src/posteffect/bloom.js.map +1 -0
  231. package/dist/src/posteffect/compositor.js +226 -0
  232. package/dist/src/posteffect/compositor.js.map +1 -0
  233. package/dist/src/posteffect/fxaa.js +273 -0
  234. package/dist/src/posteffect/fxaa.js.map +1 -0
  235. package/dist/src/posteffect/grayscale.js +69 -0
  236. package/dist/src/posteffect/grayscale.js.map +1 -0
  237. package/dist/src/posteffect/motionblur.js +96 -0
  238. package/dist/src/posteffect/motionblur.js.map +1 -0
  239. package/dist/src/posteffect/posteffect.js +126 -0
  240. package/dist/src/posteffect/posteffect.js.map +1 -0
  241. package/dist/src/posteffect/sao.js +324 -0
  242. package/dist/src/posteffect/sao.js.map +1 -0
  243. package/dist/src/posteffect/ssr.js +489 -0
  244. package/dist/src/posteffect/ssr.js.map +1 -0
  245. package/dist/src/posteffect/taa.js +172 -0
  246. package/dist/src/posteffect/taa.js.map +1 -0
  247. package/dist/src/posteffect/tonemap.js +94 -0
  248. package/dist/src/posteffect/tonemap.js.map +1 -0
  249. package/dist/src/render/abuffer_oit.js +361 -0
  250. package/dist/src/render/abuffer_oit.js.map +1 -0
  251. package/dist/src/render/clipmap.js +851 -0
  252. package/dist/src/render/clipmap.js.map +1 -0
  253. package/dist/src/render/cluster_light.js +333 -0
  254. package/dist/src/render/cluster_light.js.map +1 -0
  255. package/dist/src/render/cull_visitor.js +187 -0
  256. package/dist/src/render/cull_visitor.js.map +1 -0
  257. package/dist/src/render/depthpass.js +68 -0
  258. package/dist/src/render/depthpass.js.map +1 -0
  259. package/dist/src/render/drawable_mixin.js +227 -0
  260. package/dist/src/render/drawable_mixin.js.map +1 -0
  261. package/dist/src/render/envlight.js +463 -0
  262. package/dist/src/render/envlight.js.map +1 -0
  263. package/dist/src/render/fbm_wavegenerator.js +251 -0
  264. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  265. package/dist/src/render/fft_wavegenerator.js +1006 -0
  266. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  267. package/dist/src/render/fullscreenquad.js +38 -0
  268. package/dist/src/render/fullscreenquad.js.map +1 -0
  269. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  270. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  271. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  272. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  273. package/dist/src/render/hzb.js +273 -0
  274. package/dist/src/render/hzb.js.map +1 -0
  275. package/dist/src/render/lightpass.js +172 -0
  276. package/dist/src/render/lightpass.js.map +1 -0
  277. package/dist/src/render/objectcolorpass.js +51 -0
  278. package/dist/src/render/objectcolorpass.js.map +1 -0
  279. package/dist/src/render/primitive.js +364 -0
  280. package/dist/src/render/primitive.js.map +1 -0
  281. package/dist/src/render/render_queue.js +467 -0
  282. package/dist/src/render/render_queue.js.map +1 -0
  283. package/dist/src/render/renderbundle_wrapper.js +152 -0
  284. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  285. package/dist/src/render/renderer.js +455 -0
  286. package/dist/src/render/renderer.js.map +1 -0
  287. package/dist/src/render/renderpass.js +200 -0
  288. package/dist/src/render/renderpass.js.map +1 -0
  289. package/dist/src/render/shadowmap_pass.js +56 -0
  290. package/dist/src/render/shadowmap_pass.js.map +1 -0
  291. package/dist/src/render/sky.js +1103 -0
  292. package/dist/src/render/sky.js.map +1 -0
  293. package/dist/src/render/weightedblended_oit.js +168 -0
  294. package/dist/src/render/weightedblended_oit.js.map +1 -0
  295. package/dist/src/scene/batchgroup.js +162 -0
  296. package/dist/src/scene/batchgroup.js.map +1 -0
  297. package/dist/src/scene/environment.js +209 -0
  298. package/dist/src/scene/environment.js.map +1 -0
  299. package/dist/src/scene/graph_node.js +72 -0
  300. package/dist/src/scene/graph_node.js.map +1 -0
  301. package/dist/src/scene/light.js +416 -0
  302. package/dist/src/scene/light.js.map +1 -0
  303. package/dist/src/scene/mesh.js +341 -0
  304. package/dist/src/scene/mesh.js.map +1 -0
  305. package/dist/src/scene/octree.js +649 -0
  306. package/dist/src/scene/octree.js.map +1 -0
  307. package/dist/src/scene/particlesys.js +738 -0
  308. package/dist/src/scene/particlesys.js.map +1 -0
  309. package/dist/src/scene/raycast_visitor.js +103 -0
  310. package/dist/src/scene/raycast_visitor.js.map +1 -0
  311. package/dist/src/scene/scene.js +284 -0
  312. package/dist/src/scene/scene.js.map +1 -0
  313. package/dist/src/scene/scene_node.js +732 -0
  314. package/dist/src/scene/scene_node.js.map +1 -0
  315. package/dist/src/scene/terrain/grass.js +278 -0
  316. package/dist/src/scene/terrain/grass.js.map +1 -0
  317. package/dist/src/scene/terrain/heightfield.js +475 -0
  318. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  319. package/dist/src/scene/terrain/patch.js +530 -0
  320. package/dist/src/scene/terrain/patch.js.map +1 -0
  321. package/dist/src/scene/terrain/quadtree.js +461 -0
  322. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  323. package/dist/src/scene/terrain/terrain.js +246 -0
  324. package/dist/src/scene/terrain/terrain.js.map +1 -0
  325. package/dist/src/scene/terrain-cm/grass.js +594 -0
  326. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  327. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  328. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  329. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  330. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  331. package/dist/src/scene/water.js +374 -0
  332. package/dist/src/scene/water.js.map +1 -0
  333. package/dist/src/shaders/atmosphere.js +957 -0
  334. package/dist/src/shaders/atmosphere.js.map +1 -0
  335. package/dist/src/shaders/fog.js +112 -0
  336. package/dist/src/shaders/fog.js.map +1 -0
  337. package/dist/src/shaders/misc.js +266 -0
  338. package/dist/src/shaders/misc.js.map +1 -0
  339. package/dist/src/shaders/noise.js +222 -0
  340. package/dist/src/shaders/noise.js.map +1 -0
  341. package/dist/src/shaders/pbr.js +51 -0
  342. package/dist/src/shaders/pbr.js.map +1 -0
  343. package/dist/src/shaders/shadow.js +636 -0
  344. package/dist/src/shaders/shadow.js.map +1 -0
  345. package/dist/src/shaders/ssr.js +490 -0
  346. package/dist/src/shaders/ssr.js.map +1 -0
  347. package/dist/src/shaders/temporal.js +215 -0
  348. package/dist/src/shaders/temporal.js.map +1 -0
  349. package/dist/src/shaders/water.js +756 -0
  350. package/dist/src/shaders/water.js.map +1 -0
  351. package/dist/src/shadow/esm.js +237 -0
  352. package/dist/src/shadow/esm.js.map +1 -0
  353. package/dist/src/shadow/pcf_opt.js +181 -0
  354. package/dist/src/shadow/pcf_opt.js.map +1 -0
  355. package/dist/src/shadow/pcf_pd.js +189 -0
  356. package/dist/src/shadow/pcf_pd.js.map +1 -0
  357. package/dist/src/shadow/shader.js +37 -0
  358. package/dist/src/shadow/shader.js.map +1 -0
  359. package/dist/src/shadow/shadow_impl.js +15 -0
  360. package/dist/src/shadow/shadow_impl.js.map +1 -0
  361. package/dist/src/shadow/shadowmapper.js +790 -0
  362. package/dist/src/shadow/shadowmapper.js.map +1 -0
  363. package/dist/src/shadow/ssm.js +159 -0
  364. package/dist/src/shadow/ssm.js.map +1 -0
  365. package/dist/src/shadow/vsm.js +297 -0
  366. package/dist/src/shadow/vsm.js.map +1 -0
  367. package/dist/src/shapes/box.js +386 -0
  368. package/dist/src/shapes/box.js.map +1 -0
  369. package/dist/src/shapes/cylinder.js +125 -0
  370. package/dist/src/shapes/cylinder.js.map +1 -0
  371. package/dist/src/shapes/plane.js +88 -0
  372. package/dist/src/shapes/plane.js.map +1 -0
  373. package/dist/src/shapes/shape.js +87 -0
  374. package/dist/src/shapes/shape.js.map +1 -0
  375. package/dist/src/shapes/sphere.js +114 -0
  376. package/dist/src/shapes/sphere.js.map +1 -0
  377. package/dist/src/shapes/tetrahedron.js +188 -0
  378. package/dist/src/shapes/tetrahedron.js.map +1 -0
  379. package/dist/src/shapes/torus.js +111 -0
  380. package/dist/src/shapes/torus.js.map +1 -0
  381. package/dist/src/utility/aabbtree.js +400 -0
  382. package/dist/src/utility/aabbtree.js.map +1 -0
  383. package/dist/src/utility/bounding_volume.js +29 -0
  384. package/dist/src/utility/bounding_volume.js.map +1 -0
  385. package/dist/src/utility/debug.js +28 -0
  386. package/dist/src/utility/debug.js.map +1 -0
  387. package/dist/src/utility/draco/decoder.js +116 -0
  388. package/dist/src/utility/draco/decoder.js.map +1 -0
  389. package/dist/src/utility/misc.js +105 -0
  390. package/dist/src/utility/misc.js.map +1 -0
  391. package/dist/src/utility/panorama.js +163 -0
  392. package/dist/src/utility/panorama.js.map +1 -0
  393. package/dist/src/utility/pmrem.js +354 -0
  394. package/dist/src/utility/pmrem.js.map +1 -0
  395. package/dist/src/utility/rendermipmap.js +115 -0
  396. package/dist/src/utility/rendermipmap.js.map +1 -0
  397. package/dist/src/utility/serialization/json.js +402 -0
  398. package/dist/src/utility/serialization/json.js.map +1 -0
  399. package/dist/src/utility/serialization/manager.js +623 -0
  400. package/dist/src/utility/serialization/manager.js.map +1 -0
  401. package/dist/src/utility/serialization/scene/animation.js +248 -0
  402. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  403. package/dist/src/utility/serialization/scene/batch.js +59 -0
  404. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  405. package/dist/src/utility/serialization/scene/camera.js +790 -0
  406. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  407. package/dist/src/utility/serialization/scene/common.js +222 -0
  408. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  409. package/dist/src/utility/serialization/scene/light.js +575 -0
  410. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  411. package/dist/src/utility/serialization/scene/material.js +1111 -0
  412. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  413. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  414. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  415. package/dist/src/utility/serialization/scene/misc.js +39 -0
  416. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  417. package/dist/src/utility/serialization/scene/node.js +451 -0
  418. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  419. package/dist/src/utility/serialization/scene/particle.js +425 -0
  420. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  421. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  422. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  423. package/dist/src/utility/serialization/scene/scene.js +704 -0
  424. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  425. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  426. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  427. package/dist/src/utility/serialization/scene/water.js +465 -0
  428. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  429. package/dist/src/utility/shprojector.js +297 -0
  430. package/dist/src/utility/shprojector.js.map +1 -0
  431. package/dist/src/utility/textures/ggxlut.js +213 -0
  432. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  433. package/dist/src/utility/textures/gradientnoise.js +62 -0
  434. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  435. package/dist/src/utility/textures/randomnoise.js +41 -0
  436. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  437. package/dist/src/values.js +162 -0
  438. package/dist/src/values.js.map +1 -0
  439. package/dist/text/font/font_asset.js +884 -0
  440. package/dist/text/font/font_asset.js.map +1 -0
  441. package/dist/text/font/sfnt_reader.js +43 -0
  442. package/dist/text/font/sfnt_reader.js.map +1 -0
  443. package/dist/text/msdf/generator.js +417 -0
  444. package/dist/text/msdf/generator.js.map +1 -0
  445. package/dist/text/msdf/shape.js +143 -0
  446. package/dist/text/msdf/shape.js.map +1 -0
  447. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  448. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  449. package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
  450. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  451. package/dist/text/runtime/text_layout.js +96 -0
  452. package/dist/text/runtime/text_layout.js.map +1 -0
  453. package/dist/utility/blueprint/material/common.js +7 -0
  454. package/dist/utility/blueprint/material/common.js.map +1 -0
  455. package/dist/utility/blueprint/material/inputs.js +1275 -1091
  456. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  457. package/dist/utility/blueprint/material/ir.js +505 -490
  458. package/dist/utility/blueprint/material/ir.js.map +1 -1
  459. package/dist/utility/blueprint/material/pbr.js +32 -0
  460. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  461. package/dist/utility/serialization/blueprint/constants.js +255 -0
  462. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  463. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  464. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  465. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  466. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  467. package/dist/utility/serialization/manager.js +55 -11
  468. package/dist/utility/serialization/manager.js.map +1 -1
  469. package/dist/utility/serialization/scene/animation.js +2 -0
  470. package/dist/utility/serialization/scene/animation.js.map +1 -1
  471. package/dist/utility/serialization/scene/batch.js +2 -0
  472. package/dist/utility/serialization/scene/batch.js.map +1 -1
  473. package/dist/utility/serialization/scene/camera.js +2 -0
  474. package/dist/utility/serialization/scene/camera.js.map +1 -1
  475. package/dist/utility/serialization/scene/common.js.map +1 -1
  476. package/dist/utility/serialization/scene/light.js +2 -0
  477. package/dist/utility/serialization/scene/light.js.map +1 -1
  478. package/dist/utility/serialization/scene/material.js +1 -0
  479. package/dist/utility/serialization/scene/material.js.map +1 -1
  480. package/dist/utility/serialization/scene/mesh.js +2 -0
  481. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  482. package/dist/utility/serialization/scene/node.js +2 -0
  483. package/dist/utility/serialization/scene/node.js.map +1 -1
  484. package/dist/utility/serialization/scene/particle.js +2 -0
  485. package/dist/utility/serialization/scene/particle.js.map +1 -1
  486. package/dist/utility/serialization/scene/primitive.js +1 -0
  487. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  488. package/dist/utility/serialization/scene/scene.js.map +1 -1
  489. package/dist/utility/serialization/scene/sprite.js +2 -0
  490. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  491. package/dist/utility/serialization/scene/terrain.js +2 -0
  492. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  493. package/dist/utility/serialization/scene/text.js +516 -0
  494. package/dist/utility/serialization/scene/text.js.map +1 -0
  495. package/dist/utility/serialization/scene/water.js +2 -0
  496. package/dist/utility/serialization/scene/water.js.map +1 -1
  497. package/dist/utility/serialization/types.js +4 -4
  498. package/dist/utility/serialization/types.js.map +1 -1
  499. package/dist/values.js +1 -5
  500. package/dist/values.js.map +1 -1
  501. package/package.json +3 -3
  502. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  503. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  504. package/dist/animation/spring/spring_bone.js +0 -240
  505. package/dist/animation/spring/spring_bone.js.map +0 -1
  506. package/dist/animation/spring/spring_bone_collider.js +0 -198
  507. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  508. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  509. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  510. package/dist/animation/spring/spring_bone_system.js +0 -328
  511. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  512. package/dist/render/sky_motion_vector.js +0 -85
  513. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipmap.js","sources":["../../../src/render/clipmap.ts"],"sourcesContent":["/**\n * copy from http://git.mikejsavage.co.uk/medfall/file/clipmap.cc.html#l197\n */\n\nimport type { Vector4 } from '@zephyr3d/base';\nimport { AABB, ClipState, Matrix4x4, Vector2, Vector3 } from '@zephyr3d/base';\nimport type { Camera } from '../camera';\nimport { Primitive } from './primitive';\nimport {\n getVertexAttributeFormat,\n getVertexAttributeIndex,\n VERTEX_ATTRIB_POSITION,\n VERTEX_ATTRIB_TEXCOORD0,\n type VertexAttribFormat\n} from '@zephyr3d/device';\n\nconst tmpAABB = new AABB();\nconst tmpV3 = new Vector3();\nconst rotationValues = [0, Math.PI * 1.5, Math.PI * 0.5, Math.PI] as const;\n\n/** @internal */\nexport type PrimitiveInstanceInfo = {\n primitive: Primitive;\n numInstances: number;\n instanceDatas: Float32Array<ArrayBuffer>;\n mipLevels: Float32Array<ArrayBuffer>;\n maxMiplevel: number;\n};\n/** @internal */\nexport interface ClipmapGatherContext {\n camera: Camera;\n gridScale: number;\n minMaxWorldPos: Vector4;\n userData: unknown;\n calcAABB(\n userData: unknown,\n minX: number,\n maxX: number,\n minZ: number,\n maxZ: number,\n outAABB: AABB,\n level: number\n );\n}\n\n/** @internal */\nexport interface ClipmapDrawContext extends ClipmapGatherContext {\n drawPrimitive(\n prim: Primitive,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n level: number\n );\n}\n\n/** @internal */\nexport class Clipmap {\n private readonly _instanceDataPool: Float32Array<ArrayBuffer>[];\n private _instanceDataPoolSize: number;\n private readonly _mipLevelDataPool: Float32Array<ArrayBuffer>[];\n private _mipLevelDataPoolSize: number;\n private readonly _nonInstanceDataPool: Float32Array<ArrayBuffer>[];\n private _nonInstanceDataPoolSize: number;\n private readonly _nonInstanceMipLevelDataPool: Float32Array<ArrayBuffer>[];\n private _nonInstanceMipLevelDataPoolSize: number;\n private readonly _extraInstanceBuffers: VertexAttribFormat[];\n private _tileResolution: number;\n private readonly _maxMipLevels: number;\n\n private _tileMesh: Primitive;\n private _tileMeshLines: Primitive;\n private _tileMeshBBox: AABB;\n\n private _fillerMesh: Primitive;\n private _fillerMeshLines: Primitive;\n private _fillerMeshAABB: AABB;\n\n private _trimMesh: Primitive;\n private _trimMeshLines: Primitive;\n private _trimMeshAABB: AABB;\n\n private _crossMesh: Primitive;\n private _crossMeshLines: Primitive;\n private _crossMeshAABB: AABB;\n\n private _seamMesh: Primitive;\n private _seamMeshLines: Primitive;\n private _seamMeshAABB: AABB;\n\n private _wireframe: boolean;\n\n constructor(resolution: number, extraInstanceBuffers: VertexAttribFormat[], maxMipLevels = 64) {\n if (\n extraInstanceBuffers &&\n extraInstanceBuffers.findIndex(\n (val) =>\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_POSITION ||\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_TEXCOORD0 ||\n getVertexAttributeFormat(val) !== 'f32'\n ) >= 0\n ) {\n throw new Error(\n 'Extra instance buffers must be f32 format and cannot have vertex attribute of POSITOIN and TEXCOORD0'\n );\n }\n this._extraInstanceBuffers = extraInstanceBuffers?.slice() ?? [];\n this._tileResolution = resolution;\n this._maxMipLevels = Math.min(64, Math.max(1, maxMipLevels >>> 0));\n this._instanceDataPool = [];\n this._instanceDataPoolSize = 0;\n this._mipLevelDataPool = [];\n this._mipLevelDataPoolSize = 0;\n this._nonInstanceDataPool = [];\n this._nonInstanceDataPoolSize = 0;\n this._nonInstanceMipLevelDataPool = [];\n this._nonInstanceMipLevelDataPoolSize = 0;\n this._wireframe = false;\n this.generateCrossMesh();\n this.generateFillerMesh();\n this.generateSeamMesh();\n this.generateTileMesh();\n this.generateTrimMesh();\n }\n get wireframe() {\n return this._wireframe;\n }\n set wireframe(val: boolean) {\n this._wireframe = !!val;\n }\n get tileResolution() {\n return this._tileResolution;\n }\n set tileResolution(val: number) {\n if (val !== this._tileResolution) {\n this._tileResolution = val;\n this.generateCrossMesh();\n this.generateFillerMesh();\n this.generateSeamMesh();\n this.generateTileMesh();\n this.generateTrimMesh();\n }\n }\n private allocInstanceBuffer(): Float32Array<ArrayBuffer> {\n if (this._instanceDataPoolSize === 0) {\n const buffer = new Float32Array(this._maxMipLevels * 16 * 4);\n this._instanceDataPool.push(buffer);\n return buffer;\n } else {\n return this._instanceDataPool[--this._instanceDataPoolSize];\n }\n }\n private allocNonInstanceBuffer(x: number, y: number, z: number, w: number): Float32Array<ArrayBuffer> {\n let buffer: Float32Array<ArrayBuffer>;\n if (this._nonInstanceDataPoolSize === 0) {\n buffer = new Float32Array(4);\n this._nonInstanceDataPool.push(buffer);\n } else {\n buffer = this._nonInstanceDataPool[--this._nonInstanceDataPoolSize];\n }\n buffer[0] = x;\n buffer[1] = y;\n buffer[2] = z;\n buffer[3] = w;\n return buffer;\n }\n private allocMipLevelBuffer(): Float32Array<ArrayBuffer> {\n if (this._mipLevelDataPoolSize === 0) {\n const buffer = new Float32Array(this._maxMipLevels * 16);\n this._mipLevelDataPool.push(buffer);\n return buffer;\n } else {\n return this._mipLevelDataPool[--this._mipLevelDataPoolSize];\n }\n }\n private allocNonInstanceMipLevelBuffer(val: number): Float32Array<ArrayBuffer> {\n let buffer: Float32Array<ArrayBuffer>;\n if (this._nonInstanceMipLevelDataPoolSize === 0) {\n buffer = new Float32Array(1);\n this._nonInstanceMipLevelDataPool.push(buffer);\n } else {\n buffer = this._nonInstanceMipLevelDataPool[--this._nonInstanceMipLevelDataPoolSize];\n }\n buffer[0] = val;\n return buffer;\n }\n private patch2d(tileResolution: number, x: number, y: number) {\n return y * (tileResolution + 1) + x;\n }\n private calcAABB(vertices: Float32Array): AABB {\n let maxX = -Number.MAX_VALUE;\n let maxY = -Number.MAX_VALUE;\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n for (let i = 0; i < vertices.length / 3; i++) {\n const x = vertices[i * 3 + 0];\n const y = vertices[i * 3 + 1];\n if (x > maxX) {\n maxX = x;\n }\n if (x < minX) {\n minX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (y < minY) {\n minY = y;\n }\n }\n return new AABB(new Vector3(minX, minY, 0), new Vector3(maxX, maxY, 0));\n }\n generateTileMesh() {\n this._tileMesh?.dispose();\n this._tileMesh = new Primitive();\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * patchVertResolution * 3);\n let n = 0;\n for (let y = 0; y < patchVertResolution; y++) {\n for (let x = 0; x < patchVertResolution; x++) {\n vertices[n++] = x;\n vertices[n++] = y;\n vertices[n++] = 0;\n }\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * this._tileResolution * 6);\n for (let y = 0; y < this._tileResolution; y++) {\n for (let x = 0; x < this._tileResolution; x++) {\n indices[n++] = this.patch2d(this._tileResolution, x, y);\n indices[n++] = this.patch2d(this._tileResolution, x, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x, y);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y);\n }\n }\n this._tileMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._tileMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._tileMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._tileMesh.createAndSetIndexBuffer(indices);\n this._tileMesh.indexStart = 0;\n this._tileMesh.indexCount = indices.length;\n this._tileMesh.primitiveType = 'triangle-list';\n this._tileMeshBBox = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._tileMeshLines?.dispose();\n this._tileMeshLines = new Primitive();\n this._tileMeshLines.setVertexBuffer(this._tileMesh.getVertexBuffer('position'));\n this._tileMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._tileMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._tileMeshLines.createAndSetIndexBuffer(indicesLines);\n this._tileMeshLines.indexStart = 0;\n this._tileMeshLines.indexCount = indicesLines.length;\n this._tileMeshLines.primitiveType = 'line-list';\n }\n generateFillerMesh() {\n this._fillerMesh?.dispose();\n this._fillerMesh = new Primitive();\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\n let n = 0;\n const offset = this._tileResolution;\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 1;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = 1;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = -offset - i;\n vertices[n++] = 1;\n vertices[n++] = 0;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = 0;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n vertices[n++] = 1;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * 24);\n for (let i = 0; i < this._tileResolution * 4; i++) {\n const arm = (i / this._tileResolution) >> 0;\n const bl = (arm + i) * 2 + 0;\n const br = (arm + i) * 2 + 1;\n const tl = (arm + i) * 2 + 2;\n const tr = (arm + i) * 2 + 3;\n if (arm % 2 === 0) {\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = bl;\n indices[n++] = bl;\n indices[n++] = tr;\n indices[n++] = tl;\n } else {\n indices[n++] = br;\n indices[n++] = tl;\n indices[n++] = bl;\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = tl;\n }\n }\n this._fillerMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._fillerMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._fillerMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._fillerMesh.createAndSetIndexBuffer(indices);\n this._fillerMesh.indexStart = 0;\n this._fillerMesh.indexCount = indices.length;\n this._fillerMesh.primitiveType = 'triangle-list';\n this._fillerMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._fillerMeshLines?.dispose();\n this._fillerMeshLines = new Primitive();\n this._fillerMeshLines.setVertexBuffer(this._fillerMesh.getVertexBuffer('position'));\n this._fillerMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._fillerMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._fillerMeshLines.createAndSetIndexBuffer(indicesLines);\n this._fillerMeshLines.indexStart = 0;\n this._fillerMeshLines.indexCount = indicesLines.length;\n this._fillerMeshLines.primitiveType = 'line-list';\n }\n generateTrimMesh() {\n this._trimMesh?.dispose();\n this._trimMesh = new Primitive();\n const clipmapVertResolution = this._tileResolution * 4 + 2;\n const vertices = new Float32Array((clipmapVertResolution * 2 + 1) * 2 * 3);\n let n = 0;\n const d = 0.5 * (clipmapVertResolution + 1);\n for (let i = 0; i < clipmapVertResolution + 1; i++) {\n vertices[n++] = 0 - d;\n vertices[n++] = clipmapVertResolution - i - d;\n vertices[n++] = 0;\n vertices[n++] = 1 - d;\n vertices[n++] = clipmapVertResolution - i - d;\n vertices[n++] = 0;\n }\n const startOfHorizonal = n / 3;\n for (let i = 0; i < clipmapVertResolution; i++) {\n vertices[n++] = i + 1 - d;\n vertices[n++] = 0 - d;\n vertices[n++] = 0;\n vertices[n++] = i + 1 - d;\n vertices[n++] = 1 - d;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array((clipmapVertResolution * 2 - 1) * 6);\n for (let i = 0; i < clipmapVertResolution; i++) {\n indices[n++] = (i + 0) * 2 + 1;\n indices[n++] = (i + 1) * 2 + 0;\n indices[n++] = (i + 0) * 2 + 0;\n indices[n++] = (i + 1) * 2 + 1;\n indices[n++] = (i + 1) * 2 + 0;\n indices[n++] = (i + 0) * 2 + 1;\n }\n for (let i = 0; i < clipmapVertResolution - 1; i++) {\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 1;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\n }\n this._trimMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._trimMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._trimMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._trimMesh.createAndSetIndexBuffer(indices);\n this._trimMesh.indexStart = 0;\n this._trimMesh.indexCount = indices.length;\n this._trimMesh.primitiveType = 'triangle-list';\n this._trimMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._trimMeshLines?.dispose();\n this._trimMeshLines = new Primitive();\n this._trimMeshLines.setVertexBuffer(this._trimMesh.getVertexBuffer('position'));\n this._trimMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._trimMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._trimMeshLines.createAndSetIndexBuffer(indicesLines);\n this._trimMeshLines.indexStart = 0;\n this._trimMeshLines.indexCount = indicesLines.length;\n this._trimMeshLines.primitiveType = 'line-list';\n }\n generateCrossMesh() {\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\n let n = 0;\n for (let i = 0; i < patchVertResolution * 2; i++) {\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 1;\n vertices[n++] = 0;\n }\n const startOfVertical = n / 3;\n for (let i = 0; i < patchVertResolution * 2; i++) {\n vertices[n++] = 0;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n vertices[n++] = 1;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * 24 + 6);\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\n const bl = i * 2 + 0;\n const br = i * 2 + 1;\n const tl = i * 2 + 2;\n const tr = i * 2 + 3;\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = bl;\n indices[n++] = bl;\n indices[n++] = tr;\n indices[n++] = tl;\n }\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\n if (i === this._tileResolution) {\n continue;\n }\n const bl = i * 2 + 0;\n const br = i * 2 + 1;\n const tl = i * 2 + 2;\n const tr = i * 2 + 3;\n indices[n++] = startOfVertical + br;\n indices[n++] = startOfVertical + bl;\n indices[n++] = startOfVertical + tr;\n indices[n++] = startOfVertical + bl;\n indices[n++] = startOfVertical + tl;\n indices[n++] = startOfVertical + tr;\n }\n this._crossMesh?.dispose();\n this._crossMesh = new Primitive();\n this._crossMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._crossMesh.createAndSetVertexBuffer(\n 'tex0_f32x4',\n this.allocNonInstanceBuffer(0, 0, 0, 0),\n 'instance'\n );\n this._nonInstanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._crossMesh.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\n this._nonInstanceDataPoolSize++;\n }\n this._crossMesh.createAndSetIndexBuffer(indices);\n this._crossMesh.indexStart = 0;\n this._crossMesh.indexCount = indices.length;\n this._crossMesh.primitiveType = 'triangle-list';\n this._crossMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._crossMeshLines?.dispose();\n this._crossMeshLines = new Primitive();\n this._crossMeshLines.setVertexBuffer(this._crossMesh.getVertexBuffer('position'));\n this._crossMeshLines.createAndSetVertexBuffer(\n 'tex0_f32x4',\n this.allocNonInstanceBuffer(0, 0, 0, 0),\n 'instance'\n );\n this._nonInstanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._crossMeshLines.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\n this._nonInstanceDataPoolSize++;\n }\n this._crossMeshLines.createAndSetIndexBuffer(indicesLines);\n this._crossMeshLines.indexStart = 0;\n this._crossMeshLines.indexCount = indicesLines.length;\n this._crossMeshLines.primitiveType = 'line-list';\n }\n generateSeamMesh() {\n this._seamMesh?.dispose();\n this._seamMesh = new Primitive();\n const clipmapVertResolution = this._tileResolution * 4 + 2;\n const vertices = new Float32Array(clipmapVertResolution * 4 * 3);\n for (let i = 0; i < clipmapVertResolution; i++) {\n vertices[(clipmapVertResolution * 0 + i) * 3 + 0] = i;\n vertices[(clipmapVertResolution * 0 + i) * 3 + 1] = 0;\n vertices[(clipmapVertResolution * 0 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 0] = clipmapVertResolution;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 1] = i;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 0] = clipmapVertResolution - i;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 1] = clipmapVertResolution;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 0] = 0;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 1] = clipmapVertResolution - i;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 2] = 0;\n }\n const indices = new Uint16Array(clipmapVertResolution * 6);\n let n = 0;\n for (let i = 0; i < clipmapVertResolution * 4; i += 2) {\n indices[n++] = i + 1;\n indices[n++] = i + 2;\n indices[n++] = i;\n }\n indices[indices.length - 1] = 0;\n this._seamMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._seamMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._seamMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._seamMesh.createAndSetIndexBuffer(indices);\n this._seamMesh.indexStart = 0;\n this._seamMesh.indexCount = indices.length;\n this._seamMesh.primitiveType = 'triangle-list';\n this._seamMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._seamMeshLines?.dispose();\n this._seamMeshLines = new Primitive();\n this._seamMeshLines.setVertexBuffer(this._seamMesh.getVertexBuffer('position'));\n this._seamMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._seamMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._seamMeshLines.createAndSetIndexBuffer(indicesLines);\n this._seamMeshLines.indexStart = 0;\n this._seamMeshLines.indexCount = indicesLines.length;\n this._seamMeshLines.primitiveType = 'line-list';\n }\n private intervalsOverlap(a0: number, a1: number, b0: number, b1: number) {\n return a0 <= b1 && b0 <= a1;\n }\n private updateAABB(\n aabb: AABB,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n outAABB: AABB\n ) {\n if (!rotation) {\n tmpAABB.minPoint.set(aabb.minPoint);\n tmpAABB.maxPoint.set(aabb.maxPoint);\n } else {\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\n }\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\n if (minX < outAABB.minPoint.x) {\n outAABB.minPoint.x = minX;\n }\n if (maxX > outAABB.maxPoint.x) {\n outAABB.maxPoint.x = maxX;\n }\n if (minZ < outAABB.minPoint.z) {\n outAABB.minPoint.z = minZ;\n }\n if (maxZ > outAABB.maxPoint.z) {\n outAABB.maxPoint.z = maxZ;\n }\n }\n private visible(\n ctx: ClipmapGatherContext,\n aabb: AABB,\n camera: Camera,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n level: number\n ) {\n if (!rotation) {\n tmpAABB.minPoint.set(aabb.minPoint);\n tmpAABB.maxPoint.set(aabb.maxPoint);\n } else {\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\n }\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\n ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB, level);\n return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;\n }\n calcLevelAABB(camera: Camera, minMaxWorldPos: Vector4, gridScale: number): AABB[] {\n const mipLevels = this.calcMipLevels(camera, minMaxWorldPos, gridScale);\n camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / gridScale;\n const posY = tmpV3.z / gridScale;\n\n const outAABB: AABB[] = [];\n for (let i = 0; i < mipLevels; i++) {\n const aabb = new AABB();\n aabb.beginExtend();\n outAABB.push(aabb);\n }\n\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n\n // cross\n this.updateAABB(this._crossMeshAABB, null, snappedPos, 1, gridScale, outAABB[0]);\n\n for (let l = 0; l < mipLevels; l++) {\n const aabb = outAABB[l];\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n this.updateAABB(this._tileMeshBBox, null, offset, scale, gridScale, aabb);\n }\n }\n // draw filler\n this.updateAABB(this._fillerMeshAABB, null, snappedPos, scale, gridScale, aabb);\n\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n this.updateAABB(this._trimMeshAABB, rotationValues[r], tileCentre, scale, gridScale, aabb);\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n this.updateAABB(this._seamMeshAABB, null, nextBase, scale, gridScale, aabb);\n }\n return outAABB;\n }\n private calcMipLevels(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\n camera.getWorldPosition(tmpV3);\n const distX = Math.max(Math.abs(tmpV3.x - minMaxWorldPos.x), Math.abs(tmpV3.x - minMaxWorldPos.z));\n const distY = Math.max(Math.abs(tmpV3.z - minMaxWorldPos.y), Math.abs(tmpV3.z - minMaxWorldPos.w));\n const maxDist = Math.min(Math.max(distX, distY), camera.getFarPlane());\n return Math.min(\n Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * gridScale))), 0) + 1,\n this._maxMipLevels\n );\n }\n private addInstance(\n info: PrimitiveInstanceInfo,\n rotation: number,\n offsetX: number,\n offsetY: number,\n scale: number,\n mipLevel: number\n ) {\n info.mipLevels[info.numInstances] = mipLevel;\n info.instanceDatas[info.numInstances * 4 + 0] = rotation;\n info.instanceDatas[info.numInstances * 4 + 1] = scale;\n info.instanceDatas[info.numInstances * 4 + 2] = offsetX;\n info.instanceDatas[info.numInstances * 4 + 3] = offsetY;\n info.maxMiplevel = mipLevel;\n info.numInstances++;\n }\n\n gather(context: ClipmapGatherContext): PrimitiveInstanceInfo[] {\n this._instanceDataPoolSize = this._instanceDataPool.length;\n this._mipLevelDataPoolSize = this._mipLevelDataPool.length;\n this._nonInstanceDataPoolSize = this._nonInstanceDataPool.length;\n this._nonInstanceMipLevelDataPoolSize = this._nonInstanceMipLevelDataPool.length;\n const renderData: PrimitiveInstanceInfo[] = [];\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\n context.camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / context.gridScale;\n const posY = tmpV3.z / context.gridScale;\n\n // draw cross\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n if (\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\n ) {\n const crossPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._crossMeshLines : this._crossMesh,\n numInstances: 1,\n instanceDatas: this.allocNonInstanceBuffer(rotationValues[0], 1, snappedPos.x, snappedPos.y),\n mipLevels: this.allocNonInstanceMipLevelBuffer(0),\n maxMiplevel: 0\n };\n renderData.push(crossPrimitives);\n }\n\n const tilePrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._tileMeshLines : this._tileMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const fillerPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._fillerMeshLines : this._fillerMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const trimPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._trimMeshLines : this._trimMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const seamPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._seamMeshLines : this._seamMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n\n for (let l = 0; l < mipLevels; l++) {\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n if (\n this.intervalsOverlap(\n offset.x * context.gridScale,\n (offset.x + tileSize.x) * context.gridScale,\n context.minMaxWorldPos.x,\n context.minMaxWorldPos.z\n ) &&\n this.intervalsOverlap(\n offset.y * context.gridScale,\n (offset.y + tileSize.y) * context.gridScale,\n context.minMaxWorldPos.y,\n context.minMaxWorldPos.w\n )\n ) {\n if (\n this.visible(\n context,\n this._tileMeshBBox,\n context.camera,\n null,\n offset,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(tilePrimitives, rotationValues[0], offset.x, offset.y, scale, l);\n }\n }\n }\n }\n // draw filler\n if (\n this.visible(\n context,\n this._fillerMeshAABB,\n context.camera,\n null,\n snappedPos,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(fillerPrimitives, rotationValues[0], snappedPos.x, snappedPos.y, scale, l);\n }\n\n if (l !== mipLevels - 1) {\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n if (\n this.visible(\n context,\n this._trimMeshAABB,\n context.camera,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(trimPrimitives, rotationValues[r], tileCentre.x, tileCentre.y, scale, l);\n }\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n if (\n this.visible(\n context,\n this._seamMeshAABB,\n context.camera,\n null,\n nextBase,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(seamPrimitives, rotationValues[0], nextBase.x, nextBase.y, scale, l);\n }\n }\n }\n if (tilePrimitives.numInstances > 0) {\n renderData.push(tilePrimitives);\n }\n if (fillerPrimitives.numInstances > 0) {\n renderData.push(fillerPrimitives);\n }\n if (trimPrimitives.numInstances > 0) {\n renderData.push(trimPrimitives);\n }\n if (seamPrimitives.numInstances > 0) {\n renderData.push(seamPrimitives);\n }\n for (const info of renderData) {\n info.primitive\n .getVertexBuffer('texCoord0')\n .bufferSubData(0, info.instanceDatas, 0, info.numInstances * 4);\n }\n return renderData;\n }\n draw(context: ClipmapDrawContext): number {\n let drawn = 0;\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\n context.camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / context.gridScale;\n const posY = tmpV3.z / context.gridScale;\n\n // draw cross\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n if (\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\n ) {\n context.drawPrimitive(\n this._wireframe ? this._crossMeshLines : this._crossMesh,\n rotationValues[0],\n snappedPos,\n 1,\n context.gridScale,\n 0\n );\n drawn++;\n }\n\n for (let l = 0; l < mipLevels; l++) {\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n if (\n this.intervalsOverlap(\n offset.x * context.gridScale,\n (offset.x + tileSize.x) * context.gridScale,\n context.minMaxWorldPos.x,\n context.minMaxWorldPos.z\n ) &&\n this.intervalsOverlap(\n offset.y * context.gridScale,\n (offset.y + tileSize.y) * context.gridScale,\n context.minMaxWorldPos.y,\n context.minMaxWorldPos.w\n )\n ) {\n if (\n this.visible(\n context,\n this._tileMeshBBox,\n context.camera,\n null,\n offset,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._tileMeshLines : this._tileMesh,\n rotationValues[0],\n offset,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n }\n }\n }\n // draw filler\n if (\n this.visible(\n context,\n this._fillerMeshAABB,\n context.camera,\n null,\n snappedPos,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._fillerMeshLines : this._fillerMesh,\n rotationValues[0],\n snappedPos,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n\n if (l !== mipLevels - 1) {\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n if (\n this.visible(\n context,\n this._trimMeshAABB,\n context.camera,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._trimMeshLines : this._trimMesh,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n if (\n this.visible(\n context,\n this._seamMeshAABB,\n context.camera,\n null,\n nextBase,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._seamMeshLines : this._seamMesh,\n rotationValues[0],\n nextBase,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n }\n }\n return drawn;\n }\n dispose() {\n this._crossMesh.dispose();\n this._crossMesh = null;\n this._crossMeshLines.dispose();\n this._crossMeshLines = null;\n this._fillerMesh.dispose();\n this._fillerMesh = null;\n this._fillerMeshLines.dispose();\n this._fillerMeshLines = null;\n this._seamMesh.dispose();\n this._seamMesh = null;\n this._seamMeshLines.dispose();\n this._seamMeshLines = null;\n this._trimMesh.dispose();\n this._trimMesh = null;\n this._trimMeshLines.dispose();\n this._trimMeshLines = null;\n this._tileMesh.dispose();\n this._tileMesh = null;\n this._tileMeshLines.dispose();\n this._tileMeshLines = null;\n }\n}\n"],"names":["tmpAABB","AABB","tmpV3","Vector3","rotationValues","Math","PI","Clipmap","_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","crossPrimitives","primitive","tilePrimitives","fillerPrimitives","trimPrimitives","seamPrimitives","bufferSubData","draw","drawn","drawPrimitive"],"mappings":"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"}
@@ -0,0 +1,333 @@
1
+ import { Vector4, Matrix4x4 } from '@zephyr3d/base';
2
+ import { Application } from '../app/app.js';
3
+ import { MAX_CLUSTERED_LIGHTS } from '../values.js';
4
+ import { ShaderHelper } from '../material/shader/helper.js';
5
+
6
+ class ClusteredLight {
7
+ _tileCountX;
8
+ _tileCountY;
9
+ _tileCountZ;
10
+ _lights;
11
+ _lightIndexTexture;
12
+ _lightIndexFramebuffer;
13
+ _lightIndexProgram;
14
+ _bindGroup;
15
+ _lightIndexVertexLayout;
16
+ _lightIndexRenderStates;
17
+ _lightBuffer;
18
+ _sizeParam;
19
+ _countParam;
20
+ _clusterParam;
21
+ constructor(){
22
+ this._tileCountX = 16;
23
+ this._tileCountY = 16;
24
+ this._tileCountZ = 32;
25
+ this._lights = new Float32Array(12 * (MAX_CLUSTERED_LIGHTS + 1));
26
+ this._lightIndexTexture = null;
27
+ this._lightIndexFramebuffer = null;
28
+ this._lightIndexProgram = null;
29
+ this._lightBuffer = null;
30
+ this._bindGroup = null;
31
+ this._lightIndexVertexLayout = null;
32
+ this._lightIndexRenderStates = null;
33
+ this._sizeParam = new Vector4();
34
+ this._countParam = new Int32Array(4);
35
+ this._clusterParam = new Vector4();
36
+ }
37
+ get lightBuffer() {
38
+ return this._lightBuffer;
39
+ }
40
+ get clusterParam() {
41
+ return this._clusterParam;
42
+ }
43
+ get countParam() {
44
+ return this._countParam;
45
+ }
46
+ get lightIndexTexture() {
47
+ return this._lightIndexTexture;
48
+ }
49
+ createVertexLayout(device, textureWidth, textureHeight) {
50
+ let vb;
51
+ if (device.type === 'webgl') {
52
+ const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 3);
53
+ for(let i = 0; i < vertices.length; i++){
54
+ const ix = i % textureWidth;
55
+ const iy = Math.floor(i / textureWidth);
56
+ vertices[i * 3 + 0] = 2 * (ix + 0.5) / textureWidth - 1;
57
+ vertices[i * 3 + 1] = 2 * (iy + 0.5) / textureHeight - 1;
58
+ vertices[i * 3 + 2] = i;
59
+ }
60
+ vb = device.createVertexBuffer('position_f32x3', vertices);
61
+ } else {
62
+ const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 2);
63
+ for(let i = 0; i < vertices.length; i++){
64
+ const ix = i % textureWidth;
65
+ const iy = Math.floor(i / textureWidth);
66
+ vertices[i * 2 + 0] = 2 * (ix + 0.5) / textureWidth - 1;
67
+ vertices[i * 2 + 1] = 2 * (iy + 0.5) / textureHeight - 1;
68
+ }
69
+ vb = device.createVertexBuffer('position_f32x2', vertices);
70
+ }
71
+ this._lightIndexVertexLayout = device.createVertexLayout({
72
+ vertexBuffers: [
73
+ {
74
+ buffer: vb
75
+ }
76
+ ]
77
+ });
78
+ }
79
+ createRenderState(device) {
80
+ this._lightIndexRenderStates = device.createRenderStateSet();
81
+ this._lightIndexRenderStates.useDepthState().enableTest(false).enableWrite(false);
82
+ this._lightIndexRenderStates.useRasterizerState().setCullMode('none');
83
+ }
84
+ createProgram(device) {
85
+ const webgl1 = device.type === 'webgl';
86
+ this._lightIndexProgram = device.buildRenderProgram({
87
+ vertex (pb) {
88
+ this.$inputs.pos = (webgl1 ? pb.vec3() : pb.vec2()).attrib('position');
89
+ this.$outputs.value = webgl1 ? pb.vec4() : pb.uvec4();
90
+ this.invProjMatrix = pb.mat4().uniform(0);
91
+ this.viewMatrix = pb.mat4().uniform(0);
92
+ this.sizeParam = pb.vec4().uniform(0);
93
+ this.countParam = pb.ivec4().uniform(0);
94
+ this[ShaderHelper.getLightBufferUniformName()] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 3]().uniformBuffer(0);
95
+ pb.func('lineIntersectionToZPlane', [
96
+ pb.vec3('a'),
97
+ pb.vec3('b'),
98
+ pb.float('zDistance')
99
+ ], function() {
100
+ this.$l.normal = pb.vec3(0, 0, 1);
101
+ this.$l.ab = pb.sub(this.b, this.a);
102
+ this.$l.t = pb.div(pb.sub(this.zDistance, pb.dot(this.normal, this.a)), pb.dot(this.normal, this.ab));
103
+ this.$return(pb.add(this.a, pb.mul(this.t, this.ab)));
104
+ });
105
+ pb.func('clipToView', [
106
+ pb.vec4('clip')
107
+ ], function() {
108
+ this.$l.view = pb.mul(this.invProjMatrix, this.clip);
109
+ this.$return(pb.div(this.view, this.view.w));
110
+ });
111
+ pb.func('screenToView', [
112
+ pb.vec4('screen')
113
+ ], function() {
114
+ this.$l.texCoord = pb.div(this.screen.xy, this.sizeParam.xy);
115
+ this.$l.clip = pb.vec4(pb.sub(pb.mul(pb.vec2(this.texCoord.x, pb.sub(1, this.texCoord.y)), 2), pb.vec2(1)), this.screen.z, this.screen.w);
116
+ this.$return(this.clipToView(this.clip));
117
+ });
118
+ pb.func('sphereIntersectsAABB', [
119
+ pb.vec4('sphere'),
120
+ pb.vec3('aabbMin'),
121
+ pb.vec3('aabbMax')
122
+ ], function() {
123
+ this.$l.dmin = pb.float(0);
124
+ this.$if(pb.lessThanEqual(this.sphere.w, 0), function() {
125
+ this.$return(true);
126
+ });
127
+ this.$for(pb.int('i'), 0, 3, function() {
128
+ this.$if(pb.lessThan(this.sphere.at(this.i), this.aabbMin.at(this.i)), function() {
129
+ this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMin.at(this.i));
130
+ this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));
131
+ }).$elseif(pb.greaterThan(this.sphere.at(this.i), this.aabbMax.at(this.i)), function() {
132
+ this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMax.at(this.i));
133
+ this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));
134
+ });
135
+ });
136
+ this.$if(pb.lessThanEqual(this.dmin, pb.mul(this.sphere.w, this.sphere.w)), function() {
137
+ this.$return(true);
138
+ });
139
+ this.$return(false);
140
+ });
141
+ pb.main(function() {
142
+ if (pb.getDevice().type !== 'webgpu') {
143
+ this.$builtins.pointSize = 1;
144
+ }
145
+ this.$builtins.position = pb.vec4(this.$inputs.pos.xy, 0, 1);
146
+ if (pb.getDevice().type === 'webgpu') {
147
+ this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));
148
+ }
149
+ this.$l.tileIndex = webgl1 ? pb.int(this.$inputs.pos.z) : pb.int(this.$builtins.vertexIndex);
150
+ this.$l.tileSize = pb.div(this.sizeParam.xy, pb.vec2(this.countParam.xy));
151
+ this.$l.zIndex = pb.div(this.tileIndex, pb.mul(this.countParam.x, this.countParam.y));
152
+ this.$l.yIndex = pb.div(pb.sub(this.tileIndex, pb.mul(this.zIndex, this.countParam.x, this.countParam.y)), this.countParam.x);
153
+ this.$l.xIndex = pb.sub(this.tileIndex, pb.add(pb.mul(this.zIndex, this.countParam.x, this.countParam.y), pb.mul(this.yIndex, this.countParam.x)));
154
+ this.$l.maxPoint_sS = pb.vec4(pb.mul(pb.vec2(pb.float(pb.add(this.xIndex, 1)), pb.float(pb.add(this.yIndex, 1))), this.tileSize), 0.0, 1.0);
155
+ this.$l.minPoint_sS = pb.vec4(pb.mul(pb.vec2(pb.float(this.xIndex), pb.float(this.yIndex)), this.tileSize), 0.0, 1.0);
156
+ this.$l.maxPoint_vS = this.screenToView(this.maxPoint_sS).xyz;
157
+ this.$l.minPoint_vS = this.screenToView(this.minPoint_sS).xyz;
158
+ this.$l.tileNear = pb.mul(pb.neg(this.sizeParam.z), pb.pow(pb.div(this.sizeParam.w, this.sizeParam.z), pb.div(pb.float(this.zIndex), pb.float(this.countParam.z))));
159
+ this.$l.tileFar = pb.mul(pb.neg(this.sizeParam.z), pb.pow(pb.div(this.sizeParam.w, this.sizeParam.z), pb.div(pb.add(pb.float(this.zIndex), 1), pb.float(this.countParam.z))));
160
+ this.$l.eyePos = pb.vec3(0);
161
+ this.$l.minPointNear = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileNear);
162
+ this.$l.minPointFar = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileFar);
163
+ this.$l.maxPointNear = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileNear);
164
+ this.$l.maxPointFar = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileFar);
165
+ this.$l.aabbMin = pb.min(pb.min(this.minPointNear, this.minPointFar), pb.min(this.maxPointNear, this.maxPointFar));
166
+ this.$l.aabbMax = pb.max(pb.max(this.minPointNear, this.minPointFar), pb.max(this.maxPointNear, this.maxPointFar));
167
+ this.$l.n = pb.int(0);
168
+ if (webgl1) {
169
+ this.$l.lightIndices = pb.float[8]();
170
+ this.$for(pb.int('i'), 0, 8, function() {
171
+ this.lightIndices.setAt(this.i, 0);
172
+ });
173
+ this.$for(pb.int('i'), 1, 256, function() {
174
+ this.$if(pb.equal(this.i, this.countParam.w), function() {
175
+ this.$break();
176
+ });
177
+ this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));
178
+ this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));
179
+ this.$l.lightPos.w = this.light.w;
180
+ this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function() {
181
+ this.$for(pb.int('j'), 0, 8, function() {
182
+ this.$if(pb.equal(this.j, this.n), function() {
183
+ this.lightIndices.setAt(this.j, pb.float(this.i));
184
+ this.n = pb.add(this.n, 1);
185
+ this.$break();
186
+ });
187
+ });
188
+ this.$if(pb.equal(this.n, 8), function() {
189
+ this.$break();
190
+ });
191
+ });
192
+ });
193
+ this.$outputs.value.r = pb.add(pb.mul(this.lightIndices[0], 256), this.lightIndices[1]);
194
+ this.$outputs.value.g = pb.add(pb.mul(this.lightIndices[2], 256), this.lightIndices[3]);
195
+ this.$outputs.value.b = pb.add(pb.mul(this.lightIndices[4], 256), this.lightIndices[5]);
196
+ this.$outputs.value.a = pb.add(pb.mul(this.lightIndices[6], 256), this.lightIndices[7]);
197
+ } else {
198
+ this.$l.lightIndex = [
199
+ pb.uint(0),
200
+ pb.uint(0),
201
+ pb.uint(0),
202
+ pb.uint(0),
203
+ pb.uint(0),
204
+ pb.uint(0),
205
+ pb.uint(0),
206
+ pb.uint(0),
207
+ pb.uint(0),
208
+ pb.uint(0),
209
+ pb.uint(0),
210
+ pb.uint(0),
211
+ pb.uint(0),
212
+ pb.uint(0),
213
+ pb.uint(0),
214
+ pb.uint(0)
215
+ ];
216
+ this.$for(pb.uint('i'), 1, pb.uint(this.countParam.w), function() {
217
+ this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));
218
+ this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));
219
+ this.$l.lightPos.w = this.light.w;
220
+ this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function() {
221
+ this.lightIndex.setAt(this.n, this.i);
222
+ this.n = pb.add(this.n, 1);
223
+ this.$if(pb.equal(this.n, 16), function() {
224
+ this.$break();
225
+ });
226
+ });
227
+ });
228
+ this.$l.r = pb.add(pb.sal(this.lightIndex[0], 24), pb.sal(this.lightIndex[1], 16), pb.sal(this.lightIndex[2], 8), this.lightIndex[3]);
229
+ this.$l.g = pb.add(pb.sal(this.lightIndex[4], 24), pb.sal(this.lightIndex[5], 16), pb.sal(this.lightIndex[6], 8), this.lightIndex[7]);
230
+ this.$l.b = pb.add(pb.sal(this.lightIndex[8], 24), pb.sal(this.lightIndex[9], 16), pb.sal(this.lightIndex[10], 8), this.lightIndex[11]);
231
+ this.$l.a = pb.add(pb.sal(this.lightIndex[12], 24), pb.sal(this.lightIndex[13], 16), pb.sal(this.lightIndex[14], 8), this.lightIndex[15]);
232
+ this.$outputs.value = pb.uvec4(this.r, this.g, this.b, this.a);
233
+ }
234
+ });
235
+ },
236
+ fragment (pb) {
237
+ this.$outputs.color = webgl1 ? pb.vec4() : pb.uvec4();
238
+ pb.main(function() {
239
+ this.$outputs.color = this.$inputs.value;
240
+ });
241
+ }
242
+ });
243
+ this._bindGroup = device.createBindGroup(this._lightIndexProgram.bindGroupLayouts[0]);
244
+ this._lightBuffer?.dispose();
245
+ const lightBufferType = this._lightIndexProgram.getBindingInfo(ShaderHelper.getLightBufferUniformName()).type;
246
+ this._lightBuffer = device.createStructuredBuffer(lightBufferType, {
247
+ usage: 'uniform'
248
+ });
249
+ }
250
+ createLightIndexTexture(device) {
251
+ const exp = Math.log2(this._tileCountX * this._tileCountY * this._tileCountZ);
252
+ const a = exp + 1 >>> 1;
253
+ const b = exp - a;
254
+ const textureWidth = 2 << a - 1;
255
+ const textureHeight = 2 << b - 1;
256
+ if (textureWidth * textureHeight !== this._tileCountX * this._tileCountY * this._tileCountZ) {
257
+ throw new Error('Internal error');
258
+ }
259
+ this._lightIndexTexture = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rgba32ui', textureWidth, textureHeight, {
260
+ samplerOptions: {
261
+ mipFilter: 'none'
262
+ }
263
+ });
264
+ this._lightIndexTexture.name = 'ClusterLightIndex';
265
+ this._lightIndexFramebuffer?.dispose();
266
+ this._lightIndexFramebuffer = device.createFrameBuffer([
267
+ this._lightIndexTexture
268
+ ], null);
269
+ }
270
+ calculateLightIndex(camera, renderQueue) {
271
+ const numLights = this.getVisibleLights(renderQueue, this._lights);
272
+ const device = Application.instance.device;
273
+ if (!this._lightIndexTexture) {
274
+ this.createLightIndexTexture(device);
275
+ }
276
+ if (!this._lightIndexProgram) {
277
+ this.createProgram(device);
278
+ }
279
+ if (!this._lightIndexVertexLayout) {
280
+ this.createVertexLayout(device, this._lightIndexTexture.width, this._lightIndexTexture.height);
281
+ }
282
+ if (!this._lightIndexRenderStates) {
283
+ this.createRenderState(device);
284
+ }
285
+ const viewport = device.getViewport();
286
+ const vw = device.screenToDevice(viewport.width);
287
+ const vh = device.screenToDevice(viewport.height);
288
+ const scale = this._tileCountZ / Math.log2(camera.getFarPlane() / camera.getNearPlane());
289
+ const bias = -(this._tileCountZ * Math.log2(camera.getNearPlane()) / Math.log2(camera.getFarPlane() / camera.getNearPlane()));
290
+ this._clusterParam.setXYZW(vw, vh, scale, bias);
291
+ device.pushDeviceStates();
292
+ device.setFramebuffer(this._lightIndexFramebuffer);
293
+ if (numLights > 0) {
294
+ if (this._lightBuffer.disposed) {
295
+ this._lightBuffer.reload();
296
+ }
297
+ this._lightBuffer.bufferSubData(0, this._lights);
298
+ this._sizeParam.setXYZW(vw, vh, camera.getNearPlane(), camera.getFarPlane());
299
+ this._countParam[0] = this._tileCountX;
300
+ this._countParam[1] = this._tileCountY;
301
+ this._countParam[2] = this._tileCountZ;
302
+ this._countParam[3] = numLights + 1;
303
+ this._bindGroup.setValue('invProjMatrix', Matrix4x4.invert(camera.getProjectionMatrix()));
304
+ this._bindGroup.setValue('viewMatrix', camera.viewMatrix);
305
+ this._bindGroup.setValue('sizeParam', this._sizeParam);
306
+ this._bindGroup.setValue('countParam', this._countParam);
307
+ this._bindGroup.setBuffer(ShaderHelper.getLightBufferUniformName(), this._lightBuffer);
308
+ device.setProgram(this._lightIndexProgram);
309
+ device.setVertexLayout(this._lightIndexVertexLayout);
310
+ device.setBindGroup(0, this._bindGroup);
311
+ const savedRS = device.getRenderStates();
312
+ device.setRenderStates(this._lightIndexRenderStates);
313
+ device.draw('point-list', 0, this._tileCountX * this._tileCountY * this._tileCountZ);
314
+ device.setRenderStates(savedRS);
315
+ } else {
316
+ device.clearFrameBuffer(new Vector4(0, 0, 0, 0), 1, 0);
317
+ }
318
+ device.popDeviceStates();
319
+ }
320
+ getVisibleLights(renderQueue, lights) {
321
+ const numLights = Math.min(renderQueue.unshadowedLights.length, MAX_CLUSTERED_LIGHTS);
322
+ for(let i = 1; i <= numLights; i++){
323
+ const light = renderQueue.unshadowedLights[i - 1];
324
+ lights.set(light.positionAndRange, i * 12);
325
+ lights.set(light.directionAndCutoff, i * 12 + 4);
326
+ lights.set(light.diffuseAndIntensity, i * 12 + 8);
327
+ }
328
+ return numLights;
329
+ }
330
+ }
331
+
332
+ export { ClusteredLight };
333
+ //# sourceMappingURL=cluster_light.js.map