@zephyr3d/scene 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/dist/animation/animation.js +4 -33
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +24 -11
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +1 -0
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +0 -1
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/ik/ccd_solver.js +372 -0
  10. package/dist/animation/ik/ccd_solver.js.map +1 -0
  11. package/dist/animation/ik/fabrik_solver.js +399 -0
  12. package/dist/animation/ik/fabrik_solver.js.map +1 -0
  13. package/dist/animation/ik/ik_angle_constraint.js +181 -0
  14. package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
  15. package/dist/animation/ik/ik_chain.js +163 -0
  16. package/dist/animation/ik/ik_chain.js.map +1 -0
  17. package/dist/animation/ik/ik_chain_builder.js +68 -0
  18. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  19. package/dist/animation/ik/ik_constraint.js +25 -0
  20. package/dist/animation/ik/ik_constraint.js.map +1 -0
  21. package/dist/animation/ik/ik_pole_constraint.js +123 -0
  22. package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
  23. package/dist/animation/ik/ik_solver.js +48 -0
  24. package/dist/animation/ik/ik_solver.js.map +1 -0
  25. package/dist/animation/ik/ik_track.js +96 -0
  26. package/dist/animation/ik/ik_track.js.map +1 -0
  27. package/dist/animation/ik/ik_utils.js +270 -0
  28. package/dist/animation/ik/ik_utils.js.map +1 -0
  29. package/dist/animation/ik/two_bone_ik_solver.js +332 -0
  30. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
  31. package/dist/animation/ik_modifier.js +61 -0
  32. package/dist/animation/ik_modifier.js.map +1 -0
  33. package/dist/animation/ik_postprocessor.js +71 -0
  34. package/dist/animation/ik_postprocessor.js.map +1 -0
  35. package/dist/animation/manual_transform_processor.js +156 -0
  36. package/dist/animation/manual_transform_processor.js.map +1 -0
  37. package/dist/animation/morphtarget.js +7 -1
  38. package/dist/animation/morphtarget.js.map +1 -1
  39. package/dist/animation/morphtrack.js +3 -3
  40. package/dist/animation/morphtrack.js.map +1 -1
  41. package/dist/animation/proptrack.js +37 -41
  42. package/dist/animation/proptrack.js.map +1 -1
  43. package/dist/animation/rotationtrack.js +0 -1
  44. package/dist/animation/rotationtrack.js.map +1 -1
  45. package/dist/animation/scaletrack.js +0 -1
  46. package/dist/animation/scaletrack.js.map +1 -1
  47. package/dist/animation/skeleton.js +57 -60
  48. package/dist/animation/skeleton.js.map +1 -1
  49. package/dist/animation/skeleton_modifier.js +38 -0
  50. package/dist/animation/skeleton_modifier.js.map +1 -0
  51. package/dist/animation/skeleton_postprocessor.js +50 -0
  52. package/dist/animation/skeleton_postprocessor.js.map +1 -0
  53. package/dist/animation/spring/multi_chain_spring_system.js +503 -0
  54. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
  55. package/dist/animation/spring/spring_chain.js +103 -0
  56. package/dist/animation/spring/spring_chain.js.map +1 -0
  57. package/dist/animation/spring/spring_collider.js +247 -0
  58. package/dist/animation/spring/spring_collider.js.map +1 -0
  59. package/dist/animation/spring/spring_constraint.js +21 -0
  60. package/dist/animation/spring/spring_constraint.js.map +1 -0
  61. package/dist/animation/spring/spring_particle.js +20 -0
  62. package/dist/animation/spring/spring_particle.js.map +1 -0
  63. package/dist/animation/spring/spring_system.js +526 -0
  64. package/dist/animation/spring/spring_system.js.map +1 -0
  65. package/dist/animation/spring_modifier.js +45 -0
  66. package/dist/animation/spring_modifier.js.map +1 -0
  67. package/dist/animation/spring_postprocessor.js +54 -0
  68. package/dist/animation/spring_postprocessor.js.map +1 -0
  69. package/dist/animation/translationtrack.js +0 -1
  70. package/dist/animation/translationtrack.js.map +1 -1
  71. package/dist/app/api.js +13 -4
  72. package/dist/app/api.js.map +1 -1
  73. package/dist/app/app.js +13 -1
  74. package/dist/app/app.js.map +1 -1
  75. package/dist/app/engine.js +33 -45
  76. package/dist/app/engine.js.map +1 -1
  77. package/dist/app/inputmgr.js.map +1 -1
  78. package/dist/app/runtimescript.js.map +1 -1
  79. package/dist/app/screen.js +318 -0
  80. package/dist/app/screen.js.map +1 -0
  81. package/dist/app/scriptingsystem.js +10 -6
  82. package/dist/app/scriptingsystem.js.map +1 -1
  83. package/dist/app/scriptregistry.js +11 -22
  84. package/dist/app/scriptregistry.js.map +1 -1
  85. package/dist/asset/assetmanager.js +79 -58
  86. package/dist/asset/assetmanager.js.map +1 -1
  87. package/dist/asset/builtin.js +5 -5
  88. package/dist/asset/builtin.js.map +1 -1
  89. package/dist/asset/loaders/dds/dds.js +6 -2
  90. package/dist/asset/loaders/dds/dds.js.map +1 -1
  91. package/dist/asset/loaders/dds/dds_loader.js +1 -1
  92. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  93. package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
  94. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  95. package/dist/asset/loaders/gltf/helpers.js +6 -2
  96. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  97. package/dist/asset/loaders/hdr/hdr.js +22 -15
  98. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  99. package/dist/asset/loaders/image/tga_Loader.js +2 -1
  100. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  101. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  102. package/dist/asset/loaders/loader.js +2 -2
  103. package/dist/asset/loaders/loader.js.map +1 -1
  104. package/dist/asset/model.js +9 -5
  105. package/dist/asset/model.js.map +1 -1
  106. package/dist/blitter/bilateralblur.js.map +1 -1
  107. package/dist/blitter/blitter.js +9 -11
  108. package/dist/blitter/blitter.js.map +1 -1
  109. package/dist/blitter/box.js +0 -1
  110. package/dist/blitter/box.js.map +1 -1
  111. package/dist/blitter/copy.js.map +1 -1
  112. package/dist/blitter/gaussianblur.js.map +1 -1
  113. package/dist/camera/base.js +1 -3
  114. package/dist/camera/base.js.map +1 -1
  115. package/dist/camera/camera.js +121 -37
  116. package/dist/camera/camera.js.map +1 -1
  117. package/dist/camera/fps.js +19 -17
  118. package/dist/camera/fps.js.map +1 -1
  119. package/dist/camera/orbit.js +45 -43
  120. package/dist/camera/orbit.js.map +1 -1
  121. package/dist/camera/orthocamera.js +27 -21
  122. package/dist/camera/orthocamera.js.map +1 -1
  123. package/dist/camera/perspectivecamera.js +28 -19
  124. package/dist/camera/perspectivecamera.js.map +1 -1
  125. package/dist/index.d.ts +15802 -15577
  126. package/dist/index.js +33 -11
  127. package/dist/index.js.map +1 -1
  128. package/dist/material/blinn.js.map +1 -1
  129. package/dist/material/grassmaterial.js.map +1 -1
  130. package/dist/material/lambert.js.map +1 -1
  131. package/dist/material/material.js +11 -5
  132. package/dist/material/material.js.map +1 -1
  133. package/dist/material/meshmaterial.js +10 -9
  134. package/dist/material/meshmaterial.js.map +1 -1
  135. package/dist/material/mixins/albedocolor.js.map +1 -1
  136. package/dist/material/mixins/foliage.js.map +1 -1
  137. package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
  138. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  139. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  140. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
  141. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  142. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  143. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  144. package/dist/material/mixins/lit.js +3 -3
  145. package/dist/material/mixins/lit.js.map +1 -1
  146. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  147. package/dist/material/mixins/pbr/common.js.map +1 -1
  148. package/dist/material/mixins/texture.js +3 -0
  149. package/dist/material/mixins/texture.js.map +1 -1
  150. package/dist/material/mixins/vertexcolor.js.map +1 -1
  151. package/dist/material/particle.js.map +1 -1
  152. package/dist/material/pbrblueprint.js +180 -22
  153. package/dist/material/pbrblueprint.js.map +1 -1
  154. package/dist/material/pbrmr.js.map +1 -1
  155. package/dist/material/pbrsg.js.map +1 -1
  156. package/dist/material/shader/helper.js +41 -56
  157. package/dist/material/shader/helper.js.map +1 -1
  158. package/dist/material/sprite.js +301 -0
  159. package/dist/material/sprite.js.map +1 -0
  160. package/dist/material/sprite3d.js +301 -0
  161. package/dist/material/sprite3d.js.map +1 -0
  162. package/dist/material/sprite3d_std.js +116 -0
  163. package/dist/material/sprite3d_std.js.map +1 -0
  164. package/dist/material/sprite3dblueprint.js +235 -0
  165. package/dist/material/sprite3dblueprint.js.map +1 -0
  166. package/dist/material/sprite_std.js +116 -0
  167. package/dist/material/sprite_std.js.map +1 -0
  168. package/dist/material/spriteblueprint.js +235 -0
  169. package/dist/material/spriteblueprint.js.map +1 -0
  170. package/dist/material/terrain-cm.js +0 -1
  171. package/dist/material/terrain-cm.js.map +1 -1
  172. package/dist/material/unlit.js.map +1 -1
  173. package/dist/material/water.js.map +1 -1
  174. package/dist/posteffect/bloom.js.map +1 -1
  175. package/dist/posteffect/compositor.js.map +1 -1
  176. package/dist/posteffect/fxaa.js.map +1 -1
  177. package/dist/posteffect/grayscale.js.map +1 -1
  178. package/dist/posteffect/motionblur.js.map +1 -1
  179. package/dist/posteffect/posteffect.js.map +1 -1
  180. package/dist/posteffect/sao.js.map +1 -1
  181. package/dist/posteffect/ssr.js +7 -5
  182. package/dist/posteffect/ssr.js.map +1 -1
  183. package/dist/posteffect/taa.js.map +1 -1
  184. package/dist/posteffect/tonemap.js.map +1 -1
  185. package/dist/render/abuffer_oit.js +8 -6
  186. package/dist/render/abuffer_oit.js.map +1 -1
  187. package/dist/render/clipmap.js +0 -10
  188. package/dist/render/clipmap.js.map +1 -1
  189. package/dist/render/cluster_light.js +4 -4
  190. package/dist/render/cluster_light.js.map +1 -1
  191. package/dist/render/cull_visitor.js +15 -17
  192. package/dist/render/cull_visitor.js.map +1 -1
  193. package/dist/render/depthpass.js +3 -4
  194. package/dist/render/depthpass.js.map +1 -1
  195. package/dist/render/drawable.js +15 -0
  196. package/dist/render/drawable.js.map +1 -0
  197. package/dist/render/drawable_mixin.js +8 -4
  198. package/dist/render/drawable_mixin.js.map +1 -1
  199. package/dist/render/envlight.js.map +1 -1
  200. package/dist/render/fbm_wavegenerator.js +3 -1
  201. package/dist/render/fbm_wavegenerator.js.map +1 -1
  202. package/dist/render/fft_wavegenerator.js +67 -64
  203. package/dist/render/fft_wavegenerator.js.map +1 -1
  204. package/dist/render/fullscreenquad.js.map +1 -1
  205. package/dist/render/gerstner_wavegenerator.js +3 -1
  206. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  207. package/dist/render/globalbindgroup_allocator.js +3 -1
  208. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  209. package/dist/render/hzb.js +1 -2
  210. package/dist/render/hzb.js.map +1 -1
  211. package/dist/render/lightpass.js +13 -13
  212. package/dist/render/lightpass.js.map +1 -1
  213. package/dist/render/objectcolorpass.js +4 -7
  214. package/dist/render/objectcolorpass.js.map +1 -1
  215. package/dist/render/primitive.js +4 -5
  216. package/dist/render/primitive.js.map +1 -1
  217. package/dist/render/render_queue.js +10 -5
  218. package/dist/render/render_queue.js.map +1 -1
  219. package/dist/render/renderer.js +16 -22
  220. package/dist/render/renderer.js.map +1 -1
  221. package/dist/render/renderpass.js +27 -52
  222. package/dist/render/renderpass.js.map +1 -1
  223. package/dist/render/rendertarget.js +5 -0
  224. package/dist/render/rendertarget.js.map +1 -0
  225. package/dist/render/screenrendertarget.js +56 -0
  226. package/dist/render/screenrendertarget.js.map +1 -0
  227. package/dist/render/shadowmap_pass.js +4 -5
  228. package/dist/render/shadowmap_pass.js.map +1 -1
  229. package/dist/render/sky.js +16 -14
  230. package/dist/render/sky.js.map +1 -1
  231. package/dist/render/weightedblended_oit.js.map +1 -1
  232. package/dist/scene/basesprite.js +296 -0
  233. package/dist/scene/basesprite.js.map +1 -0
  234. package/dist/scene/batchgroup.js +4 -2
  235. package/dist/scene/batchgroup.js.map +1 -1
  236. package/dist/scene/environment.js +9 -10
  237. package/dist/scene/environment.js.map +1 -1
  238. package/dist/scene/graph_node.js.map +1 -1
  239. package/dist/scene/light.js +22 -4
  240. package/dist/scene/light.js.map +1 -1
  241. package/dist/scene/mesh.js +96 -26
  242. package/dist/scene/mesh.js.map +1 -1
  243. package/dist/scene/octree.js.map +1 -1
  244. package/dist/scene/particlesys.js +25 -22
  245. package/dist/scene/particlesys.js.map +1 -1
  246. package/dist/scene/raycast_visitor.js +0 -16
  247. package/dist/scene/raycast_visitor.js.map +1 -1
  248. package/dist/scene/scene.js +7 -4
  249. package/dist/scene/scene.js.map +1 -1
  250. package/dist/scene/scene_node.js +20 -35
  251. package/dist/scene/scene_node.js.map +1 -1
  252. package/dist/scene/sprite.js +18 -0
  253. package/dist/scene/sprite.js.map +1 -0
  254. package/dist/scene/sprite3d.js +18 -0
  255. package/dist/scene/sprite3d.js.map +1 -0
  256. package/dist/scene/terrain-cm/grass.js +5 -4
  257. package/dist/scene/terrain-cm/grass.js.map +1 -1
  258. package/dist/scene/terrain-cm/grassmaterial.js +3 -1
  259. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  260. package/dist/scene/terrain-cm/terrain-cm.js +65 -48
  261. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  262. package/dist/scene/water.js +35 -30
  263. package/dist/scene/water.js.map +1 -1
  264. package/dist/shaders/atmosphere.js +17 -29
  265. package/dist/shaders/atmosphere.js.map +1 -1
  266. package/dist/shaders/fog.js.map +1 -1
  267. package/dist/shaders/misc.js.map +1 -1
  268. package/dist/shaders/noise.js.map +1 -1
  269. package/dist/shaders/pbr.js.map +1 -1
  270. package/dist/shaders/shadow.js.map +1 -1
  271. package/dist/shaders/ssr.js.map +1 -1
  272. package/dist/shaders/temporal.js.map +1 -1
  273. package/dist/shaders/water.js.map +1 -1
  274. package/dist/shadow/esm.js +1 -1
  275. package/dist/shadow/esm.js.map +1 -1
  276. package/dist/shadow/pcf_opt.js.map +1 -1
  277. package/dist/shadow/pcf_pd.js.map +1 -1
  278. package/dist/shadow/shader.js +3 -1
  279. package/dist/shadow/shader.js.map +1 -1
  280. package/dist/shadow/shadow_impl.js.map +1 -1
  281. package/dist/shadow/shadowmapper.js +6 -18
  282. package/dist/shadow/shadowmapper.js.map +1 -1
  283. package/dist/shadow/ssm.js.map +1 -1
  284. package/dist/shadow/vsm.js.map +1 -1
  285. package/dist/shapes/box.js +9 -3
  286. package/dist/shapes/box.js.map +1 -1
  287. package/dist/shapes/cylinder.js +2 -2
  288. package/dist/shapes/cylinder.js.map +1 -1
  289. package/dist/shapes/plane.js +2 -2
  290. package/dist/shapes/plane.js.map +1 -1
  291. package/dist/shapes/shape.js +2 -1
  292. package/dist/shapes/shape.js.map +1 -1
  293. package/dist/shapes/sphere.js +2 -2
  294. package/dist/shapes/sphere.js.map +1 -1
  295. package/dist/shapes/tetrahedron.js +5 -6
  296. package/dist/shapes/tetrahedron.js.map +1 -1
  297. package/dist/shapes/torus.js +2 -2
  298. package/dist/shapes/torus.js.map +1 -1
  299. package/dist/utility/aabbtree.js +1 -1
  300. package/dist/utility/aabbtree.js.map +1 -1
  301. package/dist/utility/blueprint/common/constants.js +578 -104
  302. package/dist/utility/blueprint/common/constants.js.map +1 -1
  303. package/dist/utility/blueprint/common/math.js +471 -9
  304. package/dist/utility/blueprint/common/math.js.map +1 -1
  305. package/dist/utility/blueprint/common.js +1 -1
  306. package/dist/utility/blueprint/common.js.map +1 -1
  307. package/dist/utility/blueprint/material/func.js +9 -5
  308. package/dist/utility/blueprint/material/func.js.map +1 -1
  309. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  310. package/dist/utility/blueprint/material/ir.js +288 -80
  311. package/dist/utility/blueprint/material/ir.js.map +1 -1
  312. package/dist/utility/blueprint/material/pbr.js +92 -4
  313. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  314. package/dist/utility/blueprint/material/texture.js +62 -45
  315. package/dist/utility/blueprint/material/texture.js.map +1 -1
  316. package/dist/utility/blueprint/node.js +28 -1
  317. package/dist/utility/blueprint/node.js.map +1 -1
  318. package/dist/utility/bounding_volume.js.map +1 -1
  319. package/dist/utility/debug.js.map +1 -1
  320. package/dist/utility/draco/decoder.js.map +1 -1
  321. package/dist/utility/misc.js +1 -1
  322. package/dist/utility/misc.js.map +1 -1
  323. package/dist/utility/panorama.js.map +1 -1
  324. package/dist/utility/pmrem.js.map +1 -1
  325. package/dist/utility/rendermipmap.js.map +1 -1
  326. package/dist/utility/serialization/json.js +19 -15
  327. package/dist/utility/serialization/json.js.map +1 -1
  328. package/dist/utility/serialization/manager.js +89 -22
  329. package/dist/utility/serialization/manager.js.map +1 -1
  330. package/dist/utility/serialization/scene/animation.js +44 -41
  331. package/dist/utility/serialization/scene/animation.js.map +1 -1
  332. package/dist/utility/serialization/scene/batch.js +4 -3
  333. package/dist/utility/serialization/scene/batch.js.map +1 -1
  334. package/dist/utility/serialization/scene/camera.js +97 -9
  335. package/dist/utility/serialization/scene/camera.js.map +1 -1
  336. package/dist/utility/serialization/scene/common.js +102 -28
  337. package/dist/utility/serialization/scene/common.js.map +1 -1
  338. package/dist/utility/serialization/scene/light.js +14 -12
  339. package/dist/utility/serialization/scene/light.js.map +1 -1
  340. package/dist/utility/serialization/scene/material.js +216 -26
  341. package/dist/utility/serialization/scene/material.js.map +1 -1
  342. package/dist/utility/serialization/scene/mesh.js +71 -100
  343. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  344. package/dist/utility/serialization/scene/misc.js +3 -2
  345. package/dist/utility/serialization/scene/misc.js.map +1 -1
  346. package/dist/utility/serialization/scene/node.js +42 -9
  347. package/dist/utility/serialization/scene/node.js.map +1 -1
  348. package/dist/utility/serialization/scene/particle.js +7 -5
  349. package/dist/utility/serialization/scene/particle.js.map +1 -1
  350. package/dist/utility/serialization/scene/primitive.js +18 -15
  351. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  352. package/dist/utility/serialization/scene/scene.js +3 -2
  353. package/dist/utility/serialization/scene/scene.js.map +1 -1
  354. package/dist/utility/serialization/scene/sprite.js +164 -0
  355. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  356. package/dist/utility/serialization/scene/terrain.js +8 -6
  357. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  358. package/dist/utility/serialization/scene/water.js +11 -9
  359. package/dist/utility/serialization/scene/water.js.map +1 -1
  360. package/dist/utility/serialization/types.js +6 -0
  361. package/dist/utility/serialization/types.js.map +1 -0
  362. package/dist/utility/shprojector.js.map +1 -1
  363. package/dist/utility/textures/ggxlut.js.map +1 -1
  364. package/dist/utility/textures/gradientnoise.js.map +1 -1
  365. package/dist/utility/textures/randomnoise.js.map +1 -1
  366. package/dist/values.js +14 -14
  367. package/dist/values.js.map +1 -1
  368. package/package.json +80 -80
@@ -23,19 +23,18 @@ import { ShaderHelper } from '../material/shader/helper.js';
23
23
  /** @internal */ _getGlobalBindGroupHash(ctx) {
24
24
  return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;
25
25
  }
26
- /** @internal */ renderItems(ctx, renderQueue) {
26
+ /** @internal */ renderItems(ctx, camera, renderQueue) {
27
27
  const items = renderQueue.itemList;
28
28
  if (items) {
29
29
  ctx.drawEnvLight = false;
30
30
  ctx.env = null;
31
- ctx.fogFlags = 0;
32
31
  ctx.flip = this.isAutoFlip(ctx);
33
- ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
32
+ ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);
34
33
  const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
35
34
  ctx.device.setBindGroup(0, bindGroup);
36
35
  ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);
37
- ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
38
- const reverseWinding = ctx.camera.worldMatrixDet < 0;
36
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, true);
37
+ const reverseWinding = camera.worldMatrixDet < 0;
39
38
  for (const lit of items.opaque.lit){
40
39
  this.drawItemList(lit, ctx, reverseWinding);
41
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shadowmap_pass.js","sources":["../../src/render/shadowmap_pass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Shadow map render pass\r\n *\r\n * @public\r\n */\r\nexport class ShadowMapPass extends RenderPass {\r\n /** @internal */\r\n protected _currentLight: PunctualLight;\r\n /**\r\n * Creates an instance of ShadowMapPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_SHADOWMAP);\r\n this._currentLight = null;\r\n }\r\n /** The light that will be used to render shadow map */\r\n get light(): PunctualLight {\r\n return this._currentLight;\r\n }\r\n set light(light: PunctualLight) {\r\n this._currentLight = light;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${ctx.shadowMapInfo.get(this.light).shaderHash}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.fogFlags = 0;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of items.opaque.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.opaque.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n for (const lit of items.transmission.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.transmission.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["ShadowMapPass","RenderPass","RENDER_PASS_TYPE_SHADOWMAP","_currentLight","light","_getGlobalBindGroupHash","ctx","shadowMapInfo","get","shaderHash","renderItems","renderQueue","items","itemList","drawEnvLight","env","fogFlags","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setLightUniformsShadowMap","setCameraUniforms","reverseWinding","camera","worldMatrixDet","lit","opaque","drawItemList","unlit","transmission"],"mappings":";;;;AAOA;;;;IAKO,MAAMA,aAAsBC,SAAAA,UAAAA,CAAAA;qBAEjC,aAAuC;AACvC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,0BAAAA,CAAAA;QACN,IAAI,CAACC,aAAa,GAAG,IAAA;AACvB;4DAEA,IAAIC,KAAuB,GAAA;QACzB,OAAO,IAAI,CAACD,aAAa;AAC3B;IACA,IAAIC,KAAAA,CAAMA,KAAoB,EAAE;QAC9B,IAAI,CAACD,aAAa,GAAGC,KAAAA;AACvB;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAGA,GAAIC,CAAAA,aAAa,CAACC,GAAG,CAAC,IAAI,CAACJ,KAAK,CAAEK,CAAAA,UAAU,CAAE,CAAA;AAC1D;AACA,qBACA,WAAUC,CAAYJ,GAAgB,EAAEK,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTN,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,QAAQ,GAAG,CAAA;AACfV,YAAAA,GAAAA,CAAIW,IAAI,GAAG,IAAI,CAACC,UAAU,CAACZ,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIa,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACd,GAAAA,CAAAA;AACjD,YAAA,MAAMe,SAAYf,GAAAA,GAAAA,CAAIgB,wBAAwB,CAACC,kBAAkB,CAACjB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIkB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;AAC3BK,YAAAA,YAAAA,CAAaC,yBAAyB,CAACN,SAAAA,EAAWf,GAAK,EAAA,IAAI,CAACH,aAAa,CAAA;YACzEuB,YAAaE,CAAAA,iBAAiB,CAACP,SAAAA,EAAWf,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMuB,cAAiBvB,GAAAA,GAAAA,CAAIwB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,GAAOpB,IAAAA,KAAAA,CAAMqB,MAAM,CAACD,GAAG,CAAE;AAClC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMqB,MAAM,CAACE,KAAK,CAAE;AACtC,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACA,YAAA,KAAK,MAAMG,GAAOpB,IAAAA,KAAAA,CAAMwB,YAAY,CAACJ,GAAG,CAAE;AACxC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAK1B,GAAKuB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMM,KAASvB,IAAAA,KAAAA,CAAMwB,YAAY,CAACD,KAAK,CAAE;AAC5C,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKuB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}
1
+ {"version":3,"file":"shadowmap_pass.js","sources":["../../src/render/shadowmap_pass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_SHADOWMAP } from '../values';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera';\r\n\r\n/**\r\n * Shadow map render pass\r\n *\r\n * @public\r\n */\r\nexport class ShadowMapPass extends RenderPass {\r\n /** @internal */\r\n protected _currentLight: Nullable<PunctualLight>;\r\n /**\r\n * Creates an instance of ShadowMapPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_SHADOWMAP);\r\n this._currentLight = null;\r\n }\r\n /** The light that will be used to render shadow map */\r\n get light() {\r\n return this._currentLight;\r\n }\r\n set light(light) {\r\n this._currentLight = light;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${ctx.shadowMapInfo!.get(this.light!)!.shaderHash}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setLightUniformsShadowMap(bindGroup, ctx, this._currentLight!);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, true);\r\n const reverseWinding = camera.worldMatrixDet < 0;\r\n for (const lit of items.opaque.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.opaque.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n for (const lit of items.transmission.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.transmission.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["ShadowMapPass","RenderPass","RENDER_PASS_TYPE_SHADOWMAP","_currentLight","light","_getGlobalBindGroupHash","ctx","shadowMapInfo","get","shaderHash","camera","renderQueue","items","itemList","drawEnvLight","env","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setLightUniformsShadowMap","setCameraUniforms","reverseWinding","worldMatrixDet","lit","opaque","drawItemList","unlit","transmission"],"mappings":";;;;AASA;;;;IAKO,MAAMA,aAAsBC,SAAAA,UAAAA,CAAAA;qBAEjC,aAAiD;AACjD;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,0BAAAA,CAAAA;QACN,IAAI,CAACC,aAAa,GAAG,IAAA;AACvB;4DAEA,IAAIC,KAAQ,GAAA;QACV,OAAO,IAAI,CAACD,aAAa;AAC3B;IACA,IAAIC,KAAAA,CAAMA,KAAK,EAAE;QACf,IAAI,CAACD,aAAa,GAAGC,KAAAA;AACvB;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAGA,GAAIC,CAAAA,aAAa,CAAEC,GAAG,CAAC,IAAI,CAACJ,KAAK,CAAIK,CAAAA,UAAU,CAAE,CAAA;AAC7D;qBAEA,WAAsBH,CAAAA,GAAgB,EAAEI,MAAc,EAAEC,WAAwB,EAAE;QAChF,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTN,YAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,YAAAA,GAAAA,CAAIS,GAAG,GAAG,IAAA;AACVT,YAAAA,GAAAA,CAAIU,IAAI,GAAG,IAAI,CAACC,UAAU,CAACX,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIY,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACb,GAAKI,EAAAA,MAAAA,CAAAA;AACtD,YAAA,MAAMU,SAAYd,GAAAA,GAAAA,CAAIe,wBAAwB,CAACC,kBAAkB,CAAChB,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIiB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;AAC3BK,YAAAA,YAAAA,CAAaC,yBAAyB,CAACN,SAAAA,EAAWd,GAAK,EAAA,IAAI,CAACH,aAAa,CAAA;AACzEsB,YAAAA,YAAAA,CAAaE,iBAAiB,CAACP,SAAWd,EAAAA,GAAAA,EAAKI,MAAQ,EAAA,IAAA,CAAA;YACvD,MAAMkB,cAAAA,GAAiBlB,MAAOmB,CAAAA,cAAc,GAAG,CAAA;AAC/C,YAAA,KAAK,MAAMC,GAAOlB,IAAAA,KAAAA,CAAMmB,MAAM,CAACD,GAAG,CAAE;AAClC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAKxB,GAAKsB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMK,KAASrB,IAAAA,KAAAA,CAAMmB,MAAM,CAACE,KAAK,CAAE;AACtC,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO3B,GAAKsB,EAAAA,cAAAA,CAAAA;AAChC;AACA,YAAA,KAAK,MAAME,GAAOlB,IAAAA,KAAAA,CAAMsB,YAAY,CAACJ,GAAG,CAAE;AACxC,gBAAA,IAAI,CAACE,YAAY,CAACF,GAAAA,EAAKxB,GAAKsB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,YAAA,KAAK,MAAMK,KAASrB,IAAAA,KAAAA,CAAMsB,YAAY,CAACD,KAAK,CAAE;AAC5C,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO3B,GAAKsB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACF;;;;"}
@@ -2,7 +2,7 @@ import { linearToGamma } from '../shaders/misc.js';
2
2
  import { smoothNoise3D } from '../shaders/noise.js';
3
3
  import { getDevice, getEngine } from '../app/api.js';
4
4
  import { getDefaultAtmosphereParams, getAerialPerspectiveLut, renderAtmosphereLUTs, getAtmosphereParamsStruct, createTransmittanceLutProgram, createMultiScatteringLutProgram, createSkyViewLutProgram, createAPLutProgram, skyBox, atmosphereLUTRendered, getTransmittanceLut, getSkyViewLut } from '../shaders/atmosphere.js';
5
- import { Matrix4x4, Disposable, DRef, Vector4, Vector2, Vector3, CubeFace } from '@zephyr3d/base';
5
+ import { Matrix4x4, Disposable, DRef, Vector4, Vector2, Vector3, CubeFace, objectKeys } from '@zephyr3d/base';
6
6
  import { Primitive } from './primitive.js';
7
7
  import { BoxShape } from '../shapes/box.js';
8
8
  import '../shapes/cylinder.js';
@@ -10,7 +10,6 @@ import '../shapes/torus.js';
10
10
  import '../shapes/plane.js';
11
11
  import '../shapes/sphere.js';
12
12
  import '../shapes/tetrahedron.js';
13
- import { Camera } from '../camera/camera.js';
14
13
  import { prefilterCubemap } from '../utility/pmrem.js';
15
14
  import { ShaderHelper } from '../material/shader/helper.js';
16
15
  import { fetchSampler } from '../utility/misc.js';
@@ -19,6 +18,8 @@ import { uniformSphereSamples, Fog } from '../values.js';
19
18
  import { getDefaultHeightFogParams, MAX_FOG_HEIGHT, getHeightFogParamsStruct, calculateFog } from '../shaders/fog.js';
20
19
  import { drawFullscreenQuad } from './fullscreenquad.js';
21
20
  import { panoramaToCubemap } from '../utility/panorama.js';
21
+ import '../camera/camera.js';
22
+ import { PerspectiveCamera } from '../camera/perspectivecamera.js';
22
23
 
23
24
  const fogTypeMap = {
24
25
  height_fog: Fog.FOG_TYPE_HEIGHT,
@@ -30,9 +31,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
30
31
  * @public
31
32
  */ class SkyRenderer extends Disposable {
32
33
  static _skyCamera = (()=>{
33
- const camera = new Camera(null);
34
- camera.setPerspective(Math.PI / 2, 1, 1, 20);
35
- return camera;
34
+ return new PerspectiveCamera(null, Math.PI * 0.5, 1, 20, 1);
36
35
  })();
37
36
  static transmittanceLutProgram = null;
38
37
  static multiScatteringLutProgram = null;
@@ -93,7 +92,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
93
92
  */ constructor(){
94
93
  super();
95
94
  this._skyType = 'scatter';
96
- this._skyColor = Vector4.one();
95
+ this._skyColor = new Vector4(0, 0, 0, 1);
97
96
  this._skyImage = new DRef();
98
97
  this._skyboxTexture = new DRef();
99
98
  this._skyboxTextureSize = 1024;
@@ -128,8 +127,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
128
127
  this._bindgroupSky = {};
129
128
  this._bindgroupFog = new DRef();
130
129
  this._bindgroupFogNoDepth = new DRef();
131
- const texCaps = getDevice().getDeviceCaps().textureCaps;
132
- this._format = texCaps.getTextureFormatInfo('rg11b10uf')?.renderable ? 'rg11b10uf' : texCaps.supportHalfFloatColorBuffer && texCaps.supportLinearHalfFloatTexture ? 'rgba16f' : 'rgba32f';
130
+ this._format = null;
133
131
  }
134
132
  /** @internal */ getHash(_ctx) {
135
133
  return `${this.skyType}:${this.fogType}`;
@@ -137,6 +135,10 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
137
135
  /**
138
136
  * Gets the preferred environment texture format.
139
137
  */ get envTextureFormat() {
138
+ if (!this._format) {
139
+ const texCaps = getDevice().getDeviceCaps().textureCaps;
140
+ this._format = texCaps.getTextureFormatInfo('rg11b10uf')?.renderable ? 'rg11b10uf' : texCaps.supportHalfFloatColorBuffer && texCaps.supportLinearHalfFloatTexture ? 'rgba16f' : 'rgba32f';
141
+ }
140
142
  return this._format;
141
143
  }
142
144
  /** Which type of the sky should be rendered */ get skyType() {
@@ -387,7 +389,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
387
389
  * Radiance map of the sky.
388
390
  */ get radianceMap() {
389
391
  if (!this._radianceMap.get()) {
390
- this._radianceMap.set(getDevice().createCubeTexture(this._format, this._radianceMapWidth));
392
+ this._radianceMap.set(getDevice().createCubeTexture(this.envTextureFormat, this._radianceMapWidth));
391
393
  this._radianceMap.get().name = 'SkyRadianceMap';
392
394
  }
393
395
  return this._radianceMap.get();
@@ -501,7 +503,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
501
503
  this._bakedSkyboxDirty = true;
502
504
  }
503
505
  if (!this._skyDistantLightLut.get()) {
504
- const tex = ctx.device.createTexture2D(this._format, 1, 1, {
506
+ const tex = ctx.device.createTexture2D(this.envTextureFormat, 1, 1, {
505
507
  mipmapping: false
506
508
  });
507
509
  tex.name = 'DistantSkyLut';
@@ -566,7 +568,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
566
568
  }
567
569
  updateBakedSkyMap(ctx) {
568
570
  const device = ctx.device;
569
- const tex = this._bakedSkyboxTexture.get() && this._bakedSkyboxTexture.get().width === this._bakedSkyboxTextureSize ? this._bakedSkyboxTexture.get() : device.createCubeTexture(this._format, this._bakedSkyboxTextureSize, {
571
+ const tex = this._bakedSkyboxTexture.get() && this._bakedSkyboxTexture.get().width === this._bakedSkyboxTextureSize ? this._bakedSkyboxTexture.get() : device.createCubeTexture(this.envTextureFormat, this._bakedSkyboxTextureSize, {
570
572
  mipmapping: false
571
573
  });
572
574
  tex.name = 'BakedSkyboxTexture';
@@ -691,8 +693,8 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
691
693
  this._skyDistantLightLut.dispose();
692
694
  }
693
695
  this._bindgroupDistantLight.dispose();
694
- for(const k in this._bindgroupSky){
695
- this._bindgroupSky[k].dispose();
696
+ for (const k of objectKeys(this._bindgroupSky)){
697
+ this._bindgroupSky[k]?.dispose();
696
698
  }
697
699
  this._bindgroupSky = {};
698
700
  this._bindgroupFog.dispose();
@@ -704,7 +706,7 @@ const defaultSkyWorldMatrix = Matrix4x4.identity();
704
706
  if (!tex.isTexture2D()) {
705
707
  console.error(`Invalid panorama texture asset: ${this._panoramaAsset}`);
706
708
  } else {
707
- const skyboxTexture = getDevice().createCubeTexture(this._format, this._skyboxTextureSize, {
709
+ const skyboxTexture = getDevice().createCubeTexture(this.envTextureFormat, this._skyboxTextureSize, {
708
710
  mipmapping: false
709
711
  });
710
712
  panoramaToCubemap(tex, skyboxTexture);