@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 +1 @@
1
- {"version":3,"file":"light.js","sources":["../../src/scene/light.ts"],"sourcesContent":["import type { Immutable, Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { Vector3, Vector4, DWeakRef } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { ShadowMapper } from '../shadow/shadowmapper';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LIGHT_TYPE_RECT } from '../values';\r\nimport type { Scene } from './scene';\r\n\r\n/**\r\n * Base class for any kind of light node\r\n * @public\r\n */\r\nexport abstract class BaseLight extends GraphNode {\r\n /** @internal */\r\n protected _type: number;\r\n /** @internal */\r\n protected _intensity: number;\r\n /** @internal */\r\n protected _positionRange: Nullable<Vector4>;\r\n /** @internal */\r\n protected _directionCutoff: Nullable<Vector4>;\r\n /** @internal */\r\n protected _diffuseIntensity: Nullable<Vector4>;\r\n /** @internal */\r\n protected _extraParams: Nullable<Vector4>;\r\n /**\r\n * Creates a light node\r\n * @param scene - The scene to which the light node belongs\r\n * @param type - Type of the light node\r\n */\r\n constructor(scene: Scene, type: number) {\r\n super(scene);\r\n this._intensity = 1;\r\n this._type = type;\r\n this._positionRange = null;\r\n this._directionCutoff = null;\r\n this._diffuseIntensity = null;\r\n this._extraParams = null;\r\n }\r\n /** Gets the light type */\r\n get lightType() {\r\n return this._type;\r\n }\r\n /** Intensity of the light */\r\n get intensity() {\r\n return this._intensity;\r\n }\r\n set intensity(val) {\r\n this.setIntensity(val);\r\n }\r\n /**\r\n * Position and range of the light\r\n *\r\n * @remarks\r\n * Gets the position in world space of the light.\r\n * Light range is encoded into the W component.\r\n */\r\n get positionAndRange(): Immutable<Vector4> {\r\n if (!this._positionRange) {\r\n this.computeUniforms();\r\n }\r\n return this._positionRange!;\r\n }\r\n /**\r\n * Direction and cutoff of the light\r\n *\r\n * @remarks\r\n * Gets the direction in world space of the light\r\n * Light cutoff (for spot light only) is encoded into the W component.\r\n */\r\n get directionAndCutoff() {\r\n if (!this._directionCutoff) {\r\n this.computeUniforms();\r\n }\r\n return this._directionCutoff!;\r\n }\r\n /**\r\n * Color and intensity of the light\r\n *\r\n * @remarks\r\n * Gets the color of the light.\r\n * Light intensity is encoded into the W component.\r\n */\r\n get diffuseAndIntensity() {\r\n if (!this._diffuseIntensity) {\r\n this.computeUniforms();\r\n }\r\n return this._diffuseIntensity!;\r\n }\r\n /**\r\n * Extra parameters of the light\r\n *\r\n * @remarks\r\n * Custom data for advanced light types.\r\n */\r\n get extraParams() {\r\n if (!this._extraParams) {\r\n this.computeUniforms();\r\n }\r\n return this._extraParams!;\r\n }\r\n /**\r\n * View matrix of the light\r\n *\r\n * @remarks\r\n * The view matrix of the light is used to transform a point\r\n * from the world space to the light space.\r\n */\r\n get viewMatrix(): Immutable<Matrix4x4> {\r\n return this.invWorldMatrix;\r\n }\r\n /**\r\n * Sets the intensity of the light\r\n * @param val - Intensity of the light\r\n * @returns self\r\n */\r\n setIntensity(val: number) {\r\n if (this._intensity !== val) {\r\n this._intensity = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n invalidateUniforms() {\r\n this._positionRange = null;\r\n this._directionCutoff = null;\r\n this._diffuseIntensity = null;\r\n this._extraParams = null;\r\n }\r\n /** {@inheritDoc SceneNode.isLight} */\r\n isLight(): this is BaseLight {\r\n return true;\r\n }\r\n /** {@inheritDoc SceneNode.isPunctualLight} */\r\n isPunctualLight(): this is PunctualLight {\r\n return false;\r\n }\r\n /** returns true if this is a directional light */\r\n isDirectionLight(): this is DirectionalLight {\r\n return false;\r\n }\r\n /** returns true if this is a point light */\r\n isPointLight(): this is PointLight {\r\n return false;\r\n }\r\n /** returns true if this is a spot light */\r\n isSpotLight(): this is SpotLight {\r\n return false;\r\n }\r\n /** returns true if this is a rect light */\r\n isRectLight(): this is RectLight {\r\n return false;\r\n }\r\n /** @internal */\r\n abstract computeUniforms(): void;\r\n}\r\n\r\n/*\r\nexport abstract class AmbientLight extends BaseLight {\r\n constructor(scene: Scene, type: number) {\r\n super(scene, type);\r\n }\r\n isAmbientLight(): this is AmbientLight {\r\n return true;\r\n }\r\n}\r\n*/\r\n\r\n/**\r\n * Base class for any kind of puncual light\r\n * @public\r\n */\r\nexport class PunctualLight extends BaseLight {\r\n /** @internal */\r\n protected _color: Vector4;\r\n /** @internal */\r\n protected _castShadow: boolean;\r\n /** @internal */\r\n protected _shadowMapper: ShadowMapper;\r\n /**\r\n * Creates an instance of punctual light\r\n * @param scene - The scene to which the punctual light belongs\r\n * @param type - The light type\r\n */\r\n constructor(scene: Scene, type: number) {\r\n super(scene, type);\r\n this._color = Vector4.one();\r\n this._castShadow = false;\r\n this._shadowMapper = new ShadowMapper(this);\r\n }\r\n /** Color of the light */\r\n get color() {\r\n return this._color.clone();\r\n }\r\n set color(color) {\r\n this.setColor(color);\r\n }\r\n /**\r\n * Sets color of the light\r\n * @param color - The color to set\r\n * @returns self\r\n */\r\n setColor(color: Vector4 | Vector3) {\r\n this._color.set(color);\r\n this.invalidateUniforms();\r\n return this;\r\n }\r\n /** Whether this light casts shadows */\r\n get castShadow() {\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this.setCastShadow(b);\r\n }\r\n /**\r\n * Sets whether this light casts shadows\r\n * @param b - true if the light casts shadows\r\n * @returns self\r\n */\r\n setCastShadow(b: boolean): this {\r\n if (this._castShadow !== !!b) {\r\n this._castShadow = !!b;\r\n if (this._castShadow && this.isDirectionLight() && !this.shadow.shadowRegion) {\r\n this.shadow.updateDirectionalShadowRegion(true);\r\n }\r\n }\r\n return this;\r\n }\r\n /** The shadow mapper for this light */\r\n get shadow() {\r\n return this._shadowMapper;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isPunctualLight}\r\n * @override\r\n */\r\n isPunctualLight(): this is PunctualLight {\r\n return true;\r\n }\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this.invalidateUniforms();\r\n // this._transformCallback(true, false);\r\n }\r\n /** @internal */\r\n computeUniforms() {}\r\n}\r\n\r\n/**\r\n * Directional light\r\n * @public\r\n */\r\nexport class DirectionalLight extends PunctualLight {\r\n private static readonly _currentSunLight: WeakMap<Scene, DWeakRef<DirectionalLight>> = new WeakMap();\r\n /**\r\n * Creates an instance of directional light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_DIRECTIONAL);\r\n this.intensity = 10;\r\n if (!DirectionalLight.getSunLight(scene)) {\r\n DirectionalLight.setSunLight(scene, this);\r\n }\r\n }\r\n static getSunLight(scene: Scene) {\r\n return this._currentSunLight.get(scene)?.get() ?? null;\r\n }\r\n static setSunLight(scene: Scene, light: Nullable<DirectionalLight>) {\r\n if (light && scene !== light.scene) {\r\n throw new Error('setSunLight(): Light does not belongs to scene');\r\n }\r\n const ref = this._currentSunLight.get(scene);\r\n if (!ref) {\r\n this._currentSunLight.set(scene, new DWeakRef(light));\r\n } else {\r\n ref.set(light);\r\n }\r\n }\r\n /**\r\n * true if the light was defined as sun light\r\n *\r\n * @remarks\r\n * Only one directional light will be marked as sun light.\r\n **/\r\n get sunLight(): boolean {\r\n return DirectionalLight.getSunLight(this.scene!) === this;\r\n }\r\n set sunLight(val) {\r\n if (val) {\r\n DirectionalLight.setSunLight(this.scene!, this);\r\n } else if (DirectionalLight.getSunLight(this.scene!) === this) {\r\n DirectionalLight.setSunLight(this.scene!, null);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isDirectionLight}\r\n * @override\r\n */\r\n isDirectionLight(): this is DirectionalLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n return null;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2).scaleBy(-1);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, -1);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, 0);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(0, 0, 0, this.lightType);\r\n }\r\n // adapt from DXSDK\r\n /*\r\n private _computeNearAndFar(\r\n frustumMin: Vector3,\r\n frustumMax: Vector3,\r\n aabbLightSpace: Vector3[]\r\n ): [number, number] {\r\n type Triangle = { pt: [Vector3, Vector3, Vector3]; culled: boolean };\r\n function dupTriangle(src: Triangle): Triangle {\r\n return {\r\n pt: [\r\n src.pt[0] ? new Vector3(src.pt[0]) : null,\r\n src.pt[1] ? new Vector3(src.pt[1]) : null,\r\n src.pt[2] ? new Vector3(src.pt[2]) : null\r\n ],\r\n culled: src.culled\r\n };\r\n }\r\n let nearPlane = Number.MAX_VALUE;\r\n let farPlane = -Number.MAX_VALUE;\r\n const triangleList: Triangle[] = Array.from({ length: 16 }).map((val) => ({\r\n pt: [null, null, null],\r\n culled: false\r\n }));\r\n let triangleCount = 1;\r\n triangleList[0].pt[0] = aabbLightSpace[0];\r\n triangleList[0].pt[1] = aabbLightSpace[1];\r\n triangleList[0].pt[2] = aabbLightSpace[2];\r\n const triIndices = [\r\n 0, 1, 2, 1, 2, 3, 4, 5, 6, 5, 6, 7, 0, 2, 4, 2, 4, 6, 1, 3, 5, 3, 5, 7, 0, 1, 4, 1, 4, 5, 2, 3, 6, 3, 6,\r\n 7\r\n ];\r\n const pointPassesCollision: number[] = [0, 0, 0];\r\n const minx = frustumMin.x;\r\n const maxx = frustumMax.x;\r\n const miny = frustumMin.y;\r\n const maxy = frustumMax.y;\r\n for (let i = 0; i < 12; i++) {\r\n triangleList[0].pt[0] = aabbLightSpace[triIndices[i * 3 + 0]];\r\n triangleList[0].pt[1] = aabbLightSpace[triIndices[i * 3 + 1]];\r\n triangleList[0].pt[2] = aabbLightSpace[triIndices[i * 3 + 2]];\r\n triangleList[0].culled = false;\r\n triangleCount = 1;\r\n for (let j = 0; j < 4; j++) {\r\n let edge: number, comp: number;\r\n if (j === 0) {\r\n edge = minx;\r\n comp = 0;\r\n } else if (j === 1) {\r\n edge = maxx;\r\n comp = 0;\r\n } else if (j === 2) {\r\n edge = miny;\r\n comp = 1;\r\n } else {\r\n edge = maxy;\r\n comp = 1;\r\n }\r\n let k = 0;\r\n while (k < triangleCount) {\r\n if (!triangleList[k].culled) {\r\n let insideVertCount = 0;\r\n let tempOrder: Vector3 = null;\r\n if (j === 0) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].x > minx) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else if (j === 1) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].x < maxx) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else if (j === 2) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].y > miny) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].y < maxy) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n }\r\n if (pointPassesCollision[1] && !pointPassesCollision[0]) {\r\n tempOrder = triangleList[k].pt[0];\r\n triangleList[k].pt[0] = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = tempOrder;\r\n pointPassesCollision[0] = 1;\r\n pointPassesCollision[1] = 0;\r\n }\r\n if (pointPassesCollision[2] && !pointPassesCollision[1]) {\r\n tempOrder = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = triangleList[k].pt[2];\r\n triangleList[k].pt[2] = tempOrder;\r\n pointPassesCollision[1] = 1;\r\n pointPassesCollision[2] = 0;\r\n }\r\n if (pointPassesCollision[1] && !pointPassesCollision[0]) {\r\n tempOrder = triangleList[k].pt[0];\r\n triangleList[k].pt[0] = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = tempOrder;\r\n pointPassesCollision[0] = 1;\r\n pointPassesCollision[1] = 0;\r\n }\r\n if (insideVertCount === 0) {\r\n triangleList[k].culled = true;\r\n } else if (insideVertCount === 1) {\r\n triangleList[k].culled = false;\r\n const v0Tov1 = Vector3.sub(triangleList[k].pt[1], triangleList[k].pt[0]);\r\n const v0Tov2 = Vector3.sub(triangleList[k].pt[2], triangleList[k].pt[0]);\r\n const hitPointTimeRatio = edge - triangleList[k].pt[0][comp];\r\n const distanceAlongV1 = hitPointTimeRatio / v0Tov1[comp];\r\n const distanceAloneV2 = hitPointTimeRatio / v0Tov2[comp];\r\n v0Tov1.scaleBy(distanceAlongV1);\r\n v0Tov1.addBy(triangleList[k].pt[0]);\r\n v0Tov2.scaleBy(distanceAloneV2);\r\n v0Tov2.addBy(triangleList[k].pt[0]);\r\n triangleList[k].pt[1] = v0Tov2;\r\n triangleList[k].pt[2] = v0Tov1;\r\n } else if (insideVertCount === 2) {\r\n triangleList[triangleCount] = dupTriangle(triangleList[k + 1]);\r\n triangleList[k].culled = false;\r\n triangleList[k + 1].culled = false;\r\n const v2Tov0 = Vector3.sub(triangleList[k].pt[0], triangleList[k].pt[2]);\r\n const v2Tov1 = Vector3.sub(triangleList[k].pt[1], triangleList[k].pt[2]);\r\n const hitPointTime_2_0 = edge - triangleList[k].pt[2][comp];\r\n const distanceAloneVec_2_0 = hitPointTime_2_0 / v2Tov0[comp];\r\n v2Tov0.scaleBy(distanceAloneVec_2_0);\r\n v2Tov0.addBy(triangleList[k].pt[2]);\r\n triangleList[k + 1].pt[0] = new Vector3(triangleList[k].pt[0]);\r\n triangleList[k + 1].pt[1] = new Vector3(triangleList[k].pt[1]);\r\n triangleList[k + 1].pt[2] = v2Tov0;\r\n const hitPointTime_2_1 = edge - triangleList[k].pt[2][comp];\r\n const distanceAloneVec_2_1 = hitPointTime_2_1 / v2Tov1[comp];\r\n v2Tov1.scaleBy(distanceAloneVec_2_1);\r\n v2Tov1.addBy(triangleList[k].pt[2]);\r\n triangleList[k].pt[0] = new Vector3(triangleList[k + 1].pt[1]);\r\n triangleList[k].pt[1] = new Vector3(triangleList[k + 1].pt[2]);\r\n triangleList[k].pt[2] = v2Tov1;\r\n triangleCount++;\r\n k++;\r\n } else {\r\n triangleList[k].culled = false;\r\n }\r\n }\r\n k++;\r\n }\r\n }\r\n for (let index = 0; index < triangleCount; index++) {\r\n if (!triangleList[index].culled) {\r\n for (let v = 0; v < 3; v++) {\r\n const z = triangleList[index].pt[v].z;\r\n if (nearPlane > z) {\r\n nearPlane = z;\r\n }\r\n if (farPlane < z) {\r\n farPlane = z;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return [nearPlane, farPlane];\r\n }\r\n */\r\n}\r\n\r\n/**\r\n * Point light\r\n * @public\r\n */\r\nexport class PointLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _diffuseScale: number;\r\n /** @internal */\r\n protected _specularScale: number;\r\n /** @internal */\r\n protected _sourceRadius: number;\r\n /**\r\n * Creates an instance of point light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_POINT);\r\n this._range = 10;\r\n this._diffuseScale = 1;\r\n this._specularScale = 1;\r\n this._sourceRadius = 0;\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /** Diffuse scale of the point light */\r\n get diffuseScale() {\r\n return this._diffuseScale;\r\n }\r\n set diffuseScale(val: number) {\r\n this.setDiffuseScale(val);\r\n }\r\n /** Specular scale of the point light */\r\n get specularScale() {\r\n return this._specularScale;\r\n }\r\n set specularScale(val: number) {\r\n this.setSpecularScale(val);\r\n }\r\n /** Source radius of the point light */\r\n get sourceRadius() {\r\n return this._sourceRadius;\r\n }\r\n set sourceRadius(val: number) {\r\n this.setSourceRadius(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the diffuse scale of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setDiffuseScale(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._diffuseScale !== val) {\r\n this._diffuseScale = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the specular scale of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setSpecularScale(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._specularScale !== val) {\r\n this._specularScale = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the source radius of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setSourceRadius(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._sourceRadius !== val) {\r\n this._sourceRadius = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isPointLight}\r\n * @override\r\n */\r\n isPointLight(): this is PointLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n bbox.minPoint = new Vector3(-this._range, -this._range, -this._range);\r\n bbox.maxPoint = new Vector3(this._range, this._range, this._range);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, this.range);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, -1);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(\r\n this._diffuseScale,\r\n this._specularScale,\r\n this._sourceRadius,\r\n this.lightType\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Spot light\r\n * @public\r\n */\r\nexport class SpotLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _cutoff: number;\r\n /**\r\n * Creates an instance of spot light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_SPOT);\r\n this._range = 10;\r\n this._cutoff = Math.cos(Math.PI / 4);\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The cutoff of the light */\r\n get cutoff() {\r\n return this._cutoff;\r\n }\r\n set cutoff(val: number) {\r\n this.setCutoff(val);\r\n }\r\n /**\r\n * Sets the cutoff of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setCutoff(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._cutoff !== val) {\r\n this._cutoff = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isSpotLight}\r\n * @override\r\n */\r\n isSpotLight(): this is SpotLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n const cosCutoff = Math.cos(this._cutoff);\r\n const r = (this._range / cosCutoff) * Math.sqrt(1 - cosCutoff * cosCutoff);\r\n bbox.minPoint = new Vector3(-r, -r, 0);\r\n bbox.maxPoint = new Vector3(r, r, this._range);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2).scaleBy(-1);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, this.range);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, this.cutoff);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(0, 0, 0, this.lightType);\r\n }\r\n}\r\n\r\n/**\r\n * Rectangular area light\r\n * @public\r\n */\r\nexport class RectLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _width: number;\r\n /** @internal */\r\n protected _height: number;\r\n /**\r\n * Creates an instance of rect light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_RECT);\r\n this._range = 10;\r\n this._width = 1;\r\n this._height = 1;\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The width of the light */\r\n get width() {\r\n return this._width;\r\n }\r\n set width(val: number) {\r\n this.setWidth(val);\r\n }\r\n /**\r\n * Sets the width of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setWidth(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._width !== val) {\r\n this._width = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The height of the light */\r\n get height() {\r\n return this._height;\r\n }\r\n set height(val: number) {\r\n this.setHeight(val);\r\n }\r\n /**\r\n * Sets the height of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setHeight(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._height !== val) {\r\n this._height = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isRectLight}\r\n * @override\r\n */\r\n isRectLight(): this is RectLight {\r\n return true;\r\n }\r\n /**\r\n * Rect light supports shadow in current pipeline\r\n */\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n const r = this._range;\r\n bbox.minPoint = new Vector3(-r, -r, -r);\r\n bbox.maxPoint = new Vector3(r, r, r);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const pos = this.worldMatrix.getRow(3);\r\n const axisX = this.worldMatrix\r\n .getRow(0)\r\n .inplaceNormalize()\r\n .scaleBy(this._width * 0.5);\r\n const axisY = this.worldMatrix\r\n .getRow(1)\r\n .inplaceNormalize()\r\n .scaleBy(this._height * 0.5);\r\n this._positionRange = new Vector4(pos.x, pos.y, pos.z, this.range);\r\n this._directionCutoff = new Vector4(axisX.x, axisX.y, axisX.z, 0);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(axisY.x, axisY.y, axisY.z, this.lightType);\r\n }\r\n}\r\n"],"names":["BaseLight","GraphNode","scene","type","_intensity","_type","_positionRange","_directionCutoff","_diffuseIntensity","_extraParams","lightType","intensity","val","setIntensity","positionAndRange","computeUniforms","directionAndCutoff","diffuseAndIntensity","extraParams","viewMatrix","invWorldMatrix","invalidateUniforms","isLight","isPunctualLight","isDirectionLight","isPointLight","isSpotLight","isRectLight","PunctualLight","_color","Vector4","one","_castShadow","_shadowMapper","ShadowMapper","color","clone","setColor","set","castShadow","b","setCastShadow","shadow","shadowRegion","updateDirectionalShadowRegion","_onTransformChanged","invalidateLocal","DirectionalLight","_currentSunLight","WeakMap","LIGHT_TYPE_DIRECTIONAL","getSunLight","setSunLight","get","light","Error","ref","DWeakRef","sunLight","computeBoundingVolume","a","worldMatrix","getRow","scaleBy","x","y","z","PointLight","LIGHT_TYPE_POINT","_range","_diffuseScale","_specularScale","_sourceRadius","invalidateBoundingVolume","range","setRange","diffuseScale","setDiffuseScale","specularScale","setSpecularScale","sourceRadius","setSourceRadius","bbox","BoundingBox","minPoint","Vector3","maxPoint","SpotLight","LIGHT_TYPE_SPOT","_cutoff","Math","cos","PI","cutoff","setCutoff","cosCutoff","r","sqrt","RectLight","LIGHT_TYPE_RECT","_width","_height","width","setWidth","height","setHeight","pos","axisX","inplaceNormalize","axisY"],"mappings":"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"}
1
+ {"version":3,"file":"light.js","sources":["../../src/scene/light.ts"],"sourcesContent":["import type { Immutable, Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { Vector3, Vector4, DWeakRef } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { ShadowMapper } from '../shadow/shadowmapper';\r\nimport { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LIGHT_TYPE_RECT } from '../values';\r\nimport type { Scene } from './scene';\r\n\r\n/**\r\n * Base class for any kind of light node\r\n * @public\r\n */\r\nexport abstract class BaseLight extends GraphNode {\r\n /** @internal */\r\n protected _type: number;\r\n /** @internal */\r\n protected _intensity: number;\r\n /** @internal */\r\n protected _positionRange: Nullable<Vector4>;\r\n /** @internal */\r\n protected _directionCutoff: Nullable<Vector4>;\r\n /** @internal */\r\n protected _diffuseIntensity: Nullable<Vector4>;\r\n /** @internal */\r\n protected _extraParams: Nullable<Vector4>;\r\n /**\r\n * Creates a light node\r\n * @param scene - The scene to which the light node belongs\r\n * @param type - Type of the light node\r\n */\r\n constructor(scene: Scene, type: number) {\r\n super(scene);\r\n this._intensity = 1;\r\n this._type = type;\r\n this._positionRange = null;\r\n this._directionCutoff = null;\r\n this._diffuseIntensity = null;\r\n this._extraParams = null;\r\n }\r\n /** Gets the light type */\r\n get lightType() {\r\n return this._type;\r\n }\r\n /** Intensity of the light */\r\n get intensity() {\r\n return this._intensity;\r\n }\r\n set intensity(val) {\r\n this.setIntensity(val);\r\n }\r\n /**\r\n * Position and range of the light\r\n *\r\n * @remarks\r\n * Gets the position in world space of the light.\r\n * Light range is encoded into the W component.\r\n */\r\n get positionAndRange(): Immutable<Vector4> {\r\n if (!this._positionRange) {\r\n this.computeUniforms();\r\n }\r\n return this._positionRange!;\r\n }\r\n /**\r\n * Direction and cutoff of the light\r\n *\r\n * @remarks\r\n * Gets the direction in world space of the light\r\n * Light cutoff (for spot light only) is encoded into the W component.\r\n */\r\n get directionAndCutoff() {\r\n if (!this._directionCutoff) {\r\n this.computeUniforms();\r\n }\r\n return this._directionCutoff!;\r\n }\r\n /**\r\n * Color and intensity of the light\r\n *\r\n * @remarks\r\n * Gets the color of the light.\r\n * Light intensity is encoded into the W component.\r\n */\r\n get diffuseAndIntensity() {\r\n if (!this._diffuseIntensity) {\r\n this.computeUniforms();\r\n }\r\n return this._diffuseIntensity!;\r\n }\r\n /**\r\n * Extra parameters of the light\r\n *\r\n * @remarks\r\n * Custom data for advanced light types.\r\n */\r\n get extraParams() {\r\n if (!this._extraParams) {\r\n this.computeUniforms();\r\n }\r\n return this._extraParams!;\r\n }\r\n /**\r\n * View matrix of the light\r\n *\r\n * @remarks\r\n * The view matrix of the light is used to transform a point\r\n * from the world space to the light space.\r\n */\r\n get viewMatrix(): Immutable<Matrix4x4> {\r\n return this.invWorldMatrix;\r\n }\r\n /**\r\n * Sets the intensity of the light\r\n * @param val - Intensity of the light\r\n * @returns self\r\n */\r\n setIntensity(val: number) {\r\n if (this._intensity !== val) {\r\n this._intensity = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /** @internal */\r\n invalidateUniforms() {\r\n this._positionRange = null;\r\n this._directionCutoff = null;\r\n this._diffuseIntensity = null;\r\n this._extraParams = null;\r\n }\r\n /** {@inheritDoc SceneNode.isLight} */\r\n isLight(): this is BaseLight {\r\n return true;\r\n }\r\n /** {@inheritDoc SceneNode.isPunctualLight} */\r\n isPunctualLight(): this is PunctualLight {\r\n return false;\r\n }\r\n /** returns true if this is a directional light */\r\n isDirectionLight(): this is DirectionalLight {\r\n return false;\r\n }\r\n /** returns true if this is a point light */\r\n isPointLight(): this is PointLight {\r\n return false;\r\n }\r\n /** returns true if this is a spot light */\r\n isSpotLight(): this is SpotLight {\r\n return false;\r\n }\r\n /** returns true if this is a rect light */\r\n isRectLight(): this is RectLight {\r\n return false;\r\n }\r\n /** @internal */\r\n abstract computeUniforms(): void;\r\n}\r\n\r\n/*\r\nexport abstract class AmbientLight extends BaseLight {\r\n constructor(scene: Scene, type: number) {\r\n super(scene, type);\r\n }\r\n isAmbientLight(): this is AmbientLight {\r\n return true;\r\n }\r\n}\r\n*/\r\n\r\n/**\r\n * Base class for any kind of puncual light\r\n * @public\r\n */\r\nexport class PunctualLight extends BaseLight {\r\n /** @internal */\r\n protected _color!: Vector4;\r\n /** @internal */\r\n protected _castShadow!: boolean;\r\n /** @internal */\r\n protected _shadowMapper!: ShadowMapper;\r\n /**\r\n * Creates an instance of punctual light\r\n * @param scene - The scene to which the punctual light belongs\r\n * @param type - The light type\r\n */\r\n constructor(scene: Scene, type: number) {\r\n super(scene, type);\r\n this.ensurePunctualState();\r\n }\r\n /** @internal */\r\n protected ensurePunctualState() {\r\n if (!this._color) {\r\n this._color = Vector4.one();\r\n }\r\n if (this._castShadow == null) {\r\n this._castShadow = false;\r\n }\r\n if (!this._shadowMapper) {\r\n this._shadowMapper = new ShadowMapper(this);\r\n }\r\n }\r\n /** Color of the light */\r\n get color() {\r\n this.ensurePunctualState();\r\n return this._color.clone();\r\n }\r\n set color(color) {\r\n this.setColor(color);\r\n }\r\n /**\r\n * Sets color of the light\r\n * @param color - The color to set\r\n * @returns self\r\n */\r\n setColor(color: Vector4 | Vector3) {\r\n this.ensurePunctualState();\r\n this._color.set(color);\r\n this.invalidateUniforms();\r\n return this;\r\n }\r\n /** Whether this light casts shadows */\r\n get castShadow() {\r\n this.ensurePunctualState();\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this.setCastShadow(b);\r\n }\r\n /**\r\n * Sets whether this light casts shadows\r\n * @param b - true if the light casts shadows\r\n * @returns self\r\n */\r\n setCastShadow(b: boolean): this {\r\n this.ensurePunctualState();\r\n if (this._castShadow !== !!b) {\r\n this._castShadow = !!b;\r\n if (this._castShadow && this.isDirectionLight() && !this.shadow.shadowRegion) {\r\n this.shadow.updateDirectionalShadowRegion(true);\r\n }\r\n }\r\n return this;\r\n }\r\n /** The shadow mapper for this light */\r\n get shadow() {\r\n this.ensurePunctualState();\r\n return this._shadowMapper;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isPunctualLight}\r\n * @override\r\n */\r\n isPunctualLight(): this is PunctualLight {\r\n return true;\r\n }\r\n /** @internal */\r\n protected _onTransformChanged(invalidateLocal: boolean) {\r\n super._onTransformChanged(invalidateLocal);\r\n this.invalidateUniforms();\r\n // this._transformCallback(true, false);\r\n }\r\n /** Disposes the punctual light node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._shadowMapper?.dispose();\r\n }\r\n /** @internal */\r\n computeUniforms() {}\r\n}\r\n\r\n/**\r\n * Directional light\r\n * @public\r\n */\r\nexport class DirectionalLight extends PunctualLight {\r\n private static readonly _currentSunLight: WeakMap<Scene, DWeakRef<DirectionalLight>> = new WeakMap();\r\n /**\r\n * Creates an instance of directional light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_DIRECTIONAL);\r\n this.intensity = 10;\r\n if (!DirectionalLight.getSunLight(scene)) {\r\n DirectionalLight.setSunLight(scene, this);\r\n }\r\n }\r\n static getSunLight(scene: Scene) {\r\n return this._currentSunLight.get(scene)?.get() ?? null;\r\n }\r\n static setSunLight(scene: Scene, light: Nullable<DirectionalLight>) {\r\n if (light && scene !== light.scene) {\r\n throw new Error('setSunLight(): Light does not belongs to scene');\r\n }\r\n const ref = this._currentSunLight.get(scene);\r\n if (!ref) {\r\n this._currentSunLight.set(scene, new DWeakRef(light));\r\n } else {\r\n ref.set(light);\r\n }\r\n }\r\n /**\r\n * true if the light was defined as sun light\r\n *\r\n * @remarks\r\n * Only one directional light will be marked as sun light.\r\n **/\r\n get sunLight(): boolean {\r\n return DirectionalLight.getSunLight(this.scene!) === this;\r\n }\r\n set sunLight(val) {\r\n if (val) {\r\n DirectionalLight.setSunLight(this.scene!, this);\r\n } else if (DirectionalLight.getSunLight(this.scene!) === this) {\r\n DirectionalLight.setSunLight(this.scene!, null);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isDirectionLight}\r\n * @override\r\n */\r\n isDirectionLight(): this is DirectionalLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n return null;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2).scaleBy(-1);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, -1);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, 0);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(0, 0, 0, this.lightType);\r\n }\r\n // adapt from DXSDK\r\n /*\r\n private _computeNearAndFar(\r\n frustumMin: Vector3,\r\n frustumMax: Vector3,\r\n aabbLightSpace: Vector3[]\r\n ): [number, number] {\r\n type Triangle = { pt: [Vector3, Vector3, Vector3]; culled: boolean };\r\n function dupTriangle(src: Triangle): Triangle {\r\n return {\r\n pt: [\r\n src.pt[0] ? new Vector3(src.pt[0]) : null,\r\n src.pt[1] ? new Vector3(src.pt[1]) : null,\r\n src.pt[2] ? new Vector3(src.pt[2]) : null\r\n ],\r\n culled: src.culled\r\n };\r\n }\r\n let nearPlane = Number.MAX_VALUE;\r\n let farPlane = -Number.MAX_VALUE;\r\n const triangleList: Triangle[] = Array.from({ length: 16 }).map((val) => ({\r\n pt: [null, null, null],\r\n culled: false\r\n }));\r\n let triangleCount = 1;\r\n triangleList[0].pt[0] = aabbLightSpace[0];\r\n triangleList[0].pt[1] = aabbLightSpace[1];\r\n triangleList[0].pt[2] = aabbLightSpace[2];\r\n const triIndices = [\r\n 0, 1, 2, 1, 2, 3, 4, 5, 6, 5, 6, 7, 0, 2, 4, 2, 4, 6, 1, 3, 5, 3, 5, 7, 0, 1, 4, 1, 4, 5, 2, 3, 6, 3, 6,\r\n 7\r\n ];\r\n const pointPassesCollision: number[] = [0, 0, 0];\r\n const minx = frustumMin.x;\r\n const maxx = frustumMax.x;\r\n const miny = frustumMin.y;\r\n const maxy = frustumMax.y;\r\n for (let i = 0; i < 12; i++) {\r\n triangleList[0].pt[0] = aabbLightSpace[triIndices[i * 3 + 0]];\r\n triangleList[0].pt[1] = aabbLightSpace[triIndices[i * 3 + 1]];\r\n triangleList[0].pt[2] = aabbLightSpace[triIndices[i * 3 + 2]];\r\n triangleList[0].culled = false;\r\n triangleCount = 1;\r\n for (let j = 0; j < 4; j++) {\r\n let edge: number, comp: number;\r\n if (j === 0) {\r\n edge = minx;\r\n comp = 0;\r\n } else if (j === 1) {\r\n edge = maxx;\r\n comp = 0;\r\n } else if (j === 2) {\r\n edge = miny;\r\n comp = 1;\r\n } else {\r\n edge = maxy;\r\n comp = 1;\r\n }\r\n let k = 0;\r\n while (k < triangleCount) {\r\n if (!triangleList[k].culled) {\r\n let insideVertCount = 0;\r\n let tempOrder: Vector3 = null;\r\n if (j === 0) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].x > minx) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else if (j === 1) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].x < maxx) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else if (j === 2) {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].y > miny) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n } else {\r\n for (let t = 0; t < 3; t++) {\r\n if (triangleList[k].pt[t].y < maxy) {\r\n pointPassesCollision[t] = 1;\r\n } else {\r\n pointPassesCollision[t] = 0;\r\n }\r\n insideVertCount += pointPassesCollision[t];\r\n }\r\n }\r\n if (pointPassesCollision[1] && !pointPassesCollision[0]) {\r\n tempOrder = triangleList[k].pt[0];\r\n triangleList[k].pt[0] = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = tempOrder;\r\n pointPassesCollision[0] = 1;\r\n pointPassesCollision[1] = 0;\r\n }\r\n if (pointPassesCollision[2] && !pointPassesCollision[1]) {\r\n tempOrder = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = triangleList[k].pt[2];\r\n triangleList[k].pt[2] = tempOrder;\r\n pointPassesCollision[1] = 1;\r\n pointPassesCollision[2] = 0;\r\n }\r\n if (pointPassesCollision[1] && !pointPassesCollision[0]) {\r\n tempOrder = triangleList[k].pt[0];\r\n triangleList[k].pt[0] = triangleList[k].pt[1];\r\n triangleList[k].pt[1] = tempOrder;\r\n pointPassesCollision[0] = 1;\r\n pointPassesCollision[1] = 0;\r\n }\r\n if (insideVertCount === 0) {\r\n triangleList[k].culled = true;\r\n } else if (insideVertCount === 1) {\r\n triangleList[k].culled = false;\r\n const v0Tov1 = Vector3.sub(triangleList[k].pt[1], triangleList[k].pt[0]);\r\n const v0Tov2 = Vector3.sub(triangleList[k].pt[2], triangleList[k].pt[0]);\r\n const hitPointTimeRatio = edge - triangleList[k].pt[0][comp];\r\n const distanceAlongV1 = hitPointTimeRatio / v0Tov1[comp];\r\n const distanceAloneV2 = hitPointTimeRatio / v0Tov2[comp];\r\n v0Tov1.scaleBy(distanceAlongV1);\r\n v0Tov1.addBy(triangleList[k].pt[0]);\r\n v0Tov2.scaleBy(distanceAloneV2);\r\n v0Tov2.addBy(triangleList[k].pt[0]);\r\n triangleList[k].pt[1] = v0Tov2;\r\n triangleList[k].pt[2] = v0Tov1;\r\n } else if (insideVertCount === 2) {\r\n triangleList[triangleCount] = dupTriangle(triangleList[k + 1]);\r\n triangleList[k].culled = false;\r\n triangleList[k + 1].culled = false;\r\n const v2Tov0 = Vector3.sub(triangleList[k].pt[0], triangleList[k].pt[2]);\r\n const v2Tov1 = Vector3.sub(triangleList[k].pt[1], triangleList[k].pt[2]);\r\n const hitPointTime_2_0 = edge - triangleList[k].pt[2][comp];\r\n const distanceAloneVec_2_0 = hitPointTime_2_0 / v2Tov0[comp];\r\n v2Tov0.scaleBy(distanceAloneVec_2_0);\r\n v2Tov0.addBy(triangleList[k].pt[2]);\r\n triangleList[k + 1].pt[0] = new Vector3(triangleList[k].pt[0]);\r\n triangleList[k + 1].pt[1] = new Vector3(triangleList[k].pt[1]);\r\n triangleList[k + 1].pt[2] = v2Tov0;\r\n const hitPointTime_2_1 = edge - triangleList[k].pt[2][comp];\r\n const distanceAloneVec_2_1 = hitPointTime_2_1 / v2Tov1[comp];\r\n v2Tov1.scaleBy(distanceAloneVec_2_1);\r\n v2Tov1.addBy(triangleList[k].pt[2]);\r\n triangleList[k].pt[0] = new Vector3(triangleList[k + 1].pt[1]);\r\n triangleList[k].pt[1] = new Vector3(triangleList[k + 1].pt[2]);\r\n triangleList[k].pt[2] = v2Tov1;\r\n triangleCount++;\r\n k++;\r\n } else {\r\n triangleList[k].culled = false;\r\n }\r\n }\r\n k++;\r\n }\r\n }\r\n for (let index = 0; index < triangleCount; index++) {\r\n if (!triangleList[index].culled) {\r\n for (let v = 0; v < 3; v++) {\r\n const z = triangleList[index].pt[v].z;\r\n if (nearPlane > z) {\r\n nearPlane = z;\r\n }\r\n if (farPlane < z) {\r\n farPlane = z;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return [nearPlane, farPlane];\r\n }\r\n */\r\n}\r\n\r\n/**\r\n * Point light\r\n * @public\r\n */\r\nexport class PointLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _diffuseScale: number;\r\n /** @internal */\r\n protected _specularScale: number;\r\n /** @internal */\r\n protected _sourceRadius: number;\r\n /**\r\n * Creates an instance of point light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_POINT);\r\n this._range = 10;\r\n this._diffuseScale = 1;\r\n this._specularScale = 1;\r\n this._sourceRadius = 0;\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /** Diffuse scale of the point light */\r\n get diffuseScale() {\r\n return this._diffuseScale;\r\n }\r\n set diffuseScale(val: number) {\r\n this.setDiffuseScale(val);\r\n }\r\n /** Specular scale of the point light */\r\n get specularScale() {\r\n return this._specularScale;\r\n }\r\n set specularScale(val: number) {\r\n this.setSpecularScale(val);\r\n }\r\n /** Source radius of the point light */\r\n get sourceRadius() {\r\n return this._sourceRadius;\r\n }\r\n set sourceRadius(val: number) {\r\n this.setSourceRadius(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the diffuse scale of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setDiffuseScale(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._diffuseScale !== val) {\r\n this._diffuseScale = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the specular scale of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setSpecularScale(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._specularScale !== val) {\r\n this._specularScale = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * Sets the source radius of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setSourceRadius(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._sourceRadius !== val) {\r\n this._sourceRadius = val;\r\n this.invalidateUniforms();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isPointLight}\r\n * @override\r\n */\r\n isPointLight(): this is PointLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n bbox.minPoint = new Vector3(-this._range, -this._range, -this._range);\r\n bbox.maxPoint = new Vector3(this._range, this._range, this._range);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, this.range);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, -1);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(\r\n this._diffuseScale,\r\n this._specularScale,\r\n this._sourceRadius,\r\n this.lightType\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Spot light\r\n * @public\r\n */\r\nexport class SpotLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _cutoff: number;\r\n /**\r\n * Creates an instance of spot light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_SPOT);\r\n this._range = 10;\r\n this._cutoff = Math.cos(Math.PI / 4);\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The cutoff of the light */\r\n get cutoff() {\r\n return this._cutoff;\r\n }\r\n set cutoff(val: number) {\r\n this.setCutoff(val);\r\n }\r\n /**\r\n * Sets the cutoff of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setCutoff(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._cutoff !== val) {\r\n this._cutoff = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isSpotLight}\r\n * @override\r\n */\r\n isSpotLight(): this is SpotLight {\r\n return true;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n const cosCutoff = Math.cos(this._cutoff);\r\n const r = (this._range / cosCutoff) * Math.sqrt(1 - cosCutoff * cosCutoff);\r\n bbox.minPoint = new Vector3(-r, -r, 0);\r\n bbox.maxPoint = new Vector3(r, r, this._range);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const a = this.worldMatrix.getRow(3);\r\n const b = this.worldMatrix.getRow(2).scaleBy(-1);\r\n this._positionRange = new Vector4(a.x, a.y, a.z, this.range);\r\n this._directionCutoff = new Vector4(b.x, b.y, b.z, this.cutoff);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(0, 0, 0, this.lightType);\r\n }\r\n}\r\n\r\n/**\r\n * Rectangular area light\r\n * @public\r\n */\r\nexport class RectLight extends PunctualLight {\r\n /** @internal */\r\n protected _range: number;\r\n /** @internal */\r\n protected _width: number;\r\n /** @internal */\r\n protected _height: number;\r\n /**\r\n * Creates an instance of rect light\r\n * @param scene - The scene to which the light belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene, LIGHT_TYPE_RECT);\r\n this._range = 10;\r\n this._width = 1;\r\n this._height = 1;\r\n this.invalidateBoundingVolume();\r\n }\r\n /** The range of the light */\r\n get range() {\r\n return this._range;\r\n }\r\n set range(val: number) {\r\n this.setRange(val);\r\n }\r\n /**\r\n * Sets the range of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setRange(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._range !== val) {\r\n this._range = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The width of the light */\r\n get width() {\r\n return this._width;\r\n }\r\n set width(val: number) {\r\n this.setWidth(val);\r\n }\r\n /**\r\n * Sets the width of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setWidth(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._width !== val) {\r\n this._width = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /** The height of the light */\r\n get height() {\r\n return this._height;\r\n }\r\n set height(val: number) {\r\n this.setHeight(val);\r\n }\r\n /**\r\n * Sets the height of the light\r\n * @param val - The value to set\r\n * @returns self\r\n */\r\n setHeight(val: number) {\r\n val = val < 0 ? 0 : val;\r\n if (this._height !== val) {\r\n this._height = val;\r\n this.invalidateUniforms();\r\n this.invalidateBoundingVolume();\r\n }\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc BaseLight.isRectLight}\r\n * @override\r\n */\r\n isRectLight(): this is RectLight {\r\n return true;\r\n }\r\n /**\r\n * Rect light supports shadow in current pipeline\r\n */\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bbox = new BoundingBox();\r\n const r = this._range;\r\n bbox.minPoint = new Vector3(-r, -r, -r);\r\n bbox.maxPoint = new Vector3(r, r, r);\r\n return bbox;\r\n }\r\n /** @internal */\r\n computeUniforms() {\r\n const pos = this.worldMatrix.getRow(3);\r\n const axisX = this.worldMatrix\r\n .getRow(0)\r\n .inplaceNormalize()\r\n .scaleBy(this._width * 0.5);\r\n const axisY = this.worldMatrix\r\n .getRow(1)\r\n .inplaceNormalize()\r\n .scaleBy(this._height * 0.5);\r\n this._positionRange = new Vector4(pos.x, pos.y, pos.z, this.range);\r\n this._directionCutoff = new Vector4(axisX.x, axisX.y, axisX.z, 0);\r\n this._diffuseIntensity = new Vector4(this.color.x, this.color.y, this.color.z, this.intensity);\r\n this._extraParams = new Vector4(axisY.x, axisY.y, axisY.z, this.lightType);\r\n }\r\n}\r\n"],"names":["BaseLight","GraphNode","scene","type","_intensity","_type","_positionRange","_directionCutoff","_diffuseIntensity","_extraParams","lightType","intensity","val","setIntensity","positionAndRange","computeUniforms","directionAndCutoff","diffuseAndIntensity","extraParams","viewMatrix","invWorldMatrix","invalidateUniforms","isLight","isPunctualLight","isDirectionLight","isPointLight","isSpotLight","isRectLight","PunctualLight","ensurePunctualState","_color","Vector4","one","_castShadow","_shadowMapper","ShadowMapper","color","clone","setColor","set","castShadow","b","setCastShadow","shadow","shadowRegion","updateDirectionalShadowRegion","_onTransformChanged","invalidateLocal","onDispose","dispose","DirectionalLight","_currentSunLight","WeakMap","LIGHT_TYPE_DIRECTIONAL","getSunLight","setSunLight","get","light","Error","ref","DWeakRef","sunLight","computeBoundingVolume","a","worldMatrix","getRow","scaleBy","x","y","z","PointLight","LIGHT_TYPE_POINT","_range","_diffuseScale","_specularScale","_sourceRadius","invalidateBoundingVolume","range","setRange","diffuseScale","setDiffuseScale","specularScale","setSpecularScale","sourceRadius","setSourceRadius","bbox","BoundingBox","minPoint","Vector3","maxPoint","SpotLight","LIGHT_TYPE_SPOT","_cutoff","Math","cos","PI","cutoff","setCutoff","cosCutoff","r","sqrt","RectLight","LIGHT_TYPE_RECT","_width","_height","width","setWidth","height","setHeight","pos","axisX","inplaceNormalize","axisY"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { LambertMaterial } from '../material/lambert.js';
5
5
  import '../material/blinn.js';
6
6
  import '../material/unlit.js';
7
7
  import '../material/particle.js';
8
+ import '../material/subsurfaceprofile.js';
8
9
  import { PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';
9
10
  import { MORPH_WEIGHTS_VECTOR_COUNT, MORPH_ATTRIBUTE_VECTOR_COUNT, QUEUE_OPAQUE } from '../values.js';
10
11
  import { RenderBundleWrapper } from '../render/renderbundle_wrapper.js';
@@ -14,10 +15,10 @@ import '../material/grassmaterial.js';
14
15
  import '../material/terrain-cm.js';
15
16
  import '../material/pbrmr.js';
16
17
  import '../material/pbrsg.js';
18
+ import '../material/mtoon.js';
17
19
  import '../material/pbrblueprint.js';
18
20
  import '../material/sprite.js';
19
21
  import '../material/sprite_std.js';
20
- import '../material/msdf_text.js';
21
22
  import '../utility/blueprint/material/texture.js';
22
23
  import { BoundingBox } from '../utility/bounding_volume.js';
23
24
  import { mixinDrawable } from '../render/drawable_mixin.js';
@@ -99,6 +100,12 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
99
100
  label
100
101
  };
101
102
  }
103
+ get useRenderBundle() {
104
+ return this._useRenderBundle;
105
+ }
106
+ set useRenderBundle(val) {
107
+ this._useRenderBundle = val;
108
+ }
102
109
  get skeletonName() {
103
110
  return this._skinBindingName;
104
111
  }
@@ -189,7 +196,7 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
189
196
  targetBoxes: info.targetBoxes.map((box)=>box.clone()),
190
197
  originBox: info.originBox.clone()
191
198
  } : null;
192
- this.updateMorphBoundingBox();
199
+ this.refreshAnimatedBoundingBox();
193
200
  }
194
201
  /**
195
202
  * Gets morph target bounding data.
@@ -291,7 +298,7 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
291
298
  this._morphInfo.buffer.set(morphUniformBuffer);
292
299
  }
293
300
  this._morphDirty = false;
294
- this.updateMorphBoundingBox();
301
+ this.refreshAnimatedBoundingBox();
295
302
  this._renderBundle = {};
296
303
  RenderBundleWrapper.drawableChanged(this);
297
304
  }
@@ -301,6 +308,13 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
301
308
  */ getMorphInfo() {
302
309
  return this._morphInfo;
303
310
  }
311
+ /** @internal */ resolveAnimatedBoundingBox(morphBoundingBox) {
312
+ const skinnedBoundingBox = this._boneMatrices.get() && this._skinnedBoundingInfo?.boundingBox?.isValid() ? this._skinnedBoundingInfo.boundingBox : null;
313
+ if (skinnedBoundingBox && morphBoundingBox) {
314
+ return skinnedBoundingBox.clone().union(morphBoundingBox);
315
+ }
316
+ return skinnedBoundingBox?.clone() ?? morphBoundingBox ?? null;
317
+ }
304
318
  /**
305
319
  * Get the number of morph targets
306
320
  *
@@ -348,7 +362,7 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
348
362
  if (this._morphInfo.data[4 + index] !== weight) {
349
363
  this._morphInfo.data[4 + index] = weight;
350
364
  this._morphDirty = true;
351
- this.updateMorphBoundingBox();
365
+ this.refreshAnimatedBoundingBox();
352
366
  this.scene.queueUpdateNode(this);
353
367
  }
354
368
  } else {
@@ -375,7 +389,7 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
375
389
  if (this._morphInfo && weight && weight.length <= this._morphInfo.data[3]) {
376
390
  this._morphInfo.data.set(weight, 4);
377
391
  this._morphDirty = true;
378
- this.updateMorphBoundingBox();
392
+ this.refreshAnimatedBoundingBox();
379
393
  this.scene.queueUpdateNode(this);
380
394
  }
381
395
  }
@@ -424,25 +438,28 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
424
438
  */ needSceneDepth() {
425
439
  return this.material?.needSceneDepth() ?? false;
426
440
  }
427
- /** @internal */ updateMorphBoundingBox() {
441
+ /** @internal */ calculateMorphBoundingBox() {
428
442
  if (!this._morphInfo || !this._morphBoundingInfo) {
429
- return;
443
+ return null;
430
444
  }
431
445
  const numTargets = Math.min(this._morphInfo.data[3], this._morphBoundingInfo.targetBoxes.length);
432
446
  if (numTargets <= 0) {
433
- return;
447
+ return null;
434
448
  }
435
449
  const weights = this._morphInfo.data instanceof Float32Array ? this._morphInfo.data.subarray(4, 4 + numTargets) : new Float32Array(Array.from(this._morphInfo.data.subarray(4, 4 + numTargets)));
436
450
  const bbox = new BoundingBox();
437
451
  calculateMorphBoundingBox(bbox, this._morphBoundingInfo.targetBoxes, weights, numTargets);
438
452
  bbox.minPoint.addBy(this._morphBoundingInfo.originBox.minPoint);
439
453
  bbox.maxPoint.addBy(this._morphBoundingInfo.originBox.maxPoint);
440
- this.setAnimatedBoundingBox(bbox);
454
+ return bbox;
455
+ }
456
+ /** @internal */ refreshAnimatedBoundingBox() {
457
+ this.setAnimatedBoundingBox(this.resolveAnimatedBoundingBox(this.calculateMorphBoundingBox()));
441
458
  }
442
459
  /** @internal */ updateMorphState() {
443
460
  if (this._morphInfo && this._morphDirty) {
444
461
  this._morphInfo.buffer.get().bufferSubData(4 * 4, this._morphInfo.data, 4, this._morphInfo.data[3]);
445
- this.updateMorphBoundingBox();
462
+ this.refreshAnimatedBoundingBox();
446
463
  this._morphDirty = false;
447
464
  }
448
465
  }
@@ -456,12 +473,10 @@ const MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))();
456
473
  if (binding) {
457
474
  this.setBoneMatrices(binding.jointTexture);
458
475
  binding.computeBoundingBox(this._skinnedBoundingInfo, this.invWorldMatrix);
459
- this.setAnimatedBoundingBox(this._skinnedBoundingInfo.boundingBox);
476
+ this.refreshAnimatedBoundingBox();
460
477
  } else {
461
478
  this.setBoneMatrices(null);
462
- if (!this._morphInfo || !this._morphBoundingInfo) {
463
- this.setAnimatedBoundingBox(null);
464
- }
479
+ this.refreshAnimatedBoundingBox();
465
480
  }
466
481
  if (this._skinBindingName) {
467
482
  this.scene.queueUpdateNode(this);
@@ -1 +1 @@
1
- {"version":3,"file":"mesh.js","sources":["../../src/scene/mesh.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, castObservable, DRef } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { MeshMaterial } from '../material';\r\nimport { LambertMaterial, ShaderHelper } from '../material';\r\nimport type {\r\n RenderPass,\r\n Primitive,\r\n BatchDrawable,\r\n DrawContext,\r\n PickTarget,\r\n MorphData,\r\n MorphInfo,\r\n RenderQueue\r\n} from '../render';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n PBStructTypeInfo,\r\n type RenderBundle,\r\n type Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_WEIGHTS_VECTOR_COUNT, QUEUE_OPAQUE } from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkinnedBoundingBox } from '../animation';\r\nimport { calculateMorphBoundingBox } from '../animation/morphtarget';\r\n\r\n/**\r\n * Callback invoked after a mesh finishes its per-frame update.\r\n *\r\n * @public\r\n */\r\nexport type MeshUpdateCallback = (frameId: number, elapsedInSeconds: number, deltaInSeconds: number) => void;\r\n\r\n/**\r\n * Bounding data used to update a mesh's local bounding box after morph target weights change.\r\n *\r\n * @public\r\n */\r\nexport interface MorphBoundingInfo {\r\n targetBoxes: BoundingBox[];\r\n originBox: BoundingBox;\r\n}\r\n\r\nconst MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))<{\r\n primitive_changed: [primitive: Nullable<Primitive>];\r\n material_changed: [material: Nullable<MeshMaterial>];\r\n}>();\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class Mesh extends MeshBase implements BatchDrawable {\r\n /** @internal */\r\n private readonly _primitive: DRef<Primitive>;\r\n /** @internal */\r\n private readonly _material: DRef<MeshMaterial>;\r\n /** @internal */\r\n protected _castShadow: boolean;\r\n /** @internal */\r\n protected _skinnedBoundingInfo: Nullable<SkinnedBoundingBox>;\r\n /** @internal */\r\n protected _animatedBoundingBox: Nullable<BoundingBox>;\r\n /** @internal */\r\n protected _skinBindingName: string;\r\n /** @internal */\r\n protected _boneMatrices: DRef<Texture2D>;\r\n /** @internal */\r\n protected _morphData: Nullable<MorphData>;\r\n /** @internal */\r\n protected _morphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _morphBoundingInfo: Nullable<MorphBoundingInfo>;\r\n /** @internal */\r\n protected _morphDirty: boolean;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _suspendSkinning: boolean;\r\n /** @internal */\r\n protected _renderBundle: Nullable<Record<string, RenderBundle>>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _primitiveChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _postUpdateCallbacks: Set<MeshUpdateCallback>;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene, primitive?: Primitive, material?: MeshMaterial) {\r\n super(scene);\r\n this._primitive = new DRef();\r\n this._material = new DRef();\r\n this._castShadow = true;\r\n this._skinnedBoundingInfo = null;\r\n this._animatedBoundingBox = null;\r\n this._boneMatrices = new DRef();\r\n this._morphData = null;\r\n this._morphInfo = null;\r\n this._morphBoundingInfo = null;\r\n this._morphDirty = false;\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this.primitive = primitive ?? null;\r\n this.material = material ?? Mesh._getDefaultMaterial();\r\n this._suspendSkinning = false;\r\n this._skinBindingName = '';\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n this._primitiveChangeTag = null;\r\n this._postUpdateCallbacks = new Set();\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n get skeletonName() {\r\n return this._skinBindingName;\r\n }\r\n set skeletonName(name) {\r\n this.skinBindingName = name;\r\n }\r\n get skinBindingName() {\r\n return this._skinBindingName;\r\n }\r\n set skinBindingName(name) {\r\n if (name !== this._skinBindingName) {\r\n this._skinBindingName = name;\r\n this.updateSkeletonState();\r\n }\r\n }\r\n /** @internal */\r\n get skinnedBoundingInfo() {\r\n return this._skinnedBoundingInfo;\r\n }\r\n /** @internal */\r\n get suspendSkinning() {\r\n return this._suspendSkinning;\r\n }\r\n /** @internal */\r\n set suspendSkinning(val) {\r\n this._suspendSkinning = !!val;\r\n }\r\n /** Wether the mesh node casts shadows */\r\n get castShadow() {\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this._castShadow = b;\r\n }\r\n /** Primitive of the mesh */\r\n get primitive() {\r\n return this._primitive?.get() ?? null;\r\n }\r\n set primitive(prim) {\r\n const currentPrimitive = this._primitive.get();\r\n if (prim !== currentPrimitive) {\r\n if (currentPrimitive) {\r\n currentPrimitive.off('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._primitive.set(prim);\r\n if (prim) {\r\n prim.on('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._instanceHash =\r\n prim && this._material.get()\r\n ? `${this.constructor.name}:${this._scene!.id}:${prim.id}:${this._material.get()!.instanceId}`\r\n : null;\r\n this.invalidateBoundingVolume();\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._primitiveChangeTag = null;\r\n this.dispatchEvent('primitive_changed', prim);\r\n }\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material?.get() ?? null;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m) {\r\n this._material.set(m);\r\n if (m) {\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash =\r\n this._primitive.get() && m\r\n ? `${this.constructor.name}:${this._scene?.id ?? 0}:${this._primitive.get()!.id}:${m.instanceId}`\r\n : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n this.dispatchEvent('material_changed', m);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isMesh}\r\n */\r\n isMesh(): this is Mesh {\r\n return true;\r\n }\r\n /**\r\n * Sets the bounding box for animation\r\n * @param bbox - The bounding box for animation\r\n */\r\n setAnimatedBoundingBox(bbox: Nullable<BoundingBox>) {\r\n this._animatedBoundingBox = bbox;\r\n this.invalidateBoundingVolume();\r\n }\r\n /**\r\n * Gets the bounding box for animation\r\n */\r\n getAnimatedBoundingBox() {\r\n return this._animatedBoundingBox ?? null;\r\n }\r\n /**\r\n * Sets morph target bounding data used to update the animated bounding box when weights change.\r\n * @param info - Morph target bounding data\r\n */\r\n setMorphBoundingInfo(info: Nullable<MorphBoundingInfo>) {\r\n this._morphBoundingInfo = info\r\n ? {\r\n targetBoxes: info.targetBoxes.map((box) => box.clone()),\r\n originBox: info.originBox.clone()\r\n }\r\n : null;\r\n this.updateMorphBoundingBox();\r\n }\r\n /**\r\n * Gets morph target bounding data.\r\n */\r\n getMorphBoundingInfo() {\r\n return this._morphBoundingInfo;\r\n }\r\n /**\r\n * Sets the texture that contains the bone matrices for skeletal animation\r\n * @param matrices - The texture that contains the bone matrices\r\n */\r\n setBoneMatrices(matrices: Nullable<Texture2D>) {\r\n if (this._boneMatrices.get() !== matrices) {\r\n this._boneMatrices.set(matrices);\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets the texture that contains the morph target data\r\n * @param data - The texture that contains the morph target data\r\n */\r\n setMorphData(data: Nullable<MorphData>) {\r\n if (!data) {\r\n if (this._morphData) {\r\n this._morphData?.texture?.dispose();\r\n this._morphData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphData) {\r\n this._morphData = {\r\n texture: new DRef()\r\n } as MorphData;\r\n }\r\n this._morphData.width = data.width;\r\n this._morphData.height = data.height;\r\n this._morphData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._morphData.texture!.set(data.texture.get());\r\n } else {\r\n const tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n this._morphData.texture!.set(tex);\r\n }\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets the skinned bounding info\r\n * @param info - The skinned bounding info\r\n */\r\n setSkinnedBoundingInfo(info: Nullable<SkinnedBoundingBox>) {\r\n this._skinnedBoundingInfo = info;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return this._morphData;\r\n }\r\n /**\r\n * Sets the buffer that contains the morph target information\r\n * @param info - The buffer that contains the morph target information\r\n */\r\n setMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._morphInfo) {\r\n this._morphInfo.buffer?.dispose();\r\n this._morphInfo = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphInfo) {\r\n this._morphInfo = {\r\n buffer: new DRef()\r\n } as MorphInfo;\r\n }\r\n this._morphInfo.data = info.data.slice();\r\n this._morphInfo.names = { ...info.names };\r\n if (info.buffer?.get()) {\r\n this._morphInfo.buffer!.set(info.buffer.get());\r\n } else {\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n const morphUniformBuffer = getDevice().createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n info.data\r\n );\r\n this._morphInfo.buffer!.set(morphUniformBuffer);\r\n }\r\n this._morphDirty = false;\r\n this.updateMorphBoundingBox();\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return this._morphInfo;\r\n }\r\n /**\r\n * Get the number of morph targets\r\n *\r\n * @returns The number of morph targets\r\n */\r\n getNumMorphTargets(): number {\r\n return this._morphInfo?.data[3] ?? 0;\r\n }\r\n /**\r\n * Get the name of the morph target by index\r\n *\r\n * @param index - The index of the morph target\r\n * @returns The name of the morph target, or null if not found\r\n */\r\n getMorphTargetName(index: number): Nullable<string> {\r\n if (this._morphInfo && index >= 0 && index < this._morphInfo.data[3]) {\r\n const name = Object.keys(this._morphInfo.names).find((key) => this._morphInfo!.names![key] === index);\r\n return name ?? null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the index of the morph target by name\r\n * @param name - The name of the morph target\r\n * @returns The index of the morph target, or -1 if not found\r\n */\r\n getMorphTargetIndexByName(name: string): number {\r\n return this._morphInfo?.names?.[name] ?? -1;\r\n }\r\n /**\r\n * Update morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeight(name: string, weight: number) {\r\n const index = this.getMorphTargetIndexByName(name);\r\n if (index >= 0) {\r\n this.setMorphWeightByIndex(index, weight);\r\n }\r\n }\r\n /**\r\n * Update morph target weight by index\r\n *\r\n * @param index - The index of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeightByIndex(index: number, weight: number) {\r\n if (index >= 0 && index < this._morphInfo!.data[3]) {\r\n if (this._morphInfo!.data[4 + index] !== weight) {\r\n this._morphInfo!.data[4 + index] = weight;\r\n this._morphDirty = true;\r\n this.updateMorphBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n } else {\r\n console.warn(`Morph target index out of range: ${index}`);\r\n }\r\n }\r\n /**\r\n * Get morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @returns The weight of the morph target, or 0 if not found\r\n */\r\n getMorphWeight(name: string): number {\r\n const index = this._morphInfo?.names?.[name];\r\n if (index !== undefined && index >= 0 && index < this._morphInfo!.data[3]) {\r\n return this._morphInfo!.data[4 + index];\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Update morph target weights\r\n *\r\n * @param weight - The morph target weights. The length must not exceed the mesh's morph target count.\r\n */\r\n updateMorphWeights(weight: number[]) {\r\n if (this._morphInfo && weight && weight.length <= this._morphInfo.data[3]) {\r\n this._morphInfo.data.set(weight, 4);\r\n this._morphDirty = true;\r\n this.updateMorphBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /** {@inheritDoc SceneNode.update} */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n super.update(frameId, elapsedInSeconds, deltaInSeconds);\r\n this.updateSkeletonState();\r\n this.updateMorphState();\r\n if (this._postUpdateCallbacks.size > 0) {\r\n for (const callback of this._postUpdateCallbacks) {\r\n callback(frameId, elapsedInSeconds, deltaInSeconds);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n addPostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.add(callback);\r\n }\r\n }\r\n /** @internal */\r\n removePostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.delete(callback);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return (\r\n this._batchable &&\r\n !this._boneMatrices.get() &&\r\n !this._morphData &&\r\n (this._material.get()?.isBatchable() ?? false)\r\n );\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor() ?? false;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth() ?? false;\r\n }\r\n /** @internal */\r\n private updateMorphBoundingBox() {\r\n if (!this._morphInfo || !this._morphBoundingInfo) {\r\n return;\r\n }\r\n const numTargets = Math.min(this._morphInfo.data[3], this._morphBoundingInfo.targetBoxes.length);\r\n if (numTargets <= 0) {\r\n return;\r\n }\r\n const weights =\r\n this._morphInfo.data instanceof Float32Array\r\n ? this._morphInfo.data.subarray(4, 4 + numTargets)\r\n : new Float32Array(Array.from(this._morphInfo.data.subarray(4, 4 + numTargets)));\r\n const bbox = new BoundingBox();\r\n calculateMorphBoundingBox(bbox, this._morphBoundingInfo.targetBoxes, weights, numTargets);\r\n bbox.minPoint.addBy(this._morphBoundingInfo.originBox.minPoint);\r\n bbox.maxPoint.addBy(this._morphBoundingInfo.originBox.maxPoint);\r\n this.setAnimatedBoundingBox(bbox);\r\n }\r\n /** @internal */\r\n private updateMorphState() {\r\n if (this._morphInfo && this._morphDirty) {\r\n this._morphInfo.buffer!.get()!.bufferSubData(4 * 4, this._morphInfo.data, 4, this._morphInfo.data[3]);\r\n this.updateMorphBoundingBox();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private updateSkeletonState() {\r\n if (this._suspendSkinning) {\r\n this.setBoneMatrices(null);\r\n this.setAnimatedBoundingBox(null);\r\n return;\r\n }\r\n const binding = this._skinBindingName && this.findSkinBindingById(this._skinBindingName);\r\n if (binding) {\r\n this.setBoneMatrices(binding.jointTexture);\r\n binding.computeBoundingBox(this._skinnedBoundingInfo!, this.invWorldMatrix);\r\n this.setAnimatedBoundingBox(this._skinnedBoundingInfo!.boundingBox);\r\n } else {\r\n this.setBoneMatrices(null);\r\n if (!this._morphInfo || !this._morphBoundingInfo) {\r\n this.setAnimatedBoundingBox(null);\r\n }\r\n }\r\n if (this._skinBindingName) {\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (\r\n this._primitiveChangeTag !== primitive.changeTag ||\r\n this._materialChangeTag !== material.changeTag\r\n ) {\r\n this._renderBundle = {};\r\n this._primitiveChangeTag = primitive.changeTag;\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle![hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle![hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n return this.primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return this._boneMatrices.get();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n let bbox: Nullable<BoundingVolume>;\r\n if (this._animatedBoundingBox) {\r\n bbox = this._animatedBoundingBox;\r\n } else {\r\n bbox = this._primitive.get()?.getBoundingVolume() ?? null;\r\n }\r\n return bbox;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.get()?.off('bv_changed', this._onBoundingboxChange, this);\r\n this._primitive.dispose();\r\n this._material.dispose();\r\n this._boneMatrices.dispose();\r\n this.setMorphData(null);\r\n this.setMorphInfo(null);\r\n this.setMorphBoundingInfo(null);\r\n this._renderBundle = null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /** @internal */\r\n private _onBoundingboxChange() {\r\n this.invalidateBoundingVolume();\r\n }\r\n /** @internal */\r\n private static _defaultMaterial: Nullable<MeshMaterial> = null;\r\n /** @internal */\r\n private static _getDefaultMaterial() {\r\n if (!this._defaultMaterial) {\r\n this._defaultMaterial = new LambertMaterial();\r\n }\r\n return this._defaultMaterial;\r\n }\r\n}\r\n"],"names":["MeshBase","castObservable","applyMixins","GraphNode","mixinDrawable","Mesh","scene","primitive","material","_primitive","DRef","_material","_castShadow","_skinnedBoundingInfo","_animatedBoundingBox","_boneMatrices","_morphData","_morphInfo","_morphBoundingInfo","_morphDirty","_instanceHash","_pickTarget","node","_batchable","getDevice","type","_getDefaultMaterial","_suspendSkinning","_skinBindingName","_renderBundle","_useRenderBundle","_materialChangeTag","_primitiveChangeTag","_postUpdateCallbacks","Set","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","skeletonName","name","skinBindingName","updateSkeletonState","skinnedBoundingInfo","suspendSkinning","val","castShadow","b","prim","currentPrimitive","off","_onBoundingboxChange","set","on","_scene","id","instanceId","invalidateBoundingVolume","RenderBundleWrapper","drawableChanged","dispatchEvent","m","materialAttached","coreMaterial","isMesh","setAnimatedBoundingBox","bbox","getAnimatedBoundingBox","setMorphBoundingInfo","info","targetBoxes","map","box","clone","originBox","updateMorphBoundingBox","getMorphBoundingInfo","setBoneMatrices","matrices","setMorphData","data","texture","dispose","width","height","slice","tex","createTexture2D","mipmapping","samplerOptions","minFilter","magFilter","mipFilter","update","setSkinnedBoundingInfo","getMorphData","setMorphInfo","buffer","names","bufferType","PBStructTypeInfo","ShaderHelper","getMorphInfoUniformName","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphUniformBuffer","createStructuredBuffer","usage","getMorphInfo","getNumMorphTargets","getMorphTargetName","index","Object","keys","find","key","getMorphTargetIndexByName","setMorphWeight","weight","setMorphWeightByIndex","queueUpdateNode","console","warn","getMorphWeight","undefined","updateMorphWeights","length","frameId","elapsedInSeconds","deltaInSeconds","updateMorphState","size","callback","addPostUpdateCallback","add","removePostUpdateCallback","delete","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","numTargets","Math","min","weights","Float32Array","subarray","Array","from","BoundingBox","calculateMorphBoundingBox","minPoint","addBy","maxPoint","bufferSubData","binding","findSkinBindingById","jointTexture","computeBoundingBox","invWorldMatrix","boundingBox","draw","ctx","renderQueue","hash","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","getPrimitive","getBoneMatrices","getNode","computeBoundingVolume","getBoundingVolume","onDispose","_defaultMaterial","LambertMaterial"],"mappings":"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"}
1
+ {"version":3,"file":"mesh.js","sources":["../../src/scene/mesh.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, castObservable, DRef } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { MeshMaterial } from '../material';\r\nimport { LambertMaterial, ShaderHelper } from '../material';\r\nimport type {\r\n RenderPass,\r\n Primitive,\r\n BatchDrawable,\r\n DrawContext,\r\n PickTarget,\r\n MorphData,\r\n MorphInfo,\r\n RenderQueue\r\n} from '../render';\r\nimport {\r\n PBArrayTypeInfo,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n PBStructTypeInfo,\r\n type RenderBundle,\r\n type Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_WEIGHTS_VECTOR_COUNT, QUEUE_OPAQUE } from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkinnedBoundingBox } from '../animation';\r\nimport { calculateMorphBoundingBox } from '../animation/morphtarget';\r\n\r\n/**\r\n * Callback invoked after a mesh finishes its per-frame update.\r\n *\r\n * @public\r\n */\r\nexport type MeshUpdateCallback = (frameId: number, elapsedInSeconds: number, deltaInSeconds: number) => void;\r\n\r\n/**\r\n * Bounding data used to update a mesh's local bounding box after morph target weights change.\r\n *\r\n * @public\r\n */\r\nexport interface MorphBoundingInfo {\r\n targetBoxes: BoundingBox[];\r\n originBox: BoundingBox;\r\n}\r\n\r\nconst MeshBase = castObservable(applyMixins(GraphNode, mixinDrawable))<{\r\n primitive_changed: [primitive: Nullable<Primitive>];\r\n material_changed: [material: Nullable<MeshMaterial>];\r\n}>();\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class Mesh extends MeshBase implements BatchDrawable {\r\n /** @internal */\r\n private readonly _primitive: DRef<Primitive>;\r\n /** @internal */\r\n private readonly _material: DRef<MeshMaterial>;\r\n /** @internal */\r\n protected _castShadow: boolean;\r\n /** @internal */\r\n protected _skinnedBoundingInfo: Nullable<SkinnedBoundingBox>;\r\n /** @internal */\r\n protected _animatedBoundingBox: Nullable<BoundingBox>;\r\n /** @internal */\r\n protected _skinBindingName: string;\r\n /** @internal */\r\n protected _boneMatrices: DRef<Texture2D>;\r\n /** @internal */\r\n protected _morphData: Nullable<MorphData>;\r\n /** @internal */\r\n protected _morphInfo: Nullable<MorphInfo>;\r\n /** @internal */\r\n protected _morphBoundingInfo: Nullable<MorphBoundingInfo>;\r\n /** @internal */\r\n protected _morphDirty: boolean;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _suspendSkinning: boolean;\r\n /** @internal */\r\n protected _renderBundle: Nullable<Record<string, RenderBundle>>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _primitiveChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _postUpdateCallbacks: Set<MeshUpdateCallback>;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene, primitive?: Primitive, material?: MeshMaterial) {\r\n super(scene);\r\n this._primitive = new DRef();\r\n this._material = new DRef();\r\n this._castShadow = true;\r\n this._skinnedBoundingInfo = null;\r\n this._animatedBoundingBox = null;\r\n this._boneMatrices = new DRef();\r\n this._morphData = null;\r\n this._morphInfo = null;\r\n this._morphBoundingInfo = null;\r\n this._morphDirty = false;\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this.primitive = primitive ?? null;\r\n this.material = material ?? Mesh._getDefaultMaterial();\r\n this._suspendSkinning = false;\r\n this._skinBindingName = '';\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n this._primitiveChangeTag = null;\r\n this._postUpdateCallbacks = new Set();\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n get useRenderBundle() {\r\n return this._useRenderBundle;\r\n }\r\n set useRenderBundle(val) {\r\n this._useRenderBundle = val;\r\n }\r\n get skeletonName() {\r\n return this._skinBindingName;\r\n }\r\n set skeletonName(name) {\r\n this.skinBindingName = name;\r\n }\r\n get skinBindingName() {\r\n return this._skinBindingName;\r\n }\r\n set skinBindingName(name) {\r\n if (name !== this._skinBindingName) {\r\n this._skinBindingName = name;\r\n this.updateSkeletonState();\r\n }\r\n }\r\n /** @internal */\r\n get skinnedBoundingInfo() {\r\n return this._skinnedBoundingInfo;\r\n }\r\n /** @internal */\r\n get suspendSkinning() {\r\n return this._suspendSkinning;\r\n }\r\n /** @internal */\r\n set suspendSkinning(val) {\r\n this._suspendSkinning = !!val;\r\n }\r\n /** Wether the mesh node casts shadows */\r\n get castShadow() {\r\n return this._castShadow;\r\n }\r\n set castShadow(b) {\r\n this._castShadow = b;\r\n }\r\n /** Primitive of the mesh */\r\n get primitive() {\r\n return this._primitive?.get() ?? null;\r\n }\r\n set primitive(prim) {\r\n const currentPrimitive = this._primitive.get();\r\n if (prim !== currentPrimitive) {\r\n if (currentPrimitive) {\r\n currentPrimitive.off('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._primitive.set(prim);\r\n if (prim) {\r\n prim.on('bv_changed', this._onBoundingboxChange, this);\r\n }\r\n this._instanceHash =\r\n prim && this._material.get()\r\n ? `${this.constructor.name}:${this._scene!.id}:${prim.id}:${this._material.get()!.instanceId}`\r\n : null;\r\n this.invalidateBoundingVolume();\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._primitiveChangeTag = null;\r\n this.dispatchEvent('primitive_changed', prim);\r\n }\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material?.get() ?? null;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m) {\r\n this._material.set(m);\r\n if (m) {\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash =\r\n this._primitive.get() && m\r\n ? `${this.constructor.name}:${this._scene?.id ?? 0}:${this._primitive.get()!.id}:${m.instanceId}`\r\n : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n this.dispatchEvent('material_changed', m);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isMesh}\r\n */\r\n isMesh(): this is Mesh {\r\n return true;\r\n }\r\n /**\r\n * Sets the bounding box for animation\r\n * @param bbox - The bounding box for animation\r\n */\r\n setAnimatedBoundingBox(bbox: Nullable<BoundingBox>) {\r\n this._animatedBoundingBox = bbox;\r\n this.invalidateBoundingVolume();\r\n }\r\n /**\r\n * Gets the bounding box for animation\r\n */\r\n getAnimatedBoundingBox() {\r\n return this._animatedBoundingBox ?? null;\r\n }\r\n /**\r\n * Sets morph target bounding data used to update the animated bounding box when weights change.\r\n * @param info - Morph target bounding data\r\n */\r\n setMorphBoundingInfo(info: Nullable<MorphBoundingInfo>) {\r\n this._morphBoundingInfo = info\r\n ? {\r\n targetBoxes: info.targetBoxes.map((box) => box.clone()),\r\n originBox: info.originBox.clone()\r\n }\r\n : null;\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n /**\r\n * Gets morph target bounding data.\r\n */\r\n getMorphBoundingInfo() {\r\n return this._morphBoundingInfo;\r\n }\r\n /**\r\n * Sets the texture that contains the bone matrices for skeletal animation\r\n * @param matrices - The texture that contains the bone matrices\r\n */\r\n setBoneMatrices(matrices: Nullable<Texture2D>) {\r\n if (this._boneMatrices.get() !== matrices) {\r\n this._boneMatrices.set(matrices);\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets the texture that contains the morph target data\r\n * @param data - The texture that contains the morph target data\r\n */\r\n setMorphData(data: Nullable<MorphData>) {\r\n if (!data) {\r\n if (this._morphData) {\r\n this._morphData?.texture?.dispose();\r\n this._morphData = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphData) {\r\n this._morphData = {\r\n texture: new DRef()\r\n } as MorphData;\r\n }\r\n this._morphData.width = data.width;\r\n this._morphData.height = data.height;\r\n this._morphData.data = data.data.slice();\r\n if (data.texture?.get()) {\r\n this._morphData.texture!.set(data.texture.get());\r\n } else {\r\n const tex = getDevice().createTexture2D('rgba32f', data.width, data.height, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n })!;\r\n tex.update(data.data, 0, 0, data.width, data.height);\r\n this._morphData.texture!.set(tex);\r\n }\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * Sets the skinned bounding info\r\n * @param info - The skinned bounding info\r\n */\r\n setSkinnedBoundingInfo(info: Nullable<SkinnedBoundingBox>) {\r\n this._skinnedBoundingInfo = info;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return this._morphData;\r\n }\r\n /**\r\n * Sets the buffer that contains the morph target information\r\n * @param info - The buffer that contains the morph target information\r\n */\r\n setMorphInfo(info: Nullable<MorphInfo>) {\r\n if (!info) {\r\n if (this._morphInfo) {\r\n this._morphInfo.buffer?.dispose();\r\n this._morphInfo = null;\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n } else {\r\n if (!this._morphInfo) {\r\n this._morphInfo = {\r\n buffer: new DRef()\r\n } as MorphInfo;\r\n }\r\n this._morphInfo.data = info.data.slice();\r\n this._morphInfo.names = { ...info.names };\r\n if (info.buffer?.get()) {\r\n this._morphInfo.buffer!.set(info.buffer.get());\r\n } else {\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n const morphUniformBuffer = getDevice().createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n info.data\r\n );\r\n this._morphInfo.buffer!.set(morphUniformBuffer);\r\n }\r\n this._morphDirty = false;\r\n this.refreshAnimatedBoundingBox();\r\n this._renderBundle = {};\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return this._morphInfo;\r\n }\r\n /** @internal */\r\n resolveAnimatedBoundingBox(morphBoundingBox?: Nullable<BoundingBox>) {\r\n const skinnedBoundingBox =\r\n this._boneMatrices.get() && this._skinnedBoundingInfo?.boundingBox?.isValid()\r\n ? this._skinnedBoundingInfo.boundingBox\r\n : null;\r\n if (skinnedBoundingBox && morphBoundingBox) {\r\n return skinnedBoundingBox.clone().union(morphBoundingBox) as BoundingBox;\r\n }\r\n return skinnedBoundingBox?.clone() ?? morphBoundingBox ?? null;\r\n }\r\n /**\r\n * Get the number of morph targets\r\n *\r\n * @returns The number of morph targets\r\n */\r\n getNumMorphTargets(): number {\r\n return this._morphInfo?.data[3] ?? 0;\r\n }\r\n /**\r\n * Get the name of the morph target by index\r\n *\r\n * @param index - The index of the morph target\r\n * @returns The name of the morph target, or null if not found\r\n */\r\n getMorphTargetName(index: number): Nullable<string> {\r\n if (this._morphInfo && index >= 0 && index < this._morphInfo.data[3]) {\r\n const name = Object.keys(this._morphInfo.names).find((key) => this._morphInfo!.names![key] === index);\r\n return name ?? null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the index of the morph target by name\r\n * @param name - The name of the morph target\r\n * @returns The index of the morph target, or -1 if not found\r\n */\r\n getMorphTargetIndexByName(name: string): number {\r\n return this._morphInfo?.names?.[name] ?? -1;\r\n }\r\n /**\r\n * Update morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeight(name: string, weight: number) {\r\n const index = this.getMorphTargetIndexByName(name);\r\n if (index >= 0) {\r\n this.setMorphWeightByIndex(index, weight);\r\n }\r\n }\r\n /**\r\n * Update morph target weight by index\r\n *\r\n * @param index - The index of the morph target\r\n * @param weight - The weight of the morph target\r\n */\r\n setMorphWeightByIndex(index: number, weight: number) {\r\n if (index >= 0 && index < this._morphInfo!.data[3]) {\r\n if (this._morphInfo!.data[4 + index] !== weight) {\r\n this._morphInfo!.data[4 + index] = weight;\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n } else {\r\n console.warn(`Morph target index out of range: ${index}`);\r\n }\r\n }\r\n /**\r\n * Get morph target weight\r\n *\r\n * @param name - The name of the morph target\r\n * @returns The weight of the morph target, or 0 if not found\r\n */\r\n getMorphWeight(name: string): number {\r\n const index = this._morphInfo?.names?.[name];\r\n if (index !== undefined && index >= 0 && index < this._morphInfo!.data[3]) {\r\n return this._morphInfo!.data[4 + index];\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Update morph target weights\r\n *\r\n * @param weight - The morph target weights. The length must not exceed the mesh's morph target count.\r\n */\r\n updateMorphWeights(weight: number[]) {\r\n if (this._morphInfo && weight && weight.length <= this._morphInfo.data[3]) {\r\n this._morphInfo.data.set(weight, 4);\r\n this._morphDirty = true;\r\n this.refreshAnimatedBoundingBox();\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /** {@inheritDoc SceneNode.update} */\r\n update(frameId: number, elapsedInSeconds: number, deltaInSeconds: number) {\r\n super.update(frameId, elapsedInSeconds, deltaInSeconds);\r\n this.updateSkeletonState();\r\n this.updateMorphState();\r\n if (this._postUpdateCallbacks.size > 0) {\r\n for (const callback of this._postUpdateCallbacks) {\r\n callback(frameId, elapsedInSeconds, deltaInSeconds);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n addPostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.add(callback);\r\n }\r\n }\r\n /** @internal */\r\n removePostUpdateCallback(callback: MeshUpdateCallback) {\r\n if (callback) {\r\n this._postUpdateCallbacks.delete(callback);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return (\r\n this._batchable &&\r\n !this._boneMatrices.get() &&\r\n !this._morphData &&\r\n (this._material.get()?.isBatchable() ?? false)\r\n );\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor() ?? false;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth() ?? false;\r\n }\r\n /** @internal */\r\n private calculateMorphBoundingBox(): Nullable<BoundingBox> {\r\n if (!this._morphInfo || !this._morphBoundingInfo) {\r\n return null;\r\n }\r\n const numTargets = Math.min(this._morphInfo.data[3], this._morphBoundingInfo.targetBoxes.length);\r\n if (numTargets <= 0) {\r\n return null;\r\n }\r\n const weights =\r\n this._morphInfo.data instanceof Float32Array\r\n ? this._morphInfo.data.subarray(4, 4 + numTargets)\r\n : new Float32Array(Array.from(this._morphInfo.data.subarray(4, 4 + numTargets)));\r\n const bbox = new BoundingBox();\r\n calculateMorphBoundingBox(bbox, this._morphBoundingInfo.targetBoxes, weights, numTargets);\r\n bbox.minPoint.addBy(this._morphBoundingInfo.originBox.minPoint);\r\n bbox.maxPoint.addBy(this._morphBoundingInfo.originBox.maxPoint);\r\n return bbox;\r\n }\r\n /** @internal */\r\n private refreshAnimatedBoundingBox() {\r\n this.setAnimatedBoundingBox(this.resolveAnimatedBoundingBox(this.calculateMorphBoundingBox()));\r\n }\r\n /** @internal */\r\n private updateMorphState() {\r\n if (this._morphInfo && this._morphDirty) {\r\n this._morphInfo.buffer!.get()!.bufferSubData(4 * 4, this._morphInfo.data, 4, this._morphInfo.data[3]);\r\n this.refreshAnimatedBoundingBox();\r\n this._morphDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private updateSkeletonState() {\r\n if (this._suspendSkinning) {\r\n this.setBoneMatrices(null);\r\n this.setAnimatedBoundingBox(null);\r\n return;\r\n }\r\n const binding = this._skinBindingName && this.findSkinBindingById(this._skinBindingName);\r\n if (binding) {\r\n this.setBoneMatrices(binding.jointTexture);\r\n binding.computeBoundingBox(this._skinnedBoundingInfo!, this.invWorldMatrix);\r\n this.refreshAnimatedBoundingBox();\r\n } else {\r\n this.setBoneMatrices(null);\r\n this.refreshAnimatedBoundingBox();\r\n }\r\n if (this._skinBindingName) {\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (\r\n this._primitiveChangeTag !== primitive.changeTag ||\r\n this._materialChangeTag !== material.changeTag\r\n ) {\r\n this._renderBundle = {};\r\n this._primitiveChangeTag = primitive.changeTag;\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle![hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle![hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n return this.primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return this._boneMatrices.get();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n let bbox: Nullable<BoundingVolume>;\r\n if (this._animatedBoundingBox) {\r\n bbox = this._animatedBoundingBox;\r\n } else {\r\n bbox = this._primitive.get()?.getBoundingVolume() ?? null;\r\n }\r\n return bbox;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.get()?.off('bv_changed', this._onBoundingboxChange, this);\r\n this._primitive.dispose();\r\n this._material.dispose();\r\n this._boneMatrices.dispose();\r\n this.setMorphData(null);\r\n this.setMorphInfo(null);\r\n this.setMorphBoundingInfo(null);\r\n this._renderBundle = null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n /** @internal */\r\n private _onBoundingboxChange() {\r\n this.invalidateBoundingVolume();\r\n }\r\n /** @internal */\r\n private static _defaultMaterial: Nullable<MeshMaterial> = null;\r\n /** @internal */\r\n private static _getDefaultMaterial() {\r\n if (!this._defaultMaterial) {\r\n this._defaultMaterial = new LambertMaterial();\r\n }\r\n return this._defaultMaterial;\r\n }\r\n}\r\n"],"names":["MeshBase","castObservable","applyMixins","GraphNode","mixinDrawable","Mesh","scene","primitive","material","_primitive","DRef","_material","_castShadow","_skinnedBoundingInfo","_animatedBoundingBox","_boneMatrices","_morphData","_morphInfo","_morphBoundingInfo","_morphDirty","_instanceHash","_pickTarget","node","_batchable","getDevice","type","_getDefaultMaterial","_suspendSkinning","_skinBindingName","_renderBundle","_useRenderBundle","_materialChangeTag","_primitiveChangeTag","_postUpdateCallbacks","Set","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","useRenderBundle","val","skeletonName","name","skinBindingName","updateSkeletonState","skinnedBoundingInfo","suspendSkinning","castShadow","b","prim","currentPrimitive","off","_onBoundingboxChange","set","on","_scene","id","instanceId","invalidateBoundingVolume","RenderBundleWrapper","drawableChanged","dispatchEvent","m","materialAttached","coreMaterial","isMesh","setAnimatedBoundingBox","bbox","getAnimatedBoundingBox","setMorphBoundingInfo","info","targetBoxes","map","box","clone","originBox","refreshAnimatedBoundingBox","getMorphBoundingInfo","setBoneMatrices","matrices","setMorphData","data","texture","dispose","width","height","slice","tex","createTexture2D","mipmapping","samplerOptions","minFilter","magFilter","mipFilter","update","setSkinnedBoundingInfo","getMorphData","setMorphInfo","buffer","names","bufferType","PBStructTypeInfo","ShaderHelper","getMorphInfoUniformName","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphUniformBuffer","createStructuredBuffer","usage","getMorphInfo","resolveAnimatedBoundingBox","morphBoundingBox","skinnedBoundingBox","boundingBox","isValid","union","getNumMorphTargets","getMorphTargetName","index","Object","keys","find","key","getMorphTargetIndexByName","setMorphWeight","weight","setMorphWeightByIndex","queueUpdateNode","console","warn","getMorphWeight","undefined","updateMorphWeights","length","frameId","elapsedInSeconds","deltaInSeconds","updateMorphState","size","callback","addPostUpdateCallback","add","removePostUpdateCallback","delete","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","numTargets","Math","min","weights","Float32Array","subarray","Array","from","BoundingBox","calculateMorphBoundingBox","minPoint","addBy","maxPoint","bufferSubData","binding","findSkinBindingById","jointTexture","computeBoundingBox","invWorldMatrix","draw","ctx","renderQueue","hash","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","getPrimitive","getBoneMatrices","getNode","computeBoundingVolume","getBoundingVolume","onDispose","_defaultMaterial","LambertMaterial"],"mappings":"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"}
@@ -8,6 +8,9 @@ class MeshDrawableBase extends Disposable {
8
8
  super();
9
9
  this._node = node;
10
10
  }
11
+ getName() {
12
+ return this._node.name;
13
+ }
11
14
  getNode() {
12
15
  return this._node;
13
16
  }
@@ -90,6 +93,9 @@ class MeshDrawable extends applyMixins(MeshDrawableBase, mixinDrawable) {
90
93
  this._material.dispose();
91
94
  this._primitive.dispose();
92
95
  }
96
+ getName() {
97
+ return this.getNode().name;
98
+ }
93
99
  }
94
100
 
95
101
  export { MeshDrawable, MeshDrawableBase };
@@ -1 +1 @@
1
- {"version":3,"file":"meshdrawable.js","sources":["../../src/scene/meshdrawable.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, Disposable, DRef } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../material';\r\nimport type {\r\n BatchDrawable,\r\n Drawable,\r\n DrawContext,\r\n MorphData,\r\n MorphInfo,\r\n PickTarget,\r\n Primitive,\r\n RenderQueue\r\n} from '../render';\r\nimport type { SceneNode } from '.';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Camera } from '../camera';\r\nimport { QUEUE_OPAQUE } from '../values';\r\n\r\nexport class MeshDrawableBase extends Disposable {\r\n private _node: SceneNode;\r\n constructor(node: SceneNode) {\r\n super();\r\n this._node = node;\r\n }\r\n getNode() {\r\n return this._node;\r\n }\r\n}\r\n\r\nexport class MeshDrawable<M extends MeshMaterial>\r\n extends applyMixins(MeshDrawableBase, mixinDrawable)\r\n implements Drawable\r\n{\r\n private _material: DRef<M>;\r\n private _primitive: DRef<Primitive>;\r\n constructor(node: SceneNode, material: M, primitive: Primitive) {\r\n super(node);\r\n this._material = new DRef(material);\r\n this._primitive = new DRef(primitive);\r\n }\r\n get material() {\r\n return this._material.get();\r\n }\r\n set material(mat) {\r\n this._material.set(mat);\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this.material;\r\n }\r\n get primitive() {\r\n return this._primitive.get();\r\n }\r\n set primitive(prim) {\r\n this._primitive.set(prim);\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this.primitive;\r\n }\r\n getPickTarget(): PickTarget {\r\n return { node: this.getNode() };\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSortDistance}\r\n */\r\n getSortDistance(camera: Camera) {\r\n const cameraWorldMatrix = camera.worldMatrix;\r\n const objectWorldMatrix = this.getNode().worldMatrix;\r\n const dx = cameraWorldMatrix.m03 - objectWorldMatrix.m03;\r\n const dy = cameraWorldMatrix.m13 - objectWorldMatrix.m13;\r\n const dz = cameraWorldMatrix.m23 - objectWorldMatrix.m23;\r\n return dx * dx + dy * dy * dz * dz;\r\n }\r\n getQueueType(): number {\r\n return this._material.get()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this._material.get()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this._material.get()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this._material.get()?.supportLighting();\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n return !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n this._primitive.dispose();\r\n }\r\n}\r\n"],"names":["MeshDrawableBase","Disposable","_node","node","getNode","MeshDrawable","applyMixins","mixinDrawable","_material","_primitive","material","primitive","DRef","get","mat","set","getMaterial","prim","getPrimitive","getPickTarget","getBoneMatrices","getMorphData","getMorphInfo","getSortDistance","camera","cameraWorldMatrix","worldMatrix","objectWorldMatrix","dx","m03","dy","m13","dz","m23","getQueueType","QUEUE_OPAQUE","needSceneColor","needSceneDepth","isUnlit","supportLighting","isBatchable","draw","ctx","renderQueue","bind","onDispose","dispose"],"mappings":"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"}
1
+ {"version":3,"file":"meshdrawable.js","sources":["../../src/scene/meshdrawable.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, Disposable, DRef } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../material';\r\nimport type {\r\n BatchDrawable,\r\n Drawable,\r\n DrawContext,\r\n MorphData,\r\n MorphInfo,\r\n PickTarget,\r\n Primitive,\r\n RenderQueue\r\n} from '../render';\r\nimport type { SceneNode } from '.';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { Camera } from '../camera';\r\nimport { QUEUE_OPAQUE } from '../values';\r\n\r\nexport class MeshDrawableBase extends Disposable {\r\n private _node: SceneNode;\r\n constructor(node: SceneNode) {\r\n super();\r\n this._node = node;\r\n }\r\n getName() {\r\n return this._node.name;\r\n }\r\n getNode() {\r\n return this._node;\r\n }\r\n}\r\n\r\nexport class MeshDrawable<M extends MeshMaterial>\r\n extends applyMixins(MeshDrawableBase, mixinDrawable)\r\n implements Drawable\r\n{\r\n private _material: DRef<M>;\r\n private _primitive: DRef<Primitive>;\r\n constructor(node: SceneNode, material: M, primitive: Primitive) {\r\n super(node);\r\n this._material = new DRef(material);\r\n this._primitive = new DRef(primitive);\r\n }\r\n get material() {\r\n return this._material.get();\r\n }\r\n set material(mat) {\r\n this._material.set(mat);\r\n }\r\n getMaterial(): Nullable<MeshMaterial> {\r\n return this.material;\r\n }\r\n get primitive() {\r\n return this._primitive.get();\r\n }\r\n set primitive(prim) {\r\n this._primitive.set(prim);\r\n }\r\n getPrimitive(): Nullable<Primitive> {\r\n return this.primitive;\r\n }\r\n getPickTarget(): PickTarget {\r\n return { node: this.getNode() };\r\n }\r\n getBoneMatrices(): Nullable<Texture2D> {\r\n return null;\r\n }\r\n getMorphData(): Nullable<MorphData> {\r\n return null;\r\n }\r\n getMorphInfo(): Nullable<MorphInfo> {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getSortDistance}\r\n */\r\n getSortDistance(camera: Camera) {\r\n const cameraWorldMatrix = camera.worldMatrix;\r\n const objectWorldMatrix = this.getNode().worldMatrix;\r\n const dx = cameraWorldMatrix.m03 - objectWorldMatrix.m03;\r\n const dy = cameraWorldMatrix.m13 - objectWorldMatrix.m13;\r\n const dz = cameraWorldMatrix.m23 - objectWorldMatrix.m23;\r\n return dx * dx + dy * dy * dz * dz;\r\n }\r\n getQueueType(): number {\r\n return this._material.get()?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n needSceneColor(): boolean {\r\n return this._material.get()?.needSceneColor() ?? false;\r\n }\r\n needSceneDepth(): boolean {\r\n return this._material.get()?.needSceneDepth() ?? false;\r\n }\r\n isUnlit(): boolean {\r\n return !this._material.get()?.supportLighting();\r\n }\r\n isBatchable(): this is BatchDrawable {\r\n return !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void {\r\n const material = this.material;\r\n const primitive = this.primitive;\r\n if (material && primitive) {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n this._primitive.dispose();\r\n }\r\n\r\n getName() {\r\n return this.getNode().name;\r\n }\r\n}\r\n"],"names":["MeshDrawableBase","Disposable","_node","node","getName","name","getNode","MeshDrawable","applyMixins","mixinDrawable","_material","_primitive","material","primitive","DRef","get","mat","set","getMaterial","prim","getPrimitive","getPickTarget","getBoneMatrices","getMorphData","getMorphInfo","getSortDistance","camera","cameraWorldMatrix","worldMatrix","objectWorldMatrix","dx","m03","dy","m13","dz","m23","getQueueType","QUEUE_OPAQUE","needSceneColor","needSceneDepth","isUnlit","supportLighting","isBatchable","draw","ctx","renderQueue","bind","onDispose","dispose"],"mappings":"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"}