@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -0,0 +1,273 @@
1
+ import { drawFullscreenQuad } from './fullscreenquad.js';
2
+ import { Application } from '../app/app.js';
3
+ import '@zephyr3d/base';
4
+ import '@zephyr3d/device';
5
+ import { CopyBlitter } from '../blitter/copy.js';
6
+ import { fetchSampler } from '../utility/misc.js';
7
+
8
+ let hzbProgram = null;
9
+ let hzbBindGroup = null;
10
+ let blitter = null;
11
+ let srcSize = null;
12
+ /*
13
+ vec3 trace_ray(vec3 ray_start, vec3 ray_dir)
14
+ {
15
+
16
+ if (ray_dir.z < 0.0) {
17
+ return vec3(0);
18
+ }
19
+
20
+ ray_dir = normalize(ray_dir);
21
+ ivec2 work_size = SCREEN_SIZE_INT;
22
+
23
+ const int loop_max = 150;
24
+ int mipmap = 0;
25
+ int max_iter = loop_max;
26
+
27
+ vec3 pos = ray_start;
28
+
29
+ // Move pos by a small bias
30
+ pos += ray_dir * 0.008;
31
+
32
+ float hit_bias = 0.0017;
33
+
34
+ while (mipmap > -1 && max_iter --> 0)
35
+ {
36
+
37
+ // Check if we are out of screen bounds, if so, return
38
+ if (pos.x < 0.0 || pos.y < 0.0 || pos.x > 1.0 || pos.y > 1.0 || pos.z < 0.0 || pos.z > 1.0)
39
+ {
40
+ return vec3(0,0,0);
41
+ }
42
+
43
+ // Fetch the current minimum cell plane height
44
+ float cell_z = textureLod(DownscaledDepth, pos.xy, mipmap).x;
45
+
46
+ // Compute the fractional part of the coordinate (scaled by the working size)
47
+ // so the values will be between 0.0 and 1.0
48
+ vec2 fract_coord = mod(pos.xy * work_size, 1.0);
49
+
50
+ // Modify fract coord based on which direction we are stepping in.
51
+ // Fract coord now contains the percentage how far we moved already in
52
+ // the current cell in each direction.
53
+ fract_coord.x = ray_dir.x > 0.0 ? fract_coord.x : 1.0 - fract_coord.x;
54
+ fract_coord.y = ray_dir.y > 0.0 ? fract_coord.y : 1.0 - fract_coord.y;
55
+
56
+ // Compute maximum k and minimum k for which the ray would still be
57
+ // inside of the cell.
58
+ vec2 max_k_v = (1.0 / abs(ray_dir.xy)) / work_size.xy;
59
+ vec2 min_k_v = -max_k_v * fract_coord.xy;
60
+
61
+ // Scale the maximum k by the percentage we already processed in the current cell,
62
+ // since e.g. if we already moved 50%, we can only move another 50%.
63
+ max_k_v *= 1.0 - fract_coord.xy;
64
+
65
+ // The maximum k is the minimum of the both sub-k's since if one component-maximum
66
+ // is reached, the ray is out of the cell
67
+ float max_k = min(max_k_v.x, max_k_v.y);
68
+
69
+ // Same applies to the min_k, but because min_k is negative we have to use max()
70
+ float min_k = max(min_k_v.x, min_k_v.y);
71
+
72
+ // Check if the ray intersects with the cell plane. We have the following
73
+ // equation:
74
+ // pos.z + k * ray_dir.z = cell.z
75
+ // So k is:
76
+ float k = (cell_z - pos.z) / ray_dir.z;
77
+
78
+ // Optional: Abort when ray didn't exactly intersect:
79
+ // if (k < min_k && mipmap <= 0) {
80
+ // return vec3(0);
81
+ // }
82
+
83
+ // Check if we intersected the cell
84
+ if (k < max_k + hit_bias)
85
+ {
86
+ // Clamp k
87
+ k = max(min_k, k);
88
+
89
+ if (mipmap < 1) {
90
+ pos += k * ray_dir;
91
+ return pos;
92
+ }
93
+
94
+ // If we hit anything at a higher mipmap, step up to a higher detailed
95
+ // mipmap:
96
+ mipmap -= 2;
97
+ work_size *= 4;
98
+ } else {
99
+
100
+ // If we hit nothing, move to the next cell, with a small bias
101
+ pos += max_k * ray_dir * 1.04;
102
+ }
103
+
104
+ mipmap += 1;
105
+ work_size /= 2;
106
+ }
107
+
108
+ return vec3(0);
109
+ }
110
+ */ /*
111
+ float2 cell(float2 ray, float2 cell_count, uint camera) {
112
+ return floor(ray.xy * cell_count);
113
+ }
114
+
115
+ float2 cell_count(float level) {
116
+ return input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));
117
+ }
118
+
119
+ float3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {
120
+ float2 cell_size = 1.0 / cell_count;
121
+ float2 planes = cell_id/cell_count + cell_size * cross_step;
122
+
123
+ float2 solutions = (planes - pos)/dir.xy;
124
+ float3 intersection_pos = pos + dir * min(solutions.x, solutions.y);
125
+
126
+ intersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);
127
+
128
+ return intersection_pos;
129
+ }
130
+
131
+ bool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {
132
+ return (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;
133
+ }
134
+
135
+ float minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {
136
+ return input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;
137
+ }
138
+
139
+ float3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {
140
+ float level = HIZ_START_LEVEL;
141
+ float3 v_z = v/v.z;
142
+ float2 hi_z_size = cell_count(level);
143
+ float3 ray = p;
144
+
145
+ float2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);
146
+ float2 cross_offset = cross_step * 0.00001;
147
+ cross_step = saturate(cross_step);
148
+
149
+ float2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);
150
+ ray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);
151
+
152
+ iterations = 0;
153
+ while(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {
154
+ // get the cell number of the current ray
155
+ float2 current_cell_count = cell_count(level);
156
+ float2 old_cell_id = cell(ray.xy, current_cell_count, camera);
157
+
158
+ // get the minimum depth plane in which the current ray resides
159
+ float min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);
160
+
161
+ // intersect only if ray depth is below the minimum depth plane
162
+ float3 tmp_ray = ray;
163
+ if(v.z > 0) {
164
+ float min_minus_ray = min_z - ray.z;
165
+ tmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;
166
+ float2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);
167
+ if(crossed_cell_boundary(old_cell_id, new_cell_id)) {
168
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
169
+ level = min(HIZ_MAX_LEVEL, level + 2.0f);
170
+ }else{
171
+ if(level == 1 && abs(min_minus_ray) > 0.0001) {
172
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
173
+ level = 2;
174
+ }
175
+ }
176
+ } else if(ray.z < min_z) {
177
+ tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);
178
+ level = min(HIZ_MAX_LEVEL, level + 2.0f);
179
+ }
180
+
181
+ ray.xyz = tmp_ray.xyz;
182
+ --level;
183
+
184
+ ++iterations;
185
+ }
186
+ return ray;
187
+ }
188
+ */ function buildHZBProgram(device) {
189
+ return device.buildRenderProgram({
190
+ label: 'HZBBuilder',
191
+ vertex (pb) {
192
+ this.$inputs.pos = pb.vec2().attrib('position');
193
+ this.$outputs.uv = pb.vec2();
194
+ pb.main(function() {
195
+ this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
196
+ this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
197
+ if (device.type === 'webgpu') {
198
+ this.$builtins.position.y = pb.neg(this.$builtins.position.y);
199
+ }
200
+ });
201
+ },
202
+ fragment (pb) {
203
+ this.$outputs.color = pb.vec4();
204
+ this.srcTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);
205
+ this.srcSize = pb.ivec2().uniform(0);
206
+ if (device.type !== 'webgpu') {
207
+ this.srcMipLevel = pb.int().uniform(0);
208
+ }
209
+ pb.main(function() {
210
+ this.$l.coord = pb.mul(pb.ivec2(this.$builtins.fragCoord.xy), 2);
211
+ this.$l.minCoord = pb.ivec2(0, 0);
212
+ this.$l.maxCoord = pb.sub(this.srcSize, pb.ivec2(1, 1));
213
+ for(let i = 0; i < 4; i++){
214
+ this.$l[`d${i}`] = pb.textureLoad(this.srcTex, pb.clamp(pb.add(this.coord, pb.ivec2(i >> 1, i & 1)), this.minCoord, this.maxCoord), device.type === 'webgpu' ? 0 : this.srcMipLevel).r;
215
+ }
216
+ this.$l.d = pb.min(pb.min(this.d0, this.d1), pb.min(this.d2, this.d3));
217
+ this.$outputs.color = pb.vec4(this.d, 0, 0, 1);
218
+ });
219
+ }
220
+ });
221
+ }
222
+ function buildHiZLevel(device, miplevel, srcTexture, dstTexture) {
223
+ const sampler = fetchSampler('clamp_nearest');
224
+ const framebuffer = device.pool.fetchTemporalFramebuffer(false, 0, 0, [
225
+ dstTexture
226
+ ], null, false, 1, true, miplevel + 1);
227
+ framebuffer.setColorAttachmentGenerateMipmaps(0, false);
228
+ srcSize[0] = Math.max(srcTexture.width >> miplevel, 1);
229
+ srcSize[1] = Math.max(srcTexture.height >> miplevel, 1);
230
+ hzbBindGroup.setValue('srcSize', srcSize);
231
+ if (device.type === 'webgpu') {
232
+ hzbBindGroup.setTextureView('srcTex', srcTexture, miplevel, 0, 1, sampler);
233
+ } else {
234
+ hzbBindGroup.setTexture('srcTex', srcTexture, sampler);
235
+ hzbBindGroup.setValue('srcMipLevel', miplevel);
236
+ }
237
+ device.setProgram(hzbProgram);
238
+ device.setBindGroup(0, hzbBindGroup);
239
+ device.setFramebuffer(framebuffer);
240
+ drawFullscreenQuad();
241
+ if (srcTexture !== dstTexture) {
242
+ device.copyFramebufferToTexture2D(framebuffer, 0, srcTexture, miplevel + 1);
243
+ }
244
+ device.pool.releaseFrameBuffer(framebuffer);
245
+ }
246
+ function buildHiZ(sourceTex, HiZFrameBuffer) {
247
+ const device = Application.instance.device;
248
+ if (!hzbProgram) {
249
+ hzbProgram = buildHZBProgram(device);
250
+ hzbBindGroup = device.createBindGroup(hzbProgram.bindGroupLayouts[0]);
251
+ blitter = new CopyBlitter();
252
+ srcSize = new Int32Array(2);
253
+ }
254
+ blitter.blit(sourceTex, HiZFrameBuffer, fetchSampler('clamp_nearest'));
255
+ device.pushDeviceStates();
256
+ const srcTex = HiZFrameBuffer.getColorAttachments()[0];
257
+ if (device.type === 'webgpu') {
258
+ for(let i = 0; i < srcTex.mipLevelCount - 1; i++){
259
+ buildHiZLevel(device, i, srcTex, srcTex);
260
+ }
261
+ } else {
262
+ const tmpFramebuffer = device.pool.fetchTemporalFramebuffer(false, HiZFrameBuffer.getWidth(), HiZFrameBuffer.getHeight(), HiZFrameBuffer.getColorAttachments()[0].format, null, true);
263
+ const dstTex = tmpFramebuffer.getColorAttachments()[0];
264
+ for(let i = 0; i < srcTex.mipLevelCount - 1; i++){
265
+ buildHiZLevel(device, i, srcTex, dstTex);
266
+ }
267
+ device.pool.releaseFrameBuffer(tmpFramebuffer);
268
+ }
269
+ device.popDeviceStates();
270
+ }
271
+
272
+ export { buildHiZ };
273
+ //# sourceMappingURL=hzb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hzb.js","sources":["../../../src/render/hzb.ts"],"sourcesContent":["import type { AbstractDevice, BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\nimport { drawFullscreenQuad } from './fullscreenquad';\nimport { Application } from '../app/app';\nimport { CopyBlitter } from '../blitter';\nimport { fetchSampler } from '../utility/misc';\n\nlet hzbProgram: GPUProgram = null;\nlet hzbBindGroup: BindGroup = null;\nlet blitter: CopyBlitter = null;\nlet srcSize: Int32Array<ArrayBuffer> = null;\n\n/*\nvec3 trace_ray(vec3 ray_start, vec3 ray_dir)\n{\n\n if (ray_dir.z < 0.0) {\n return vec3(0);\n }\n\n ray_dir = normalize(ray_dir);\n ivec2 work_size = SCREEN_SIZE_INT;\n\n const int loop_max = 150;\n int mipmap = 0;\n int max_iter = loop_max;\n\n vec3 pos = ray_start;\n\n // Move pos by a small bias\n pos += ray_dir * 0.008;\n\n float hit_bias = 0.0017;\n\n while (mipmap > -1 && max_iter --> 0)\n {\n\n // Check if we are out of screen bounds, if so, return\n if (pos.x < 0.0 || pos.y < 0.0 || pos.x > 1.0 || pos.y > 1.0 || pos.z < 0.0 || pos.z > 1.0)\n {\n return vec3(0,0,0);\n }\n\n // Fetch the current minimum cell plane height\n float cell_z = textureLod(DownscaledDepth, pos.xy, mipmap).x;\n\n // Compute the fractional part of the coordinate (scaled by the working size)\n // so the values will be between 0.0 and 1.0\n vec2 fract_coord = mod(pos.xy * work_size, 1.0);\n\n // Modify fract coord based on which direction we are stepping in.\n // Fract coord now contains the percentage how far we moved already in\n // the current cell in each direction.\n fract_coord.x = ray_dir.x > 0.0 ? fract_coord.x : 1.0 - fract_coord.x;\n fract_coord.y = ray_dir.y > 0.0 ? fract_coord.y : 1.0 - fract_coord.y;\n\n // Compute maximum k and minimum k for which the ray would still be\n // inside of the cell.\n vec2 max_k_v = (1.0 / abs(ray_dir.xy)) / work_size.xy;\n vec2 min_k_v = -max_k_v * fract_coord.xy;\n\n // Scale the maximum k by the percentage we already processed in the current cell,\n // since e.g. if we already moved 50%, we can only move another 50%.\n max_k_v *= 1.0 - fract_coord.xy;\n\n // The maximum k is the minimum of the both sub-k's since if one component-maximum\n // is reached, the ray is out of the cell\n float max_k = min(max_k_v.x, max_k_v.y);\n\n // Same applies to the min_k, but because min_k is negative we have to use max()\n float min_k = max(min_k_v.x, min_k_v.y);\n\n // Check if the ray intersects with the cell plane. We have the following\n // equation:\n // pos.z + k * ray_dir.z = cell.z\n // So k is:\n float k = (cell_z - pos.z) / ray_dir.z;\n\n // Optional: Abort when ray didn't exactly intersect:\n // if (k < min_k && mipmap <= 0) {\n // return vec3(0);\n // }\n\n // Check if we intersected the cell\n if (k < max_k + hit_bias)\n {\n // Clamp k\n k = max(min_k, k);\n\n if (mipmap < 1) {\n pos += k * ray_dir;\n return pos;\n }\n\n // If we hit anything at a higher mipmap, step up to a higher detailed\n // mipmap:\n mipmap -= 2;\n work_size *= 4;\n } else {\n\n // If we hit nothing, move to the next cell, with a small bias\n pos += max_k * ray_dir * 1.04;\n }\n\n mipmap += 1;\n work_size /= 2;\n }\n\n return vec3(0);\n}\n*/\n/*\nfloat2 cell(float2 ray, float2 cell_count, uint camera) {\n return floor(ray.xy * cell_count);\n}\n\nfloat2 cell_count(float level) {\n return input_texture2_size / (level == 0.0 ? 1.0 : exp2(level));\n}\n\nfloat3 intersect_cell_boundary(float3 pos, float3 dir, float2 cell_id, float2 cell_count, float2 cross_step, float2 cross_offset, uint camera) {\n float2 cell_size = 1.0 / cell_count;\n float2 planes = cell_id/cell_count + cell_size * cross_step;\n\n float2 solutions = (planes - pos)/dir.xy;\n float3 intersection_pos = pos + dir * min(solutions.x, solutions.y);\n\n intersection_pos.xy += (solutions.x < solutions.y) ? float2(cross_offset.x, 0.0) : float2(0.0, cross_offset.y);\n\n return intersection_pos;\n}\n\nbool crossed_cell_boundary(float2 cell_id_one, float2 cell_id_two) {\n return (int)cell_id_one.x != (int)cell_id_two.x || (int)cell_id_one.y != (int)cell_id_two.y;\n}\n\nfloat minimum_depth_plane(float2 ray, float level, float2 cell_count, uint camera) {\n return input_texture2.Load(int3(vr_stereo_to_mono(ray.xy, camera) * cell_count, level)).r;\n}\n\nfloat3 hi_z_trace(float3 p, float3 v, in uint camera, out uint iterations) {\n float level = HIZ_START_LEVEL;\n float3 v_z = v/v.z;\n float2 hi_z_size = cell_count(level);\n float3 ray = p;\n\n float2 cross_step = float2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0);\n float2 cross_offset = cross_step * 0.00001;\n cross_step = saturate(cross_step);\n\n float2 ray_cell = cell(ray.xy, hi_z_size.xy, camera);\n ray = intersect_cell_boundary(ray, v, ray_cell, hi_z_size, cross_step, cross_offset, camera);\n\n iterations = 0;\n while(level >= HIZ_STOP_LEVEL && iterations < MAX_ITERATIONS) {\n // get the cell number of the current ray\n float2 current_cell_count = cell_count(level);\n float2 old_cell_id = cell(ray.xy, current_cell_count, camera);\n\n // get the minimum depth plane in which the current ray resides\n float min_z = minimum_depth_plane(ray.xy, level, current_cell_count, camera);\n\n // intersect only if ray depth is below the minimum depth plane\n float3 tmp_ray = ray;\n if(v.z > 0) {\n float min_minus_ray = min_z - ray.z;\n tmp_ray = min_minus_ray > 0 ? ray + v_z*min_minus_ray : tmp_ray;\n float2 new_cell_id = cell(tmp_ray.xy, current_cell_count, camera);\n if(crossed_cell_boundary(old_cell_id, new_cell_id)) {\n tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\n level = min(HIZ_MAX_LEVEL, level + 2.0f);\n }else{\n if(level == 1 && abs(min_minus_ray) > 0.0001) {\n tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\n level = 2;\n }\n }\n } else if(ray.z < min_z) {\n tmp_ray = intersect_cell_boundary(ray, v, old_cell_id, current_cell_count, cross_step, cross_offset, camera);\n level = min(HIZ_MAX_LEVEL, level + 2.0f);\n }\n\n ray.xyz = tmp_ray.xyz;\n --level;\n\n ++iterations;\n }\n return ray;\n}\n*/\n\nfunction buildHZBProgram(device: AbstractDevice): GPUProgram {\n return device.buildRenderProgram({\n label: 'HZBBuilder',\n vertex(pb) {\n this.$inputs.pos = pb.vec2().attrib('position');\n this.$outputs.uv = pb.vec2();\n pb.main(function () {\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\n if (device.type === 'webgpu') {\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\n }\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n this.srcTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\n this.srcSize = pb.ivec2().uniform(0);\n if (device.type !== 'webgpu') {\n this.srcMipLevel = pb.int().uniform(0);\n }\n pb.main(function () {\n this.$l.coord = pb.mul(pb.ivec2(this.$builtins.fragCoord.xy), 2);\n this.$l.minCoord = pb.ivec2(0, 0);\n this.$l.maxCoord = pb.sub(this.srcSize, pb.ivec2(1, 1));\n for (let i = 0; i < 4; i++) {\n this.$l[`d${i}`] = pb.textureLoad(\n this.srcTex,\n pb.clamp(pb.add(this.coord, pb.ivec2(i >> 1, i & 1)), this.minCoord, this.maxCoord),\n device.type === 'webgpu' ? 0 : this.srcMipLevel\n ).r;\n }\n this.$l.d = pb.min(pb.min(this.d0, this.d1), pb.min(this.d2, this.d3));\n this.$outputs.color = pb.vec4(this.d, 0, 0, 1);\n });\n }\n });\n}\n\nfunction buildHiZLevel(\n device: AbstractDevice,\n miplevel: number,\n srcTexture: Texture2D,\n dstTexture: Texture2D\n): void {\n const sampler = fetchSampler('clamp_nearest');\n const framebuffer = device.pool.fetchTemporalFramebuffer(\n false,\n 0,\n 0,\n [dstTexture],\n null,\n false,\n 1,\n true,\n miplevel + 1\n );\n framebuffer.setColorAttachmentGenerateMipmaps(0, false);\n srcSize[0] = Math.max(srcTexture.width >> miplevel, 1);\n srcSize[1] = Math.max(srcTexture.height >> miplevel, 1);\n hzbBindGroup.setValue('srcSize', srcSize);\n if (device.type === 'webgpu') {\n hzbBindGroup.setTextureView('srcTex', srcTexture, miplevel, 0, 1, sampler);\n } else {\n hzbBindGroup.setTexture('srcTex', srcTexture, sampler);\n hzbBindGroup.setValue('srcMipLevel', miplevel);\n }\n device.setProgram(hzbProgram);\n device.setBindGroup(0, hzbBindGroup);\n device.setFramebuffer(framebuffer);\n drawFullscreenQuad();\n if (srcTexture !== dstTexture) {\n device.copyFramebufferToTexture2D(framebuffer, 0, srcTexture, miplevel + 1);\n }\n device.pool.releaseFrameBuffer(framebuffer);\n}\n\nexport function buildHiZ(sourceTex: Texture2D, HiZFrameBuffer: FrameBuffer) {\n const device = Application.instance.device;\n if (!hzbProgram) {\n hzbProgram = buildHZBProgram(device);\n hzbBindGroup = device.createBindGroup(hzbProgram.bindGroupLayouts[0]);\n blitter = new CopyBlitter();\n srcSize = new Int32Array(2);\n }\n blitter.blit(sourceTex, HiZFrameBuffer, fetchSampler('clamp_nearest'));\n device.pushDeviceStates();\n const srcTex = HiZFrameBuffer.getColorAttachments()[0] as Texture2D;\n if (device.type === 'webgpu') {\n for (let i = 0; i < srcTex.mipLevelCount - 1; i++) {\n buildHiZLevel(device, i, srcTex, srcTex);\n }\n } else {\n const tmpFramebuffer = device.pool.fetchTemporalFramebuffer(\n false,\n HiZFrameBuffer.getWidth(),\n HiZFrameBuffer.getHeight(),\n HiZFrameBuffer.getColorAttachments()[0].format,\n null,\n true\n );\n const dstTex = tmpFramebuffer.getColorAttachments()[0] as Texture2D;\n for (let i = 0; i < srcTex.mipLevelCount - 1; i++) {\n buildHiZLevel(device, i, srcTex, dstTex);\n }\n device.pool.releaseFrameBuffer(tmpFramebuffer);\n }\n device.popDeviceStates();\n}\n"],"names":["hzbProgram","hzbBindGroup","blitter","srcSize","buildHZBProgram","device","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","srcTex","tex2D","sampleType","uniform","ivec2","srcMipLevel","int","$l","coord","fragCoord","minCoord","maxCoord","sub","i","textureLoad","clamp","r","d","min","d0","d1","d2","d3","buildHiZLevel","miplevel","srcTexture","dstTexture","sampler","fetchSampler","framebuffer","pool","fetchTemporalFramebuffer","setColorAttachmentGenerateMipmaps","Math","max","width","height","setValue","setTextureView","setTexture","setProgram","setBindGroup","setFramebuffer","drawFullscreenQuad","copyFramebufferToTexture2D","releaseFrameBuffer","buildHiZ","sourceTex","HiZFrameBuffer","Application","instance","createBindGroup","bindGroupLayouts","CopyBlitter","Int32Array","blit","pushDeviceStates","getColorAttachments","mipLevelCount","tmpFramebuffer","getWidth","getHeight","format","dstTex","popDeviceStates"],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { RenderPass } from './renderpass.js';
2
+ import { RENDER_PASS_TYPE_LIGHT, MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT } from '../values.js';
3
+ import { Vector4 } from '@zephyr3d/base';
4
+ import { ShaderHelper } from '../material/shader/helper.js';
5
+ import { PostEffectLayer } from '../posteffect/posteffect.js';
6
+
7
+ /**
8
+ * Forward render pass
9
+ * @internal
10
+ */ class LightPass extends RenderPass {
11
+ /** @internal */ _shadowMapHash;
12
+ /** @internal */ _transmission;
13
+ /**
14
+ * Creates an instance of ForwardRenderPass
15
+ */ constructor(){
16
+ super(RENDER_PASS_TYPE_LIGHT);
17
+ this._shadowMapHash = null;
18
+ this._clearColor = Vector4.zero();
19
+ }
20
+ /** @internal */ get transmission() {
21
+ return this._transmission;
22
+ }
23
+ set transmission(val) {
24
+ this._transmission = val;
25
+ }
26
+ /** @internal */ _getGlobalBindGroupHash(ctx) {
27
+ return `${this._shadowMapHash}:${ctx.oit?.calculateHash() ?? ''}:${ctx.env.getHash(ctx)}:${ctx.materialFlags}:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${ctx.HiZTexture?.uid ?? 0}`;
28
+ }
29
+ /** @internal */ renderLightPass(ctx, itemList, lights, flags) {
30
+ const baseLightPass = !ctx.lightBlending;
31
+ ctx.drawEnvLight = baseLightPass && ctx.env.light.type !== 'none' && (ctx.env.light.envLight.hasRadiance() || ctx.env.light.envLight.hasIrradiance());
32
+ ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
33
+ const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
34
+ if (!flags.cameraSet[ctx.renderPassHash]) {
35
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, !!ctx.device.getFramebuffer());
36
+ flags.cameraSet[ctx.renderPassHash] = 1;
37
+ }
38
+ if (ctx.currentShadowLight) {
39
+ ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);
40
+ } else {
41
+ if (!flags.lightSet[ctx.renderPassHash]) {
42
+ ShaderHelper.setLightUniforms(bindGroup, ctx, ctx.clusteredLight.clusterParam, ctx.clusteredLight.countParam, ctx.clusteredLight.lightBuffer, ctx.clusteredLight.lightIndexTexture);
43
+ flags.lightSet[ctx.renderPassHash] = 1;
44
+ }
45
+ }
46
+ if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {
47
+ ShaderHelper.setFogUniforms(bindGroup, ctx.env.sky.skyType === 'scatter' ? 1 : 0, ctx.env.sky.mappedFogType, baseLightPass ? 0 : 1, ctx.env.sky.atmosphereParams, ctx.env.sky.heightFogParams, ctx.env.sky.getAerialPerspectiveLUT(ctx), ctx.env.sky.getSkyDistantLightLUT(ctx));
48
+ flags.fogSet[ctx.renderPassHash] = 1;
49
+ }
50
+ ctx.device.setBindGroup(0, bindGroup);
51
+ const reverseWinding = ctx.camera.worldMatrixDet < 0;
52
+ for (const lit of itemList.lit){
53
+ this.drawItemList(lit, ctx, reverseWinding);
54
+ }
55
+ if (!ctx.lightBlending) {
56
+ for (const unlit of itemList.unlit){
57
+ this.drawItemList(unlit, ctx, reverseWinding);
58
+ }
59
+ }
60
+ }
61
+ /** @internal */ renderItems(ctx, renderQueue) {
62
+ ctx.fogFlags = 0;
63
+ ctx.renderPassHash = null;
64
+ ctx.env = ctx.scene.env;
65
+ ctx.drawEnvLight = false;
66
+ ctx.flip = this.isAutoFlip(ctx);
67
+ const ssr = !!(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS);
68
+ const tmpFramebuffer = ssr ? ctx.device.pool.fetchTemporalFramebuffer(false, ctx.device.getDrawingBufferWidth(), ctx.device.getDrawingBufferHeight(), ctx.device.getFramebuffer().getColorAttachments()[0], ctx.device.getFramebuffer().getDepthAttachment()) : null;
69
+ const oit = renderQueue.drawTransparent && ctx.primaryCamera.oit && ctx.primaryCamera.oit.supportDevice(ctx.device.type) ? ctx.primaryCamera.oit : null;
70
+ if (!oit && renderQueue.drawTransparent) {
71
+ renderQueue.sortTransparentItems(ctx.primaryCamera.getWorldPosition());
72
+ }
73
+ const flags = {
74
+ lightSet: {},
75
+ cameraSet: {},
76
+ fogSet: {}
77
+ };
78
+ const items = renderQueue.itemList;
79
+ const lists = this._transmission ? [
80
+ items?.transmission,
81
+ items?.transmission_trans,
82
+ items?.transparent
83
+ ] : [
84
+ items?.opaque,
85
+ items?.transparent
86
+ ];
87
+ const transparentPass = lists.length - 1;
88
+ for(let i = 0; i < lists.length; i++){
89
+ if (lists[i]) {
90
+ ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;
91
+ ctx.oit = i === 0 || !items ? null : oit;
92
+ if (ctx.queue === QUEUE_TRANSPARENT && ctx.scene.env.sky.fogPresents) {
93
+ ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;
94
+ }
95
+ const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;
96
+ for(let p = 0; p < numOitPasses; p++){
97
+ if (ctx.oit) {
98
+ if (!ctx.oit.beginPass(ctx, p)) {
99
+ continue;
100
+ }
101
+ }
102
+ let lightIndex = 0;
103
+ if (ctx.shadowMapInfo) {
104
+ for (const k of ctx.shadowMapInfo.keys()){
105
+ ctx.currentShadowLight = k;
106
+ ctx.lightBlending = lightIndex > 0;
107
+ this._shadowMapHash = ctx.shadowMapInfo.get(k).shaderHash;
108
+ this.renderLightPass(ctx, lists[i], [
109
+ k
110
+ ], flags);
111
+ lightIndex++;
112
+ }
113
+ }
114
+ if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {
115
+ ctx.currentShadowLight = null;
116
+ ctx.lightBlending = lightIndex > 0;
117
+ this._shadowMapHash = '';
118
+ if (ctx.lightBlending && tmpFramebuffer) {
119
+ ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;
120
+ ctx.device.pushDeviceStates();
121
+ ctx.device.setFramebuffer(tmpFramebuffer);
122
+ }
123
+ this.renderLightPass(ctx, lists[i], renderQueue.unshadowedLights, flags);
124
+ if (ctx.lightBlending && tmpFramebuffer) {
125
+ ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;
126
+ ctx.device.popDeviceStates();
127
+ }
128
+ }
129
+ if (ctx.oit) {
130
+ ctx.oit.endPass(ctx, p);
131
+ }
132
+ }
133
+ if (ctx.oit) {
134
+ ctx.oit.end(ctx);
135
+ }
136
+ ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;
137
+ }
138
+ if (i === 0 && !ctx.sceneColorTexture) {
139
+ if (tmpFramebuffer) {
140
+ ctx.device.pushDeviceStates();
141
+ ctx.device.setFramebuffer(tmpFramebuffer);
142
+ }
143
+ ctx.env.sky.skyWorldMatrix = ctx.scene.rootNode.worldMatrix;
144
+ ctx.env.sky.renderSky(ctx);
145
+ if (tmpFramebuffer) {
146
+ ctx.device.popDeviceStates();
147
+ }
148
+ }
149
+ if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {
150
+ if (i === 0) {
151
+ if (tmpFramebuffer) {
152
+ ctx.device.pushDeviceStates();
153
+ ctx.device.setFramebuffer(tmpFramebuffer);
154
+ }
155
+ ctx.env.sky.renderFog(ctx);
156
+ if (tmpFramebuffer) {
157
+ ctx.device.popDeviceStates();
158
+ }
159
+ }
160
+ if (i === 0 || i === transparentPass) {
161
+ ctx.compositor?.drawPostEffects(ctx, i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent, ctx.linearDepthTexture);
162
+ }
163
+ }
164
+ }
165
+ if (tmpFramebuffer) {
166
+ ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);
167
+ }
168
+ }
169
+ }
170
+
171
+ export { LightPass };
172
+ //# sourceMappingURL=lightpass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightpass.js","sources":["../../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PostEffectLayer } from '../posteffect/posteffect';\r\n\r\n/**\r\n * Forward render pass\r\n * @internal\r\n */\r\nexport class LightPass extends RenderPass {\r\n /** @internal */\r\n protected _shadowMapHash: string;\r\n /** @internal */\r\n protected _transmission: boolean;\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_LIGHT);\r\n this._shadowMapHash = null;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n get transmission(): boolean {\r\n return this._transmission;\r\n }\r\n set transmission(val: boolean) {\r\n this._transmission = val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${this._shadowMapHash}:${ctx.oit?.calculateHash() ?? ''}:${ctx.env.getHash(ctx)}:${\r\n ctx.materialFlags\r\n }:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${ctx.HiZTexture?.uid ?? 0}`;\r\n }\r\n /** @internal */\r\n protected renderLightPass(\r\n ctx: DrawContext,\r\n itemList: RenderItemListBundle,\r\n lights: PunctualLight[],\r\n flags: any\r\n ) {\r\n const baseLightPass = !ctx.lightBlending;\r\n ctx.drawEnvLight =\r\n baseLightPass &&\r\n ctx.env.light.type !== 'none' &&\r\n (ctx.env.light.envLight.hasRadiance() || ctx.env.light.envLight.hasIrradiance());\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n if (!flags.cameraSet[ctx.renderPassHash]) {\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, !!ctx.device.getFramebuffer());\r\n flags.cameraSet[ctx.renderPassHash] = 1;\r\n }\r\n if (ctx.currentShadowLight) {\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\r\n } else {\r\n if (!flags.lightSet[ctx.renderPassHash]) {\r\n ShaderHelper.setLightUniforms(\r\n bindGroup,\r\n ctx,\r\n ctx.clusteredLight.clusterParam,\r\n ctx.clusteredLight.countParam,\r\n ctx.clusteredLight.lightBuffer,\r\n ctx.clusteredLight.lightIndexTexture\r\n );\r\n flags.lightSet[ctx.renderPassHash] = 1;\r\n }\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\r\n ShaderHelper.setFogUniforms(\r\n bindGroup,\r\n ctx.env.sky.skyType === 'scatter' ? 1 : 0,\r\n ctx.env.sky.mappedFogType,\r\n baseLightPass ? 0 : 1,\r\n ctx.env.sky.atmosphereParams,\r\n ctx.env.sky.heightFogParams,\r\n ctx.env.sky.getAerialPerspectiveLUT(ctx),\r\n ctx.env.sky.getSkyDistantLightLUT(ctx)\r\n );\r\n flags.fogSet[ctx.renderPassHash] = 1;\r\n }\r\n ctx.device.setBindGroup(0, bindGroup);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of itemList.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n if (!ctx.lightBlending) {\r\n for (const unlit of itemList.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n ctx.fogFlags = 0;\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n const ssr = !!(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS);\r\n const tmpFramebuffer = ssr\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n ctx.device.getFramebuffer().getColorAttachments()[0],\r\n ctx.device.getFramebuffer().getDepthAttachment()\r\n )\r\n : null;\r\n const oit =\r\n renderQueue.drawTransparent &&\r\n ctx.primaryCamera.oit &&\r\n ctx.primaryCamera.oit.supportDevice(ctx.device.type)\r\n ? ctx.primaryCamera.oit\r\n : null;\r\n if (!oit && renderQueue.drawTransparent) {\r\n renderQueue.sortTransparentItems(ctx.primaryCamera.getWorldPosition());\r\n }\r\n const flags: any = {\r\n lightSet: {},\r\n cameraSet: {},\r\n fogSet: {}\r\n };\r\n const items = renderQueue.itemList;\r\n const lists = this._transmission\r\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\r\n : [items?.opaque, items?.transparent];\r\n const transparentPass = lists.length - 1;\r\n for (let i = 0; i < lists.length; i++) {\r\n if (lists[i]) {\r\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\r\n ctx.oit = i === 0 || !items ? null : oit;\r\n if (ctx.queue === QUEUE_TRANSPARENT && ctx.scene.env.sky.fogPresents) {\r\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\r\n for (let p = 0; p < numOitPasses; p++) {\r\n if (ctx.oit) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n continue;\r\n }\r\n }\r\n let lightIndex = 0;\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n ctx.currentShadowLight = k;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = ctx.shadowMapInfo.get(k).shaderHash;\r\n this.renderLightPass(ctx, lists[i], [k], flags);\r\n lightIndex++;\r\n }\r\n }\r\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = '';\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n this.renderLightPass(ctx, lists[i], renderQueue.unshadowedLights, flags);\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.endPass(ctx, p);\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.end(ctx);\r\n }\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n if (i === 0 && !ctx.sceneColorTexture) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.skyWorldMatrix = ctx.scene.rootNode.worldMatrix;\r\n ctx.env.sky.renderSky(ctx);\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\r\n if (i === 0) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.renderFog(ctx);\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (i === 0 || i === transparentPass) {\r\n ctx.compositor?.drawPostEffects(\r\n ctx,\r\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\r\n ctx.linearDepthTexture\r\n );\r\n }\r\n }\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n }\r\n}\r\n"],"names":["LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_clearColor","Vector4","zero","transmission","_transmission","val","_getGlobalBindGroupHash","ctx","oit","calculateHash","env","getHash","materialFlags","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","lightBlending","drawEnvLight","light","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","device","getFramebuffer","currentShadowLight","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","MaterialVaryingFlags","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","camera","worldMatrixDet","lit","drawItemList","unlit","renderItems","renderQueue","fogFlags","scene","flip","isAutoFlip","ssr","SSR_STORE_ROUGHNESS","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getColorAttachments","getDepthAttachment","drawTransparent","primaryCamera","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","length","i","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","fogPresents","numOitPasses","begin","p","beginPass","lightIndex","shadowMapInfo","k","keys","get","shaderHash","unshadowedLights","pushDeviceStates","setFramebuffer","popDeviceStates","endPass","end","skyWorldMatrix","rootNode","worldMatrix","renderSky","needSceneColor","renderFog","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { RenderPass } from './renderpass.js';
2
+ import { RENDER_PASS_TYPE_OBJECT_COLOR } from '../values.js';
3
+ import { ShaderHelper } from '../material/shader/helper.js';
4
+
5
+ /**
6
+ * Object color render pass
7
+ * @internal
8
+ */ class ObjectColorPass extends RenderPass {
9
+ /**
10
+ * Creates an instance of ForwardRenderPass
11
+ */ constructor(){
12
+ super(RENDER_PASS_TYPE_OBJECT_COLOR);
13
+ }
14
+ /** @internal */ _getGlobalBindGroupHash(_ctx) {
15
+ return '';
16
+ }
17
+ /** @internal */ renderItems(ctx, renderQueue) {
18
+ const items = renderQueue.itemList;
19
+ if (items) {
20
+ ctx.fogFlags = 0;
21
+ ctx.drawEnvLight = false;
22
+ ctx.env = null;
23
+ ctx.picking = true;
24
+ ctx.flip = this.isAutoFlip(ctx);
25
+ ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
26
+ const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
27
+ ctx.device.setBindGroup(0, bindGroup);
28
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
29
+ const reverseWinding = ctx.camera.worldMatrixDet < 0;
30
+ for (const list of [
31
+ items.opaque,
32
+ items.transmission,
33
+ items.transparent,
34
+ items.transmission_trans
35
+ ]){
36
+ if (list) {
37
+ for (const lit of list.lit){
38
+ this.drawItemList(lit, ctx, reverseWinding);
39
+ }
40
+ for (const unlit of list.unlit){
41
+ this.drawItemList(unlit, ctx, reverseWinding);
42
+ }
43
+ }
44
+ }
45
+ ctx.picking = false;
46
+ }
47
+ }
48
+ }
49
+
50
+ export { ObjectColorPass };
51
+ //# sourceMappingURL=objectcolorpass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectcolorpass.js","sources":["../../../src/render/objectcolorpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_OBJECT_COLOR } from '../values';\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 * Object color render pass\r\n * @internal\r\n */\r\nexport class ObjectColorPass extends RenderPass {\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_OBJECT_COLOR);\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(_ctx: DrawContext) {\r\n return '';\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.fogFlags = 0;\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.picking = true;\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.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const list of [items.opaque, items.transmission, items.transparent, items.transmission_trans]) {\r\n if (list) {\r\n for (const lit of list.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of list.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n ctx.picking = false;\r\n }\r\n }\r\n}\r\n"],"names":["ObjectColorPass","RenderPass","RENDER_PASS_TYPE_OBJECT_COLOR","_getGlobalBindGroupHash","_ctx","renderItems","ctx","renderQueue","items","itemList","fogFlags","drawEnvLight","env","picking","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","reverseWinding","camera","worldMatrixDet","list","opaque","transmission","transparent","transmission_trans","lit","drawItemList","unlit"],"mappings":";;;;AAMA;;;IAIO,MAAMA,eAAwBC,SAAAA,UAAAA,CAAAA;AACnC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,6BAAAA,CAAAA;AACR;AACA,qBACUC,uBAAwBC,CAAAA,IAAiB,EAAE;QACnD,OAAO,EAAA;AACT;AACA,qBACA,WAAUC,CAAYC,GAAgB,EAAEC,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTF,YAAAA,GAAAA,CAAII,QAAQ,GAAG,CAAA;AACfJ,YAAAA,GAAAA,CAAIK,YAAY,GAAG,KAAA;AACnBL,YAAAA,GAAAA,CAAIM,GAAG,GAAG,IAAA;AACVN,YAAAA,GAAAA,CAAIO,OAAO,GAAG,IAAA;AACdP,YAAAA,GAAAA,CAAIQ,IAAI,GAAG,IAAI,CAACC,UAAU,CAACT,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIU,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACX,GAAAA,CAAAA;AACjD,YAAA,MAAMY,SAAYZ,GAAAA,GAAAA,CAAIa,wBAAwB,CAACC,kBAAkB,CAACd,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIe,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;YAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWZ,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMmB,cAAiBnB,GAAAA,GAAAA,CAAIoB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,IAAQ,IAAA;AAACpB,gBAAAA,KAAAA,CAAMqB,MAAM;AAAErB,gBAAAA,KAAAA,CAAMsB,YAAY;AAAEtB,gBAAAA,KAAAA,CAAMuB,WAAW;AAAEvB,gBAAAA,KAAAA,CAAMwB;aAAmB,CAAE;AAClG,gBAAA,IAAIJ,IAAM,EAAA;AACR,oBAAA,KAAK,MAAMK,GAAAA,IAAOL,IAAKK,CAAAA,GAAG,CAAE;AAC1B,wBAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAK3B,GAAKmB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,oBAAA,KAAK,MAAMU,KAAAA,IAASP,IAAKO,CAAAA,KAAK,CAAE;AAC9B,wBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKmB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACAnB,YAAAA,GAAAA,CAAIO,OAAO,GAAG,KAAA;AAChB;AACF;AACF;;;;"}