@zephyr3d/scene 0.9.5 → 0.9.7

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 (621) hide show
  1. package/dist/animation/joint_dynamics/controller.js +92 -32
  2. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  3. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  4. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/joint_dynamics/solver.js +71 -27
  8. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  9. package/dist/animation/joint_dynamics_modifier.js +21 -20
  10. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  11. package/dist/animation/skeleton.js +7 -10
  12. package/dist/animation/skeleton.js.map +1 -1
  13. package/dist/app/engine.js +134 -140
  14. package/dist/app/engine.js.map +1 -1
  15. package/dist/app/scriptregistry.js +47 -16
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +3 -1
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +346 -7
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/avatar/wardrobe.js +20 -16
  22. package/dist/avatar/wardrobe.js.map +1 -1
  23. package/dist/camera/camera.js +416 -210
  24. package/dist/camera/camera.js.map +1 -1
  25. package/dist/index.d.ts +1350 -621
  26. package/dist/index.js +6 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/material/blinn.js +1 -1
  29. package/dist/material/blinn.js.map +1 -1
  30. package/dist/material/lambert.js +1 -1
  31. package/dist/material/lambert.js.map +1 -1
  32. package/dist/material/material.js +23 -1
  33. package/dist/material/material.js.map +1 -1
  34. package/dist/material/meshmaterial.js +178 -23
  35. package/dist/material/meshmaterial.js.map +1 -1
  36. package/dist/material/mixins/albedocolor.js +4 -4
  37. package/dist/material/mixins/albedocolor.js.map +1 -1
  38. package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
  39. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/lambert.js +2 -1
  41. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
  43. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
  45. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
  47. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  48. package/dist/material/mixins/lit.js +1 -1
  49. package/dist/material/mixins/lit.js.map +1 -1
  50. package/dist/material/mixins/pbr/common.js +276 -65
  51. package/dist/material/mixins/pbr/common.js.map +1 -1
  52. package/dist/material/mixins/texture.js +3 -3
  53. package/dist/material/mixins/texture.js.map +1 -1
  54. package/dist/material/mixins/vertexcolor.js +2 -2
  55. package/dist/material/mixins/vertexcolor.js.map +1 -1
  56. package/dist/material/msdf_text.js +3 -3
  57. package/dist/material/msdf_text.js.map +1 -1
  58. package/dist/material/mtoon.js +574 -0
  59. package/dist/material/mtoon.js.map +1 -0
  60. package/dist/material/pbrblueprint.js +499 -336
  61. package/dist/material/pbrblueprint.js.map +1 -1
  62. package/dist/material/pbrmr.js +118 -100
  63. package/dist/material/pbrmr.js.map +1 -1
  64. package/dist/material/pbrsg.js +1 -1
  65. package/dist/material/pbrsg.js.map +1 -1
  66. package/dist/material/shader/helper.js +324 -294
  67. package/dist/material/shader/helper.js.map +1 -1
  68. package/dist/material/subsurfaceprofile.js +812 -0
  69. package/dist/material/subsurfaceprofile.js.map +1 -0
  70. package/dist/material/unlit.js +1 -1
  71. package/dist/material/unlit.js.map +1 -1
  72. package/dist/posteffect/compositor.js +46 -11
  73. package/dist/posteffect/compositor.js.map +1 -1
  74. package/dist/posteffect/ssr.js +422 -96
  75. package/dist/posteffect/ssr.js.map +1 -1
  76. package/dist/posteffect/sss.js +1053 -0
  77. package/dist/posteffect/sss.js.map +1 -0
  78. package/dist/posteffect/taa.js +61 -60
  79. package/dist/posteffect/taa.js.map +1 -1
  80. package/dist/render/abuffer_oit.js +63 -12
  81. package/dist/render/abuffer_oit.js.map +1 -1
  82. package/dist/render/cluster_light.js +6 -5
  83. package/dist/render/cluster_light.js.map +1 -1
  84. package/dist/render/drawable.js +1 -5
  85. package/dist/render/drawable.js.map +1 -1
  86. package/dist/render/drawable_mixin.js +2 -1
  87. package/dist/render/drawable_mixin.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +2 -1
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +2 -1
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +2 -1
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/lightpass.js +110 -23
  95. package/dist/render/lightpass.js.map +1 -1
  96. package/dist/render/render_queue.js +51 -8
  97. package/dist/render/render_queue.js.map +1 -1
  98. package/dist/render/renderer.js +80 -66
  99. package/dist/render/renderer.js.map +1 -1
  100. package/dist/render/rendergraph/device_pool_allocator.js +8 -0
  101. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  102. package/dist/render/rendergraph/forward_plus_builder.js +481 -95
  103. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  104. package/dist/render/rendergraph/history_resource_manager.js +55 -0
  105. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  106. package/dist/render/rendergraph/history_resources.js +3 -1
  107. package/dist/render/rendergraph/history_resources.js.map +1 -1
  108. package/dist/render/rendergraph/types.js.map +1 -1
  109. package/dist/render/renderpass.js +10 -4
  110. package/dist/render/renderpass.js.map +1 -1
  111. package/dist/render/sky.js +31 -1
  112. package/dist/render/sky.js.map +1 -1
  113. package/dist/render/weightedblended_oit.js +23 -5
  114. package/dist/render/weightedblended_oit.js.map +1 -1
  115. package/dist/scene/basesprite.js +4 -2
  116. package/dist/scene/basesprite.js.map +1 -1
  117. package/dist/scene/batchgroup.js +3 -1
  118. package/dist/scene/batchgroup.js.map +1 -1
  119. package/dist/scene/environment.js +11 -1
  120. package/dist/scene/environment.js.map +1 -1
  121. package/dist/scene/light.js +21 -3
  122. package/dist/scene/light.js.map +1 -1
  123. package/dist/scene/mesh.js +29 -14
  124. package/dist/scene/mesh.js.map +1 -1
  125. package/dist/scene/meshdrawable.js +6 -0
  126. package/dist/scene/meshdrawable.js.map +1 -1
  127. package/dist/scene/msdftext.js +5 -2
  128. package/dist/scene/msdftext.js.map +1 -1
  129. package/dist/scene/msdftextsprite.js +5 -3
  130. package/dist/scene/msdftextsprite.js.map +1 -1
  131. package/dist/scene/particlesys.js +3 -1
  132. package/dist/scene/particlesys.js.map +1 -1
  133. package/dist/scene/scene.js +6 -5
  134. package/dist/scene/scene.js.map +1 -1
  135. package/dist/scene/terrain-cm/grass.js +4 -2
  136. package/dist/scene/terrain-cm/grass.js.map +1 -1
  137. package/dist/scene/terrain-cm/grassmaterial.js +2 -1
  138. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  139. package/dist/scene/terrain-cm/terrain-cm.js +4 -2
  140. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  141. package/dist/scene/water.js +4 -2
  142. package/dist/scene/water.js.map +1 -1
  143. package/dist/shaders/shadow.js +26 -393
  144. package/dist/shaders/shadow.js.map +1 -1
  145. package/dist/shadow/esm.js +112 -12
  146. package/dist/shadow/esm.js.map +1 -1
  147. package/dist/shadow/pcf_opt.js +2 -2
  148. package/dist/shadow/pcf_opt.js.map +1 -1
  149. package/dist/shadow/pcf_pd.js +19 -10
  150. package/dist/shadow/pcf_pd.js.map +1 -1
  151. package/dist/shadow/shader.js +58 -7
  152. package/dist/shadow/shader.js.map +1 -1
  153. package/dist/shadow/shadow_impl.js +6 -0
  154. package/dist/shadow/shadow_impl.js.map +1 -1
  155. package/dist/shadow/shadow_region.js +229 -0
  156. package/dist/shadow/shadow_region.js.map +1 -0
  157. package/dist/shadow/shadowmapper.js +67 -59
  158. package/dist/shadow/shadowmapper.js.map +1 -1
  159. package/dist/shadow/vsm.js +45 -19
  160. package/dist/shadow/vsm.js.map +1 -1
  161. package/dist/text/font/cff_font.js +890 -0
  162. package/dist/text/font/cff_font.js.map +1 -0
  163. package/dist/text/font/font_asset.js +17 -3
  164. package/dist/text/font/font_asset.js.map +1 -1
  165. package/dist/utility/blueprint/common/constants.js +8 -8
  166. package/dist/utility/blueprint/common/constants.js.map +1 -1
  167. package/dist/utility/blueprint/material/pbr.js +31 -4
  168. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  169. package/dist/utility/blueprint/material/texture.js +1 -17
  170. package/dist/utility/blueprint/material/texture.js.map +1 -1
  171. package/dist/utility/serialization/manager.js +327 -359
  172. package/dist/utility/serialization/manager.js.map +1 -1
  173. package/dist/utility/serialization/scene/animation.js +5 -2
  174. package/dist/utility/serialization/scene/animation.js.map +1 -1
  175. package/dist/utility/serialization/scene/batch.js +4 -1
  176. package/dist/utility/serialization/scene/batch.js.map +1 -1
  177. package/dist/utility/serialization/scene/camera.js +249 -54
  178. package/dist/utility/serialization/scene/camera.js.map +1 -1
  179. package/dist/utility/serialization/scene/common.js +37 -1
  180. package/dist/utility/serialization/scene/common.js.map +1 -1
  181. package/dist/utility/serialization/scene/light.js +42 -3
  182. package/dist/utility/serialization/scene/light.js.map +1 -1
  183. package/dist/utility/serialization/scene/material.js +1112 -646
  184. package/dist/utility/serialization/scene/material.js.map +1 -1
  185. package/dist/utility/serialization/scene/mesh.js +7 -4
  186. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  187. package/dist/utility/serialization/scene/node.js +31 -12
  188. package/dist/utility/serialization/scene/node.js.map +1 -1
  189. package/dist/utility/serialization/scene/particle.js +4 -1
  190. package/dist/utility/serialization/scene/particle.js.map +1 -1
  191. package/dist/utility/serialization/scene/primitive.js +3 -1
  192. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  193. package/dist/utility/serialization/scene/scene.js +18 -0
  194. package/dist/utility/serialization/scene/scene.js.map +1 -1
  195. package/dist/utility/serialization/scene/sprite.js +6 -3
  196. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  197. package/dist/utility/serialization/scene/terrain.js +5 -2
  198. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  199. package/dist/utility/serialization/scene/text.js +3 -1
  200. package/dist/utility/serialization/scene/text.js.map +1 -1
  201. package/dist/utility/serialization/scene/water.js +4 -1
  202. package/dist/utility/serialization/scene/water.js.map +1 -1
  203. package/dist/utility/textures/ltcdata.js +6 -0
  204. package/dist/utility/textures/ltcdata.js.map +1 -0
  205. package/dist/utility/textures/ltclut.js +61 -0
  206. package/dist/utility/textures/ltclut.js.map +1 -0
  207. package/dist/values.js +9 -1
  208. package/dist/values.js.map +1 -1
  209. package/package.json +3 -3
  210. package/dist/animation/ik/ik_chain_builder.js +0 -68
  211. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  212. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  213. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  214. package/dist/animation/ik/ik_track.js +0 -96
  215. package/dist/animation/ik/ik_track.js.map +0 -1
  216. package/dist/animation/ik_postprocessor.js +0 -71
  217. package/dist/animation/ik_postprocessor.js.map +0 -1
  218. package/dist/animation/joint_dynamics/math.js +0 -16
  219. package/dist/animation/joint_dynamics/math.js.map +0 -1
  220. package/dist/animation/manual_transform_processor.js +0 -156
  221. package/dist/animation/manual_transform_processor.js.map +0 -1
  222. package/dist/animation/skeleton_postprocessor.js +0 -50
  223. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  224. package/dist/animation/spring2/collision.js +0 -469
  225. package/dist/animation/spring2/collision.js.map +0 -1
  226. package/dist/animation/spring2/constraints.js +0 -329
  227. package/dist/animation/spring2/constraints.js.map +0 -1
  228. package/dist/animation/spring2/controller.js +0 -434
  229. package/dist/animation/spring2/controller.js.map +0 -1
  230. package/dist/animation/spring2/math.js +0 -16
  231. package/dist/animation/spring2/math.js.map +0 -1
  232. package/dist/animation/spring2/solver.js +0 -624
  233. package/dist/animation/spring2/solver.js.map +0 -1
  234. package/dist/animation/spring2/spring_system.js +0 -118
  235. package/dist/animation/spring2/spring_system.js.map +0 -1
  236. package/dist/animation/spring2/types.js +0 -19
  237. package/dist/animation/spring2/types.js.map +0 -1
  238. package/dist/animation/spring_postprocessor.js +0 -54
  239. package/dist/animation/spring_postprocessor.js.map +0 -1
  240. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
  241. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  242. package/dist/asset/loaders/gltf/helpers.js +0 -331
  243. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  244. package/dist/material/sprite3d.js +0 -301
  245. package/dist/material/sprite3d.js.map +0 -1
  246. package/dist/material/sprite3d_std.js +0 -116
  247. package/dist/material/sprite3d_std.js.map +0 -1
  248. package/dist/material/sprite3dblueprint.js +0 -235
  249. package/dist/material/sprite3dblueprint.js.map +0 -1
  250. package/dist/material/sprite_sdf.js +0 -106
  251. package/dist/material/sprite_sdf.js.map +0 -1
  252. package/dist/material/terrainmaterial.js +0 -368
  253. package/dist/material/terrainmaterial.js.map +0 -1
  254. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  255. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  256. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  257. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  258. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  259. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  260. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  261. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  262. package/dist/render/deferredlightpass.js +0 -510
  263. package/dist/render/deferredlightpass.js.map +0 -1
  264. package/dist/render/deferredshadowlightpass.js +0 -428
  265. package/dist/render/deferredshadowlightpass.js.map +0 -1
  266. package/dist/render/gbufferpass.js +0 -50
  267. package/dist/render/gbufferpass.js.map +0 -1
  268. package/dist/scene/sdftextsprite.js +0 -322
  269. package/dist/scene/sdftextsprite.js.map +0 -1
  270. package/dist/scene/sprite3d.js +0 -18
  271. package/dist/scene/sprite3d.js.map +0 -1
  272. package/dist/scene/terrain/grass.js +0 -280
  273. package/dist/scene/terrain/grass.js.map +0 -1
  274. package/dist/scene/terrain/heightfield.js +0 -475
  275. package/dist/scene/terrain/heightfield.js.map +0 -1
  276. package/dist/scene/terrain/patch.js +0 -532
  277. package/dist/scene/terrain/patch.js.map +0 -1
  278. package/dist/scene/terrain/quadtree.js +0 -461
  279. package/dist/scene/terrain/quadtree.js.map +0 -1
  280. package/dist/scene/terrain/terrain.js +0 -231
  281. package/dist/scene/terrain/terrain.js.map +0 -1
  282. package/dist/src/animation/animation.js +0 -127
  283. package/dist/src/animation/animation.js.map +0 -1
  284. package/dist/src/animation/animationset.js +0 -255
  285. package/dist/src/animation/animationset.js.map +0 -1
  286. package/dist/src/animation/animationtrack.js +0 -34
  287. package/dist/src/animation/animationtrack.js.map +0 -1
  288. package/dist/src/animation/eulerrotationtrack.js +0 -52
  289. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  290. package/dist/src/animation/morphtarget.js +0 -93
  291. package/dist/src/animation/morphtarget.js.map +0 -1
  292. package/dist/src/animation/morphtrack.js +0 -70
  293. package/dist/src/animation/morphtrack.js.map +0 -1
  294. package/dist/src/animation/proptrack.js +0 -161
  295. package/dist/src/animation/proptrack.js.map +0 -1
  296. package/dist/src/animation/rotationtrack.js +0 -51
  297. package/dist/src/animation/rotationtrack.js.map +0 -1
  298. package/dist/src/animation/scaletrack.js +0 -50
  299. package/dist/src/animation/scaletrack.js.map +0 -1
  300. package/dist/src/animation/skeleton.js +0 -204
  301. package/dist/src/animation/skeleton.js.map +0 -1
  302. package/dist/src/animation/translationtrack.js +0 -50
  303. package/dist/src/animation/translationtrack.js.map +0 -1
  304. package/dist/src/app/app.js +0 -129
  305. package/dist/src/app/app.js.map +0 -1
  306. package/dist/src/app/inputmgr.js +0 -267
  307. package/dist/src/app/inputmgr.js.map +0 -1
  308. package/dist/src/asset/assetmanager.js +0 -404
  309. package/dist/src/asset/assetmanager.js.map +0 -1
  310. package/dist/src/asset/builtin.js +0 -337
  311. package/dist/src/asset/builtin.js.map +0 -1
  312. package/dist/src/asset/loaders/dds/dds.js +0 -470
  313. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  314. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  315. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  316. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  317. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  318. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  319. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  320. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  321. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  322. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  323. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  324. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  325. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  326. package/dist/src/asset/loaders/loader.js +0 -45
  327. package/dist/src/asset/loaders/loader.js.map +0 -1
  328. package/dist/src/asset/model.js +0 -414
  329. package/dist/src/asset/model.js.map +0 -1
  330. package/dist/src/blitter/bilateralblur.js +0 -221
  331. package/dist/src/blitter/bilateralblur.js.map +0 -1
  332. package/dist/src/blitter/blitter.js +0 -390
  333. package/dist/src/blitter/blitter.js.map +0 -1
  334. package/dist/src/blitter/box.js +0 -118
  335. package/dist/src/blitter/box.js.map +0 -1
  336. package/dist/src/blitter/copy.js +0 -22
  337. package/dist/src/blitter/copy.js.map +0 -1
  338. package/dist/src/blitter/gaussianblur.js +0 -228
  339. package/dist/src/blitter/gaussianblur.js.map +0 -1
  340. package/dist/src/camera/base.js +0 -92
  341. package/dist/src/camera/base.js.map +0 -1
  342. package/dist/src/camera/camera.js +0 -1005
  343. package/dist/src/camera/camera.js.map +0 -1
  344. package/dist/src/camera/fps.js +0 -238
  345. package/dist/src/camera/fps.js.map +0 -1
  346. package/dist/src/camera/orbit.js +0 -245
  347. package/dist/src/camera/orbit.js.map +0 -1
  348. package/dist/src/camera/orthocamera.js +0 -167
  349. package/dist/src/camera/orthocamera.js.map +0 -1
  350. package/dist/src/camera/perspectivecamera.js +0 -141
  351. package/dist/src/camera/perspectivecamera.js.map +0 -1
  352. package/dist/src/index.js +0 -120
  353. package/dist/src/index.js.map +0 -1
  354. package/dist/src/material/blinn.js +0 -81
  355. package/dist/src/material/blinn.js.map +0 -1
  356. package/dist/src/material/grassmaterial.js +0 -113
  357. package/dist/src/material/grassmaterial.js.map +0 -1
  358. package/dist/src/material/lambert.js +0 -92
  359. package/dist/src/material/lambert.js.map +0 -1
  360. package/dist/src/material/material.js +0 -301
  361. package/dist/src/material/material.js.map +0 -1
  362. package/dist/src/material/meshmaterial.js +0 -704
  363. package/dist/src/material/meshmaterial.js.map +0 -1
  364. package/dist/src/material/mixins/albedocolor.js +0 -76
  365. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  366. package/dist/src/material/mixins/foliage.js +0 -47
  367. package/dist/src/material/mixins/foliage.js.map +0 -1
  368. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  369. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  370. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  371. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  372. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  373. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  374. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  375. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  376. package/dist/src/material/mixins/lit.js +0 -476
  377. package/dist/src/material/mixins/lit.js.map +0 -1
  378. package/dist/src/material/mixins/pbr/common.js +0 -918
  379. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  380. package/dist/src/material/mixins/texture.js +0 -172
  381. package/dist/src/material/mixins/texture.js.map +0 -1
  382. package/dist/src/material/mixins/vertexcolor.js +0 -56
  383. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  384. package/dist/src/material/particle.js +0 -178
  385. package/dist/src/material/particle.js.map +0 -1
  386. package/dist/src/material/pbrmr.js +0 -97
  387. package/dist/src/material/pbrmr.js.map +0 -1
  388. package/dist/src/material/pbrsg.js +0 -97
  389. package/dist/src/material/pbrsg.js.map +0 -1
  390. package/dist/src/material/shader/helper.js +0 -1209
  391. package/dist/src/material/shader/helper.js.map +0 -1
  392. package/dist/src/material/terrain-cm.js +0 -606
  393. package/dist/src/material/terrain-cm.js.map +0 -1
  394. package/dist/src/material/terrainmaterial.js +0 -375
  395. package/dist/src/material/terrainmaterial.js.map +0 -1
  396. package/dist/src/material/unlit.js +0 -41
  397. package/dist/src/material/unlit.js.map +0 -1
  398. package/dist/src/material/water.js +0 -417
  399. package/dist/src/material/water.js.map +0 -1
  400. package/dist/src/posteffect/bloom.js +0 -361
  401. package/dist/src/posteffect/bloom.js.map +0 -1
  402. package/dist/src/posteffect/compositor.js +0 -226
  403. package/dist/src/posteffect/compositor.js.map +0 -1
  404. package/dist/src/posteffect/fxaa.js +0 -273
  405. package/dist/src/posteffect/fxaa.js.map +0 -1
  406. package/dist/src/posteffect/grayscale.js +0 -69
  407. package/dist/src/posteffect/grayscale.js.map +0 -1
  408. package/dist/src/posteffect/motionblur.js +0 -96
  409. package/dist/src/posteffect/motionblur.js.map +0 -1
  410. package/dist/src/posteffect/posteffect.js +0 -126
  411. package/dist/src/posteffect/posteffect.js.map +0 -1
  412. package/dist/src/posteffect/sao.js +0 -324
  413. package/dist/src/posteffect/sao.js.map +0 -1
  414. package/dist/src/posteffect/ssr.js +0 -489
  415. package/dist/src/posteffect/ssr.js.map +0 -1
  416. package/dist/src/posteffect/taa.js +0 -172
  417. package/dist/src/posteffect/taa.js.map +0 -1
  418. package/dist/src/posteffect/tonemap.js +0 -94
  419. package/dist/src/posteffect/tonemap.js.map +0 -1
  420. package/dist/src/render/abuffer_oit.js +0 -361
  421. package/dist/src/render/abuffer_oit.js.map +0 -1
  422. package/dist/src/render/clipmap.js +0 -851
  423. package/dist/src/render/clipmap.js.map +0 -1
  424. package/dist/src/render/cluster_light.js +0 -333
  425. package/dist/src/render/cluster_light.js.map +0 -1
  426. package/dist/src/render/cull_visitor.js +0 -187
  427. package/dist/src/render/cull_visitor.js.map +0 -1
  428. package/dist/src/render/depthpass.js +0 -68
  429. package/dist/src/render/depthpass.js.map +0 -1
  430. package/dist/src/render/drawable_mixin.js +0 -227
  431. package/dist/src/render/drawable_mixin.js.map +0 -1
  432. package/dist/src/render/envlight.js +0 -463
  433. package/dist/src/render/envlight.js.map +0 -1
  434. package/dist/src/render/fbm_wavegenerator.js +0 -251
  435. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  436. package/dist/src/render/fft_wavegenerator.js +0 -1006
  437. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  438. package/dist/src/render/fullscreenquad.js +0 -38
  439. package/dist/src/render/fullscreenquad.js.map +0 -1
  440. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  441. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  442. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  443. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  444. package/dist/src/render/hzb.js +0 -273
  445. package/dist/src/render/hzb.js.map +0 -1
  446. package/dist/src/render/lightpass.js +0 -172
  447. package/dist/src/render/lightpass.js.map +0 -1
  448. package/dist/src/render/objectcolorpass.js +0 -51
  449. package/dist/src/render/objectcolorpass.js.map +0 -1
  450. package/dist/src/render/primitive.js +0 -364
  451. package/dist/src/render/primitive.js.map +0 -1
  452. package/dist/src/render/render_queue.js +0 -467
  453. package/dist/src/render/render_queue.js.map +0 -1
  454. package/dist/src/render/renderbundle_wrapper.js +0 -152
  455. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  456. package/dist/src/render/renderer.js +0 -455
  457. package/dist/src/render/renderer.js.map +0 -1
  458. package/dist/src/render/renderpass.js +0 -200
  459. package/dist/src/render/renderpass.js.map +0 -1
  460. package/dist/src/render/shadowmap_pass.js +0 -56
  461. package/dist/src/render/shadowmap_pass.js.map +0 -1
  462. package/dist/src/render/sky.js +0 -1103
  463. package/dist/src/render/sky.js.map +0 -1
  464. package/dist/src/render/weightedblended_oit.js +0 -168
  465. package/dist/src/render/weightedblended_oit.js.map +0 -1
  466. package/dist/src/scene/batchgroup.js +0 -162
  467. package/dist/src/scene/batchgroup.js.map +0 -1
  468. package/dist/src/scene/environment.js +0 -209
  469. package/dist/src/scene/environment.js.map +0 -1
  470. package/dist/src/scene/graph_node.js +0 -72
  471. package/dist/src/scene/graph_node.js.map +0 -1
  472. package/dist/src/scene/light.js +0 -416
  473. package/dist/src/scene/light.js.map +0 -1
  474. package/dist/src/scene/mesh.js +0 -341
  475. package/dist/src/scene/mesh.js.map +0 -1
  476. package/dist/src/scene/octree.js +0 -649
  477. package/dist/src/scene/octree.js.map +0 -1
  478. package/dist/src/scene/particlesys.js +0 -738
  479. package/dist/src/scene/particlesys.js.map +0 -1
  480. package/dist/src/scene/raycast_visitor.js +0 -103
  481. package/dist/src/scene/raycast_visitor.js.map +0 -1
  482. package/dist/src/scene/scene.js +0 -284
  483. package/dist/src/scene/scene.js.map +0 -1
  484. package/dist/src/scene/scene_node.js +0 -732
  485. package/dist/src/scene/scene_node.js.map +0 -1
  486. package/dist/src/scene/terrain/grass.js +0 -278
  487. package/dist/src/scene/terrain/grass.js.map +0 -1
  488. package/dist/src/scene/terrain/heightfield.js +0 -475
  489. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  490. package/dist/src/scene/terrain/patch.js +0 -530
  491. package/dist/src/scene/terrain/patch.js.map +0 -1
  492. package/dist/src/scene/terrain/quadtree.js +0 -461
  493. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  494. package/dist/src/scene/terrain/terrain.js +0 -246
  495. package/dist/src/scene/terrain/terrain.js.map +0 -1
  496. package/dist/src/scene/terrain-cm/grass.js +0 -594
  497. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  498. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  499. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  500. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  501. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  502. package/dist/src/scene/water.js +0 -374
  503. package/dist/src/scene/water.js.map +0 -1
  504. package/dist/src/shaders/atmosphere.js +0 -957
  505. package/dist/src/shaders/atmosphere.js.map +0 -1
  506. package/dist/src/shaders/fog.js +0 -112
  507. package/dist/src/shaders/fog.js.map +0 -1
  508. package/dist/src/shaders/misc.js +0 -266
  509. package/dist/src/shaders/misc.js.map +0 -1
  510. package/dist/src/shaders/noise.js +0 -222
  511. package/dist/src/shaders/noise.js.map +0 -1
  512. package/dist/src/shaders/pbr.js +0 -51
  513. package/dist/src/shaders/pbr.js.map +0 -1
  514. package/dist/src/shaders/shadow.js +0 -636
  515. package/dist/src/shaders/shadow.js.map +0 -1
  516. package/dist/src/shaders/ssr.js +0 -490
  517. package/dist/src/shaders/ssr.js.map +0 -1
  518. package/dist/src/shaders/temporal.js +0 -215
  519. package/dist/src/shaders/temporal.js.map +0 -1
  520. package/dist/src/shaders/water.js +0 -756
  521. package/dist/src/shaders/water.js.map +0 -1
  522. package/dist/src/shadow/esm.js +0 -237
  523. package/dist/src/shadow/esm.js.map +0 -1
  524. package/dist/src/shadow/pcf_opt.js +0 -181
  525. package/dist/src/shadow/pcf_opt.js.map +0 -1
  526. package/dist/src/shadow/pcf_pd.js +0 -189
  527. package/dist/src/shadow/pcf_pd.js.map +0 -1
  528. package/dist/src/shadow/shader.js +0 -37
  529. package/dist/src/shadow/shader.js.map +0 -1
  530. package/dist/src/shadow/shadow_impl.js +0 -15
  531. package/dist/src/shadow/shadow_impl.js.map +0 -1
  532. package/dist/src/shadow/shadowmapper.js +0 -790
  533. package/dist/src/shadow/shadowmapper.js.map +0 -1
  534. package/dist/src/shadow/ssm.js +0 -159
  535. package/dist/src/shadow/ssm.js.map +0 -1
  536. package/dist/src/shadow/vsm.js +0 -297
  537. package/dist/src/shadow/vsm.js.map +0 -1
  538. package/dist/src/shapes/box.js +0 -386
  539. package/dist/src/shapes/box.js.map +0 -1
  540. package/dist/src/shapes/cylinder.js +0 -125
  541. package/dist/src/shapes/cylinder.js.map +0 -1
  542. package/dist/src/shapes/plane.js +0 -88
  543. package/dist/src/shapes/plane.js.map +0 -1
  544. package/dist/src/shapes/shape.js +0 -87
  545. package/dist/src/shapes/shape.js.map +0 -1
  546. package/dist/src/shapes/sphere.js +0 -114
  547. package/dist/src/shapes/sphere.js.map +0 -1
  548. package/dist/src/shapes/tetrahedron.js +0 -188
  549. package/dist/src/shapes/tetrahedron.js.map +0 -1
  550. package/dist/src/shapes/torus.js +0 -111
  551. package/dist/src/shapes/torus.js.map +0 -1
  552. package/dist/src/utility/aabbtree.js +0 -400
  553. package/dist/src/utility/aabbtree.js.map +0 -1
  554. package/dist/src/utility/bounding_volume.js +0 -29
  555. package/dist/src/utility/bounding_volume.js.map +0 -1
  556. package/dist/src/utility/debug.js +0 -28
  557. package/dist/src/utility/debug.js.map +0 -1
  558. package/dist/src/utility/draco/decoder.js +0 -116
  559. package/dist/src/utility/draco/decoder.js.map +0 -1
  560. package/dist/src/utility/misc.js +0 -105
  561. package/dist/src/utility/misc.js.map +0 -1
  562. package/dist/src/utility/panorama.js +0 -163
  563. package/dist/src/utility/panorama.js.map +0 -1
  564. package/dist/src/utility/pmrem.js +0 -354
  565. package/dist/src/utility/pmrem.js.map +0 -1
  566. package/dist/src/utility/rendermipmap.js +0 -115
  567. package/dist/src/utility/rendermipmap.js.map +0 -1
  568. package/dist/src/utility/serialization/json.js +0 -402
  569. package/dist/src/utility/serialization/json.js.map +0 -1
  570. package/dist/src/utility/serialization/manager.js +0 -623
  571. package/dist/src/utility/serialization/manager.js.map +0 -1
  572. package/dist/src/utility/serialization/scene/animation.js +0 -248
  573. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  574. package/dist/src/utility/serialization/scene/batch.js +0 -59
  575. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  576. package/dist/src/utility/serialization/scene/camera.js +0 -790
  577. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  578. package/dist/src/utility/serialization/scene/common.js +0 -222
  579. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  580. package/dist/src/utility/serialization/scene/light.js +0 -575
  581. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  582. package/dist/src/utility/serialization/scene/material.js +0 -1111
  583. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  584. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  585. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  586. package/dist/src/utility/serialization/scene/misc.js +0 -39
  587. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  588. package/dist/src/utility/serialization/scene/node.js +0 -451
  589. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  590. package/dist/src/utility/serialization/scene/particle.js +0 -425
  591. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  592. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  593. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  594. package/dist/src/utility/serialization/scene/scene.js +0 -704
  595. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  596. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  597. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  598. package/dist/src/utility/serialization/scene/water.js +0 -465
  599. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  600. package/dist/src/utility/shprojector.js +0 -297
  601. package/dist/src/utility/shprojector.js.map +0 -1
  602. package/dist/src/utility/textures/ggxlut.js +0 -213
  603. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  604. package/dist/src/utility/textures/gradientnoise.js +0 -62
  605. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  606. package/dist/src/utility/textures/randomnoise.js +0 -41
  607. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  608. package/dist/src/values.js +0 -162
  609. package/dist/src/values.js.map +0 -1
  610. package/dist/utility/blueprint/material/common.js +0 -7
  611. package/dist/utility/blueprint/material/common.js.map +0 -1
  612. package/dist/utility/serialization/blueprint/constants.js +0 -255
  613. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  614. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  615. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  616. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  617. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  618. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  619. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  620. package/dist/utility/serialization/scene/spring_script.js +0 -596
  621. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +0,0 @@
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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"}
@@ -1,333 +0,0 @@
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