@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,538 +0,0 @@
1
- import { applyMixins, DRef, Vector3, Vector4 } from '@zephyr3d/base';
2
- import { GraphNode } from '../graph_node.js';
3
- import { mixinDrawable } from '../../render/drawable_mixin.js';
4
- import { MAX_TERRAIN_MIPMAP_LEVELS, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP } from '../../values.js';
5
- import { Application } from '../../app/app.js';
6
- import '@zephyr3d/device';
7
- import '../../material/shader/helper.js';
8
- import '../../material/lambert.js';
9
- import '../../material/blinn.js';
10
- import '../../material/unlit.js';
11
- import '../../material/particle.js';
12
- import '../../material/meshmaterial.js';
13
- import '../../material/grassmaterial.js';
14
- import '../../material/terrainmaterial.js';
15
- import { ClipmapTerrainMaterial } from '../../material/terrain-cm.js';
16
- import '../../material/pbrmr.js';
17
- import '../../material/pbrsg.js';
18
- import '../../render/renderer.js';
19
- import { fetchSampler } from '../../utility/misc.js';
20
- import '../../render/sky.js';
21
- import { Clipmap } from '../../render/clipmap.js';
22
- import '../../shaders/atmosphere.js';
23
- import { BoundingBox } from '../../utility/bounding_volume.js';
24
- import { CopyBlitter } from '../../blitter/copy.js';
25
- import { RenderMipmap } from '../../utility/rendermipmap.js';
26
- import { GrassRenderer } from './grass.js';
27
-
28
- class HeightMinMaxBlitter extends CopyBlitter {
29
- filter(scope, type, srcTex, srcUV, srcLayer, sampleType) {
30
- return this.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType).xxxx;
31
- }
32
- }
33
- class HeightBoundingGenerator extends RenderMipmap {
34
- renderPixel(scope, leftTop, rightTop, leftBottom, rightBottom) {
35
- const pb = scope.$builder;
36
- scope.$l.maxHeight = pb.max(pb.max(leftTop.r, rightTop.r), pb.max(leftBottom.r, rightBottom.r));
37
- scope.$l.minHeight = pb.min(pb.min(leftTop.g, rightTop.g), pb.min(leftBottom.g, rightBottom.g));
38
- return pb.vec4(scope.maxHeight, scope.minHeight, leftTop.r, 1);
39
- }
40
- }
41
- /**
42
- * ClipmapTerrain implements an efficient terrain rendering system using clipmaps.
43
- *
44
- * Clipmaps provide level-of-detail (LOD) rendering for large terrains by using
45
- * multiple nested grids at different resolutions. The terrain automatically
46
- * adjusts detail levels based on camera distance, providing high detail near
47
- * the camera and lower detail in the distance.
48
- *
49
- * Key features:
50
- * - Automatic LOD management based on camera position
51
- * - Support for height maps, splat maps, and detail textures
52
- * - Integrated grass rendering system
53
- *
54
- * @public
55
- */ class ClipmapTerrain extends applyMixins(GraphNode, mixinDrawable) {
56
- static _heightBoundingGenerator = new HeightBoundingGenerator();
57
- static _copyBlitter = new HeightMinMaxBlitter();
58
- static _tmpBuffer = new Float32Array(MAX_TERRAIN_MIPMAP_LEVELS * 2 * 4);
59
- _pickTarget;
60
- _clipmap;
61
- _renderData;
62
- _gridScale;
63
- _material;
64
- _grassRenderer;
65
- _castShadow;
66
- _sizeX;
67
- _sizeZ;
68
- _heightMapAssetId;
69
- _splatMapAssetId;
70
- _grassAssetId;
71
- _minHeight;
72
- _maxHeight;
73
- _tmpTexture;
74
- /**
75
- * Creates a new clipmap terrain instance.
76
- *
77
- * @param scene - Scene to add the terrain to
78
- * @param sizeX - Terrain width in world units (default: 256)
79
- * @param sizeZ - Terrain depth in world units (default: 256)
80
- * @param clipMapTileSize - Size of each clipmap tile in vertices (default: 64)
81
- * Larger values use more memory but reduce draw calls
82
- *
83
- */ constructor(scene, sizeX = 256, sizeZ = 256, clipMapTileSize = 64){
84
- super(scene);
85
- this._pickTarget = {
86
- node: this
87
- };
88
- this._clipmap = new Clipmap(clipMapTileSize, [
89
- 'tex1_f32'
90
- ], MAX_TERRAIN_MIPMAP_LEVELS);
91
- this._renderData = null;
92
- this._grassRenderer = new DRef(new GrassRenderer(this));
93
- this._gridScale = 1;
94
- this._castShadow = true;
95
- this._sizeX = sizeX;
96
- this._sizeZ = sizeZ;
97
- this._heightMapAssetId = `.embedded.dir/${this.persistentId}-heightmap.bin`;
98
- this._grassAssetId = `.embedded.dir/${this.persistentId}-grass.bin`;
99
- this._splatMapAssetId = `.embedded.dir/${this.persistentId}-splatmap.bin`;
100
- this._minHeight = 0;
101
- this._maxHeight = 0;
102
- this._material = new DRef(new ClipmapTerrainMaterial(this.createHeightMapTexture(this._sizeX, this._sizeZ)));
103
- this._tmpTexture = new DRef();
104
- this.updateRegion();
105
- scene.queuePerCameraUpdateNode(this);
106
- }
107
- /**
108
- * Gets the integrated grass renderer for this terrain.
109
- * The grass renderer handles vegetation rendering on the terrain surface.
110
- *
111
- * @returns The grass renderer instance
112
- */ get grassRenderer() {
113
- return this._grassRenderer.get();
114
- }
115
- /**
116
- * Gets the maximum number of detail maps supported by the terrain material.
117
- * Detail maps provide surface texturing (grass, rock, sand, etc.).
118
- *
119
- * @returns Maximum number of detail maps
120
- */ get MAX_DETAIL_MAP_COUNT() {
121
- return ClipmapTerrainMaterial.MAX_DETAIL_MAP_COUNT;
122
- }
123
- /**
124
- * Gets the asset ID for the height map texture.
125
- * Generates a random UUID if not previously set.
126
- *
127
- * @returns Height map asset ID
128
- * @internal
129
- */ get heightMapAssetId() {
130
- if (!this._heightMapAssetId) {
131
- this._heightMapAssetId = crypto.randomUUID();
132
- }
133
- return this._heightMapAssetId;
134
- }
135
- set heightMapAssetId(val) {
136
- this._heightMapAssetId = val;
137
- }
138
- /**
139
- * Gets the asset ID for the splat map texture.
140
- * Generates a random UUID if not previously set.
141
- *
142
- * @returns Splat map asset ID
143
- * @internal
144
- */ get splatMapAssetId() {
145
- if (!this._splatMapAssetId) {
146
- this._splatMapAssetId = crypto.randomUUID();
147
- }
148
- return this._splatMapAssetId;
149
- }
150
- set splatMapAssetId(val) {
151
- this._splatMapAssetId = val;
152
- }
153
- /**
154
- * Gets the asset ID for grass configuration.
155
- * Generates a random UUID if not previously set.
156
- *
157
- * @returns Grass asset ID
158
- * @internal
159
- */ get grassAssetId() {
160
- if (!this._grassAssetId) {
161
- this._grassAssetId = crypto.randomUUID();
162
- }
163
- return this._grassAssetId;
164
- }
165
- set grassAssetId(val) {
166
- this._grassAssetId = val;
167
- }
168
- /**
169
- * The current number of active detail maps.
170
- * Detail maps define different surface materials (grass, rock, etc.).
171
- *
172
- * @returns Number of active detail maps
173
- */ get numDetailMaps() {
174
- return this.material.numDetailMaps;
175
- }
176
- set numDetailMaps(val) {
177
- this.material.numDetailMaps = val;
178
- }
179
- /** {@inheritDoc SceneNode.clone} */ clone(method, recursive) {
180
- const other = new ClipmapTerrain(this.scene, this._sizeX, this._sizeZ);
181
- other.copyFrom(this, method, recursive);
182
- other.parent = this.parent;
183
- return other;
184
- }
185
- /** {@inheritDoc SceneNode.copyFrom} */ copyFrom(other, method, recursive) {
186
- super.copyFrom(other, method, recursive);
187
- this.setSize(other.sizeX, other.sizeZ);
188
- this.wireframe = other.wireframe;
189
- this.castShadow = other.castShadow;
190
- }
191
- /**
192
- * Sets the terrain size.
193
- * Triggers height map resize if dimensions change.
194
- *
195
- * @param sizeX - New width
196
- * @param sizeZ - New depth
197
- */ setSize(sizeX, sizeZ) {
198
- if (sizeX !== this._sizeX || sizeZ !== this._sizeZ) {
199
- this._sizeX = sizeX;
200
- this._sizeZ = sizeZ;
201
- this.resizeHeightMap(this._sizeX, this._sizeZ);
202
- }
203
- }
204
- /** Wether the mesh node casts shadows */ get castShadow() {
205
- return this._castShadow;
206
- }
207
- set castShadow(val) {
208
- this._castShadow = !!val;
209
- }
210
- /** The terrain width. */ get sizeX() {
211
- return this._sizeX;
212
- }
213
- set sizeX(val) {
214
- if (val !== this._sizeX) {
215
- this._sizeX = val;
216
- this.resizeHeightMap(this._sizeX, this._sizeZ);
217
- }
218
- }
219
- /** The terrain depth. */ get sizeZ() {
220
- return this._sizeZ;
221
- }
222
- set sizeZ(val) {
223
- if (val !== this._sizeZ) {
224
- this._sizeZ = val;
225
- this.resizeHeightMap(this._sizeX, this._sizeZ);
226
- }
227
- }
228
- /** The current height map texture. */ get heightMap() {
229
- return this.material.heightMap;
230
- }
231
- set heightMap(val) {
232
- if (val) {
233
- this.material.heightMap = val;
234
- this.updateRegion();
235
- }
236
- }
237
- /** The splat map texture */ get splatMap() {
238
- return this.material.getSplatMap();
239
- }
240
- /** Material instance of the terrain */ get material() {
241
- return this._material?.get() ?? null;
242
- }
243
- /** whether wireframe rendering is enabled */ get wireframe() {
244
- return this._clipmap.wireframe;
245
- }
246
- set wireframe(val) {
247
- this._clipmap.wireframe = val;
248
- }
249
- /**
250
- * {@inheritDoc Drawable.getPickTarget }
251
- */ getPickTarget() {
252
- return this._pickTarget;
253
- }
254
- /**
255
- * {@inheritDoc Drawable.getMorphData}
256
- */ getMorphData() {
257
- return null;
258
- }
259
- /**
260
- * {@inheritDoc Drawable.getMorphInfo}
261
- */ getMorphInfo() {
262
- return null;
263
- }
264
- /**
265
- * {@inheritDoc Drawable.getQueueType}
266
- */ getQueueType() {
267
- return this.material.getQueueType();
268
- }
269
- /**
270
- * {@inheritDoc Drawable.isUnlit}
271
- */ isUnlit() {
272
- return !this.material.supportLighting();
273
- }
274
- /**
275
- * {@inheritDoc Drawable.needSceneColor}
276
- */ needSceneColor() {
277
- return this.material.needSceneColor();
278
- }
279
- /**
280
- * {@inheritDoc Drawable.needSceneDepth}
281
- */ needSceneDepth() {
282
- return this.material.needSceneDepth();
283
- }
284
- /**
285
- * {@inheritDoc Drawable.getMaterial}
286
- */ getMaterial() {
287
- return this._material.get();
288
- }
289
- /**
290
- * {@inheritDoc Drawable.getPrimitive}
291
- */ getPrimitive() {
292
- return null;
293
- }
294
- /**
295
- * {@inheritDoc SceneNode.isClipmapTerrain}
296
- */ isClipmapTerrain() {
297
- return true;
298
- }
299
- /**
300
- * {@inheritDoc SceneNode.computeBoundingVolume}
301
- */ computeBoundingVolume() {
302
- return null;
303
- }
304
- /**
305
- * {@inheritDoc SceneNode.computeWorldBoundingVolume}
306
- */ computeWorldBoundingVolume() {
307
- const p = this.worldMatrix.transformPointAffine(Vector3.zero());
308
- const minHeight = this._minHeight * this.scale.y;
309
- const maxHeight = this._maxHeight * this.scale.y;
310
- return new BoundingBox(new Vector3(this.material.region.x, p.y + Math.min(minHeight, maxHeight), this.material.region.y), new Vector3(this.material.region.z, p.y + Math.max(minHeight, maxHeight), this.material.region.w));
311
- }
312
- /**
313
- * the actual world-space region covered by this terrain (After applying world transform).
314
- */ get worldRegion() {
315
- return this.material.region;
316
- }
317
- /**
318
- * Calculates the local transformation matrix.
319
- * For terrains, this only includes translation.
320
- *
321
- * @param outMatrix - Output matrix to store the result
322
- */ calculateLocalTransform(outMatrix) {
323
- outMatrix.translation(this._position);
324
- }
325
- /**
326
- * Calculates the world transformation matrix.
327
- * Terrains inherit only translation from parent nodes.
328
- *
329
- * @param outMatrix - Output matrix to store the result
330
- */ calculateWorldTransform(outMatrix) {
331
- outMatrix.set(this.localMatrix);
332
- if (this.parent) {
333
- outMatrix.m03 += this.parent.worldMatrix.m03;
334
- outMatrix.m13 += this.parent.worldMatrix.m13;
335
- outMatrix.m23 += this.parent.worldMatrix.m23;
336
- }
337
- }
338
- /**
339
- * Updates the terrain's bounding box by analyzing the height map.
340
- * This is an asynchronous operation that reads back GPU data.
341
- *
342
- * @param tmpTexture - Optional temporary texture to reuse (optimization)
343
- *
344
- * @example
345
- * ```typescript
346
- * // Update bounding box after changing height map
347
- * terrain.heightMap = newHeightMap;
348
- * terrain.updateBoundingBox();
349
- * ```
350
- */ updateBoundingBox() {
351
- const heightMap = this.heightMap;
352
- const device = Application.instance.device;
353
- let tmp = this._tmpTexture.get();
354
- if (tmp && (tmp.width !== heightMap.width || tmp.height !== heightMap.height)) {
355
- this._tmpTexture.dispose();
356
- }
357
- if (!this._tmpTexture.get()) {
358
- tmp = Application.instance.device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', heightMap.width, heightMap.height);
359
- tmp.name = 'TerrainBoundingBoxTexture';
360
- this._tmpTexture.set(tmp);
361
- }
362
- const tmpFB = device.createFrameBuffer([
363
- tmp
364
- ], null);
365
- ClipmapTerrain._copyBlitter.blit(heightMap, tmpFB, fetchSampler('clamp_nearest_nomip'));
366
- tmpFB.dispose();
367
- ClipmapTerrain._heightBoundingGenerator.render(tmp);
368
- const data = new Float32Array(4);
369
- tmp.readPixels(0, 0, 1, 1, 0, tmp.mipLevelCount - 1, data).then(()=>{
370
- this._minHeight = data[0];
371
- this._maxHeight = data[1];
372
- this.invalidateWorldBoundingVolume(false);
373
- }).catch((_err)=>{
374
- console.error('Read pixels failed');
375
- });
376
- }
377
- /** @internal */ createHeightMapTexture(width, height) {
378
- return Application.instance.device.createTexture2D(Application.instance.device.type === 'webgl' ? 'rgba16f' : 'r16f', width, height);
379
- }
380
- /** @internal */ _onTransformChanged(invalidateLocal) {
381
- super._onTransformChanged(invalidateLocal);
382
- this.updateRegion();
383
- }
384
- /** {@inheritDoc SceneNode.updatePerCamera} */ updatePerCamera(camera, _elapsedInSeconds, _deltaInSeconds) {
385
- const mat = this._material.get();
386
- const that = this;
387
- const bv = this.getWorldBoundingVolume().toAABB();
388
- this._renderData = this._clipmap.gather({
389
- camera: camera,
390
- minMaxWorldPos: mat.region,
391
- gridScale: this._gridScale,
392
- userData: this,
393
- calcAABB (userData, minX, maxX, minZ, maxZ, outAABB) {
394
- const p = that.worldMatrix.transformPointAffine(Vector3.zero());
395
- outAABB.minPoint.setXYZ(minX, bv ? bv.minPoint.y : p.y - 9999, minZ);
396
- outAABB.maxPoint.setXYZ(maxX, bv ? bv.maxPoint.y : p.y + 9999, maxZ);
397
- }
398
- });
399
- let maxMipLevel = 0;
400
- for (const info of this._renderData){
401
- const buffer = info.primitive.getVertexBuffer('texCoord1');
402
- buffer.bufferSubData(0, info.mipLevels, 0, info.numInstances);
403
- if (info.maxMiplevel > maxMipLevel) {
404
- maxMipLevel = info.maxMiplevel;
405
- }
406
- }
407
- const levelAABB = this._clipmap.calcLevelAABB(camera, mat.region, this._gridScale);
408
- const cameraPos = camera.getWorldPosition();
409
- const tmpBuffer = ClipmapTerrain._tmpBuffer;
410
- for(let i = 0; i <= maxMipLevel; i++){
411
- if (i === 0) {
412
- tmpBuffer[i * 8 + 0] = cameraPos.x;
413
- tmpBuffer[i * 8 + 1] = cameraPos.z;
414
- tmpBuffer[i * 8 + 2] = cameraPos.x;
415
- tmpBuffer[i * 8 + 3] = cameraPos.z;
416
- } else {
417
- const prevAABB = levelAABB[i - 1];
418
- tmpBuffer[i * 8 + 0] = prevAABB.minPoint.x;
419
- tmpBuffer[i * 8 + 1] = prevAABB.minPoint.z;
420
- tmpBuffer[i * 8 + 2] = prevAABB.maxPoint.x;
421
- tmpBuffer[i * 8 + 3] = prevAABB.maxPoint.z;
422
- }
423
- const currentAABB = levelAABB[i];
424
- tmpBuffer[i * 8 + 4] = 1 / (currentAABB.minPoint.x - tmpBuffer[i * 8 + 0]);
425
- tmpBuffer[i * 8 + 5] = 1 / (currentAABB.minPoint.z - tmpBuffer[i * 8 + 1]);
426
- tmpBuffer[i * 8 + 6] = 1 / (currentAABB.maxPoint.x - tmpBuffer[i * 8 + 2]);
427
- tmpBuffer[i * 8 + 7] = 1 / (currentAABB.maxPoint.z - tmpBuffer[i * 8 + 3]);
428
- }
429
- mat.setLevelData(tmpBuffer, 8 * (maxMipLevel + 1));
430
- this.scene.queuePerCameraUpdateNode(this);
431
- }
432
- /** @internal */ updateRegion() {
433
- if (this.material) {
434
- const x = Math.abs(this.scale.x);
435
- const z = Math.abs(this.scale.z);
436
- const px = this.position.x + (this.parent?.worldMatrix.m03 ?? 0);
437
- const pz = this.position.z + (this.parent?.worldMatrix.m23 ?? 0);
438
- this._gridScale = Math.max(x * this._sizeX / this.material.heightMap.width, z * this._sizeZ / this.material.heightMap.height);
439
- this.material.update(new Vector4(px, pz, px + x * this._sizeX, pz + z * this._sizeZ), this.scale);
440
- }
441
- this._grassRenderer?.get().updateMaterial();
442
- }
443
- /** {@inheritDoc Drawable.draw} */ draw(ctx) {
444
- const mat = this._material?.get();
445
- this.bind(ctx);
446
- mat.setClipmapGridInfo(this._gridScale, this.worldMatrix.m03, this.worldMatrix.m23);
447
- mat.apply(ctx);
448
- for (const info of this._renderData){
449
- mat.draw(info.primitive, ctx, info.numInstances);
450
- }
451
- if (ctx.renderPass.type !== RENDER_PASS_TYPE_OBJECT_COLOR && ctx.renderPass.type !== RENDER_PASS_TYPE_SHADOWMAP) {
452
- this._grassRenderer.get().draw(ctx);
453
- }
454
- }
455
- /** @internal */ resizeHeightMap(sizeX, sizeZ) {
456
- const oldHeightMap = this.material.heightMap;
457
- const device = Application.instance.device;
458
- const maxTextureSize = device.getDeviceCaps().textureCaps.maxTextureSize;
459
- sizeX = Math.min(Math.max(sizeX, 1), maxTextureSize) >> 0;
460
- sizeZ = Math.min(Math.max(sizeZ, 1), maxTextureSize) >> 0;
461
- if (sizeX !== oldHeightMap.width || sizeZ !== oldHeightMap.height) {
462
- const newHeightMap = device.createTexture2D(device.type === 'webgl' ? 'rgba16f' : 'r16f', sizeX, sizeZ);
463
- const fb = device.createFrameBuffer([
464
- newHeightMap
465
- ], null);
466
- ClipmapTerrain._copyBlitter.blit(oldHeightMap, fb, fetchSampler('clamp_linear_nomip'));
467
- fb.dispose();
468
- this.heightMap = newHeightMap;
469
- this.updateBoundingBox();
470
- }
471
- }
472
- /*
473
- private calcNormalHeightMap(): Texture2D {
474
- const device = Application.instance.device;
475
- if (!ClipmapTerrain._normalHeightMapProgram) {
476
- ClipmapTerrain._normalHeightMapProgram = device.buildRenderProgram({
477
- vertex(pb) {
478
- this.$inputs.pos = pb.vec2().attrib('position');
479
- this.$outputs.uv = pb.vec2();
480
- pb.main(function () {
481
- this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);
482
- this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
483
- if (device.type === 'webgpu') {
484
- this.$builtins.position.y = pb.neg(this.$builtins.position.y);
485
- }
486
- });
487
- },
488
- fragment(pb) {
489
- this.heightMap = pb.tex2D().uniform(0);
490
- this.texelSize = pb.vec2().uniform(0);
491
- this.terrainScale = pb.vec3().uniform(0);
492
- this.$outputs.outColor = pb.vec4();
493
- pb.func('calcNormal', [pb.vec2('texCoord')], function () {
494
- this.$l.t = pb.textureSample(
495
- this.heightMap,
496
- pb.sub(this.texCoord, pb.vec2(0, this.texelSize.y))
497
- ).r;
498
- this.$l.l = pb.textureSample(
499
- this.heightMap,
500
- pb.sub(this.texCoord, pb.vec2(this.texelSize.x, 0))
501
- ).r;
502
- this.$l.r = pb.textureSample(
503
- this.heightMap,
504
- pb.add(this.texCoord, pb.vec2(this.texelSize.x, 0))
505
- ).r;
506
- this.$l.b = pb.textureSample(
507
- this.heightMap,
508
- pb.add(this.texCoord, pb.vec2(0, this.texelSize.y))
509
- ).r;
510
- this.$l.tx = pb.vec3(this.terrainScale.x, pb.mul(pb.sub(this.r, this.l), this.terrainScale.y), 0);
511
- this.$l.tz = pb.vec3(0, pb.mul(pb.sub(this.b, this.t), this.terrainScale.y), this.terrainScale.z);
512
- this.$l.normal = pb.normalize(pb.cross(this.tz, this.tx));
513
- this.$return(this.normal);
514
- });
515
- pb.main(function () {
516
- this.$l.normal = this.calcNormal(this.$inputs.uv);
517
- this.$outputs.outColor = pb.vec4(pb.add(pb.mul(this.normal, 0.5), pb.vec3(0.5)), 1);
518
- });
519
- }
520
- });
521
- }
522
- }
523
- */ /**
524
- * Disposes of all resources used by this terrain.
525
- * Should be called when the terrain is no longer needed.
526
- */ dispose() {
527
- super.dispose();
528
- this._clipmap?.dispose();
529
- this._clipmap = null;
530
- this._material?.dispose();
531
- this._material = null;
532
- this._grassRenderer?.dispose();
533
- this._grassRenderer = null;
534
- }
535
- }
536
-
537
- export { ClipmapTerrain };
538
- //# sourceMappingURL=terrain-cm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terrain-cm.js","sources":["../../../../src/scene/terrain-cm/terrain-cm.ts"],"sourcesContent":["import type { Matrix4x4 } from '@zephyr3d/base';\r\nimport { Vector4, applyMixins, Vector3, DRef } from '@zephyr3d/base';\r\nimport type {\r\n GPUDataBuffer,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n Texture2D,\r\n Texture2DArray\r\n} from '@zephyr3d/device';\r\nimport type { NodeClonable, NodeCloneMethod } from '../scene_node';\r\nimport type { Scene } from '../scene';\r\nimport { GraphNode } from '../graph_node';\r\nimport { mixinDrawable } from '../../render/drawable_mixin';\r\nimport type { Drawable, DrawContext, PickTarget, Primitive, PrimitiveInstanceInfo } from '../../render';\r\nimport { Clipmap } from '../../render';\r\nimport { ClipmapTerrainMaterial } from '../../material/terrain-cm';\r\nimport { Application } from '../../app';\r\nimport type { MeshMaterial } from '../../material';\r\nimport type { BoundingVolume } from '../../utility/bounding_volume';\r\nimport { BoundingBox } from '../../utility/bounding_volume';\r\nimport {\r\n MAX_TERRAIN_MIPMAP_LEVELS,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP\r\n} from '../../values';\r\nimport type { BlitType } from '../../blitter';\r\nimport { CopyBlitter } from '../../blitter';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { RenderMipmap } from '../../utility/rendermipmap';\r\nimport { GrassRenderer } from './grass';\r\nimport type { Camera } from '../../camera';\r\n\r\nclass HeightMinMaxBlitter extends CopyBlitter {\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n return this.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType).xxxx;\r\n }\r\n}\r\n\r\nclass HeightBoundingGenerator extends RenderMipmap {\r\n renderPixel(\r\n scope: PBInsideFunctionScope,\r\n leftTop: PBShaderExp,\r\n rightTop: PBShaderExp,\r\n leftBottom: PBShaderExp,\r\n rightBottom: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n scope.$l.maxHeight = pb.max(pb.max(leftTop.r, rightTop.r), pb.max(leftBottom.r, rightBottom.r));\r\n scope.$l.minHeight = pb.min(pb.min(leftTop.g, rightTop.g), pb.min(leftBottom.g, rightBottom.g));\r\n return pb.vec4(scope.maxHeight, scope.minHeight, leftTop.r, 1);\r\n }\r\n}\r\n\r\n/**\r\n * ClipmapTerrain implements an efficient terrain rendering system using clipmaps.\r\n *\r\n * Clipmaps provide level-of-detail (LOD) rendering for large terrains by using\r\n * multiple nested grids at different resolutions. The terrain automatically\r\n * adjusts detail levels based on camera distance, providing high detail near\r\n * the camera and lower detail in the distance.\r\n *\r\n * Key features:\r\n * - Automatic LOD management based on camera position\r\n * - Support for height maps, splat maps, and detail textures\r\n * - Integrated grass rendering system\r\n *\r\n * @public\r\n */\r\nexport class ClipmapTerrain\r\n extends applyMixins(GraphNode, mixinDrawable)\r\n implements Drawable, NodeClonable<ClipmapTerrain>\r\n{\r\n private static readonly _heightBoundingGenerator = new HeightBoundingGenerator();\r\n private static readonly _copyBlitter = new HeightMinMaxBlitter();\r\n private static readonly _tmpBuffer = new Float32Array(MAX_TERRAIN_MIPMAP_LEVELS * 2 * 4);\r\n private readonly _pickTarget: PickTarget;\r\n private _clipmap: Clipmap;\r\n private _renderData: PrimitiveInstanceInfo[];\r\n private _gridScale: number;\r\n private _material: DRef<ClipmapTerrainMaterial>;\r\n private _grassRenderer: DRef<GrassRenderer>;\r\n private _castShadow: boolean;\r\n private _sizeX: number;\r\n private _sizeZ: number;\r\n private _heightMapAssetId: string;\r\n private _splatMapAssetId: string;\r\n private _grassAssetId: string;\r\n private _minHeight: number;\r\n private _maxHeight: number;\r\n private _tmpTexture: DRef<Texture2D>;\r\n /**\r\n * Creates a new clipmap terrain instance.\r\n *\r\n * @param scene - Scene to add the terrain to\r\n * @param sizeX - Terrain width in world units (default: 256)\r\n * @param sizeZ - Terrain depth in world units (default: 256)\r\n * @param clipMapTileSize - Size of each clipmap tile in vertices (default: 64)\r\n * Larger values use more memory but reduce draw calls\r\n *\r\n */\r\n constructor(scene: Scene, sizeX = 256, sizeZ = 256, clipMapTileSize = 64) {\r\n super(scene);\r\n this._pickTarget = { node: this };\r\n this._clipmap = new Clipmap(clipMapTileSize, ['tex1_f32'], MAX_TERRAIN_MIPMAP_LEVELS);\r\n this._renderData = null;\r\n this._grassRenderer = new DRef(new GrassRenderer(this));\r\n this._gridScale = 1;\r\n this._castShadow = true;\r\n this._sizeX = sizeX;\r\n this._sizeZ = sizeZ;\r\n this._heightMapAssetId = `.embedded.dir/${this.persistentId}-heightmap.bin`;\r\n this._grassAssetId = `.embedded.dir/${this.persistentId}-grass.bin`;\r\n this._splatMapAssetId = `.embedded.dir/${this.persistentId}-splatmap.bin`;\r\n this._minHeight = 0;\r\n this._maxHeight = 0;\r\n this._material = new DRef(\r\n new ClipmapTerrainMaterial(this.createHeightMapTexture(this._sizeX, this._sizeZ))\r\n );\r\n this._tmpTexture = new DRef();\r\n this.updateRegion();\r\n scene.queuePerCameraUpdateNode(this);\r\n }\r\n /**\r\n * Gets the integrated grass renderer for this terrain.\r\n * The grass renderer handles vegetation rendering on the terrain surface.\r\n *\r\n * @returns The grass renderer instance\r\n */\r\n get grassRenderer() {\r\n return this._grassRenderer.get();\r\n }\r\n /**\r\n * Gets the maximum number of detail maps supported by the terrain material.\r\n * Detail maps provide surface texturing (grass, rock, sand, etc.).\r\n *\r\n * @returns Maximum number of detail maps\r\n */\r\n get MAX_DETAIL_MAP_COUNT() {\r\n return ClipmapTerrainMaterial.MAX_DETAIL_MAP_COUNT;\r\n }\r\n /**\r\n * Gets the asset ID for the height map texture.\r\n * Generates a random UUID if not previously set.\r\n *\r\n * @returns Height map asset ID\r\n * @internal\r\n */\r\n get heightMapAssetId() {\r\n if (!this._heightMapAssetId) {\r\n this._heightMapAssetId = crypto.randomUUID();\r\n }\r\n return this._heightMapAssetId;\r\n }\r\n set heightMapAssetId(val: string) {\r\n this._heightMapAssetId = val;\r\n }\r\n /**\r\n * Gets the asset ID for the splat map texture.\r\n * Generates a random UUID if not previously set.\r\n *\r\n * @returns Splat map asset ID\r\n * @internal\r\n */\r\n get splatMapAssetId() {\r\n if (!this._splatMapAssetId) {\r\n this._splatMapAssetId = crypto.randomUUID();\r\n }\r\n return this._splatMapAssetId;\r\n }\r\n set splatMapAssetId(val: string) {\r\n this._splatMapAssetId = val;\r\n }\r\n /**\r\n * Gets the asset ID for grass configuration.\r\n * Generates a random UUID if not previously set.\r\n *\r\n * @returns Grass asset ID\r\n * @internal\r\n */\r\n get grassAssetId() {\r\n if (!this._grassAssetId) {\r\n this._grassAssetId = crypto.randomUUID();\r\n }\r\n return this._grassAssetId;\r\n }\r\n set grassAssetId(val: string) {\r\n this._grassAssetId = val;\r\n }\r\n /**\r\n * The current number of active detail maps.\r\n * Detail maps define different surface materials (grass, rock, etc.).\r\n *\r\n * @returns Number of active detail maps\r\n */\r\n get numDetailMaps(): number {\r\n return this.material.numDetailMaps;\r\n }\r\n set numDetailMaps(val: number) {\r\n this.material.numDetailMaps = val;\r\n }\r\n /** {@inheritDoc SceneNode.clone} */\r\n clone(method: NodeCloneMethod, recursive: boolean) {\r\n const other = new ClipmapTerrain(this.scene, this._sizeX, this._sizeZ);\r\n other.copyFrom(this, method, recursive);\r\n other.parent = this.parent;\r\n return other;\r\n }\r\n /** {@inheritDoc SceneNode.copyFrom} */\r\n copyFrom(other: this, method: NodeCloneMethod, recursive: boolean): void {\r\n super.copyFrom(other, method, recursive);\r\n this.setSize(other.sizeX, other.sizeZ);\r\n this.wireframe = other.wireframe;\r\n this.castShadow = other.castShadow;\r\n }\r\n /**\r\n * Sets the terrain size.\r\n * Triggers height map resize if dimensions change.\r\n *\r\n * @param sizeX - New width\r\n * @param sizeZ - New depth\r\n */\r\n setSize(sizeX: number, sizeZ: number) {\r\n if (sizeX !== this._sizeX || sizeZ !== this._sizeZ) {\r\n this._sizeX = sizeX;\r\n this._sizeZ = sizeZ;\r\n this.resizeHeightMap(this._sizeX, this._sizeZ);\r\n }\r\n }\r\n /** Wether the mesh node casts shadows */\r\n get castShadow(): boolean {\r\n return this._castShadow;\r\n }\r\n set castShadow(val: boolean) {\r\n this._castShadow = !!val;\r\n }\r\n /** The terrain width. */\r\n get sizeX() {\r\n return this._sizeX;\r\n }\r\n set sizeX(val: number) {\r\n if (val !== this._sizeX) {\r\n this._sizeX = val;\r\n this.resizeHeightMap(this._sizeX, this._sizeZ);\r\n }\r\n }\r\n /** The terrain depth. */\r\n get sizeZ() {\r\n return this._sizeZ;\r\n }\r\n set sizeZ(val: number) {\r\n if (val !== this._sizeZ) {\r\n this._sizeZ = val;\r\n this.resizeHeightMap(this._sizeX, this._sizeZ);\r\n }\r\n }\r\n /** The current height map texture. */\r\n get heightMap(): Texture2D {\r\n return this.material.heightMap;\r\n }\r\n set heightMap(val: Texture2D) {\r\n if (val) {\r\n this.material.heightMap = val;\r\n this.updateRegion();\r\n }\r\n }\r\n /** The splat map texture */\r\n get splatMap(): Texture2DArray | Texture2D {\r\n return this.material.getSplatMap();\r\n }\r\n /** Material instance of the terrain */\r\n get material(): ClipmapTerrainMaterial {\r\n return this._material?.get() ?? null;\r\n }\r\n /** whether wireframe rendering is enabled */\r\n get wireframe() {\r\n return this._clipmap.wireframe;\r\n }\r\n set wireframe(val: boolean) {\r\n this._clipmap.wireframe = val;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget(): PickTarget {\r\n return this._pickTarget;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData(): Texture2D {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo(): GPUDataBuffer<unknown> {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType(): number {\r\n return this.material.getQueueType();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit(): boolean {\r\n return !this.material.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor(): boolean {\r\n return this.material.needSceneColor();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth(): boolean {\r\n return this.material.needSceneDepth();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial(): MeshMaterial {\r\n return this._material.get();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive(): Primitive {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isClipmapTerrain}\r\n */\r\n isClipmapTerrain(): this is ClipmapTerrain {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeBoundingVolume}\r\n */\r\n computeBoundingVolume(): BoundingVolume {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeWorldBoundingVolume}\r\n */\r\n computeWorldBoundingVolume(): BoundingVolume {\r\n const p = this.worldMatrix.transformPointAffine(Vector3.zero());\r\n const minHeight = this._minHeight * this.scale.y;\r\n const maxHeight = this._maxHeight * this.scale.y;\r\n return new BoundingBox(\r\n new Vector3(this.material.region.x, p.y + Math.min(minHeight, maxHeight), this.material.region.y),\r\n new Vector3(this.material.region.z, p.y + Math.max(minHeight, maxHeight), this.material.region.w)\r\n );\r\n }\r\n /**\r\n * the actual world-space region covered by this terrain (After applying world transform).\r\n */\r\n get worldRegion(): Vector4 {\r\n return this.material.region;\r\n }\r\n /**\r\n * Calculates the local transformation matrix.\r\n * For terrains, this only includes translation.\r\n *\r\n * @param outMatrix - Output matrix to store the result\r\n */\r\n calculateLocalTransform(outMatrix: Matrix4x4): void {\r\n outMatrix.translation(this._position);\r\n }\r\n /**\r\n * Calculates the world transformation matrix.\r\n * Terrains inherit only translation from parent nodes.\r\n *\r\n * @param outMatrix - Output matrix to store the result\r\n */\r\n calculateWorldTransform(outMatrix: Matrix4x4): void {\r\n outMatrix.set(this.localMatrix);\r\n if (this.parent) {\r\n outMatrix.m03 += this.parent.worldMatrix.m03;\r\n outMatrix.m13 += this.parent.worldMatrix.m13;\r\n outMatrix.m23 += this.parent.worldMatrix.m23;\r\n }\r\n }\r\n /**\r\n * Updates the terrain's bounding box by analyzing the height map.\r\n * This is an asynchronous operation that reads back GPU data.\r\n *\r\n * @param tmpTexture - Optional temporary texture to reuse (optimization)\r\n *\r\n * @example\r\n * ```typescript\r\n * // Update bounding box after changing height map\r\n * terrain.heightMap = newHeightMap;\r\n * terrain.updateBoundingBox();\r\n * ```\r\n */\r\n updateBoundingBox() {\r\n const heightMap = this.heightMap;\r\n const device = Application.instance.device;\r\n let tmp = this._tmpTexture.get();\r\n if (tmp && (tmp.width !== heightMap.width || tmp.height !== heightMap.height)) {\r\n this._tmpTexture.dispose();\r\n }\r\n if (!this._tmpTexture.get()) {\r\n tmp = Application.instance.device.createTexture2D(\r\n device.type === 'webgl' ? 'rgba32f' : 'rg32f',\r\n heightMap.width,\r\n heightMap.height\r\n );\r\n tmp.name = 'TerrainBoundingBoxTexture';\r\n this._tmpTexture.set(tmp);\r\n }\r\n const tmpFB = device.createFrameBuffer([tmp], null);\r\n ClipmapTerrain._copyBlitter.blit(heightMap, tmpFB, fetchSampler('clamp_nearest_nomip'));\r\n tmpFB.dispose();\r\n ClipmapTerrain._heightBoundingGenerator.render(tmp);\r\n const data = new Float32Array(4);\r\n tmp\r\n .readPixels(0, 0, 1, 1, 0, tmp.mipLevelCount - 1, data)\r\n .then(() => {\r\n this._minHeight = data[0];\r\n this._maxHeight = data[1];\r\n this.invalidateWorldBoundingVolume(false);\r\n })\r\n .catch((_err) => {\r\n console.error('Read pixels failed');\r\n });\r\n }\r\n /** @internal */\r\n createHeightMapTexture(width: number, height: number) {\r\n return Application.instance.device.createTexture2D(\r\n Application.instance.device.type === 'webgl' ? 'rgba16f' : 'r16f',\r\n width,\r\n height\r\n );\r\n }\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean): void {\r\n super._onTransformChanged(invalidateLocal);\r\n this.updateRegion();\r\n }\r\n /** {@inheritDoc SceneNode.updatePerCamera} */\r\n updatePerCamera(camera: Camera, _elapsedInSeconds: number, _deltaInSeconds: number): void {\r\n const mat = this._material.get();\r\n const that = this;\r\n const bv = this.getWorldBoundingVolume().toAABB();\r\n this._renderData = this._clipmap.gather({\r\n camera: camera,\r\n minMaxWorldPos: mat.region,\r\n gridScale: this._gridScale,\r\n userData: this,\r\n calcAABB(userData: unknown, minX, maxX, minZ, maxZ, outAABB) {\r\n const p = that.worldMatrix.transformPointAffine(Vector3.zero());\r\n outAABB.minPoint.setXYZ(minX, bv ? bv.minPoint.y : p.y - 9999, minZ);\r\n outAABB.maxPoint.setXYZ(maxX, bv ? bv.maxPoint.y : p.y + 9999, maxZ);\r\n }\r\n });\r\n let maxMipLevel = 0;\r\n for (const info of this._renderData) {\r\n const buffer = info.primitive.getVertexBuffer('texCoord1');\r\n buffer.bufferSubData(0, info.mipLevels, 0, info.numInstances);\r\n if (info.maxMiplevel > maxMipLevel) {\r\n maxMipLevel = info.maxMiplevel;\r\n }\r\n }\r\n const levelAABB = this._clipmap.calcLevelAABB(camera, mat.region, this._gridScale);\r\n const cameraPos = camera.getWorldPosition();\r\n const tmpBuffer = ClipmapTerrain._tmpBuffer;\r\n\r\n for (let i = 0; i <= maxMipLevel; i++) {\r\n if (i === 0) {\r\n tmpBuffer[i * 8 + 0] = cameraPos.x;\r\n tmpBuffer[i * 8 + 1] = cameraPos.z;\r\n tmpBuffer[i * 8 + 2] = cameraPos.x;\r\n tmpBuffer[i * 8 + 3] = cameraPos.z;\r\n } else {\r\n const prevAABB = levelAABB[i - 1];\r\n tmpBuffer[i * 8 + 0] = prevAABB.minPoint.x;\r\n tmpBuffer[i * 8 + 1] = prevAABB.minPoint.z;\r\n tmpBuffer[i * 8 + 2] = prevAABB.maxPoint.x;\r\n tmpBuffer[i * 8 + 3] = prevAABB.maxPoint.z;\r\n }\r\n const currentAABB = levelAABB[i];\r\n tmpBuffer[i * 8 + 4] = 1 / (currentAABB.minPoint.x - tmpBuffer[i * 8 + 0]);\r\n tmpBuffer[i * 8 + 5] = 1 / (currentAABB.minPoint.z - tmpBuffer[i * 8 + 1]);\r\n tmpBuffer[i * 8 + 6] = 1 / (currentAABB.maxPoint.x - tmpBuffer[i * 8 + 2]);\r\n tmpBuffer[i * 8 + 7] = 1 / (currentAABB.maxPoint.z - tmpBuffer[i * 8 + 3]);\r\n }\r\n mat.setLevelData(tmpBuffer, 8 * (maxMipLevel + 1));\r\n\r\n this.scene.queuePerCameraUpdateNode(this);\r\n }\r\n /** @internal */\r\n updateRegion() {\r\n if (this.material) {\r\n const x = Math.abs(this.scale.x);\r\n const z = Math.abs(this.scale.z);\r\n const px = this.position.x + (this.parent?.worldMatrix.m03 ?? 0);\r\n const pz = this.position.z + (this.parent?.worldMatrix.m23 ?? 0);\r\n this._gridScale = Math.max(\r\n (x * this._sizeX) / this.material.heightMap.width,\r\n (z * this._sizeZ) / this.material.heightMap.height\r\n );\r\n this.material.update(new Vector4(px, pz, px + x * this._sizeX, pz + z * this._sizeZ), this.scale);\r\n }\r\n this._grassRenderer?.get().updateMaterial();\r\n }\r\n /** {@inheritDoc Drawable.draw} */\r\n draw(ctx: DrawContext) {\r\n const mat = this._material?.get();\r\n this.bind(ctx);\r\n mat.setClipmapGridInfo(this._gridScale, this.worldMatrix.m03, this.worldMatrix.m23);\r\n mat.apply(ctx);\r\n for (const info of this._renderData) {\r\n mat.draw(info.primitive, ctx, info.numInstances);\r\n }\r\n if (\r\n ctx.renderPass.type !== RENDER_PASS_TYPE_OBJECT_COLOR &&\r\n ctx.renderPass.type !== RENDER_PASS_TYPE_SHADOWMAP\r\n ) {\r\n this._grassRenderer.get().draw(ctx);\r\n }\r\n }\r\n /** @internal */\r\n private resizeHeightMap(sizeX: number, sizeZ: number) {\r\n const oldHeightMap = this.material.heightMap;\r\n const device = Application.instance.device;\r\n const maxTextureSize = device.getDeviceCaps().textureCaps.maxTextureSize;\r\n sizeX = Math.min(Math.max(sizeX, 1), maxTextureSize) >> 0;\r\n sizeZ = Math.min(Math.max(sizeZ, 1), maxTextureSize) >> 0;\r\n if (sizeX !== oldHeightMap.width || sizeZ !== oldHeightMap.height) {\r\n const newHeightMap = device.createTexture2D(device.type === 'webgl' ? 'rgba16f' : 'r16f', sizeX, sizeZ);\r\n const fb = device.createFrameBuffer([newHeightMap], null);\r\n ClipmapTerrain._copyBlitter.blit(oldHeightMap, fb, fetchSampler('clamp_linear_nomip'));\r\n fb.dispose();\r\n this.heightMap = newHeightMap;\r\n this.updateBoundingBox();\r\n }\r\n }\r\n /*\r\n private calcNormalHeightMap(): Texture2D {\r\n const device = Application.instance.device;\r\n if (!ClipmapTerrain._normalHeightMapProgram) {\r\n ClipmapTerrain._normalHeightMapProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.heightMap = pb.tex2D().uniform(0);\r\n this.texelSize = pb.vec2().uniform(0);\r\n this.terrainScale = pb.vec3().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('calcNormal', [pb.vec2('texCoord')], function () {\r\n this.$l.t = pb.textureSample(\r\n this.heightMap,\r\n pb.sub(this.texCoord, pb.vec2(0, this.texelSize.y))\r\n ).r;\r\n this.$l.l = pb.textureSample(\r\n this.heightMap,\r\n pb.sub(this.texCoord, pb.vec2(this.texelSize.x, 0))\r\n ).r;\r\n this.$l.r = pb.textureSample(\r\n this.heightMap,\r\n pb.add(this.texCoord, pb.vec2(this.texelSize.x, 0))\r\n ).r;\r\n this.$l.b = pb.textureSample(\r\n this.heightMap,\r\n pb.add(this.texCoord, pb.vec2(0, this.texelSize.y))\r\n ).r;\r\n this.$l.tx = pb.vec3(this.terrainScale.x, pb.mul(pb.sub(this.r, this.l), this.terrainScale.y), 0);\r\n this.$l.tz = pb.vec3(0, pb.mul(pb.sub(this.b, this.t), this.terrainScale.y), this.terrainScale.z);\r\n this.$l.normal = pb.normalize(pb.cross(this.tz, this.tx));\r\n this.$return(this.normal);\r\n });\r\n pb.main(function () {\r\n this.$l.normal = this.calcNormal(this.$inputs.uv);\r\n this.$outputs.outColor = pb.vec4(pb.add(pb.mul(this.normal, 0.5), pb.vec3(0.5)), 1);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n */\r\n /**\r\n * Disposes of all resources used by this terrain.\r\n * Should be called when the terrain is no longer needed.\r\n */\r\n dispose(): void {\r\n super.dispose();\r\n this._clipmap?.dispose();\r\n this._clipmap = null;\r\n this._material?.dispose();\r\n this._material = null;\r\n this._grassRenderer?.dispose();\r\n this._grassRenderer = null;\r\n }\r\n}\r\n"],"names":["HeightMinMaxBlitter","CopyBlitter","filter","scope","type","srcTex","srcUV","srcLayer","sampleType","readTexel","xxxx","HeightBoundingGenerator","RenderMipmap","renderPixel","leftTop","rightTop","leftBottom","rightBottom","pb","$builder","$l","maxHeight","max","r","minHeight","min","g","vec4","ClipmapTerrain","applyMixins","GraphNode","mixinDrawable","_heightBoundingGenerator","_copyBlitter","_tmpBuffer","Float32Array","MAX_TERRAIN_MIPMAP_LEVELS","_pickTarget","_clipmap","_renderData","_gridScale","_material","_grassRenderer","_castShadow","_sizeX","_sizeZ","_heightMapAssetId","_splatMapAssetId","_grassAssetId","_minHeight","_maxHeight","_tmpTexture","scene","sizeX","sizeZ","clipMapTileSize","node","Clipmap","DRef","GrassRenderer","persistentId","ClipmapTerrainMaterial","createHeightMapTexture","updateRegion","queuePerCameraUpdateNode","grassRenderer","get","MAX_DETAIL_MAP_COUNT","heightMapAssetId","crypto","randomUUID","val","splatMapAssetId","grassAssetId","numDetailMaps","material","clone","method","recursive","other","copyFrom","parent","setSize","wireframe","castShadow","resizeHeightMap","heightMap","splatMap","getSplatMap","getPickTarget","getMorphData","getMorphInfo","getQueueType","isUnlit","supportLighting","needSceneColor","needSceneDepth","getMaterial","getPrimitive","isClipmapTerrain","computeBoundingVolume","computeWorldBoundingVolume","p","worldMatrix","transformPointAffine","Vector3","zero","scale","y","BoundingBox","region","x","Math","z","w","worldRegion","calculateLocalTransform","outMatrix","translation","_position","calculateWorldTransform","set","localMatrix","m03","m13","m23","updateBoundingBox","device","Application","instance","tmp","width","height","dispose","createTexture2D","name","tmpFB","createFrameBuffer","blit","fetchSampler","render","data","readPixels","mipLevelCount","then","invalidateWorldBoundingVolume","catch","_err","console","error","_onTransformChanged","invalidateLocal","updatePerCamera","camera","_elapsedInSeconds","_deltaInSeconds","mat","that","bv","getWorldBoundingVolume","toAABB","gather","minMaxWorldPos","gridScale","userData","calcAABB","minX","maxX","minZ","maxZ","outAABB","minPoint","setXYZ","maxPoint","maxMipLevel","info","buffer","primitive","getVertexBuffer","bufferSubData","mipLevels","numInstances","maxMiplevel","levelAABB","calcLevelAABB","cameraPos","getWorldPosition","tmpBuffer","i","prevAABB","currentAABB","setLevelData","abs","px","position","pz","update","Vector4","updateMaterial","draw","ctx","bind","setClipmapGridInfo","apply","renderPass","RENDER_PASS_TYPE_OBJECT_COLOR","RENDER_PASS_TYPE_SHADOWMAP","oldHeightMap","maxTextureSize","getDeviceCaps","textureCaps","newHeightMap","fb"],"mappings":"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"}