@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
@@ -1 +1 @@
1
- {"version":3,"file":"water.js","sources":["../../../../src/utility/serialization/scene/water.ts"],"sourcesContent":["import { Vector2 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { Water } from '../../../scene/water';\r\nimport type { SerializableClass } from '../types';\r\nimport type { WaveGenerator } from '../../../render';\r\nimport { FBMWaveGenerator, FFTWaveGenerator } from '../../../render';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { ResourceManager } from '../manager';\r\n\r\n/** @internal */\r\nexport function getFBMWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FBMWaveGenerator,\r\n name: 'FBMWaveGenerator',\r\n getProps() {\r\n return [\r\n {\r\n name: 'NumOctaves',\r\n type: 'int',\r\n options: { minValue: 1, maxValue: 8 },\r\n default: 4,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.numOctaves;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.numOctaves = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n type: 'vec2',\r\n default: [0.1, 0],\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'Amplitude',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n default: 0.3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.amplitude;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.amplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Frequency',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 16 },\r\n default: 3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.frequency;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.frequency = value.num[0];\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getFFTWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FFTWaveGenerator,\r\n name: 'FFTWaveGenerator',\r\n getProps() {\r\n return [\r\n {\r\n name: 'Alignment',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.alignment;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.alignment = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n type: 'vec2',\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'FoamWidth',\r\n type: 'float',\r\n default: 1.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamWidth;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamContrast',\r\n type: 'float',\r\n default: 7.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamContrast;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamContrast = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WaveLengthCascades',\r\n type: 'vec3',\r\n default: [400, 100, 15],\r\n options: { animatable: true, minValue: 0, maxValue: 1000 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveLength(0);\r\n value.num[1] = this.getWaveLength(1);\r\n value.num[2] = this.getWaveLength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveLength(0, value.num[0]);\r\n this.setWaveLength(1, value.num[1]);\r\n this.setWaveLength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveStrengthCascades',\r\n type: 'vec3',\r\n default: [0.4, 0.4, 0.2],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveStrength(0);\r\n value.num[1] = this.getWaveStrength(1);\r\n value.num[2] = this.getWaveStrength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveStrength(0, value.num[0]);\r\n this.setWaveStrength(1, value.num[1]);\r\n this.setWaveStrength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveCroppinessCascades',\r\n type: 'vec3',\r\n default: [-1.5, -1.2, -0.5],\r\n options: { animatable: true, minValue: -4, maxValue: 0 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveCroppiness(0);\r\n value.num[1] = this.getWaveCroppiness(1);\r\n value.num[2] = this.getWaveCroppiness(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveCroppiness(0, value.num[0]);\r\n this.setWaveCroppiness(1, value.num[1]);\r\n this.setWaveCroppiness(2, value.num[2]);\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getWaterClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: Water,\r\n name: 'Water',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new Water(ctx.scene);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return [\r\n {\r\n name: 'WaveGenerator',\r\n type: 'object',\r\n default: null,\r\n options: {\r\n objectTypes: [FFTWaveGenerator, FBMWaveGenerator]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.object[0] = this.waveGenerator ?? null;\r\n },\r\n set(this: Water, value) {\r\n if (!value.object[0]) {\r\n this.waveGenerator = null;\r\n } else {\r\n this.waveGenerator = value.object[0] as WaveGenerator;\r\n }\r\n }\r\n },\r\n {\r\n name: 'GridScale',\r\n type: 'float',\r\n default: 1,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.gridScale;\r\n },\r\n set(this: Water, value) {\r\n this.gridScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n type: 'bool',\r\n default: false,\r\n get(this: Water, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: Water, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'AnimationSpeed',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.animationSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.animationSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'DepthScale',\r\n type: 'float',\r\n default: 10,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.depthMulti;\r\n },\r\n set(this: Water, value) {\r\n this.material.depthMulti = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionStrength',\r\n type: 'float',\r\n default: 0,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.refractionStrength;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Displace',\r\n type: 'float',\r\n default: 16,\r\n options: { minValue: 1, maxValue: 256 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.displace;\r\n },\r\n set(this: Water, value) {\r\n this.material.displace = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TAAStrength',\r\n type: 'float',\r\n default: 0.4,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.TAAStrength;\r\n },\r\n set(this: Water, value) {\r\n this.TAAStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterRampTexture',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.scatterRampTexture) ?? '';\r\n },\r\n async set(value) {\r\n if (!value) {\r\n this.material.scatterRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Texture2D;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.scatterRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'AbsorptionRampTexture',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.absorptionRampTexture) ?? '';\r\n },\r\n async set(this: Water, value) {\r\n if (!value) {\r\n this.material.absorptionRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Texture2D;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.absorptionRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n ];\r\n }\r\n };\r\n}\r\n"],"names":["getFBMWaveGeneratorClass","ctor","FBMWaveGenerator","name","getProps","type","options","minValue","maxValue","default","get","value","num","numOctaves","set","animatable","wind","x","y","Vector2","amplitude","frequency","getFFTWaveGeneratorClass","FFTWaveGenerator","alignment","foamWidth","foamContrast","getWaveLength","setWaveLength","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","getWaterClass","manager","Water","parent","GraphNode","createFunc","ctx","node","scene","obj","objectTypes","isNullable","object","waveGenerator","gridScale","bool","wireframe","animationSpeed","material","depthMulti","refractionStrength","displace","TAAStrength","str","getAssetId","scatterRampTexture","assetId","tex","fetchTexture","err","console","error","isTexture2D","absorptionRampTexture"],"mappings":"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"}
1
+ {"version":3,"file":"water.js","sources":["../../../../src/utility/serialization/scene/water.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../../../scene';\r\nimport { GraphNode } from '../../../scene';\r\nimport { Water } from '../../../scene/water';\r\nimport { defineProps, type SerializableClass } from '../types';\r\nimport type { WaveGenerator } from '../../../render';\r\nimport { FBMWaveGenerator, FFTWaveGenerator } from '../../../render';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { ResourceManager } from '../manager';\r\n\r\n/** @internal */\r\nexport function getFBMWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FBMWaveGenerator,\r\n name: 'FBMWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'NumOctaves',\r\n type: 'int',\r\n options: { minValue: 1, maxValue: 8 },\r\n default: 4,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.numOctaves;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.numOctaves = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n type: 'vec2',\r\n default: [0.1, 0],\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'Amplitude',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 5 },\r\n default: 0.3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.amplitude;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.amplitude = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Frequency',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 16 },\r\n default: 3,\r\n get(this: FBMWaveGenerator, value) {\r\n value.num[0] = this.frequency;\r\n },\r\n set(this: FBMWaveGenerator, value) {\r\n this.frequency = value.num[0];\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getFFTWaveGeneratorClass(): SerializableClass {\r\n return {\r\n ctor: FFTWaveGenerator,\r\n name: 'FFTWaveGenerator',\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'Alignment',\r\n type: 'float',\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.alignment;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.alignment = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wind',\r\n type: 'vec2',\r\n options: {\r\n animatable: true\r\n },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.wind.x;\r\n value.num[1] = this.wind.y;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.wind = new Vector2(value.num[0], value.num[1]);\r\n }\r\n },\r\n {\r\n name: 'FoamWidth',\r\n type: 'float',\r\n default: 1.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamWidth;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamWidth = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'FoamContrast',\r\n type: 'float',\r\n default: 7.2,\r\n options: { animatable: true, minValue: 0, maxValue: 10 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.foamContrast;\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.foamContrast = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'WaveLengthCascades',\r\n type: 'vec3',\r\n default: [400, 100, 15],\r\n options: { animatable: true, minValue: 0, maxValue: 1000 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveLength(0);\r\n value.num[1] = this.getWaveLength(1);\r\n value.num[2] = this.getWaveLength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveLength(0, value.num[0]);\r\n this.setWaveLength(1, value.num[1]);\r\n this.setWaveLength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveStrengthCascades',\r\n type: 'vec3',\r\n default: [0.4, 0.4, 0.2],\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveStrength(0);\r\n value.num[1] = this.getWaveStrength(1);\r\n value.num[2] = this.getWaveStrength(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveStrength(0, value.num[0]);\r\n this.setWaveStrength(1, value.num[1]);\r\n this.setWaveStrength(2, value.num[2]);\r\n }\r\n },\r\n {\r\n name: 'WaveCroppinessCascades',\r\n type: 'vec3',\r\n default: [-1.5, -1.2, -0.5],\r\n options: { animatable: true, minValue: -4, maxValue: 0 },\r\n get(this: FFTWaveGenerator, value) {\r\n value.num[0] = this.getWaveCroppiness(0);\r\n value.num[1] = this.getWaveCroppiness(1);\r\n value.num[2] = this.getWaveCroppiness(2);\r\n },\r\n set(this: FFTWaveGenerator, value) {\r\n this.setWaveCroppiness(0, value.num[0]);\r\n this.setWaveCroppiness(1, value.num[1]);\r\n this.setWaveCroppiness(2, value.num[2]);\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getWaterClass(manager: ResourceManager): SerializableClass {\r\n return {\r\n ctor: Water,\r\n name: 'Water',\r\n parent: GraphNode,\r\n createFunc(ctx: SceneNode) {\r\n const node = new Water(ctx.scene!);\r\n node.parent = ctx;\r\n return { obj: node };\r\n },\r\n getProps() {\r\n return defineProps([\r\n {\r\n name: 'WaveGenerator',\r\n type: 'object',\r\n default: null,\r\n options: {\r\n objectTypes: [FFTWaveGenerator, FBMWaveGenerator]\r\n },\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.object[0] = this.waveGenerator ?? null;\r\n },\r\n set(this: Water, value) {\r\n if (!value.object[0]) {\r\n this.waveGenerator = null;\r\n } else {\r\n this.waveGenerator = value.object[0] as WaveGenerator;\r\n }\r\n }\r\n },\r\n {\r\n name: 'GridScale',\r\n type: 'float',\r\n default: 1,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.gridScale;\r\n },\r\n set(this: Water, value) {\r\n this.gridScale = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Wireframe',\r\n type: 'bool',\r\n default: false,\r\n get(this: Water, value) {\r\n value.bool[0] = this.wireframe;\r\n },\r\n set(this: Water, value) {\r\n this.wireframe = value.bool[0];\r\n }\r\n },\r\n {\r\n name: 'AnimationSpeed',\r\n type: 'float',\r\n default: 1,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.animationSpeed;\r\n },\r\n set(this: Water, value) {\r\n this.animationSpeed = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'DepthScale',\r\n type: 'float',\r\n default: 10,\r\n options: { animatable: true, minValue: 0, maxValue: 100 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.depthMulti;\r\n },\r\n set(this: Water, value) {\r\n this.material.depthMulti = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'RefractionStrength',\r\n type: 'float',\r\n default: 0,\r\n options: { animatable: true, minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.refractionStrength;\r\n },\r\n set(this: Water, value) {\r\n this.material.refractionStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'Displace',\r\n type: 'float',\r\n default: 16,\r\n options: { minValue: 1, maxValue: 256 },\r\n get(this: Water, value) {\r\n value.num[0] = this.material.displace;\r\n },\r\n set(this: Water, value) {\r\n this.material.displace = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'TAAStrength',\r\n type: 'float',\r\n default: 0.4,\r\n options: { minValue: 0, maxValue: 1 },\r\n get(this: Water, value) {\r\n value.num[0] = this.TAAStrength;\r\n },\r\n set(this: Water, value) {\r\n this.TAAStrength = value.num[0];\r\n }\r\n },\r\n {\r\n name: 'ScatterRampTexture',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.scatterRampTexture) ?? '';\r\n },\r\n async set(value) {\r\n if (!value) {\r\n this.material.scatterRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.scatterRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n name: 'AbsorptionRampTexture',\r\n type: 'object',\r\n default: null,\r\n isNullable() {\r\n return true;\r\n },\r\n get(this: Water, value) {\r\n value.str[0] = manager.getAssetId(this.material.absorptionRampTexture) ?? '';\r\n },\r\n async set(this: Water, value) {\r\n if (!value) {\r\n this.material.absorptionRampTexture = null;\r\n } else {\r\n if (value.str[0]) {\r\n const assetId = value.str[0];\r\n let tex: Nullable<Texture2D>;\r\n try {\r\n tex = await manager.fetchTexture<Texture2D>(assetId);\r\n } catch (err) {\r\n console.error(`Load asset failed: ${value.str[0]}: ${err}`);\r\n tex = null;\r\n }\r\n if (tex?.isTexture2D()) {\r\n this.material.absorptionRampTexture = tex;\r\n } else {\r\n console.error('Invalid texture type');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n ]);\r\n }\r\n };\r\n}\r\n"],"names":["getFBMWaveGeneratorClass","ctor","FBMWaveGenerator","name","getProps","defineProps","type","options","minValue","maxValue","default","get","value","num","numOctaves","set","animatable","wind","x","y","Vector2","amplitude","frequency","getFFTWaveGeneratorClass","FFTWaveGenerator","alignment","foamWidth","foamContrast","getWaveLength","setWaveLength","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","getWaterClass","manager","Water","parent","GraphNode","createFunc","ctx","node","scene","obj","objectTypes","isNullable","object","waveGenerator","gridScale","bool","wireframe","animationSpeed","material","depthMulti","refractionStrength","displace","TAAStrength","str","getAssetId","scatterRampTexture","assetId","tex","fetchTexture","err","console","error","isTexture2D","absorptionRampTexture"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ function defineProps(accessors) {
2
+ return accessors;
3
+ }
4
+
5
+ export { defineProps };
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../src/utility/serialization/types.ts"],"sourcesContent":["import type { GenericConstructor, Nullable, RequireOptionals } from '@zephyr3d/base';\r\n\r\n/**\r\n * Enumerates supported data types for serializable properties.\r\n *\r\n * This type informs serializers/editors how to interpret and encode values.\r\n * 'bool'|'int'|'float'|'vec2'|'vec3'|'vec4'|'int2'|'int3'|'int4'|'string'|'rgb'|'rgba'|'object'|'object_array'|'embedded'|'command';\r\n *\r\n * @public\r\n */\r\nexport type PropertyType = string;\r\n\r\nexport type PropertyToType<T extends string> = T extends\r\n | 'float'\r\n | 'vec2'\r\n | 'vec3'\r\n | 'vec4'\r\n | 'int'\r\n | 'int2'\r\n | 'int3'\r\n | 'int4'\r\n | 'rgb'\r\n | 'rgba'\r\n ? 'num'\r\n : T extends 'bool'\r\n ? 'bool'\r\n : T extends 'string'\r\n ? 'str'\r\n : T extends 'object' | 'object_array'\r\n ? 'object'\r\n : 'num' | 'bool' | 'str' | 'object';\r\n/**\r\n * Container for a serializable property's value.\r\n *\r\n * Values are carried in typed arrays (even for single values) to support\r\n * both scalar and array-like properties in a unified shape.\r\n *\r\n * Conventions:\r\n * - `num` carries numeric data for types like `int`, `float`, `vec*`, `int*`, `rgb`, `rgba`\r\n * - `str` carries string data for `string`\r\n * - `bool` carries boolean data for `bool`\r\n * - `object` carries references/instances for `object`, `object_array`, `embedded`\r\n *\r\n * Only the relevant field(s) for the property's {@link PropertyType} will be populated.\r\n *\r\n * @public\r\n */\r\nexport type PropertyValue = {\r\n /** Numeric lane(s) for numeric, vector, or color types. */\r\n num?: number[];\r\n /** String lane(s) for text properties. */\r\n str?: string[];\r\n /** Boolean lane(s) for boolean properties. */\r\n bool?: boolean[];\r\n /** Object lane(s) for object references or embedded objects. */\r\n object?: Nullable<object>[];\r\n};\r\n\r\n/**\r\n * Editor-oriented edit types that augment how a property is presented/edited.\r\n *\r\n * This is orthogonal to {@link PropertyType} and is purely an editor hint.\r\n *\r\n * @public\r\n */\r\nexport type PropEdit = 'aabb' | 'quaternion' | 'proptrack';\r\n\r\n/**\r\n * Additional options controlling how a property is displayed, constrained, and edited.\r\n *\r\n * These options are consumed primarily by an editor/inspector UI, but may\r\n * also influence validation and tooling behavior.\r\n *\r\n * @public\r\n */\r\nexport type PropertyAccessorOptions = {\r\n /** Human-friendly label for UI. Defaults to `name` if omitted. */\r\n label?: string;\r\n /** Logical grouping/category in UI. */\r\n group?: string;\r\n /** Editor presentation hint (e.g., quaternion gizmo, animation track). */\r\n edit?: PropEdit;\r\n /** Minimum numeric value (for sliders/spinners). */\r\n minValue?: number;\r\n /** Maximum numeric value (for sliders/spinners). */\r\n maxValue?: number;\r\n /** Step/speed for numeric editing UI. */\r\n speed?: number;\r\n /** Whether the property can be animated/keyframed. */\r\n animatable?: boolean;\r\n /** Allowed MIME types for file-picker-like editors. */\r\n mimeTypes?: string[];\r\n /** Allowed constructor types when choosing/creating object references. */\r\n objectTypes?: GenericConstructor[];\r\n /**\r\n * Optional enumeration metadata.\r\n * `labels[i]` corresponds to `values[i]`.\r\n */\r\n enum?: { labels: string[]; values: unknown[] };\r\n};\r\n\r\nexport function defineProps(accessors: PropertyAccessor<any, 'DUMMY'>[]): PropertyAccessor[] {\r\n return accessors;\r\n}\r\n\r\n/**\r\n * Descriptor for a serializable property of a class/type.\r\n *\r\n * This binds together:\r\n * - Metadata: `type`, `name`, `default`, `readonly`, `persistent`, `options`\r\n * - Accessors: `get`, `set`, `add`, `delete`, `create` for manipulating the underlying object state\r\n * - Predicates: `isValid`, `isNullable`, `isHidden` to control UI and validation\r\n * - Commands: `command` for action-style properties (`type: 'command'`)\r\n * - Utilities: `getDefaultValue` to compute defaults dynamically\r\n *\r\n * The accessors are invoked with `this` bound to the owning object instance.\r\n *\r\n * @typeParam T - The instance type that owns the property.\r\n * @public\r\n */\r\nexport type PropertyAccessor<T = object, U extends string = ''> = {\r\n /** The storage/serialization data type. */\r\n type: PropertyType;\r\n /** Unique property name (stable identifier for tooling/serialization). */\r\n name: string;\r\n /**\r\n * Optional evaluation phase/order hint (lower runs earlier).\r\n * Useful for staged initialization or batched updates in editors.\r\n */\r\n phase?: number;\r\n /** If true, the property is read-only in UI and programmatic setters may be disallowed. */\r\n readonly?: boolean;\r\n /** Default value used if none is provided. Can be a primitive, array, or object. */\r\n default?: any;\r\n /**\r\n * If true, the property is persisted during save/serialize.\r\n * Non-persistent properties may be computed or session-only.\r\n */\r\n //persistent?: boolean;\r\n /** Editor and validation options for this property. */\r\n options?: PropertyAccessorOptions;\r\n /**\r\n * Reads the current value from `this` into the provided `value` container.\r\n *\r\n * Implementations should fully populate the appropriate lane(s) (e.g., `num`, `str`, etc.)\r\n * according to the property's {@link PropertyType}.\r\n *\r\n * @param value - Output container to be filled by the getter.\r\n */\r\n get: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>\r\n ) => void;\r\n /**\r\n * Writes an incoming value to `this`.\r\n *\r\n * For array-like properties, `index` can target a specific element.\r\n * Implementations should read from the appropriate lane(s) of `value` according to {@link PropertyType}.\r\n *\r\n * @param value - Input container carrying the new value.\r\n * @param index - Optional element index for array-like properties.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n set?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Creates a new embedded/contained object for object-like properties.\r\n *\r\n * Typically used for `embedded` or `object_array` to instantiate an element.\r\n *\r\n * @param ctor - Constructor to instantiate.\r\n * @param index - Target index where the new object will be inserted.\r\n * @returns The newly created object instance.\r\n */\r\n create?: (this: T, ctor: GenericConstructor, index: number) => Nullable<object>;\r\n /**\r\n * Deletes an element from an array-like property or clears a value.\r\n *\r\n * @param index - Target element index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n delete?: (this: T, index: number) => void | Promise<void>;\r\n /**\r\n * Adds a new element/value to an array-like property.\r\n *\r\n * If `index` is omitted, implementations may append to the end.\r\n *\r\n * @param value - The value to add (read appropriate lane(s) per {@link PropertyType}).\r\n * @param index - Optional insertion index.\r\n * @returns Optionally `Promise<void>` if asynchronous work is required.\r\n */\r\n add?: <K extends string>(\r\n this: T,\r\n value: U extends '' ? Required<Pick<PropertyValue, PropertyToType<K>>> : RequireOptionals<PropertyValue>,\r\n index?: number\r\n ) => void | Promise<void>;\r\n /**\r\n * Validates the current state of `this` with respect to this property.\r\n *\r\n * Returning `false` may block serialization or UI confirmation.\r\n *\r\n * @returns `true` if valid, otherwise `false`.\r\n */\r\n isValid?: (this: T) => boolean;\r\n /**\r\n * Indicates whether this property is serializable. Default is serializable if not present.\r\n *\r\n * @returns `true` if persistent, otherwise `false`.\r\n */\r\n isPersistent?: (this: T) => boolean;\r\n /**\r\n * Indicates whether a specific element or slot may be `null` or `undefined`.\r\n *\r\n * Applies to array-like or optional properties.\r\n *\r\n * @param index - Target element index.\r\n * @returns `true` if nullable, otherwise `false`.\r\n */\r\n isNullable?: (this: T, index: number) => boolean;\r\n /**\r\n * Controls visibility of a specific element or the property in UI.\r\n *\r\n * @param index - Target element index.\r\n * @param obj - Value at index\r\n * @returns `true` if hidden, otherwise `false`.\r\n */\r\n isHidden?: (this: T, index: number, obj?: unknown) => boolean;\r\n /**\r\n * Executes a command-style property.\r\n *\r\n * Only meaningful for `type: 'command'`. Return value may indicate success or toggle state.\r\n *\r\n * @param index - Optional command index for multi-command groups.\r\n * @returns Command result, commonly a boolean for toggle-like actions.\r\n */\r\n command?: (this: T, index: number) => boolean;\r\n /**\r\n * Supplies a default value dynamically at runtime.\r\n *\r\n * If provided, this takes precedence over the static `default` field.\r\n */\r\n getDefaultValue?: (this: T) => any;\r\n};\r\n\r\n/**\r\n * Descriptor for a serializable class/type.\r\n *\r\n * This defines how a class is identified, constructed, and inspected for properties.\r\n * Editors and serializers can use this metadata to instantiate objects, load initial\r\n * parameters, and enumerate property accessors.\r\n *\r\n * @public\r\n */\r\nexport type SerializableClass = {\r\n /** Concrete constructor for the serializable class. */\r\n ctor: GenericConstructor;\r\n /** Optional parent/superclass constructor to represent inheritance in tooling. */\r\n parent?: GenericConstructor;\r\n /** If true, suppresses title rendering in UI for compact displays. */\r\n noTitle?: boolean;\r\n /** Display name used by tooling and editors. */\r\n name: string;\r\n /**\r\n * Custom factory to create an instance and optionally control property loading.\r\n *\r\n * If `loadProps` is `false`, the caller may skip default property loading\r\n * (useful for lazy or staged initialization).\r\n *\r\n * @param ctx - Optional construction context (editor/runtime-specific).\r\n * @param init - Optional initialization payload.\r\n * @returns The created object and a `loadProps` hint.\r\n */\r\n createFunc?: (\r\n ctx?: any,\r\n init?: any\r\n ) => { obj: any; loadProps?: boolean } | Promise<{ obj: any; loadProps?: boolean }>;\r\n /**\r\n * Extracts initialization parameters from an instance suitable for re-creation.\r\n *\r\n * This is the inverse of `createFunc`'s `init` argument, enabling round-trip\r\n * serialization of constructor/initializer data.\r\n *\r\n * @param obj - The instance to introspect.\r\n * @returns An initialization payload (serializable).\r\n */\r\n getInitParams?: (obj: any, flags: { saveProps: boolean }) => any;\r\n /**\r\n * Enumerates property accessors for this class.\r\n *\r\n * The returned list defines the full set of serializable/editor-visible properties.\r\n *\r\n * @returns Array of property accessors.\r\n */\r\n getProps: () => PropertyAccessor<any>[];\r\n};\r\n"],"names":["defineProps","accessors"],"mappings":"AAqGO,SAASA,YAAYC,SAA2C,EAAA;IACrE,OAAOA,SAAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"shprojector.js","sources":["../../src/utility/shprojector.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n RenderStateSet,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport { Disposable, DRef, Vector4 } from '@zephyr3d/base';\r\nimport { fetchSampler } from './misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * CubemapSHProjector is responsible for projecting a cubemap texture into spherical harmonics (SH) coefficients.\r\n * This is commonly used for efficient environment lighting approximation in real-time rendering.\r\n *\r\n * The class uses Monte Carlo sampling to compute the first 9 spherical harmonics coefficients (up to order 2)\r\n * from a cubemap texture, which can then be used for ambient lighting calculations.\r\n *\r\n * @example\r\n * ```typescript\r\n * const projector = new CubemapSHProjector(10000);\r\n * const shBuffer = device.createBuffer(4 * 4 * 9, { usage: 'uniform' });\r\n * projector.projectCubemap(environmentCubemap, shBuffer);\r\n * // shBuffer now contains the 9 SH coefficients as RGB values\r\n * projector.dispose();\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class CubemapSHProjector extends Disposable {\r\n private static _programInst: GPUProgram = null;\r\n private static _bindGroupInst: BindGroup = null;\r\n private static _renderStats: RenderStateSet = null;\r\n private readonly _primitive: DRef<Primitive>;\r\n private readonly _renderTarget: DRef<FrameBuffer>;\r\n private readonly _numSamples: number;\r\n /**\r\n * Creates a new CubemapSHProjector instance.\r\n *\r\n * @param numSamples - Number of Monte Carlo samples to use for SH projection.\r\n * Higher values provide better accuracy but slower computation.\r\n * Default is 10000.\r\n */\r\n constructor(numSamples = 10000) {\r\n super();\r\n this._numSamples = numSamples;\r\n this._primitive = new DRef();\r\n this._renderTarget = new DRef();\r\n }\r\n /**\r\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a GPUBuffer.\r\n *\r\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\r\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\r\n * The layout is:\r\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\r\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\r\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\r\n *\r\n * @param cubemap - The input cubemap texture to project\r\n * @param outBuffer - GPU data buffer to receive the computed SH coefficients.\r\n * Must be large enough to hold 9 RGB values (36 floats for RGBA32F format).\r\n *\r\n * @example\r\n * ```typescript\r\n * const shBuffer = device.createDataBuffer(9 * 4 * 4); // 9 coefficients * 4 components * 4 bytes\r\n * projector.projectCubemap(environmentMap, shBuffer);\r\n * ```\r\n */\r\n projectCubemap(cubemap: TextureCube, outBuffer: GPUDataBuffer, radianceSource = true) {\r\n this.projectCubemapToTexture(cubemap, this._renderTarget.get(), radianceSource);\r\n this._renderTarget.get().getColorAttachments()[0].readPixelsToBuffer(0, 0, 3, 3, 0, 0, outBuffer);\r\n }\r\n /**\r\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a 3x3 texture.\r\n *\r\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\r\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\r\n * The layout is:\r\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\r\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\r\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\r\n *\r\n * @param cubemap - The input cubemap texture to project\r\n * @param outFramebuffer - Framebuffer that contains the 3x3 texture to receive the computed SH coefficients in color attachment slot 0.\r\n *\r\n * @example\r\n * ```typescript\r\n * const shTexture = device.createTexture2D('rgba32f', 3, 3); // 9 coefficients * 4 components * 4 bytes\r\n * const shFramebuffer = device.createFrameBuffer([shTexture], null);\r\n * projector.projectCubemapToTexture(environmentMap, shFramebuffer);\r\n * ```\r\n */\r\n projectCubemapToTexture(cubemap: TextureCube, framebuffer: FrameBuffer, radianceSource = true) {\r\n const device = getDevice();\r\n const clearColor = new Vector4(0, 0, 0, 1);\r\n this.init(device);\r\n device.pushDeviceStates();\r\n device.setRenderStates(CubemapSHProjector._renderStats);\r\n device.setProgram(CubemapSHProjector._programInst);\r\n device.setFramebuffer(framebuffer);\r\n device.clearFrameBuffer(clearColor, null, null);\r\n const bindGroup = CubemapSHProjector._bindGroupInst;\r\n bindGroup.setTexture('cubemap', cubemap, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('scale', radianceSource ? 1.0 : Math.PI);\r\n device.setBindGroup(0, bindGroup);\r\n this._primitive.get().drawInstanced(9);\r\n device.popDeviceStates();\r\n }\r\n /**\r\n * Disposes of all resources allocated by this projector instance.\r\n * Should be called when the projector is no longer needed to prevent memory leaks.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.dispose();\r\n if (this._renderTarget.get()) {\r\n this._renderTarget.get().getColorAttachments()[0].dispose();\r\n this._renderTarget.dispose();\r\n }\r\n }\r\n /**\r\n * Initializes the GPU resources needed for SH projection.\r\n * This method is called automatically by projectCubemap() and sets up:\r\n * - Sample directions primitive (Monte Carlo samples on unit sphere)\r\n * - Render target (3x3 RGBA32F texture)\r\n * - Render states (additive blending, no depth test)\r\n * - GPU program for SH evaluation\r\n *\r\n * @param device - The graphics device to create resources with\r\n * @internal\r\n */\r\n private init(device: AbstractDevice) {\r\n if (!this._primitive.get()) {\r\n const samples = new Float32Array(this._numSamples * 4);\r\n for (let i = 0; i < this._numSamples; i++) {\r\n let x1: number, x2: number, s: number;\r\n do {\r\n x1 = Math.random() * 2 - 1;\r\n x2 = Math.random() * 2 - 1;\r\n s = x1 * x1 + x2 * x2;\r\n } while (s >= 1);\r\n const sqrtS = Math.sqrt(1 - s);\r\n samples[i * 4 + 0] = 2 * x1 * sqrtS;\r\n samples[i * 4 + 1] = 2 * x2 * sqrtS;\r\n samples[i * 4 + 2] = 1 - 2 * s;\r\n samples[i * 4 + 3] = (4 * Math.PI) / this._numSamples;\r\n }\r\n const primitive = new Primitive();\r\n primitive.createAndSetVertexBuffer('position_f32x4', samples);\r\n if (device.type === 'webgl') {\r\n primitive.createAndSetVertexBuffer(\r\n 'tex0_f32',\r\n new Float32Array([0, 1, 2, 3, 4, 5, 6, 7, 8]),\r\n 'instance'\r\n );\r\n }\r\n primitive.indexCount = this._numSamples;\r\n primitive.indexStart = 0;\r\n primitive.primitiveType = 'point-list';\r\n this._primitive.set(primitive);\r\n }\r\n\r\n if (!this._renderTarget.get()) {\r\n const texture = device.createTexture2D('rgba32f', 3, 3, {\r\n mipmapping: false\r\n });\r\n this._renderTarget.set(device.createFrameBuffer([texture], null));\r\n }\r\n\r\n if (!CubemapSHProjector._renderStats) {\r\n CubemapSHProjector._renderStats = device.createRenderStateSet();\r\n CubemapSHProjector._renderStats.useDepthState().enableTest(false).enableWrite(false);\r\n CubemapSHProjector._renderStats\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendEquation('add', 'add')\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n CubemapSHProjector._renderStats.useRasterizerState().setCullMode('none');\r\n }\r\n\r\n if (!CubemapSHProjector._programInst) {\r\n CubemapSHProjector._programInst = CubemapSHProjector._createProgram(device);\r\n CubemapSHProjector._bindGroupInst = device.createBindGroup(\r\n CubemapSHProjector._programInst.bindGroupLayouts[0]\r\n );\r\n }\r\n }\r\n /**\r\n * Creates the GPU program for spherical harmonics evaluation.\r\n *\r\n * The vertex shader uses instanced rendering to generate 9 instances (one per SH coefficient).\r\n * Each instance renders all sample points, but the vertex shader maps them to different\r\n * pixels in the 3x3 output texture based on the instance ID.\r\n *\r\n * The fragment shader evaluates the appropriate SH basis function based on the pixel location,\r\n * samples the cubemap in the sample direction, and multiplies by the integration weight.\r\n *\r\n * @param device - The graphics device to create the program with\r\n * @returns The compiled GPU program\r\n * @internal\r\n */\r\n private static _createProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.directionWeight = pb.vec4().attrib('position');\r\n if (device.type === 'webgl') {\r\n this.$inputs.instanceId = pb.float().attrib('texCoord0');\r\n }\r\n pb.main(function () {\r\n this.$outputs.direction = this.$inputs.directionWeight.xyz;\r\n this.$outputs.weight = this.$inputs.directionWeight.w;\r\n if (pb.getDevice().type !== 'webgpu') {\r\n this.$builtins.pointSize = 1;\r\n }\r\n this.$outputs.shIndex =\r\n device.type === 'webgl' ? this.$inputs.instanceId : pb.int(this.$builtins.instanceIndex);\r\n this.$l.x = pb.mod(this.$outputs.shIndex, 3);\r\n this.$l.y = pb.div(this.$outputs.shIndex, 3);\r\n this.$l.ndcX = pb.sub(pb.div(pb.add(pb.float(this.x), 0.5), 1.5), 1);\r\n this.$l.ndcY = pb.sub(pb.div(pb.add(pb.float(this.y), 0.5), 1.5), 1);\r\n this.$l.$builtins.position = pb.vec4(this.ndcX, this.ndcY, 0, 1);\r\n if (pb.getDevice().type === 'webgpu') {\r\n this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.cubemap = pb.texCube().uniform(0);\r\n this.scale = pb.float().uniform(0);\r\n pb.func('cosineLobeBandFactor', [pb.int('l')], function () {\r\n this.$if(pb.equal(this.l, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$if(pb.lessThanEqual(this.l, 3), function () {\r\n this.$return(2 / 3);\r\n });\r\n this.$return(1 / 4);\r\n });\r\n pb.func('Y0', [pb.vec3('v')], function () {\r\n this.$return(0.282094791773878);\r\n });\r\n pb.func('Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('evalBasis', [pb.vec3('dir'), pb.int('c')], function () {\r\n this.$if(pb.equal(this.c, 0), function () {\r\n this.$return(this.Y0(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 1), function () {\r\n this.$return(this.Y1(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 2), function () {\r\n this.$return(this.Y2(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 3), function () {\r\n this.$return(this.Y3(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 4), function () {\r\n this.$return(this.Y4(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 5), function () {\r\n this.$return(this.Y5(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 6), function () {\r\n this.$return(this.Y6(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 7), function () {\r\n this.$return(this.Y7(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 8), function () {\r\n this.$return(this.Y8(this.dir));\r\n })\r\n .$else(function () {\r\n this.$return(0);\r\n });\r\n });\r\n pb.main(function () {\r\n this.$l.radiance = pb.textureSampleLevel(this.cubemap, this.$inputs.direction, 0).rgb;\r\n this.$l.bandFactor = this.cosineLobeBandFactor(\r\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\r\n );\r\n this.$l.sh = this.evalBasis(\r\n this.$inputs.direction,\r\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\r\n );\r\n this.$outputs.color = pb.vec4(\r\n pb.mul(this.radiance, this.sh, this.$inputs.weight, this.bandFactor, this.scale),\r\n 1\r\n );\r\n });\r\n }\r\n });\r\n program.name = '@CubemapSHProjector_SHProject';\r\n return program;\r\n }\r\n}\r\n"],"names":["CubemapSHProjector","Disposable","_programInst","_bindGroupInst","_renderStats","_primitive","_renderTarget","_numSamples","numSamples","DRef","projectCubemap","cubemap","outBuffer","radianceSource","projectCubemapToTexture","get","getColorAttachments","readPixelsToBuffer","framebuffer","device","getDevice","clearColor","Vector4","init","pushDeviceStates","setRenderStates","setProgram","setFramebuffer","clearFrameBuffer","bindGroup","setTexture","fetchSampler","setValue","Math","PI","setBindGroup","drawInstanced","popDeviceStates","onDispose","dispose","samples","Float32Array","i","x1","x2","s","random","sqrtS","sqrt","primitive","Primitive","createAndSetVertexBuffer","type","indexCount","indexStart","primitiveType","set","texture","createTexture2D","mipmapping","createFrameBuffer","createRenderStateSet","useDepthState","enableTest","enableWrite","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","useRasterizerState","setCullMode","_createProgram","createBindGroup","bindGroupLayouts","program","buildRenderProgram","vertex","pb","$inputs","directionWeight","vec4","attrib","instanceId","float","main","$outputs","direction","xyz","weight","w","$builtins","pointSize","shIndex","int","instanceIndex","$l","x","mod","y","div","ndcX","sub","add","ndcY","position","mul","fragment","color","texCube","uniform","scale","func","$if","equal","l","$return","lessThanEqual","vec3","v","z","c","Y0","dir","$elseif","Y1","Y2","Y3","Y4","Y5","Y6","Y7","Y8","$else","radiance","textureSampleLevel","rgb","bandFactor","cosineLobeBandFactor","sh","evalBasis","name"],"mappings":"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"}
1
+ {"version":3,"file":"shprojector.js","sources":["../../src/utility/shprojector.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n RenderStateSet,\r\n TextureCube\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable, DRef, Vector4 } from '@zephyr3d/base';\r\nimport { fetchSampler } from './misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * CubemapSHProjector is responsible for projecting a cubemap texture into spherical harmonics (SH) coefficients.\r\n * This is commonly used for efficient environment lighting approximation in real-time rendering.\r\n *\r\n * The class uses Monte Carlo sampling to compute the first 9 spherical harmonics coefficients (up to order 2)\r\n * from a cubemap texture, which can then be used for ambient lighting calculations.\r\n *\r\n * @example\r\n * ```typescript\r\n * const projector = new CubemapSHProjector(10000);\r\n * const shBuffer = device.createBuffer(4 * 4 * 9, { usage: 'uniform' });\r\n * projector.projectCubemap(environmentCubemap, shBuffer);\r\n * // shBuffer now contains the 9 SH coefficients as RGB values\r\n * projector.dispose();\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class CubemapSHProjector extends Disposable {\r\n private static _programInst: Nullable<GPUProgram> = null;\r\n private static _bindGroupInst: Nullable<BindGroup> = null;\r\n private static _renderStats: Nullable<RenderStateSet> = null;\r\n private readonly _primitive: DRef<Primitive>;\r\n private readonly _renderTarget: DRef<FrameBuffer>;\r\n private readonly _numSamples: number;\r\n /**\r\n * Creates a new CubemapSHProjector instance.\r\n *\r\n * @param numSamples - Number of Monte Carlo samples to use for SH projection.\r\n * Higher values provide better accuracy but slower computation.\r\n * Default is 10000.\r\n */\r\n constructor(numSamples = 10000) {\r\n super();\r\n this._numSamples = numSamples;\r\n this._primitive = new DRef();\r\n this._renderTarget = new DRef();\r\n }\r\n /**\r\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a GPUBuffer.\r\n *\r\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\r\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\r\n * The layout is:\r\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\r\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\r\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\r\n *\r\n * @param cubemap - The input cubemap texture to project\r\n * @param outBuffer - GPU data buffer to receive the computed SH coefficients.\r\n * Must be large enough to hold 9 RGB values (36 floats for RGBA32F format).\r\n *\r\n * @example\r\n * ```typescript\r\n * const shBuffer = device.createDataBuffer(9 * 4 * 4); // 9 coefficients * 4 components * 4 bytes\r\n * projector.projectCubemap(environmentMap, shBuffer);\r\n * ```\r\n */\r\n projectCubemap(cubemap: TextureCube, outBuffer: GPUDataBuffer, radianceSource = true) {\r\n this.projectCubemapToTexture(cubemap, this._renderTarget.get()!, radianceSource);\r\n this._renderTarget.get()!.getColorAttachments()[0].readPixelsToBuffer(0, 0, 3, 3, 0, 0, outBuffer);\r\n }\r\n /**\r\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a 3x3 texture.\r\n *\r\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\r\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\r\n * The layout is:\r\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\r\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\r\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\r\n *\r\n * @param cubemap - The input cubemap texture to project\r\n * @param outFramebuffer - Framebuffer that contains the 3x3 texture to receive the computed SH coefficients in color attachment slot 0.\r\n *\r\n * @example\r\n * ```typescript\r\n * const shTexture = device.createTexture2D('rgba32f', 3, 3); // 9 coefficients * 4 components * 4 bytes\r\n * const shFramebuffer = device.createFrameBuffer([shTexture], null);\r\n * projector.projectCubemapToTexture(environmentMap, shFramebuffer);\r\n * ```\r\n */\r\n projectCubemapToTexture(cubemap: TextureCube, framebuffer: FrameBuffer, radianceSource = true) {\r\n const device = getDevice();\r\n const clearColor = new Vector4(0, 0, 0, 1);\r\n this.init(device);\r\n device.pushDeviceStates();\r\n device.setRenderStates(CubemapSHProjector._renderStats);\r\n device.setProgram(CubemapSHProjector._programInst);\r\n device.setFramebuffer(framebuffer);\r\n device.clearFrameBuffer(clearColor, null, null);\r\n const bindGroup = CubemapSHProjector._bindGroupInst!;\r\n bindGroup.setTexture('cubemap', cubemap, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('scale', radianceSource ? 1.0 : Math.PI);\r\n device.setBindGroup(0, bindGroup);\r\n this._primitive.get()!.drawInstanced(9);\r\n device.popDeviceStates();\r\n }\r\n /**\r\n * Disposes of all resources allocated by this projector instance.\r\n * Should be called when the projector is no longer needed to prevent memory leaks.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._primitive.dispose();\r\n if (this._renderTarget.get()) {\r\n this._renderTarget.get()!.getColorAttachments()[0].dispose();\r\n this._renderTarget.dispose();\r\n }\r\n }\r\n /**\r\n * Initializes the GPU resources needed for SH projection.\r\n * This method is called automatically by projectCubemap() and sets up:\r\n * - Sample directions primitive (Monte Carlo samples on unit sphere)\r\n * - Render target (3x3 RGBA32F texture)\r\n * - Render states (additive blending, no depth test)\r\n * - GPU program for SH evaluation\r\n *\r\n * @param device - The graphics device to create resources with\r\n * @internal\r\n */\r\n private init(device: AbstractDevice) {\r\n if (!this._primitive.get()) {\r\n const samples = new Float32Array(this._numSamples * 4);\r\n for (let i = 0; i < this._numSamples; i++) {\r\n let x1: number, x2: number, s: number;\r\n do {\r\n x1 = Math.random() * 2 - 1;\r\n x2 = Math.random() * 2 - 1;\r\n s = x1 * x1 + x2 * x2;\r\n } while (s >= 1);\r\n const sqrtS = Math.sqrt(1 - s);\r\n samples[i * 4 + 0] = 2 * x1 * sqrtS;\r\n samples[i * 4 + 1] = 2 * x2 * sqrtS;\r\n samples[i * 4 + 2] = 1 - 2 * s;\r\n samples[i * 4 + 3] = (4 * Math.PI) / this._numSamples;\r\n }\r\n const primitive = new Primitive();\r\n primitive.createAndSetVertexBuffer('position_f32x4', samples);\r\n if (device.type === 'webgl') {\r\n primitive.createAndSetVertexBuffer(\r\n 'tex0_f32',\r\n new Float32Array([0, 1, 2, 3, 4, 5, 6, 7, 8]),\r\n 'instance'\r\n );\r\n }\r\n primitive.indexCount = this._numSamples;\r\n primitive.indexStart = 0;\r\n primitive.primitiveType = 'point-list';\r\n this._primitive.set(primitive);\r\n }\r\n\r\n if (!this._renderTarget.get()) {\r\n const texture = device.createTexture2D('rgba32f', 3, 3, {\r\n mipmapping: false\r\n })!;\r\n this._renderTarget.set(device.createFrameBuffer([texture], null));\r\n }\r\n\r\n if (!CubemapSHProjector._renderStats) {\r\n CubemapSHProjector._renderStats = device.createRenderStateSet();\r\n CubemapSHProjector._renderStats.useDepthState().enableTest(false).enableWrite(false);\r\n CubemapSHProjector._renderStats\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendEquation('add', 'add')\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n CubemapSHProjector._renderStats.useRasterizerState().setCullMode('none');\r\n }\r\n\r\n if (!CubemapSHProjector._programInst) {\r\n CubemapSHProjector._programInst = CubemapSHProjector._createProgram(device)!;\r\n CubemapSHProjector._bindGroupInst = device.createBindGroup(\r\n CubemapSHProjector._programInst.bindGroupLayouts[0]\r\n );\r\n }\r\n }\r\n /**\r\n * Creates the GPU program for spherical harmonics evaluation.\r\n *\r\n * The vertex shader uses instanced rendering to generate 9 instances (one per SH coefficient).\r\n * Each instance renders all sample points, but the vertex shader maps them to different\r\n * pixels in the 3x3 output texture based on the instance ID.\r\n *\r\n * The fragment shader evaluates the appropriate SH basis function based on the pixel location,\r\n * samples the cubemap in the sample direction, and multiplies by the integration weight.\r\n *\r\n * @param device - The graphics device to create the program with\r\n * @returns The compiled GPU program\r\n * @internal\r\n */\r\n private static _createProgram(device: AbstractDevice) {\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.directionWeight = pb.vec4().attrib('position');\r\n if (device.type === 'webgl') {\r\n this.$inputs.instanceId = pb.float().attrib('texCoord0');\r\n }\r\n pb.main(function () {\r\n this.$outputs.direction = this.$inputs.directionWeight.xyz;\r\n this.$outputs.weight = this.$inputs.directionWeight.w;\r\n if (pb.getDevice().type !== 'webgpu') {\r\n this.$builtins.pointSize = 1;\r\n }\r\n this.$outputs.shIndex =\r\n device.type === 'webgl' ? this.$inputs.instanceId : pb.int(this.$builtins.instanceIndex);\r\n this.$l.x = pb.mod(this.$outputs.shIndex, 3);\r\n this.$l.y = pb.div(this.$outputs.shIndex, 3);\r\n this.$l.ndcX = pb.sub(pb.div(pb.add(pb.float(this.x), 0.5), 1.5), 1);\r\n this.$l.ndcY = pb.sub(pb.div(pb.add(pb.float(this.y), 0.5), 1.5), 1);\r\n this.$l.$builtins.position = pb.vec4(this.ndcX, this.ndcY, 0, 1);\r\n if (pb.getDevice().type === 'webgpu') {\r\n this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.cubemap = pb.texCube().uniform(0);\r\n this.scale = pb.float().uniform(0);\r\n pb.func('cosineLobeBandFactor', [pb.int('l')], function () {\r\n this.$if(pb.equal(this.l, 0), function () {\r\n this.$return(pb.float(1));\r\n });\r\n this.$if(pb.lessThanEqual(this.l, 3), function () {\r\n this.$return(2 / 3);\r\n });\r\n this.$return(1 / 4);\r\n });\r\n pb.func('Y0', [pb.vec3('v')], function () {\r\n this.$return(0.282094791773878);\r\n });\r\n pb.func('Y1', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, -0.4886025119));\r\n });\r\n pb.func('Y2', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.z, 0.4886025119));\r\n });\r\n pb.func('Y3', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, -0.4886025119));\r\n });\r\n pb.func('Y4', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\r\n });\r\n pb.func('Y5', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Y6', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\r\n });\r\n pb.func('Y7', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\r\n });\r\n pb.func('Y8', [pb.vec3('v')], function () {\r\n this.$return(pb.mul(pb.sub(pb.mul(this.v.x, this.v.x), pb.mul(this.v.y, this.v.y)), 0.5462742153));\r\n });\r\n pb.func('evalBasis', [pb.vec3('dir'), pb.int('c')], function () {\r\n this.$if(pb.equal(this.c, 0), function () {\r\n this.$return(this.Y0(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 1), function () {\r\n this.$return(this.Y1(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 2), function () {\r\n this.$return(this.Y2(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 3), function () {\r\n this.$return(this.Y3(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 4), function () {\r\n this.$return(this.Y4(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 5), function () {\r\n this.$return(this.Y5(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 6), function () {\r\n this.$return(this.Y6(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 7), function () {\r\n this.$return(this.Y7(this.dir));\r\n })\r\n .$elseif(pb.equal(this.c, 8), function () {\r\n this.$return(this.Y8(this.dir));\r\n })\r\n .$else(function () {\r\n this.$return(0);\r\n });\r\n });\r\n pb.main(function () {\r\n this.$l.radiance = pb.textureSampleLevel(this.cubemap, this.$inputs.direction, 0).rgb;\r\n this.$l.bandFactor = this.cosineLobeBandFactor(\r\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\r\n );\r\n this.$l.sh = this.evalBasis(\r\n this.$inputs.direction,\r\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\r\n );\r\n this.$outputs.color = pb.vec4(\r\n pb.mul(this.radiance, this.sh, this.$inputs.weight, this.bandFactor, this.scale),\r\n 1\r\n );\r\n });\r\n }\r\n })!;\r\n program.name = '@CubemapSHProjector_SHProject';\r\n return program;\r\n }\r\n}\r\n"],"names":["CubemapSHProjector","Disposable","_programInst","_bindGroupInst","_renderStats","_primitive","_renderTarget","_numSamples","numSamples","DRef","projectCubemap","cubemap","outBuffer","radianceSource","projectCubemapToTexture","get","getColorAttachments","readPixelsToBuffer","framebuffer","device","getDevice","clearColor","Vector4","init","pushDeviceStates","setRenderStates","setProgram","setFramebuffer","clearFrameBuffer","bindGroup","setTexture","fetchSampler","setValue","Math","PI","setBindGroup","drawInstanced","popDeviceStates","onDispose","dispose","samples","Float32Array","i","x1","x2","s","random","sqrtS","sqrt","primitive","Primitive","createAndSetVertexBuffer","type","indexCount","indexStart","primitiveType","set","texture","createTexture2D","mipmapping","createFrameBuffer","createRenderStateSet","useDepthState","enableTest","enableWrite","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","useRasterizerState","setCullMode","_createProgram","createBindGroup","bindGroupLayouts","program","buildRenderProgram","vertex","pb","$inputs","directionWeight","vec4","attrib","instanceId","float","main","$outputs","direction","xyz","weight","w","$builtins","pointSize","shIndex","int","instanceIndex","$l","x","mod","y","div","ndcX","sub","add","ndcY","position","mul","fragment","color","texCube","uniform","scale","func","$if","equal","l","$return","lessThanEqual","vec3","v","z","c","Y0","dir","$elseif","Y1","Y2","Y3","Y4","Y5","Y6","Y7","Y8","$else","radiance","textureSampleLevel","rgb","bandFactor","cosineLobeBandFactor","sh","evalBasis","name"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ggxlut.js","sources":["../../../src/utility/textures/ggxlut.ts"],"sourcesContent":["import type { Texture2D } from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\n\r\nconst ggxLut: Map<number, Texture2D> = new Map();\r\nexport function getGGXLUT(size: number): Texture2D {\r\n let lut = ggxLut.get(size);\r\n if (!lut) {\r\n lut = createGGXLUT(size);\r\n ggxLut.set(size, lut);\r\n }\r\n return lut;\r\n}\r\nfunction createGGXLUT(size: number) {\r\n const device = getDevice();\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n const SAMPLE_COUNT = 1024;\r\n if (device.type === 'webgl') {\r\n pb.func('radicalInverse_VdC', [pb.int('bits')], function () {\r\n this.$l.rand = pb.float(0);\r\n this.$l.denom = pb.float(1);\r\n this.$l.invBase = pb.float(0.5);\r\n this.$l.n = this.bits;\r\n this.$for(pb.int('i'), 0, 32, function () {\r\n this.denom = pb.mul(this.denom, 2);\r\n this.rand = pb.add(this.rand, pb.div(pb.mod(pb.float(this.n), 2), this.denom));\r\n this.n = pb.div(this.n, 2);\r\n this.$if(pb.equal(this.n, 0), function () {\r\n this.$break();\r\n });\r\n });\r\n this.$return(this.rand);\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(this.i)));\r\n });\r\n } else {\r\n pb.func('radicalInverse_VdC', [pb.uint('bits')], function () {\r\n this.$l.n = this.bits;\r\n this.n = pb.compOr(pb.sal(this.n, 16), pb.sar(this.n, 16));\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x55555555), 1),\r\n pb.sar(pb.compAnd(this.n, 0xaaaaaaaa), 1)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x33333333), 2),\r\n pb.sar(pb.compAnd(this.n, 0xcccccccc), 2)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x0f0f0f0f), 4),\r\n pb.sar(pb.compAnd(this.n, 0xf0f0f0f0), 4)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x00ff00ff), 8),\r\n pb.sar(pb.compAnd(this.n, 0xff00ff00), 8)\r\n );\r\n this.$return(pb.mul(pb.float(this.n), 2.3283064365386963e-10));\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(\r\n pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(pb.uint(this.i)))\r\n );\r\n });\r\n }\r\n pb.func('generateTBN', [pb.vec3('normal')], function () {\r\n this.$l.bitangent = pb.vec3(0, 1, 0);\r\n this.$l.NoU = this.normal.y;\r\n this.$l.epsl = 0.0000001;\r\n this.$if(pb.lessThanEqual(pb.sub(1, pb.abs(this.normal.y)), this.epsl), function () {\r\n this.bitangent = this.$choice(\r\n pb.greaterThan(this.normal.y, 0),\r\n pb.vec3(0, 0, 1),\r\n pb.vec3(0, 0, -1)\r\n );\r\n });\r\n this.$l.tangent = pb.normalize(pb.cross(this.bitangent, this.normal));\r\n this.bitangent = pb.cross(this.normal, this.tangent);\r\n this.$return(pb.mat3(this.tangent, this.bitangent, this.normal));\r\n });\r\n pb.func('D_Charlie', [pb.float('sheenRoughness'), pb.float('NdotH')], function () {\r\n this.$l.roughness = pb.max(this.sheenRoughness, 0.000001);\r\n this.$l.invR = pb.div(1, this.roughness);\r\n this.$l.cos2h = pb.mul(this.NdotH, this.NdotH);\r\n this.$l.sin2h = pb.sub(1, this.cos2h);\r\n this.$return(\r\n pb.div(pb.mul(pb.add(this.invR, 2), pb.pow(this.sin2h, pb.mul(this.invR, 0.5))), Math.PI * 2)\r\n );\r\n });\r\n pb.func('smithGGXCorrelated', [pb.float('NoV'), pb.float('NoL'), pb.float('roughness')], function () {\r\n this.$l.a2 = pb.mul(this.roughness, this.roughness, this.roughness, this.roughness);\r\n this.$l.GGXV = pb.mul(\r\n this.NoL,\r\n pb.sqrt(pb.add(pb.mul(this.NoV, this.NoV, pb.sub(1, this.a2)), this.a2))\r\n );\r\n this.$l.GGXL = pb.mul(\r\n this.NoV,\r\n pb.sqrt(pb.add(pb.mul(this.NoL, this.NoL, pb.sub(1, this.a2)), this.a2))\r\n );\r\n this.$return(pb.div(0.5, pb.add(this.GGXV, this.GGXL)));\r\n });\r\n pb.func('V_Ashikhmin', [pb.float('NdotL'), pb.float('NdotV')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.div(1, pb.mul(pb.sub(pb.add(this.NdotL, this.NdotV), pb.mul(this.NdotL, this.NdotV)), 4)),\r\n 0,\r\n 1\r\n )\r\n );\r\n });\r\n pb.func(\r\n 'importanceSample',\r\n [\r\n pb.vec2('xi'),\r\n pb.vec3('normal'),\r\n pb.float('roughness'),\r\n pb.vec3('ggx').out(),\r\n pb.vec3('charlie').out()\r\n ],\r\n function () {\r\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\r\n this.$l.cosTheta = pb.clamp(\r\n pb.sqrt(\r\n pb.div(\r\n pb.sub(1, this.xi.y),\r\n pb.add(1, pb.mul(pb.sub(pb.mul(this.alphaRoughness, this.alphaRoughness), 1), this.xi.y))\r\n )\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.phi = pb.mul(this.xi.x, Math.PI * 2);\r\n this.$l.TBN = this.generateTBN(this.normal);\r\n this.$l.localSpaceDir = pb.normalize(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.mul(this.sinTheta, pb.sin(this.phi)),\r\n this.cosTheta\r\n )\r\n );\r\n this.ggx = pb.mul(this.TBN, this.localSpaceDir);\r\n this.sinTheta = pb.pow(\r\n this.xi.y,\r\n pb.div(this.alphaRoughness, pb.add(pb.mul(this.alphaRoughness, 2), 1))\r\n );\r\n this.cosTheta = pb.sqrt(pb.sub(1, pb.mul(this.sinTheta, this.sinTheta)));\r\n this.localSpaceDir = pb.normalize(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.mul(this.sinTheta, pb.sin(this.phi)),\r\n this.cosTheta\r\n )\r\n );\r\n this.charlie = pb.mul(this.TBN, this.localSpaceDir);\r\n }\r\n );\r\n pb.func('integrateBRDF', [pb.float('NoV'), pb.float('roughness')], function () {\r\n this.$l.V = pb.vec3(pb.sub(1, pb.mul(this.NoV, this.NoV)), 0, this.NoV);\r\n this.$l.a = pb.float(0);\r\n this.$l.b = pb.float(0);\r\n this.$l.c = pb.float(0);\r\n this.$l.n = pb.vec3(0, 0, 1);\r\n this.$for(pb.int('i'), 0, SAMPLE_COUNT, function () {\r\n this.$l.xi = this.hammersley2d(this.i, SAMPLE_COUNT);\r\n this.$l.ggxSample = pb.vec3();\r\n this.$l.charlieSample = pb.vec3();\r\n this.importanceSample(this.xi, this.n, this.roughness, this.ggxSample, this.charlieSample);\r\n this.$l.ggxL = pb.normalize(pb.reflect(pb.neg(this.V), this.ggxSample.xyz));\r\n this.$l.ggxNoL = pb.clamp(this.ggxL.z, 0, 1);\r\n this.$l.ggxNoH = pb.clamp(this.ggxSample.z, 0, 1);\r\n this.$l.ggxVoH = pb.clamp(pb.dot(this.V, this.ggxSample.xyz), 0, 1);\r\n this.$l.charlieL = pb.normalize(pb.reflect(pb.neg(this.V), this.charlieSample.xyz));\r\n this.$l.charlieNoL = pb.clamp(this.charlieL.z, 0, 1);\r\n this.$l.charlieNoH = pb.clamp(this.charlieSample.z, 0, 1);\r\n this.$l.charlieVoH = pb.clamp(pb.dot(this.V, this.charlieSample.xyz), 0, 1);\r\n this.$if(pb.greaterThan(this.ggxNoL, 0), function () {\r\n this.$l.pdf = pb.div(\r\n pb.mul(\r\n this.smithGGXCorrelated(this.NoV, this.ggxNoL, this.roughness),\r\n this.ggxVoH,\r\n this.ggxNoL\r\n ),\r\n this.ggxNoH\r\n );\r\n this.$l.Fc = pb.pow(pb.sub(1, this.ggxVoH), 5);\r\n this.a = pb.add(this.a, pb.mul(pb.sub(1, this.Fc), this.pdf));\r\n this.b = pb.add(this.b, pb.mul(this.Fc, this.pdf));\r\n });\r\n this.$if(pb.greaterThan(this.charlieNoL, 0), function () {\r\n this.$l.sheenDistribution = this.D_Charlie(this.roughness, this.charlieNoH);\r\n this.$l.sheenVis = this.V_Ashikhmin(this.charlieNoL, this.NoV);\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this.sheenVis, this.sheenDistribution, this.charlieNoL, this.charlieVoH)\r\n );\r\n });\r\n });\r\n this.$return(\r\n pb.div(pb.vec3(pb.mul(this.a, 4), pb.mul(this.b, 4), pb.mul(this.c, 8 * Math.PI)), SAMPLE_COUNT)\r\n );\r\n });\r\n pb.main(function () {\r\n this.$outputs.color = pb.vec4(this.integrateBRDF(this.$inputs.uv.x, this.$inputs.uv.y), 1);\r\n });\r\n }\r\n });\r\n program.name = '@GGXLUT_Generation';\r\n const vertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n { buffer: device.createVertexBuffer('position_f32x2', new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])) }\r\n ]\r\n });\r\n const rs = device.createRenderStateSet();\r\n rs.useRasterizerState().setCullMode('none');\r\n rs.useDepthState().enableTest(false).enableWrite(false);\r\n const tex = device.createTexture2D('rgba8unorm', size, size, { mipmapping: false });\r\n tex.name = 'GGXLUT';\r\n const fb = device.createFrameBuffer([tex], null);\r\n device.pushDeviceStates();\r\n device.setProgram(program);\r\n device.setVertexLayout(vertexLayout);\r\n device.setRenderStates(rs);\r\n device.setFramebuffer(fb);\r\n device.draw('triangle-strip', 0, 4);\r\n device.popDeviceStates();\r\n fb.dispose();\r\n vertexLayout.dispose();\r\n program.dispose();\r\n return tex;\r\n}\r\n"],"names":["ggxLut","Map","getGGXLUT","size","lut","get","createGGXLUT","set","device","getDevice","program","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","SAMPLE_COUNT","func","int","$l","rand","float","denom","invBase","n","bits","$for","div","mod","$if","equal","$break","$return","i","N","radicalInverse_VdC","uint","compOr","sal","sar","compAnd","vec3","bitangent","NoU","normal","epsl","lessThanEqual","sub","abs","$choice","greaterThan","tangent","normalize","cross","mat3","roughness","max","sheenRoughness","invR","cos2h","NdotH","sin2h","pow","Math","PI","a2","GGXV","NoL","sqrt","NoV","GGXL","clamp","NdotL","NdotV","out","alphaRoughness","cosTheta","xi","sinTheta","phi","x","TBN","generateTBN","localSpaceDir","cos","sin","ggx","charlie","V","a","b","c","hammersley2d","ggxSample","charlieSample","importanceSample","ggxL","reflect","xyz","ggxNoL","z","ggxNoH","ggxVoH","dot","charlieL","charlieNoL","charlieNoH","charlieVoH","pdf","smithGGXCorrelated","Fc","sheenDistribution","D_Charlie","sheenVis","V_Ashikhmin","integrateBRDF","name","vertexLayout","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","Float32Array","rs","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","tex","createTexture2D","mipmapping","fb","createFrameBuffer","pushDeviceStates","setProgram","setVertexLayout","setRenderStates","setFramebuffer","draw","popDeviceStates","dispose"],"mappings":"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"}
1
+ {"version":3,"file":"ggxlut.js","sources":["../../../src/utility/textures/ggxlut.ts"],"sourcesContent":["import type { Texture2D } from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\n\r\nconst ggxLut: Map<number, Texture2D> = new Map();\r\nexport function getGGXLUT(size: number): Texture2D {\r\n let lut = ggxLut.get(size);\r\n if (!lut) {\r\n lut = createGGXLUT(size);\r\n ggxLut.set(size, lut);\r\n }\r\n return lut;\r\n}\r\nfunction createGGXLUT(size: number) {\r\n const device = getDevice();\r\n const program = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n const SAMPLE_COUNT = 1024;\r\n if (device.type === 'webgl') {\r\n pb.func('radicalInverse_VdC', [pb.int('bits')], function () {\r\n this.$l.rand = pb.float(0);\r\n this.$l.denom = pb.float(1);\r\n this.$l.invBase = pb.float(0.5);\r\n this.$l.n = this.bits;\r\n this.$for(pb.int('i'), 0, 32, function () {\r\n this.denom = pb.mul(this.denom, 2);\r\n this.rand = pb.add(this.rand, pb.div(pb.mod(pb.float(this.n), 2), this.denom));\r\n this.n = pb.div(this.n, 2);\r\n this.$if(pb.equal(this.n, 0), function () {\r\n this.$break();\r\n });\r\n });\r\n this.$return(this.rand);\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(this.i)));\r\n });\r\n } else {\r\n pb.func('radicalInverse_VdC', [pb.uint('bits')], function () {\r\n this.$l.n = this.bits;\r\n this.n = pb.compOr(pb.sal(this.n, 16), pb.sar(this.n, 16));\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x55555555), 1),\r\n pb.sar(pb.compAnd(this.n, 0xaaaaaaaa), 1)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x33333333), 2),\r\n pb.sar(pb.compAnd(this.n, 0xcccccccc), 2)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x0f0f0f0f), 4),\r\n pb.sar(pb.compAnd(this.n, 0xf0f0f0f0), 4)\r\n );\r\n this.n = pb.compOr(\r\n pb.sal(pb.compAnd(this.n, 0x00ff00ff), 8),\r\n pb.sar(pb.compAnd(this.n, 0xff00ff00), 8)\r\n );\r\n this.$return(pb.mul(pb.float(this.n), 2.3283064365386963e-10));\r\n });\r\n pb.func('hammersley2d', [pb.int('i'), pb.int('N')], function () {\r\n this.$return(\r\n pb.vec2(pb.div(pb.float(this.i), pb.float(this.N)), this.radicalInverse_VdC(pb.uint(this.i)))\r\n );\r\n });\r\n }\r\n pb.func('generateTBN', [pb.vec3('normal')], function () {\r\n this.$l.bitangent = pb.vec3(0, 1, 0);\r\n this.$l.NoU = this.normal.y;\r\n this.$l.epsl = 0.0000001;\r\n this.$if(pb.lessThanEqual(pb.sub(1, pb.abs(this.normal.y)), this.epsl), function () {\r\n this.bitangent = this.$choice(\r\n pb.greaterThan(this.normal.y, 0),\r\n pb.vec3(0, 0, 1),\r\n pb.vec3(0, 0, -1)\r\n );\r\n });\r\n this.$l.tangent = pb.normalize(pb.cross(this.bitangent, this.normal));\r\n this.bitangent = pb.cross(this.normal, this.tangent);\r\n this.$return(pb.mat3(this.tangent, this.bitangent, this.normal));\r\n });\r\n pb.func('D_Charlie', [pb.float('sheenRoughness'), pb.float('NdotH')], function () {\r\n this.$l.roughness = pb.max(this.sheenRoughness, 0.000001);\r\n this.$l.invR = pb.div(1, this.roughness);\r\n this.$l.cos2h = pb.mul(this.NdotH, this.NdotH);\r\n this.$l.sin2h = pb.sub(1, this.cos2h);\r\n this.$return(\r\n pb.div(pb.mul(pb.add(this.invR, 2), pb.pow(this.sin2h, pb.mul(this.invR, 0.5))), Math.PI * 2)\r\n );\r\n });\r\n pb.func('smithGGXCorrelated', [pb.float('NoV'), pb.float('NoL'), pb.float('roughness')], function () {\r\n this.$l.a2 = pb.mul(this.roughness, this.roughness, this.roughness, this.roughness);\r\n this.$l.GGXV = pb.mul(\r\n this.NoL,\r\n pb.sqrt(pb.add(pb.mul(this.NoV, this.NoV, pb.sub(1, this.a2)), this.a2))\r\n );\r\n this.$l.GGXL = pb.mul(\r\n this.NoV,\r\n pb.sqrt(pb.add(pb.mul(this.NoL, this.NoL, pb.sub(1, this.a2)), this.a2))\r\n );\r\n this.$return(pb.div(0.5, pb.add(this.GGXV, this.GGXL)));\r\n });\r\n pb.func('V_Ashikhmin', [pb.float('NdotL'), pb.float('NdotV')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.div(1, pb.mul(pb.sub(pb.add(this.NdotL, this.NdotV), pb.mul(this.NdotL, this.NdotV)), 4)),\r\n 0,\r\n 1\r\n )\r\n );\r\n });\r\n pb.func(\r\n 'importanceSample',\r\n [\r\n pb.vec2('xi'),\r\n pb.vec3('normal'),\r\n pb.float('roughness'),\r\n pb.vec3('ggx').out(),\r\n pb.vec3('charlie').out()\r\n ],\r\n function () {\r\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\r\n this.$l.cosTheta = pb.clamp(\r\n pb.sqrt(\r\n pb.div(\r\n pb.sub(1, this.xi.y),\r\n pb.add(1, pb.mul(pb.sub(pb.mul(this.alphaRoughness, this.alphaRoughness), 1), this.xi.y))\r\n )\r\n ),\r\n 0,\r\n 1\r\n );\r\n this.$l.sinTheta = pb.sqrt(pb.sub(1, pb.mul(this.cosTheta, this.cosTheta)));\r\n this.$l.phi = pb.mul(this.xi.x, Math.PI * 2);\r\n this.$l.TBN = this.generateTBN(this.normal);\r\n this.$l.localSpaceDir = pb.normalize(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.mul(this.sinTheta, pb.sin(this.phi)),\r\n this.cosTheta\r\n )\r\n );\r\n this.ggx = pb.mul(this.TBN, this.localSpaceDir);\r\n this.sinTheta = pb.pow(\r\n this.xi.y,\r\n pb.div(this.alphaRoughness, pb.add(pb.mul(this.alphaRoughness, 2), 1))\r\n );\r\n this.cosTheta = pb.sqrt(pb.sub(1, pb.mul(this.sinTheta, this.sinTheta)));\r\n this.localSpaceDir = pb.normalize(\r\n pb.vec3(\r\n pb.mul(this.sinTheta, pb.cos(this.phi)),\r\n pb.mul(this.sinTheta, pb.sin(this.phi)),\r\n this.cosTheta\r\n )\r\n );\r\n this.charlie = pb.mul(this.TBN, this.localSpaceDir);\r\n }\r\n );\r\n pb.func('integrateBRDF', [pb.float('NoV'), pb.float('roughness')], function () {\r\n this.$l.V = pb.vec3(pb.sub(1, pb.mul(this.NoV, this.NoV)), 0, this.NoV);\r\n this.$l.a = pb.float(0);\r\n this.$l.b = pb.float(0);\r\n this.$l.c = pb.float(0);\r\n this.$l.n = pb.vec3(0, 0, 1);\r\n this.$for(pb.int('i'), 0, SAMPLE_COUNT, function () {\r\n this.$l.xi = this.hammersley2d(this.i, SAMPLE_COUNT);\r\n this.$l.ggxSample = pb.vec3();\r\n this.$l.charlieSample = pb.vec3();\r\n this.importanceSample(this.xi, this.n, this.roughness, this.ggxSample, this.charlieSample);\r\n this.$l.ggxL = pb.normalize(pb.reflect(pb.neg(this.V), this.ggxSample.xyz));\r\n this.$l.ggxNoL = pb.clamp(this.ggxL.z, 0, 1);\r\n this.$l.ggxNoH = pb.clamp(this.ggxSample.z, 0, 1);\r\n this.$l.ggxVoH = pb.clamp(pb.dot(this.V, this.ggxSample.xyz), 0, 1);\r\n this.$l.charlieL = pb.normalize(pb.reflect(pb.neg(this.V), this.charlieSample.xyz));\r\n this.$l.charlieNoL = pb.clamp(this.charlieL.z, 0, 1);\r\n this.$l.charlieNoH = pb.clamp(this.charlieSample.z, 0, 1);\r\n this.$l.charlieVoH = pb.clamp(pb.dot(this.V, this.charlieSample.xyz), 0, 1);\r\n this.$if(pb.greaterThan(this.ggxNoL, 0), function () {\r\n this.$l.pdf = pb.div(\r\n pb.mul(\r\n this.smithGGXCorrelated(this.NoV, this.ggxNoL, this.roughness),\r\n this.ggxVoH,\r\n this.ggxNoL\r\n ),\r\n this.ggxNoH\r\n );\r\n this.$l.Fc = pb.pow(pb.sub(1, this.ggxVoH), 5);\r\n this.a = pb.add(this.a, pb.mul(pb.sub(1, this.Fc), this.pdf));\r\n this.b = pb.add(this.b, pb.mul(this.Fc, this.pdf));\r\n });\r\n this.$if(pb.greaterThan(this.charlieNoL, 0), function () {\r\n this.$l.sheenDistribution = this.D_Charlie(this.roughness, this.charlieNoH);\r\n this.$l.sheenVis = this.V_Ashikhmin(this.charlieNoL, this.NoV);\r\n this.c = pb.add(\r\n this.c,\r\n pb.mul(this.sheenVis, this.sheenDistribution, this.charlieNoL, this.charlieVoH)\r\n );\r\n });\r\n });\r\n this.$return(\r\n pb.div(pb.vec3(pb.mul(this.a, 4), pb.mul(this.b, 4), pb.mul(this.c, 8 * Math.PI)), SAMPLE_COUNT)\r\n );\r\n });\r\n pb.main(function () {\r\n this.$outputs.color = pb.vec4(this.integrateBRDF(this.$inputs.uv.x, this.$inputs.uv.y), 1);\r\n });\r\n }\r\n })!;\r\n program.name = '@GGXLUT_Generation';\r\n const vertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n { buffer: device.createVertexBuffer('position_f32x2', new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]))! }\r\n ]\r\n });\r\n const rs = device.createRenderStateSet();\r\n rs.useRasterizerState().setCullMode('none');\r\n rs.useDepthState().enableTest(false).enableWrite(false);\r\n const tex = device.createTexture2D('rgba8unorm', size, size, { mipmapping: false })!;\r\n tex.name = 'GGXLUT';\r\n const fb = device.createFrameBuffer([tex], null);\r\n device.pushDeviceStates();\r\n device.setProgram(program);\r\n device.setVertexLayout(vertexLayout);\r\n device.setRenderStates(rs);\r\n device.setFramebuffer(fb);\r\n device.draw('triangle-strip', 0, 4);\r\n device.popDeviceStates();\r\n fb.dispose();\r\n vertexLayout.dispose();\r\n program.dispose();\r\n return tex;\r\n}\r\n"],"names":["ggxLut","Map","getGGXLUT","size","lut","get","createGGXLUT","set","device","getDevice","program","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","SAMPLE_COUNT","func","int","$l","rand","float","denom","invBase","n","bits","$for","div","mod","$if","equal","$break","$return","i","N","radicalInverse_VdC","uint","compOr","sal","sar","compAnd","vec3","bitangent","NoU","normal","epsl","lessThanEqual","sub","abs","$choice","greaterThan","tangent","normalize","cross","mat3","roughness","max","sheenRoughness","invR","cos2h","NdotH","sin2h","pow","Math","PI","a2","GGXV","NoL","sqrt","NoV","GGXL","clamp","NdotL","NdotV","out","alphaRoughness","cosTheta","xi","sinTheta","phi","x","TBN","generateTBN","localSpaceDir","cos","sin","ggx","charlie","V","a","b","c","hammersley2d","ggxSample","charlieSample","importanceSample","ggxL","reflect","xyz","ggxNoL","z","ggxNoH","ggxVoH","dot","charlieL","charlieNoL","charlieNoH","charlieVoH","pdf","smithGGXCorrelated","Fc","sheenDistribution","D_Charlie","sheenVis","V_Ashikhmin","integrateBRDF","name","vertexLayout","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","Float32Array","rs","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","tex","createTexture2D","mipmapping","fb","createFrameBuffer","pushDeviceStates","setProgram","setVertexLayout","setRenderStates","setFramebuffer","draw","popDeviceStates","dispose"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gradientnoise.js","sources":["../../../src/utility/textures/gradientnoise.ts"],"sourcesContent":["import type { AbstractDevice, BindGroup, GPUProgram } from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../../render/fullscreenquad';\r\nimport { perlinNoise3D } from '../../shaders';\r\n\r\nlet gradientNoiseProgram: GPUProgram = null;\r\nlet gradientNoiseBindGroup: BindGroup = null;\r\n\r\n/** @internal */\r\nexport function createGradientNoiseTexture(\r\n device: AbstractDevice,\r\n size: number,\r\n uvscale: number,\r\n mono = false,\r\n seed = 0\r\n) {\r\n if (!gradientNoiseProgram) {\r\n gradientNoiseProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.uvScale = pb.float().uniform(0);\r\n this.seed = pb.float().uniform(0);\r\n this.mono = pb.int().uniform(0);\r\n pb.main(function () {\r\n this.$l.p = pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), this.seed);\r\n this.$l.r = perlinNoise3D(this, this.p);\r\n //this.$l.r = gradient(this, this.p.xy, this.p.z).x;\r\n this.$if(pb.notEqual(this.mono, 0), function () {\r\n this.$outputs.color = pb.vec4(pb.vec3(this.r), 1);\r\n }).$else(function () {\r\n this.$l.g = perlinNoise3D(\r\n this,\r\n pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), pb.add(this.seed, 1.9))\r\n );\r\n this.$l.b = perlinNoise3D(\r\n this,\r\n pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), pb.add(this.seed, 2.3))\r\n );\r\n this.$outputs.color = pb.vec4(this.r, this.g, this.b, 1);\r\n });\r\n });\r\n }\r\n });\r\n gradientNoiseProgram.name = '@GradientNoise';\r\n gradientNoiseBindGroup = device.createBindGroup(gradientNoiseProgram.bindGroupLayouts[0]);\r\n }\r\n const tex = device.createTexture2D('rgba8unorm', size, size);\r\n const fb = device.createFrameBuffer([tex], null);\r\n gradientNoiseBindGroup.setValue('uvScale', uvscale);\r\n gradientNoiseBindGroup.setValue('seed', seed);\r\n gradientNoiseBindGroup.setValue('mono', mono ? 1 : 0);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(fb);\r\n device.setProgram(gradientNoiseProgram);\r\n device.setBindGroup(0, gradientNoiseBindGroup);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n fb.dispose();\r\n return tex;\r\n}\r\n"],"names":["gradientNoiseProgram","gradientNoiseBindGroup","createGradientNoiseTexture","device","size","uvscale","mono","seed","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","uvScale","float","uniform","int","$l","p","vec3","r","perlinNoise3D","$if","notEqual","$else","g","b","name","createBindGroup","bindGroupLayouts","tex","createTexture2D","fb","createFrameBuffer","setValue","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","dispose"],"mappings":"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"}
1
+ {"version":3,"file":"gradientnoise.js","sources":["../../../src/utility/textures/gradientnoise.ts"],"sourcesContent":["import type { AbstractDevice, BindGroup, GPUProgram } from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../../render/fullscreenquad';\r\nimport { perlinNoise3D } from '../../shaders';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nlet gradientNoiseProgram: Nullable<GPUProgram> = null;\r\nlet gradientNoiseBindGroup: Nullable<BindGroup> = null;\r\n\r\n/** @internal */\r\nexport function createGradientNoiseTexture(\r\n device: AbstractDevice,\r\n size: number,\r\n uvscale: number,\r\n mono = false,\r\n seed = 0\r\n) {\r\n if (!gradientNoiseProgram) {\r\n gradientNoiseProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.uvScale = pb.float().uniform(0);\r\n this.seed = pb.float().uniform(0);\r\n this.mono = pb.int().uniform(0);\r\n pb.main(function () {\r\n this.$l.p = pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), this.seed);\r\n this.$l.r = perlinNoise3D(this, this.p);\r\n //this.$l.r = gradient(this, this.p.xy, this.p.z).x;\r\n this.$if(pb.notEqual(this.mono, 0), function () {\r\n this.$outputs.color = pb.vec4(pb.vec3(this.r), 1);\r\n }).$else(function () {\r\n this.$l.g = perlinNoise3D(\r\n this,\r\n pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), pb.add(this.seed, 1.9))\r\n );\r\n this.$l.b = perlinNoise3D(\r\n this,\r\n pb.vec3(pb.mul(this.$inputs.uv, this.uvScale), pb.add(this.seed, 2.3))\r\n );\r\n this.$outputs.color = pb.vec4(this.r, this.g, this.b, 1);\r\n });\r\n });\r\n }\r\n })!;\r\n gradientNoiseProgram.name = '@GradientNoise';\r\n gradientNoiseBindGroup = device.createBindGroup(gradientNoiseProgram.bindGroupLayouts[0]);\r\n }\r\n const tex = device.createTexture2D('rgba8unorm', size, size)!;\r\n const fb = device.createFrameBuffer([tex], null);\r\n gradientNoiseBindGroup!.setValue('uvScale', uvscale);\r\n gradientNoiseBindGroup!.setValue('seed', seed);\r\n gradientNoiseBindGroup!.setValue('mono', mono ? 1 : 0);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(fb);\r\n device.setProgram(gradientNoiseProgram);\r\n device.setBindGroup(0, gradientNoiseBindGroup!);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n fb.dispose();\r\n return tex;\r\n}\r\n"],"names":["gradientNoiseProgram","gradientNoiseBindGroup","createGradientNoiseTexture","device","size","uvscale","mono","seed","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","uvScale","float","uniform","int","$l","p","vec3","r","perlinNoise3D","$if","notEqual","$else","g","b","name","createBindGroup","bindGroupLayouts","tex","createTexture2D","fb","createFrameBuffer","setValue","pushDeviceStates","setFramebuffer","setProgram","setBindGroup","drawFullscreenQuad","popDeviceStates","dispose"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"randomnoise.js","sources":["../../../src/utility/textures/randomnoise.ts"],"sourcesContent":["import type { AbstractDevice, GPUProgram } from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../../render/fullscreenquad';\r\n\r\nlet randomNoiseProgram: GPUProgram = null;\r\n\r\n/** @internal */\r\nexport function createRandomNoiseTexture(device: AbstractDevice, size: number) {\r\n if (!randomNoiseProgram) {\r\n randomNoiseProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.noise = pb.fract(\r\n pb.mul(pb.sin(pb.dot(this.$inputs.uv, pb.vec2(12.9898, 78.233))), 43758.5453)\r\n );\r\n this.$outputs.color = pb.vec4(pb.vec3(this.noise), 1);\r\n });\r\n }\r\n });\r\n randomNoiseProgram.name = '@RandomNoise';\r\n }\r\n const tex = device.createTexture2D('rgba8unorm', size, size);\r\n const fb = device.createFrameBuffer([tex], null);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(fb);\r\n device.setProgram(randomNoiseProgram);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n fb.dispose();\r\n return tex;\r\n}\r\n"],"names":["randomNoiseProgram","createRandomNoiseTexture","device","size","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","$l","noise","fract","sin","dot","vec3","name","tex","createTexture2D","fb","createFrameBuffer","pushDeviceStates","setFramebuffer","setProgram","drawFullscreenQuad","popDeviceStates","dispose"],"mappings":";;AAGA,IAAIA,kBAAiC,GAAA,IAAA;AAErC,iBACO,SAASC,wBAAyBC,CAAAA,MAAsB,EAAEC,IAAY,EAAA;AAC3E,IAAA,IAAI,CAACH,kBAAoB,EAAA;QACvBA,kBAAqBE,GAAAA,MAAAA,CAAOE,kBAAkB,CAAC;AAC7CC,YAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;gBACP,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGF,EAAGG,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,gBAAA,IAAI,CAACC,QAAQ,CAACC,EAAE,GAAGN,GAAGG,IAAI,EAAA;AAC1BH,gBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;AACN,oBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGT,EAAGU,CAAAA,IAAI,CAAC,IAAI,CAACT,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;oBACvD,IAAI,CAACG,QAAQ,CAACC,EAAE,GAAGN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAACX,OAAO,CAACC,GAAG,CAACW,EAAE,EAAE,GAAA,CAAA,EAAMb,EAAGG,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;oBACpE,IAAIP,MAAAA,CAAOkB,IAAI,KAAK,QAAU,EAAA;AAC5B,wBAAA,IAAI,CAACN,SAAS,CAACC,QAAQ,CAACM,CAAC,GAAGf,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACR,SAAS,CAACC,QAAQ,CAACM,CAAC,CAAA;AAC9D;AACF,iBAAA,CAAA;AACF,aAAA;AACAE,YAAAA,QAAAA,CAAAA,CAASjB,EAAE,EAAA;AACT,gBAAA,IAAI,CAACK,QAAQ,CAACa,KAAK,GAAGlB,GAAGU,IAAI,EAAA;AAC7BV,gBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;oBACN,IAAI,CAACY,EAAE,CAACC,KAAK,GAAGpB,EAAGqB,CAAAA,KAAK,CACtBrB,EAAAA,CAAGY,GAAG,CAACZ,EAAGsB,CAAAA,GAAG,CAACtB,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACtB,OAAO,CAACK,EAAE,EAAEN,EAAGG,CAAAA,IAAI,CAAC,OAAA,EAAS,MAAW,CAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA;AAEpE,oBAAA,IAAI,CAACE,QAAQ,CAACa,KAAK,GAAGlB,EAAGU,CAAAA,IAAI,CAACV,EAAAA,CAAGwB,IAAI,CAAC,IAAI,CAACJ,KAAK,CAAG,EAAA,CAAA,CAAA;AACrD,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;AACA1B,QAAAA,kBAAAA,CAAmB+B,IAAI,GAAG,cAAA;AAC5B;AACA,IAAA,MAAMC,GAAM9B,GAAAA,MAAAA,CAAO+B,eAAe,CAAC,cAAc9B,IAAMA,EAAAA,IAAAA,CAAAA;IACvD,MAAM+B,EAAAA,GAAKhC,MAAOiC,CAAAA,iBAAiB,CAAC;AAACH,QAAAA;KAAI,EAAE,IAAA,CAAA;AAC3C9B,IAAAA,MAAAA,CAAOkC,gBAAgB,EAAA;AACvBlC,IAAAA,MAAAA,CAAOmC,cAAc,CAACH,EAAAA,CAAAA;AACtBhC,IAAAA,MAAAA,CAAOoC,UAAU,CAACtC,kBAAAA,CAAAA;AAClBuC,IAAAA,kBAAAA,EAAAA;AACArC,IAAAA,MAAAA,CAAOsC,eAAe,EAAA;AACtBN,IAAAA,EAAAA,CAAGO,OAAO,EAAA;IACV,OAAOT,GAAAA;AACT;;;;"}
1
+ {"version":3,"file":"randomnoise.js","sources":["../../../src/utility/textures/randomnoise.ts"],"sourcesContent":["import type { AbstractDevice, GPUProgram } from '@zephyr3d/device';\r\nimport { drawFullscreenQuad } from '../../render/fullscreenquad';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nlet randomNoiseProgram: Nullable<GPUProgram> = null;\r\n\r\n/** @internal */\r\nexport function createRandomNoiseTexture(device: AbstractDevice, size: number) {\r\n if (!randomNoiseProgram) {\r\n randomNoiseProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.noise = pb.fract(\r\n pb.mul(pb.sin(pb.dot(this.$inputs.uv, pb.vec2(12.9898, 78.233))), 43758.5453)\r\n );\r\n this.$outputs.color = pb.vec4(pb.vec3(this.noise), 1);\r\n });\r\n }\r\n })!;\r\n randomNoiseProgram.name = '@RandomNoise';\r\n }\r\n const tex = device.createTexture2D('rgba8unorm', size, size)!;\r\n const fb = device.createFrameBuffer([tex], null);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(fb);\r\n device.setProgram(randomNoiseProgram);\r\n drawFullscreenQuad();\r\n device.popDeviceStates();\r\n fb.dispose();\r\n return tex;\r\n}\r\n"],"names":["randomNoiseProgram","createRandomNoiseTexture","device","size","buildRenderProgram","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","type","y","neg","fragment","color","$l","noise","fract","sin","dot","vec3","name","tex","createTexture2D","fb","createFrameBuffer","pushDeviceStates","setFramebuffer","setProgram","drawFullscreenQuad","popDeviceStates","dispose"],"mappings":";;AAIA,IAAIA,kBAA2C,GAAA,IAAA;AAE/C,iBACO,SAASC,wBAAyBC,CAAAA,MAAsB,EAAEC,IAAY,EAAA;AAC3E,IAAA,IAAI,CAACH,kBAAoB,EAAA;QACvBA,kBAAqBE,GAAAA,MAAAA,CAAOE,kBAAkB,CAAC;AAC7CC,YAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;gBACP,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGF,EAAGG,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,gBAAA,IAAI,CAACC,QAAQ,CAACC,EAAE,GAAGN,GAAGG,IAAI,EAAA;AAC1BH,gBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;AACN,oBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGT,EAAGU,CAAAA,IAAI,CAAC,IAAI,CAACT,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;oBACvD,IAAI,CAACG,QAAQ,CAACC,EAAE,GAAGN,EAAGW,CAAAA,GAAG,CAACX,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAACX,OAAO,CAACC,GAAG,CAACW,EAAE,EAAE,GAAA,CAAA,EAAMb,EAAGG,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;oBACpE,IAAIP,MAAAA,CAAOkB,IAAI,KAAK,QAAU,EAAA;AAC5B,wBAAA,IAAI,CAACN,SAAS,CAACC,QAAQ,CAACM,CAAC,GAAGf,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACR,SAAS,CAACC,QAAQ,CAACM,CAAC,CAAA;AAC9D;AACF,iBAAA,CAAA;AACF,aAAA;AACAE,YAAAA,QAAAA,CAAAA,CAASjB,EAAE,EAAA;AACT,gBAAA,IAAI,CAACK,QAAQ,CAACa,KAAK,GAAGlB,GAAGU,IAAI,EAAA;AAC7BV,gBAAAA,EAAAA,CAAGO,IAAI,CAAC,WAAA;oBACN,IAAI,CAACY,EAAE,CAACC,KAAK,GAAGpB,EAAGqB,CAAAA,KAAK,CACtBrB,EAAAA,CAAGY,GAAG,CAACZ,EAAGsB,CAAAA,GAAG,CAACtB,EAAAA,CAAGuB,GAAG,CAAC,IAAI,CAACtB,OAAO,CAACK,EAAE,EAAEN,EAAGG,CAAAA,IAAI,CAAC,OAAA,EAAS,MAAW,CAAA,CAAA,CAAA,EAAA,UAAA,CAAA,CAAA;AAEpE,oBAAA,IAAI,CAACE,QAAQ,CAACa,KAAK,GAAGlB,EAAGU,CAAAA,IAAI,CAACV,EAAAA,CAAGwB,IAAI,CAAC,IAAI,CAACJ,KAAK,CAAG,EAAA,CAAA,CAAA;AACrD,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;AACA1B,QAAAA,kBAAAA,CAAmB+B,IAAI,GAAG,cAAA;AAC5B;AACA,IAAA,MAAMC,GAAM9B,GAAAA,MAAAA,CAAO+B,eAAe,CAAC,cAAc9B,IAAMA,EAAAA,IAAAA,CAAAA;IACvD,MAAM+B,EAAAA,GAAKhC,MAAOiC,CAAAA,iBAAiB,CAAC;AAACH,QAAAA;KAAI,EAAE,IAAA,CAAA;AAC3C9B,IAAAA,MAAAA,CAAOkC,gBAAgB,EAAA;AACvBlC,IAAAA,MAAAA,CAAOmC,cAAc,CAACH,EAAAA,CAAAA;AACtBhC,IAAAA,MAAAA,CAAOoC,UAAU,CAACtC,kBAAAA,CAAAA;AAClBuC,IAAAA,kBAAAA,EAAAA;AACArC,IAAAA,MAAAA,CAAOsC,eAAe,EAAA;AACtBN,IAAAA,EAAAA,CAAGO,OAAO,EAAA;IACV,OAAOT,GAAAA;AACT;;;;"}
package/dist/values.js CHANGED
@@ -53,20 +53,20 @@ import { Vector3 } from '@zephyr3d/base';
53
53
  * @public
54
54
  */ const QUEUE_TRANSPARENT = 2;
55
55
  // Morph target attributes
56
- /** @internal */ const MORPH_TARGET_POSITION = 0;
57
- /** @internal */ const MORPH_TARGET_NORMAL = 1;
58
- /** @internal */ const MORPH_TARGET_TANGENT = 2;
59
- /** @internal */ const MORPH_TARGET_COLOR = 3;
60
- /** @internal */ const MORPH_TARGET_TEX0 = 4;
61
- /** @internal */ const MORPH_TARGET_TEX1 = 5;
62
- /** @internal */ const MORPH_TARGET_TEX2 = 6;
63
- /** @internal */ const MORPH_TARGET_TEX3 = 7;
64
- /** @internal */ const MAX_MORPH_ATTRIBUTES = 8;
65
- /** @internal */ const MAX_MORPH_TARGETS = 256;
66
- /** @internal */ const MORPH_WEIGHTS_VECTOR_COUNT = MAX_MORPH_TARGETS + 3 >> 2;
67
- /** @internal */ const MORPH_ATTRIBUTE_VECTOR_COUNT = MAX_MORPH_ATTRIBUTES + 3 >> 2;
68
- /** @internal */ const MAX_TERRAIN_MIPMAP_LEVELS = 64;
69
- /** @internal */ const MAX_GERSTNER_WAVE_COUNT = 16;
56
+ /** @public */ const MORPH_TARGET_POSITION = 0;
57
+ /** @public */ const MORPH_TARGET_NORMAL = 1;
58
+ /** @public */ const MORPH_TARGET_TANGENT = 2;
59
+ /** @public */ const MORPH_TARGET_COLOR = 3;
60
+ /** @public */ const MORPH_TARGET_TEX0 = 4;
61
+ /** @public */ const MORPH_TARGET_TEX1 = 5;
62
+ /** @public */ const MORPH_TARGET_TEX2 = 6;
63
+ /** @public */ const MORPH_TARGET_TEX3 = 7;
64
+ /** @public */ const MAX_MORPH_ATTRIBUTES = 8;
65
+ /** @public */ const MAX_MORPH_TARGETS = 256;
66
+ /** @public */ const MORPH_WEIGHTS_VECTOR_COUNT = MAX_MORPH_TARGETS + 3 >> 2;
67
+ /** @public */ const MORPH_ATTRIBUTE_VECTOR_COUNT = MAX_MORPH_ATTRIBUTES + 3 >> 2;
68
+ /** @public */ const MAX_TERRAIN_MIPMAP_LEVELS = 64;
69
+ /** @public */ const MAX_GERSTNER_WAVE_COUNT = 16;
70
70
  /**
71
71
  * Material varying flags
72
72
  * @public