@zephyr3d/scene 0.8.0 → 0.8.2

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 (389) hide show
  1. package/dist/animation/animationset.js +220 -1
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/ik/ccd_solver.js +3 -4
  4. package/dist/animation/ik/ccd_solver.js.map +1 -1
  5. package/dist/animation/ik/fabrik_solver.js +3 -4
  6. package/dist/animation/ik/fabrik_solver.js.map +1 -1
  7. package/dist/animation/ik/ik_pole_constraint.js +7 -2
  8. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  9. package/dist/animation/ik/ik_utils.js +0 -79
  10. package/dist/animation/ik/ik_utils.js.map +1 -1
  11. package/dist/animation/ik/two_bone_ik_solver.js +3 -4
  12. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  13. package/dist/animation/skeleton.js +157 -125
  14. package/dist/animation/skeleton.js.map +1 -1
  15. package/dist/animation/spring/spring_bone.js +240 -0
  16. package/dist/animation/spring/spring_bone.js.map +1 -0
  17. package/dist/animation/spring/spring_bone_collider.js +198 -0
  18. package/dist/animation/spring/spring_bone_collider.js.map +1 -0
  19. package/dist/animation/spring/spring_bone_constraint.js +170 -0
  20. package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
  21. package/dist/animation/spring/spring_bone_system.js +328 -0
  22. package/dist/animation/spring/spring_bone_system.js.map +1 -0
  23. package/dist/asset/model.js +2 -2
  24. package/dist/index.d.ts +17 -0
  25. package/dist/material/mixins/pbr/common.js +20 -17
  26. package/dist/material/mixins/pbr/common.js.map +1 -1
  27. package/dist/render/gpu_picking.js +100 -0
  28. package/dist/render/gpu_picking.js.map +1 -0
  29. package/dist/render/rendergraph/device_pool_allocator.js +41 -0
  30. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
  31. package/dist/render/rendergraph/executor.js +146 -0
  32. package/dist/render/rendergraph/executor.js.map +1 -0
  33. package/dist/render/rendergraph/forward_plus_builder.js +414 -0
  34. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
  35. package/dist/render/rendergraph/rendergraph.js +306 -0
  36. package/dist/render/rendergraph/rendergraph.js.map +1 -0
  37. package/dist/render/rendergraph/types.js +57 -0
  38. package/dist/render/rendergraph/types.js.map +1 -0
  39. package/dist/render/sky_motion_vector.js +85 -0
  40. package/dist/render/sky_motion_vector.js.map +1 -0
  41. package/dist/utility/serialization/scene/animation.js +3 -3
  42. package/dist/utility/serialization/scene/node.js +1 -1
  43. package/package.json +2 -2
  44. package/dist/animation/ik/ik_chain_builder.js +0 -68
  45. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  46. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  47. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  48. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  49. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  50. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  51. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  52. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  53. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  54. package/dist/src/animation/animation.js +0 -127
  55. package/dist/src/animation/animation.js.map +0 -1
  56. package/dist/src/animation/animationset.js +0 -255
  57. package/dist/src/animation/animationset.js.map +0 -1
  58. package/dist/src/animation/animationtrack.js +0 -34
  59. package/dist/src/animation/animationtrack.js.map +0 -1
  60. package/dist/src/animation/eulerrotationtrack.js +0 -52
  61. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  62. package/dist/src/animation/morphtarget.js +0 -93
  63. package/dist/src/animation/morphtarget.js.map +0 -1
  64. package/dist/src/animation/morphtrack.js +0 -70
  65. package/dist/src/animation/morphtrack.js.map +0 -1
  66. package/dist/src/animation/proptrack.js +0 -161
  67. package/dist/src/animation/proptrack.js.map +0 -1
  68. package/dist/src/animation/rotationtrack.js +0 -51
  69. package/dist/src/animation/rotationtrack.js.map +0 -1
  70. package/dist/src/animation/scaletrack.js +0 -50
  71. package/dist/src/animation/scaletrack.js.map +0 -1
  72. package/dist/src/animation/skeleton.js +0 -204
  73. package/dist/src/animation/skeleton.js.map +0 -1
  74. package/dist/src/animation/translationtrack.js +0 -50
  75. package/dist/src/animation/translationtrack.js.map +0 -1
  76. package/dist/src/app/app.js +0 -129
  77. package/dist/src/app/app.js.map +0 -1
  78. package/dist/src/app/inputmgr.js +0 -267
  79. package/dist/src/app/inputmgr.js.map +0 -1
  80. package/dist/src/asset/assetmanager.js +0 -404
  81. package/dist/src/asset/assetmanager.js.map +0 -1
  82. package/dist/src/asset/builtin.js +0 -337
  83. package/dist/src/asset/builtin.js.map +0 -1
  84. package/dist/src/asset/loaders/dds/dds.js +0 -470
  85. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  86. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  87. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  88. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  89. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  90. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  91. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  92. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  93. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  94. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  95. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  96. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  97. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  98. package/dist/src/asset/loaders/loader.js +0 -45
  99. package/dist/src/asset/loaders/loader.js.map +0 -1
  100. package/dist/src/asset/model.js +0 -414
  101. package/dist/src/asset/model.js.map +0 -1
  102. package/dist/src/blitter/bilateralblur.js +0 -221
  103. package/dist/src/blitter/bilateralblur.js.map +0 -1
  104. package/dist/src/blitter/blitter.js +0 -390
  105. package/dist/src/blitter/blitter.js.map +0 -1
  106. package/dist/src/blitter/box.js +0 -118
  107. package/dist/src/blitter/box.js.map +0 -1
  108. package/dist/src/blitter/copy.js +0 -22
  109. package/dist/src/blitter/copy.js.map +0 -1
  110. package/dist/src/blitter/gaussianblur.js +0 -228
  111. package/dist/src/blitter/gaussianblur.js.map +0 -1
  112. package/dist/src/camera/base.js +0 -92
  113. package/dist/src/camera/base.js.map +0 -1
  114. package/dist/src/camera/camera.js +0 -1005
  115. package/dist/src/camera/camera.js.map +0 -1
  116. package/dist/src/camera/fps.js +0 -238
  117. package/dist/src/camera/fps.js.map +0 -1
  118. package/dist/src/camera/orbit.js +0 -245
  119. package/dist/src/camera/orbit.js.map +0 -1
  120. package/dist/src/camera/orthocamera.js +0 -167
  121. package/dist/src/camera/orthocamera.js.map +0 -1
  122. package/dist/src/camera/perspectivecamera.js +0 -141
  123. package/dist/src/camera/perspectivecamera.js.map +0 -1
  124. package/dist/src/index.js +0 -120
  125. package/dist/src/index.js.map +0 -1
  126. package/dist/src/material/blinn.js +0 -81
  127. package/dist/src/material/blinn.js.map +0 -1
  128. package/dist/src/material/grassmaterial.js +0 -113
  129. package/dist/src/material/grassmaterial.js.map +0 -1
  130. package/dist/src/material/lambert.js +0 -92
  131. package/dist/src/material/lambert.js.map +0 -1
  132. package/dist/src/material/material.js +0 -301
  133. package/dist/src/material/material.js.map +0 -1
  134. package/dist/src/material/meshmaterial.js +0 -704
  135. package/dist/src/material/meshmaterial.js.map +0 -1
  136. package/dist/src/material/mixins/albedocolor.js +0 -76
  137. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  138. package/dist/src/material/mixins/foliage.js +0 -47
  139. package/dist/src/material/mixins/foliage.js.map +0 -1
  140. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  141. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  142. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  143. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  144. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  145. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  146. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  147. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  148. package/dist/src/material/mixins/lit.js +0 -476
  149. package/dist/src/material/mixins/lit.js.map +0 -1
  150. package/dist/src/material/mixins/pbr/common.js +0 -918
  151. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  152. package/dist/src/material/mixins/texture.js +0 -172
  153. package/dist/src/material/mixins/texture.js.map +0 -1
  154. package/dist/src/material/mixins/vertexcolor.js +0 -56
  155. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  156. package/dist/src/material/particle.js +0 -178
  157. package/dist/src/material/particle.js.map +0 -1
  158. package/dist/src/material/pbrmr.js +0 -97
  159. package/dist/src/material/pbrmr.js.map +0 -1
  160. package/dist/src/material/pbrsg.js +0 -97
  161. package/dist/src/material/pbrsg.js.map +0 -1
  162. package/dist/src/material/shader/helper.js +0 -1209
  163. package/dist/src/material/shader/helper.js.map +0 -1
  164. package/dist/src/material/terrain-cm.js +0 -606
  165. package/dist/src/material/terrain-cm.js.map +0 -1
  166. package/dist/src/material/terrainmaterial.js +0 -375
  167. package/dist/src/material/terrainmaterial.js.map +0 -1
  168. package/dist/src/material/unlit.js +0 -41
  169. package/dist/src/material/unlit.js.map +0 -1
  170. package/dist/src/material/water.js +0 -417
  171. package/dist/src/material/water.js.map +0 -1
  172. package/dist/src/posteffect/bloom.js +0 -361
  173. package/dist/src/posteffect/bloom.js.map +0 -1
  174. package/dist/src/posteffect/compositor.js +0 -226
  175. package/dist/src/posteffect/compositor.js.map +0 -1
  176. package/dist/src/posteffect/fxaa.js +0 -273
  177. package/dist/src/posteffect/fxaa.js.map +0 -1
  178. package/dist/src/posteffect/grayscale.js +0 -69
  179. package/dist/src/posteffect/grayscale.js.map +0 -1
  180. package/dist/src/posteffect/motionblur.js +0 -96
  181. package/dist/src/posteffect/motionblur.js.map +0 -1
  182. package/dist/src/posteffect/posteffect.js +0 -126
  183. package/dist/src/posteffect/posteffect.js.map +0 -1
  184. package/dist/src/posteffect/sao.js +0 -324
  185. package/dist/src/posteffect/sao.js.map +0 -1
  186. package/dist/src/posteffect/ssr.js +0 -489
  187. package/dist/src/posteffect/ssr.js.map +0 -1
  188. package/dist/src/posteffect/taa.js +0 -172
  189. package/dist/src/posteffect/taa.js.map +0 -1
  190. package/dist/src/posteffect/tonemap.js +0 -94
  191. package/dist/src/posteffect/tonemap.js.map +0 -1
  192. package/dist/src/render/abuffer_oit.js +0 -361
  193. package/dist/src/render/abuffer_oit.js.map +0 -1
  194. package/dist/src/render/clipmap.js +0 -851
  195. package/dist/src/render/clipmap.js.map +0 -1
  196. package/dist/src/render/cluster_light.js +0 -333
  197. package/dist/src/render/cluster_light.js.map +0 -1
  198. package/dist/src/render/cull_visitor.js +0 -187
  199. package/dist/src/render/cull_visitor.js.map +0 -1
  200. package/dist/src/render/depthpass.js +0 -68
  201. package/dist/src/render/depthpass.js.map +0 -1
  202. package/dist/src/render/drawable_mixin.js +0 -227
  203. package/dist/src/render/drawable_mixin.js.map +0 -1
  204. package/dist/src/render/envlight.js +0 -463
  205. package/dist/src/render/envlight.js.map +0 -1
  206. package/dist/src/render/fbm_wavegenerator.js +0 -251
  207. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  208. package/dist/src/render/fft_wavegenerator.js +0 -1006
  209. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  210. package/dist/src/render/fullscreenquad.js +0 -38
  211. package/dist/src/render/fullscreenquad.js.map +0 -1
  212. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  213. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  214. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  215. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  216. package/dist/src/render/hzb.js +0 -273
  217. package/dist/src/render/hzb.js.map +0 -1
  218. package/dist/src/render/lightpass.js +0 -172
  219. package/dist/src/render/lightpass.js.map +0 -1
  220. package/dist/src/render/objectcolorpass.js +0 -51
  221. package/dist/src/render/objectcolorpass.js.map +0 -1
  222. package/dist/src/render/primitive.js +0 -364
  223. package/dist/src/render/primitive.js.map +0 -1
  224. package/dist/src/render/render_queue.js +0 -467
  225. package/dist/src/render/render_queue.js.map +0 -1
  226. package/dist/src/render/renderbundle_wrapper.js +0 -152
  227. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  228. package/dist/src/render/renderer.js +0 -455
  229. package/dist/src/render/renderer.js.map +0 -1
  230. package/dist/src/render/renderpass.js +0 -200
  231. package/dist/src/render/renderpass.js.map +0 -1
  232. package/dist/src/render/shadowmap_pass.js +0 -56
  233. package/dist/src/render/shadowmap_pass.js.map +0 -1
  234. package/dist/src/render/sky.js +0 -1103
  235. package/dist/src/render/sky.js.map +0 -1
  236. package/dist/src/render/weightedblended_oit.js +0 -168
  237. package/dist/src/render/weightedblended_oit.js.map +0 -1
  238. package/dist/src/scene/batchgroup.js +0 -162
  239. package/dist/src/scene/batchgroup.js.map +0 -1
  240. package/dist/src/scene/environment.js +0 -209
  241. package/dist/src/scene/environment.js.map +0 -1
  242. package/dist/src/scene/graph_node.js +0 -72
  243. package/dist/src/scene/graph_node.js.map +0 -1
  244. package/dist/src/scene/light.js +0 -416
  245. package/dist/src/scene/light.js.map +0 -1
  246. package/dist/src/scene/mesh.js +0 -341
  247. package/dist/src/scene/mesh.js.map +0 -1
  248. package/dist/src/scene/octree.js +0 -649
  249. package/dist/src/scene/octree.js.map +0 -1
  250. package/dist/src/scene/particlesys.js +0 -738
  251. package/dist/src/scene/particlesys.js.map +0 -1
  252. package/dist/src/scene/raycast_visitor.js +0 -103
  253. package/dist/src/scene/raycast_visitor.js.map +0 -1
  254. package/dist/src/scene/scene.js +0 -284
  255. package/dist/src/scene/scene.js.map +0 -1
  256. package/dist/src/scene/scene_node.js +0 -732
  257. package/dist/src/scene/scene_node.js.map +0 -1
  258. package/dist/src/scene/terrain/grass.js +0 -278
  259. package/dist/src/scene/terrain/grass.js.map +0 -1
  260. package/dist/src/scene/terrain/heightfield.js +0 -475
  261. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  262. package/dist/src/scene/terrain/patch.js +0 -530
  263. package/dist/src/scene/terrain/patch.js.map +0 -1
  264. package/dist/src/scene/terrain/quadtree.js +0 -461
  265. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  266. package/dist/src/scene/terrain/terrain.js +0 -246
  267. package/dist/src/scene/terrain/terrain.js.map +0 -1
  268. package/dist/src/scene/terrain-cm/grass.js +0 -594
  269. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  270. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  271. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  272. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  273. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  274. package/dist/src/scene/water.js +0 -374
  275. package/dist/src/scene/water.js.map +0 -1
  276. package/dist/src/shaders/atmosphere.js +0 -957
  277. package/dist/src/shaders/atmosphere.js.map +0 -1
  278. package/dist/src/shaders/fog.js +0 -112
  279. package/dist/src/shaders/fog.js.map +0 -1
  280. package/dist/src/shaders/misc.js +0 -266
  281. package/dist/src/shaders/misc.js.map +0 -1
  282. package/dist/src/shaders/noise.js +0 -222
  283. package/dist/src/shaders/noise.js.map +0 -1
  284. package/dist/src/shaders/pbr.js +0 -51
  285. package/dist/src/shaders/pbr.js.map +0 -1
  286. package/dist/src/shaders/shadow.js +0 -636
  287. package/dist/src/shaders/shadow.js.map +0 -1
  288. package/dist/src/shaders/ssr.js +0 -490
  289. package/dist/src/shaders/ssr.js.map +0 -1
  290. package/dist/src/shaders/temporal.js +0 -215
  291. package/dist/src/shaders/temporal.js.map +0 -1
  292. package/dist/src/shaders/water.js +0 -756
  293. package/dist/src/shaders/water.js.map +0 -1
  294. package/dist/src/shadow/esm.js +0 -237
  295. package/dist/src/shadow/esm.js.map +0 -1
  296. package/dist/src/shadow/pcf_opt.js +0 -181
  297. package/dist/src/shadow/pcf_opt.js.map +0 -1
  298. package/dist/src/shadow/pcf_pd.js +0 -189
  299. package/dist/src/shadow/pcf_pd.js.map +0 -1
  300. package/dist/src/shadow/shader.js +0 -37
  301. package/dist/src/shadow/shader.js.map +0 -1
  302. package/dist/src/shadow/shadow_impl.js +0 -15
  303. package/dist/src/shadow/shadow_impl.js.map +0 -1
  304. package/dist/src/shadow/shadowmapper.js +0 -790
  305. package/dist/src/shadow/shadowmapper.js.map +0 -1
  306. package/dist/src/shadow/ssm.js +0 -159
  307. package/dist/src/shadow/ssm.js.map +0 -1
  308. package/dist/src/shadow/vsm.js +0 -297
  309. package/dist/src/shadow/vsm.js.map +0 -1
  310. package/dist/src/shapes/box.js +0 -386
  311. package/dist/src/shapes/box.js.map +0 -1
  312. package/dist/src/shapes/cylinder.js +0 -125
  313. package/dist/src/shapes/cylinder.js.map +0 -1
  314. package/dist/src/shapes/plane.js +0 -88
  315. package/dist/src/shapes/plane.js.map +0 -1
  316. package/dist/src/shapes/shape.js +0 -87
  317. package/dist/src/shapes/shape.js.map +0 -1
  318. package/dist/src/shapes/sphere.js +0 -114
  319. package/dist/src/shapes/sphere.js.map +0 -1
  320. package/dist/src/shapes/tetrahedron.js +0 -188
  321. package/dist/src/shapes/tetrahedron.js.map +0 -1
  322. package/dist/src/shapes/torus.js +0 -111
  323. package/dist/src/shapes/torus.js.map +0 -1
  324. package/dist/src/utility/aabbtree.js +0 -400
  325. package/dist/src/utility/aabbtree.js.map +0 -1
  326. package/dist/src/utility/bounding_volume.js +0 -29
  327. package/dist/src/utility/bounding_volume.js.map +0 -1
  328. package/dist/src/utility/debug.js +0 -28
  329. package/dist/src/utility/debug.js.map +0 -1
  330. package/dist/src/utility/draco/decoder.js +0 -116
  331. package/dist/src/utility/draco/decoder.js.map +0 -1
  332. package/dist/src/utility/misc.js +0 -105
  333. package/dist/src/utility/misc.js.map +0 -1
  334. package/dist/src/utility/panorama.js +0 -163
  335. package/dist/src/utility/panorama.js.map +0 -1
  336. package/dist/src/utility/pmrem.js +0 -354
  337. package/dist/src/utility/pmrem.js.map +0 -1
  338. package/dist/src/utility/rendermipmap.js +0 -115
  339. package/dist/src/utility/rendermipmap.js.map +0 -1
  340. package/dist/src/utility/serialization/json.js +0 -402
  341. package/dist/src/utility/serialization/json.js.map +0 -1
  342. package/dist/src/utility/serialization/manager.js +0 -623
  343. package/dist/src/utility/serialization/manager.js.map +0 -1
  344. package/dist/src/utility/serialization/scene/animation.js +0 -248
  345. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  346. package/dist/src/utility/serialization/scene/batch.js +0 -59
  347. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  348. package/dist/src/utility/serialization/scene/camera.js +0 -790
  349. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  350. package/dist/src/utility/serialization/scene/common.js +0 -222
  351. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  352. package/dist/src/utility/serialization/scene/light.js +0 -575
  353. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  354. package/dist/src/utility/serialization/scene/material.js +0 -1111
  355. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  356. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  357. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  358. package/dist/src/utility/serialization/scene/misc.js +0 -39
  359. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  360. package/dist/src/utility/serialization/scene/node.js +0 -451
  361. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  362. package/dist/src/utility/serialization/scene/particle.js +0 -425
  363. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  364. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  365. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  366. package/dist/src/utility/serialization/scene/scene.js +0 -704
  367. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  368. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  369. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  370. package/dist/src/utility/serialization/scene/water.js +0 -465
  371. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  372. package/dist/src/utility/shprojector.js +0 -297
  373. package/dist/src/utility/shprojector.js.map +0 -1
  374. package/dist/src/utility/textures/ggxlut.js +0 -213
  375. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  376. package/dist/src/utility/textures/gradientnoise.js +0 -62
  377. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  378. package/dist/src/utility/textures/randomnoise.js +0 -41
  379. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  380. package/dist/src/values.js +0 -162
  381. package/dist/src/values.js.map +0 -1
  382. package/dist/utility/blueprint/material/common.js +0 -7
  383. package/dist/utility/blueprint/material/common.js.map +0 -1
  384. package/dist/utility/serialization/blueprint/constants.js +0 -255
  385. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  386. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  387. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  388. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  389. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"meshmaterial.js","sources":["../../../src/material/meshmaterial.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n FaceMode,\r\n GPUProgram,\r\n PBFunctionScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport {\r\n MaterialVaryingFlags,\r\n QUEUE_OPAQUE,\r\n QUEUE_TRANSPARENT,\r\n RENDER_PASS_TYPE_DEPTH,\r\n RENDER_PASS_TYPE_LIGHT,\r\n RENDER_PASS_TYPE_OBJECT_COLOR,\r\n RENDER_PASS_TYPE_SHADOWMAP\r\n} from '../values';\r\nimport { Material } from './material';\r\nimport type { DepthPass } from '../render';\r\nimport { type DrawContext, type ShadowMapPass } from '../render';\r\nimport { encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { Application } from '../app';\r\nimport { ShaderHelper } from './shader/helper';\r\nimport type { Clonable } from '@zephyr3d/base';\r\nimport { Vector2, Vector3, Vector4, applyMixins, DRef, DWeakRef } from '@zephyr3d/base';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\n\r\n/**\r\n * Blending mode for mesh material\r\n * @public\r\n */\r\nexport type BlendMode = 'none' | 'blend' | 'additive';\r\n\r\n/**\r\n * Extract mixin return type\r\n * @public\r\n */\r\nexport type ExtractMixinReturnType<M> = M extends (target: infer A) => infer R ? R : never;\r\n\r\n/**\r\n * Extract mixin type\r\n * @public\r\n */\r\nexport type ExtractMixinType<M> = M extends [infer First]\r\n ? ExtractMixinReturnType<First>\r\n : M extends [infer First, ...infer Rest]\r\n ? ExtractMixinReturnType<First> & ExtractMixinType<[...Rest]>\r\n : never;\r\n\r\n/**\r\n * Apply material mixins to specific material class\r\n * @param target - Material class\r\n * @param mixins - mixins\r\n * @returns Mixed mesh material class\r\n *\r\n * @public\r\n */\r\nexport function applyMaterialMixins<M extends ((target: any) => any)[], T>(\r\n target: T,\r\n ...mixins: M\r\n): ExtractMixinType<M> & T {\r\n return applyMixins(target, ...mixins);\r\n}\r\n\r\nlet FEATURE_ALPHATEST = 0;\r\nlet FEATURE_ALPHABLEND = 0;\r\nlet FEATURE_ALPHATOCOVERAGE = 0;\r\nlet FEATURE_DISABLE_TAA = 0;\r\n\r\n/** @internal */\r\nexport type InstanceUniformType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'rgb' | 'rgba';\r\n\r\n/**\r\n * Base class for any kind of mesh materials\r\n *\r\n * @public\r\n */\r\nexport class MeshMaterial extends Material implements Clonable<MeshMaterial> {\r\n /** @internal */\r\n static INSTANCE_UNIFORMS: { prop: string; type: InstanceUniformType; offset: number }[] = [];\r\n /** @internal */\r\n static NEXT_FEATURE_INDEX = 3;\r\n /** @internal */\r\n static OBJECT_COLOR_UNIFORM = this.defineInstanceUniform('objectColor', 'rgba');\r\n /** @internal */\r\n static OPACITY_UNIFORM = this.defineInstanceUniform('opacity', 'float');\r\n /** @internal */\r\n private _featureStates: unknown[];\r\n /** @internal */\r\n private _alphaCutoff: number;\r\n /** @internal */\r\n private _blendMode: BlendMode;\r\n /** @internal */\r\n private _cullMode: FaceMode;\r\n /** @internal */\r\n private _opacity: number;\r\n /** @internal */\r\n private _taaStrength: number;\r\n /** @internal */\r\n private readonly _objectColor: Vector4;\r\n /** @internal */\r\n private _ctx: DrawContext;\r\n /** @internal */\r\n private _materialPass: number;\r\n /**\r\n * Creates an instance of MeshMaterial class\r\n * @param args - constructor arguments\r\n */\r\n constructor() {\r\n super();\r\n this._featureStates = [];\r\n this._alphaCutoff = 0;\r\n this._blendMode = 'none';\r\n this._cullMode = 'back';\r\n this._opacity = 1;\r\n this._taaStrength = 1 - 1 / 16;\r\n this._objectColor = Vector4.one();\r\n this._ctx = null;\r\n this._materialPass = -1;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n }\r\n clone(): MeshMaterial {\r\n const other = new MeshMaterial();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.alphaCutoff = other.alphaCutoff;\r\n this.blendMode = other.blendMode;\r\n this.cullMode = other.cullMode;\r\n this.opacity = other.opacity;\r\n this.objectColor = other.objectColor;\r\n }\r\n /** Indicate that the uniform has changed and needs to be resubmitted. */\r\n uniformChanged() {\r\n this.optionChanged(false);\r\n }\r\n /** Define feature index */\r\n static defineFeature(): number {\r\n const val = this.NEXT_FEATURE_INDEX;\r\n this.NEXT_FEATURE_INDEX++;\r\n return val;\r\n }\r\n /** @internal */\r\n private static getNumComponents(type: InstanceUniformType) {\r\n if (type === 'float') {\r\n return 1;\r\n }\r\n if (type === 'vec2') {\r\n return 2;\r\n }\r\n if (type === 'rgb' || type === 'vec3') {\r\n return 3;\r\n }\r\n if (type === 'rgba' || type === 'vec4') {\r\n return 4;\r\n }\r\n return 0;\r\n }\r\n /** Define instance uniform index */\r\n static defineInstanceUniform(prop: string, type: InstanceUniformType): number {\r\n if (this.INSTANCE_UNIFORMS.findIndex((val) => val.prop === prop) >= 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): ${prop} was already defined`);\r\n }\r\n const numComponents = this.getNumComponents(type);\r\n if (numComponents === 0) {\r\n throw new Error(`${this.name}.defineInstanceUniform(): invalid uniform type ${type}`);\r\n }\r\n let index = this.INSTANCE_UNIFORMS.length;\r\n let offset = 0;\r\n if (this.INSTANCE_UNIFORMS.length > 0) {\r\n const lastUniform = this.INSTANCE_UNIFORMS[this.INSTANCE_UNIFORMS.length - 1];\r\n const finalOffset = (lastUniform.offset + 4) & ~3;\r\n offset = finalOffset;\r\n for (let i = 0; i < this.INSTANCE_UNIFORMS.length; i++) {\r\n const offset1 = this.INSTANCE_UNIFORMS[i].offset;\r\n const numComps1 = this.getNumComponents(this.INSTANCE_UNIFORMS[i].type);\r\n const offset2 =\r\n i === this.INSTANCE_UNIFORMS.length - 1 ? finalOffset : this.INSTANCE_UNIFORMS[i + 1].offset;\r\n if (offset1 + numComps1 + numComponents <= offset2) {\r\n index = i + 1;\r\n offset = offset1 + numComps1;\r\n if (offset + numComponents === offset2) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.INSTANCE_UNIFORMS = this.INSTANCE_UNIFORMS.slice();\r\n this.INSTANCE_UNIFORMS.splice(index, 0, { prop, offset, type });\r\n return (offset << 2) | (numComponents - 1);\r\n }\r\n getInstancedUniform(scope: PBInsideFunctionScope, uniformIndex: number): PBShaderExp {\r\n const pb = scope.$builder;\r\n const instanceID = scope.$builtins.instanceIndex;\r\n const uniformName = ShaderHelper.getInstanceDataUniformName();\r\n const strideName = ShaderHelper.getInstanceDataStrideUniformName();\r\n const offsetName = ShaderHelper.getInstanceDataOffsetUniformName();\r\n const numComponents = (uniformIndex & 3) + 1;\r\n const vecIndex = uniformIndex >> 4;\r\n const vecOffset = (uniformIndex >> 2) & 3;\r\n const u = scope[uniformName].at(\r\n pb.add(\r\n pb.mul(scope[strideName], instanceID),\r\n ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET + vecIndex,\r\n scope[offsetName]\r\n )\r\n );\r\n const m = ['x', 'y', 'z', 'w'].slice(vecOffset, vecOffset + numComponents).join('');\r\n return u[m];\r\n }\r\n /** Get instanced material property list */\r\n getInstancedUniforms() {\r\n return (this.constructor as typeof MeshMaterial).INSTANCE_UNIFORMS;\r\n }\r\n /** Create material instance */\r\n createInstance(): this {\r\n if (this.$isInstance) {\r\n return this.coreMaterial.createInstance();\r\n }\r\n const isWebGL1 = Application.instance.device.type === 'webgl';\r\n if (isWebGL1 || !this.supportInstancing) {\r\n return this.clone() as this;\r\n }\r\n const instanceUniforms = this.getInstancedUniforms();\r\n const uniformsHolder =\r\n instanceUniforms.length > 0\r\n ? new Float32Array((instanceUniforms[instanceUniforms.length - 1].offset + 4) & ~3)\r\n : null;\r\n const instance = {} as any;\r\n const that = this;\r\n const coreMaterial = new DRef(that);\r\n let disposed = false;\r\n instance.isBatchable = () => true; //!isWebGL1 && that.supportInstancing();\r\n instance.dispose = () => {\r\n if (!disposed) {\r\n disposed = true;\r\n coreMaterial.dispose();\r\n }\r\n };\r\n instance.$instanceUniforms = uniformsHolder;\r\n instance.$isInstance = true;\r\n let persistentId = crypto.randomUUID();\r\n Material._registry.set(persistentId, new DWeakRef(instance));\r\n Object.defineProperty(instance, 'coreMaterial', {\r\n get: function () {\r\n return coreMaterial.get();\r\n }\r\n });\r\n Object.defineProperty(instance, 'persistentId', {\r\n get: function () {\r\n return persistentId;\r\n },\r\n set: function (val) {\r\n if (val !== persistentId) {\r\n const m = Material._registry.get(persistentId);\r\n if (!m || m.get() !== instance) {\r\n throw new Error('Registry material mismatch');\r\n }\r\n Material._registry.delete(persistentId);\r\n persistentId = val;\r\n Material._registry.set(persistentId, m);\r\n }\r\n }\r\n });\r\n\r\n // Copy original uniform values\r\n for (let i = 0; i < instanceUniforms.length; i++) {\r\n const { prop, offset, type } = instanceUniforms[i];\r\n const value = that[prop];\r\n switch (type) {\r\n case 'float': {\r\n uniformsHolder[offset] = Number(value);\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return uniformsHolder[offset];\r\n },\r\n set(value) {\r\n uniformsHolder[offset] = value;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec2': {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector2(uniformsHolder[offset], uniformsHolder[offset + 1]);\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector2)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector2`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec3':\r\n case 'rgb': {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n uniformsHolder[offset + 2] = value.z;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector3(\r\n uniformsHolder[offset],\r\n uniformsHolder[offset + 1],\r\n uniformsHolder[offset + 2]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector3)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector3`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n uniformsHolder[offset + 2] = value.z;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n case 'vec4':\r\n case 'rgba': {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n uniformsHolder[offset + 2] = value.z;\r\n uniformsHolder[offset + 3] = value.w;\r\n Object.defineProperty(instance, prop, {\r\n get() {\r\n return new Vector4(\r\n uniformsHolder[offset],\r\n uniformsHolder[offset + 1],\r\n uniformsHolder[offset + 2],\r\n uniformsHolder[offset + 3]\r\n );\r\n },\r\n set(value) {\r\n if (!(value instanceof Vector4)) {\r\n throw new Error(`Instance uniform property ${prop} must be of type Vector4`);\r\n }\r\n uniformsHolder[offset] = value.x;\r\n uniformsHolder[offset + 1] = value.y;\r\n uniformsHolder[offset + 2] = value.z;\r\n uniformsHolder[offset + 3] = value.w;\r\n RenderBundleWrapper.materialUniformsChanged(instance);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n Object.setPrototypeOf(instance, that);\r\n return instance;\r\n }\r\n /** Draw context for shader creation */\r\n get drawContext(): DrawContext {\r\n return this._ctx;\r\n }\r\n /**\r\n * Current material pass\r\n * @internal\r\n **/\r\n get pass(): number {\r\n return this._materialPass;\r\n }\r\n /** A value between 0 and 1, presents the cutoff for alpha testing */\r\n get alphaCutoff(): number {\r\n return this._alphaCutoff;\r\n }\r\n set alphaCutoff(val: number) {\r\n if (this._alphaCutoff !== val) {\r\n this.useFeature(FEATURE_ALPHATEST, val > 0);\r\n this._alphaCutoff = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Whether TAA should be disabled on this material */\r\n get TAADisabled(): boolean {\r\n return !!this.featureUsed(FEATURE_DISABLE_TAA);\r\n }\r\n set TAADisabled(val: boolean) {\r\n this.useFeature(FEATURE_DISABLE_TAA, !!val);\r\n }\r\n /** TAA strength */\r\n get TAAStrength(): number {\r\n return this._taaStrength;\r\n }\r\n set TAAStrength(val: number) {\r\n val = val > 1 ? 1 : val < 0 ? 0 : val;\r\n if (this._taaStrength !== val) {\r\n this._taaStrength = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n get alphaToCoverage(): boolean {\r\n return this.featureUsed(FEATURE_ALPHATOCOVERAGE);\r\n }\r\n set alphaToCoverage(val: boolean) {\r\n this.useFeature(FEATURE_ALPHATOCOVERAGE, !!val);\r\n }\r\n /** Blending mode */\r\n get blendMode(): BlendMode {\r\n return this._blendMode;\r\n }\r\n set blendMode(val: BlendMode) {\r\n if (this._blendMode !== val) {\r\n this._blendMode = val;\r\n this.useFeature(FEATURE_ALPHABLEND, this._blendMode);\r\n }\r\n }\r\n /** Cull mode */\r\n get cullMode(): FaceMode {\r\n return this._cullMode;\r\n }\r\n set cullMode(val: FaceMode) {\r\n this._cullMode = val;\r\n }\r\n /** A value between 0 and 1, presents the opacity */\r\n get opacity(): number {\r\n return this._opacity;\r\n }\r\n set opacity(val: number) {\r\n val = val < 0 ? 0 : val > 1 ? 1 : val;\r\n if (this._opacity !== val) {\r\n this._opacity = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Object color used for GPU picking */\r\n get objectColor(): Vector4 {\r\n return this._objectColor;\r\n }\r\n set objectColor(val: Vector4) {\r\n if (val !== this._objectColor) {\r\n this._objectColor.set(val ?? Vector4.one());\r\n this.uniformChanged();\r\n }\r\n }\r\n /** Returns true if shading of the material will be affected by lights */\r\n supportLighting(): boolean {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc Material.updateRenderStates}\r\n */\r\n protected updateRenderStates(pass: number, stateSet: RenderStateSet, ctx: DrawContext): void {\r\n const isObjectColorPass = ctx.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR;\r\n const blending =\r\n !isObjectColorPass && (this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none' || ctx.lightBlending);\r\n const a2c = !isObjectColorPass && this.featureUsed<boolean>(FEATURE_ALPHATOCOVERAGE);\r\n const ztestEq = ctx.queue === QUEUE_OPAQUE && !!ctx.depthTexture && !ctx.sceneColorTexture;\r\n if (blending || a2c) {\r\n const blendingState = stateSet.useBlendingState();\r\n if (blending) {\r\n blendingState.enable(true);\r\n blendingState.setBlendFuncAlpha('zero', 'one');\r\n blendingState.setBlendEquation('add', 'add');\r\n if (this._blendMode === 'additive' || ctx.lightBlending) {\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n } else {\r\n blendingState.setBlendFuncRGB('one', 'inv-src-alpha');\r\n }\r\n } else {\r\n blendingState.enable(false);\r\n }\r\n blendingState.enableAlphaToCoverage(a2c);\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else if (blendingState.enabled) {\r\n stateSet.useDepthState().enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n } else {\r\n stateSet.defaultBlendingState();\r\n if (ztestEq) {\r\n stateSet.useDepthState().setCompareFunc('eq').enableTest(true).enableWrite(false);\r\n } else {\r\n stateSet.defaultDepthState();\r\n }\r\n }\r\n if (ctx.forceCullMode || this._cullMode !== 'back') {\r\n stateSet.useRasterizerState().cullMode = ctx.forceCullMode || this._cullMode;\r\n } else if (ctx.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n stateSet.useRasterizerState().cullMode = 'none';\r\n } else {\r\n stateSet.defaultRasterizerState();\r\n }\r\n if (ctx.forceColorState) {\r\n stateSet.useColorState(ctx.forceColorState);\r\n } else {\r\n stateSet.defaultColorState();\r\n }\r\n stateSet.defaultStencilState();\r\n if (ctx.oit) {\r\n ctx.oit.setRenderStates(stateSet);\r\n }\r\n }\r\n /**\r\n * Submit Uniform values before rendering with this material.\r\n *\r\n * @param bindGroup - Bind group for this material\r\n * @param ctx - Draw context\r\n * @param pass - Current pass of the material\r\n */\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n if (this.featureUsed(FEATURE_ALPHATEST)) {\r\n bindGroup.setValue('zAlphaCutoff', this._alphaCutoff);\r\n }\r\n if (\r\n this.isTransparentPass(pass) &&\r\n ctx.renderPass.type === RENDER_PASS_TYPE_LIGHT &&\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n bindGroup.setValue('zOpacity', this._opacity);\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.applyUniforms(ctx, bindGroup);\r\n }\r\n if (\r\n !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING) &&\r\n ctx.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR\r\n ) {\r\n bindGroup.setValue('zObjectColor', this._objectColor);\r\n }\r\n if (ctx.renderPass.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n bindGroup.setValue('zTAAStrength', (1 - this._taaStrength) * 50000);\r\n }\r\n }\r\n /**\r\n * Determine which queue should be used to render this material.\r\n * @returns QUEUE_TRANSPARENT or QUEUE_OPAQUE\r\n */\r\n getQueueType(): number {\r\n return this.isTransparentPass(0) ? QUEUE_TRANSPARENT : QUEUE_OPAQUE;\r\n }\r\n /**\r\n * Determine if a certain pass of this material is translucent.\r\n * @param pass - Pass of the material\r\n * @returns True if it is translucent, otherwise false.\r\n */\r\n isTransparentPass(_pass: number): boolean {\r\n return this.featureUsed<BlendMode>(FEATURE_ALPHABLEND) !== 'none';\r\n }\r\n /** @internal */\r\n protected createProgram(ctx: DrawContext, pass: number): GPUProgram {\r\n const pb = new ProgramBuilder(ctx.device);\r\n if (ctx.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP) {\r\n const shadowMapParams = ctx.shadowMapInfo.get((ctx.renderPass as ShadowMapPass).light);\r\n pb.emulateDepthClamp = !!shadowMapParams.depthClampEnabled;\r\n }\r\n return this._createProgram(pb, ctx, pass);\r\n }\r\n /**\r\n * Check if a feature is in use for given render pass type.\r\n *\r\n * @param feature - The feature index\r\n * @returns true if the feature is in use, otherwise false.\r\n */\r\n featureUsed<T = unknown>(feature: number): T {\r\n return this._featureStates[feature] as T;\r\n }\r\n /**\r\n * Use or unuse a feature of the material, this will cause the shader to be rebuild.\r\n *\r\n * @param feature - Which feature will be used or unused\r\n * @param use - true if use the feature, otherwise false\r\n */\r\n useFeature(feature: number, use: unknown) {\r\n if (this._featureStates[feature] !== use) {\r\n this._featureStates[feature] = use;\r\n this.optionChanged(true);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Material._createHash}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _createHash(): string {\r\n return this._featureStates.map((val) => (val === undefined ? '' : val)).join('|');\r\n }\r\n /**\r\n * {@inheritDoc Material._applyUniforms}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _applyUniforms(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n this.applyUniformValues(bindGroup, ctx, pass);\r\n }\r\n /**\r\n * Check if the color should be computed in fragment shader, this is required for forward render pass or alpha test is in use or alpha to coverage is in use.\r\n *\r\n * @returns - true if the color should be computed in fragment shader, otherwise false.\r\n */\r\n needFragmentColor(ctx?: DrawContext): boolean {\r\n return (\r\n (ctx ?? this.drawContext).renderPass.type === RENDER_PASS_TYPE_LIGHT ||\r\n this._alphaCutoff > 0 ||\r\n this.alphaToCoverage\r\n );\r\n }\r\n /**\r\n * Vertex shader implementation of this material\r\n * @param scope - Shader scope\r\n */\r\n vertexShader(scope: PBFunctionScope): void {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareVertexShader(pb, this.drawContext);\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.SKIN_ANIMATION) {\r\n scope.$inputs.zBlendIndices = pb.vec4().attrib('blendIndices');\r\n scope.$inputs.zBlendWeights = pb.vec4().attrib('blendWeights');\r\n ShaderHelper.prepareSkinAnimation(scope);\r\n }\r\n if (\r\n this.drawContext.materialFlags & MaterialVaryingFlags.MORPH_ANIMATION &&\r\n this.drawContext.device.type === 'webgl'\r\n ) {\r\n scope.$inputs.zFakeVertexID = pb.float().attrib('texCoord7');\r\n }\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n if (this.drawContext.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n scope.$outputs.zObjectColor = this.getInstancedUniform(scope, MeshMaterial.OBJECT_COLOR_UNIFORM);\r\n }\r\n if (this.isTransparentPass(this.pass)) {\r\n scope.$outputs.zOpacity = this.getInstancedUniform(scope, MeshMaterial.OPACITY_UNIFORM);\r\n }\r\n }\r\n }\r\n /**\r\n * Fragment shader implementation of this material\r\n * @param scope - Shader scope\r\n */\r\n fragmentShader(scope: PBFunctionScope): void {\r\n const pb = scope.$builder;\r\n ShaderHelper.prepareFragmentShader(pb, this.drawContext);\r\n if (this._alphaCutoff > 0) {\r\n scope.zAlphaCutoff = pb.float().uniform(2);\r\n }\r\n if (this.drawContext.renderPass.type === RENDER_PASS_TYPE_LIGHT) {\r\n if (\r\n this.isTransparentPass(this.pass) &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zOpacity = pb.float().uniform(2);\r\n }\r\n } else if (\r\n this.drawContext.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR &&\r\n !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)\r\n ) {\r\n scope.zObjectColor = pb.vec4().uniform(2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Material._createProgram}\r\n * @override\r\n *\r\n * @internal\r\n */\r\n protected _createProgram(pb: ProgramBuilder, ctx: DrawContext, pass: number): GPUProgram {\r\n const that = this;\r\n this._ctx = ctx;\r\n this._materialPass = pass;\r\n const program = pb.buildRenderProgram({\r\n vertex(pb) {\r\n pb.main(function () {\r\n that.vertexShader(this);\r\n });\r\n },\r\n fragment(pb) {\r\n if (that.drawContext.oit) {\r\n that.drawContext.oit.setupFragmentOutput(this);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4();\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n this.$outputs.zSSRRoughness = pb.vec4();\r\n this.$outputs.zSSRNormal = pb.vec4();\r\n }\r\n if (ctx.renderPass.type === RENDER_PASS_TYPE_DEPTH && ctx.motionVectors) {\r\n this.$outputs.zMotionVector = pb.vec4();\r\n this.zTAAStrength = pb.float().uniform(2);\r\n }\r\n if (ctx.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n this.$outputs.zDistance = pb.vec4();\r\n }\r\n }\r\n pb.main(function () {\r\n that.fragmentShader(this);\r\n });\r\n }\r\n });\r\n return program;\r\n }\r\n /**\r\n * Calculate final fragment color for output.\r\n *\r\n * @param scope - Shader scope\r\n * @param color - Lit fragment color\r\n *\r\n * @returns The final fragment color\r\n */\r\n outputFragmentColor(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n color: PBShaderExp,\r\n ssrRoughness?: PBShaderExp,\r\n ssrNormal?: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcName = 'Z_outputFragmentColor';\r\n pb.func(funcName, color ? [pb.vec3('worldPos'), pb.vec4('color')] : [pb.vec3('worldPos')], function () {\r\n this.$l.outColor = color ? this.color : pb.vec4();\r\n if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_LIGHT) {\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n let output = true;\r\n if (!that.isTransparentPass(that.pass) && !that.alphaToCoverage) {\r\n this.outColor.a = 1;\r\n } else if (that.isTransparentPass(that.pass)) {\r\n const opacity =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zOpacity\r\n : this.zOpacity;\r\n this.outColor.a = pb.mul(this.outColor.a, opacity);\r\n }\r\n if (that.isTransparentPass(that.pass)) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n if (!that.drawContext.oit || that.drawContext.oit.wantsPremultipliedAlpha()) {\r\n this.outColor = pb.vec4(\r\n pb.mul(this.outColor.rgb, this.outColor.a),\r\n that.featureUsed<BlendMode>(FEATURE_ALPHABLEND) === 'additive' ? 0 : this.outColor.a\r\n );\r\n }\r\n output = !that.drawContext.oit || !that.drawContext.oit.outputFragmentColor(this, this.outColor);\r\n }\r\n if (output) {\r\n ShaderHelper.applyFog(this, this.worldPos, this.outColor, that.drawContext);\r\n this.$outputs.zFragmentOutput = ShaderHelper.encodeColorOutput(this, this.outColor);\r\n }\r\n } else if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_DEPTH) {\r\n if (color) {\r\n if (this.zAlphaCutoff) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n const depthPass = that.drawContext.renderPass as DepthPass;\r\n this.$l.depth = ShaderHelper.nonLinearDepthToLinearNormalized(this, this.$builtins.fragCoord.z);\r\n if (depthPass.encodeDepth) {\r\n this.$outputs.zFragmentOutput = encodeNormalizedFloatToRGBA(this, this.depth);\r\n } else if (depthPass.renderBackface) {\r\n this.$outputs.zFragmentOutput = pb.vec4(0, this.depth, 0, 1);\r\n } else {\r\n this.$outputs.zFragmentOutput = pb.vec4(this.depth, 0, 0, 1);\r\n }\r\n if (that.drawContext.motionVectors) {\r\n if (that.featureUsed(FEATURE_DISABLE_TAA)) {\r\n this.$outputs.zMotionVector = pb.vec4(6e4, 6e4, 1, 1);\r\n } else {\r\n if (this.$inputs.zMotionVectorPosCurrent && this.$inputs.zMotionVectorPosPrev) {\r\n this.$outputs.zMotionVector = pb.vec4(\r\n pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.zMotionVectorPosCurrent.xy, this.$inputs.zMotionVectorPosCurrent.w),\r\n pb.div(this.$inputs.zMotionVectorPosPrev.xy, this.$inputs.zMotionVectorPosPrev.w)\r\n ),\r\n 0.5\r\n ),\r\n this.zTAAStrength,\r\n 1\r\n );\r\n } else {\r\n this.$outputs.zMotionVector = pb.vec4(0, 0, 1, 1);\r\n }\r\n }\r\n }\r\n } else if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_OBJECT_COLOR) {\r\n if (color) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n this.$outputs.zFragmentOutput =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? scope.$inputs.zObjectColor\r\n : scope.zObjectColor;\r\n if (that.drawContext.device.type === 'webgl') {\r\n this.$l.linearDepth = ShaderHelper.nonLinearDepthToLinearNormalized(\r\n this,\r\n this.$builtins.fragCoord.z\r\n );\r\n this.$outputs.zDistance = encodeNormalizedFloatToRGBA(this, this.linearDepth);\r\n } else {\r\n this.$outputs.zDistance = pb.vec4(\r\n this.worldPos,\r\n pb.distance(ShaderHelper.getCameraPosition(this), this.worldPos)\r\n );\r\n }\r\n } /*if (that.drawContext.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP)*/ else {\r\n if (color) {\r\n this.$if(pb.lessThan(this.outColor.a, this.zAlphaCutoff), function () {\r\n pb.discard();\r\n });\r\n }\r\n ShaderHelper.discardIfClipped(this, this.worldPos);\r\n const shadowMapParams = that.drawContext.shadowMapInfo.get(\r\n (that.drawContext.renderPass as ShadowMapPass).light\r\n );\r\n this.$outputs.zFragmentOutput = shadowMapParams.impl.computeShadowMapDepth(\r\n shadowMapParams,\r\n this,\r\n this.worldPos\r\n );\r\n }\r\n });\r\n if (color) {\r\n pb.getGlobalScope()[funcName](worldPos, color);\r\n } else {\r\n pb.getGlobalScope()[funcName](worldPos);\r\n }\r\n if (that.drawContext.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS) {\r\n scope.$outputs.zSSRRoughness = ssrRoughness ?? pb.vec4(1, 0, 0, 1);\r\n scope.$outputs.zSSRNormal = ssrNormal ?? pb.vec4(0);\r\n }\r\n }\r\n}\r\nFEATURE_ALPHATEST = MeshMaterial.defineFeature();\r\nFEATURE_ALPHABLEND = MeshMaterial.defineFeature();\r\nFEATURE_ALPHATOCOVERAGE = MeshMaterial.defineFeature();\r\nFEATURE_DISABLE_TAA = MeshMaterial.defineFeature();\r\n"],"names":["applyMaterialMixins","target","mixins","applyMixins","FEATURE_ALPHATEST","FEATURE_ALPHABLEND","FEATURE_ALPHATOCOVERAGE","FEATURE_DISABLE_TAA","MeshMaterial","Material","INSTANCE_UNIFORMS","NEXT_FEATURE_INDEX","OBJECT_COLOR_UNIFORM","defineInstanceUniform","OPACITY_UNIFORM","_featureStates","_alphaCutoff","_blendMode","_cullMode","_opacity","_taaStrength","_objectColor","Vector4","one","_ctx","_materialPass","useFeature","clone","other","copyFrom","alphaCutoff","blendMode","cullMode","opacity","objectColor","uniformChanged","optionChanged","defineFeature","val","getNumComponents","type","prop","findIndex","Error","name","numComponents","index","length","offset","lastUniform","finalOffset","i","offset1","numComps1","offset2","slice","splice","getInstancedUniform","scope","uniformIndex","pb","$builder","instanceID","$builtins","instanceIndex","uniformName","ShaderHelper","getInstanceDataUniformName","strideName","getInstanceDataStrideUniformName","offsetName","getInstanceDataOffsetUniformName","vecIndex","vecOffset","u","at","add","mul","MATERIAL_INSTANCE_DATA_OFFSET","m","join","getInstancedUniforms","createInstance","$isInstance","coreMaterial","isWebGL1","Application","instance","device","supportInstancing","instanceUniforms","uniformsHolder","Float32Array","that","DRef","disposed","isBatchable","dispose","$instanceUniforms","persistentId","crypto","randomUUID","_registry","set","DWeakRef","Object","defineProperty","get","delete","value","Number","RenderBundleWrapper","materialUniformsChanged","Vector2","x","y","Vector3","z","w","setPrototypeOf","drawContext","pass","TAADisabled","featureUsed","TAAStrength","alphaToCoverage","supportLighting","stateSet","ctx","isObjectColorPass","renderPass","RENDER_PASS_TYPE_OBJECT_COLOR","blending","lightBlending","a2c","ztestEq","queue","QUEUE_OPAQUE","depthTexture","sceneColorTexture","blendingState","useBlendingState","enable","setBlendFuncAlpha","setBlendEquation","setBlendFuncRGB","enableAlphaToCoverage","useDepthState","setCompareFunc","enableTest","enableWrite","enabled","defaultDepthState","defaultBlendingState","forceCullMode","useRasterizerState","RENDER_PASS_TYPE_SHADOWMAP","defaultRasterizerState","forceColorState","useColorState","defaultColorState","defaultStencilState","oit","setRenderStates","applyUniformValues","bindGroup","setValue","isTransparentPass","RENDER_PASS_TYPE_LIGHT","materialFlags","MaterialVaryingFlags","INSTANCING","applyUniforms","RENDER_PASS_TYPE_DEPTH","motionVectors","getQueueType","QUEUE_TRANSPARENT","_pass","createProgram","ProgramBuilder","shadowMapParams","shadowMapInfo","light","emulateDepthClamp","depthClampEnabled","_createProgram","feature","use","map","undefined","needFragmentColor","vertexShader","prepareVertexShader","SKIN_ANIMATION","$inputs","zBlendIndices","vec4","attrib","zBlendWeights","prepareSkinAnimation","MORPH_ANIMATION","zFakeVertexID","float","$outputs","zObjectColor","zOpacity","fragmentShader","prepareFragmentShader","zAlphaCutoff","uniform","program","buildRenderProgram","vertex","main","fragment","setupFragmentOutput","zFragmentOutput","SSR_STORE_ROUGHNESS","zSSRRoughness","zSSRNormal","zMotionVector","zTAAStrength","zDistance","outputFragmentColor","worldPos","color","ssrRoughness","ssrNormal","funcName","func","vec3","$l","outColor","discardIfClipped","output","a","$if","lessThan","discard","wantsPremultipliedAlpha","rgb","applyFog","encodeColorOutput","depthPass","depth","nonLinearDepthToLinearNormalized","fragCoord","encodeDepth","encodeNormalizedFloatToRGBA","renderBackface","zMotionVectorPosCurrent","zMotionVectorPosPrev","sub","div","xy","linearDepth","distance","getCameraPosition","impl","computeShadowMapDepth","getGlobalScope"],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- import { Vector4 } from '@zephyr3d/base';
2
- import { applyMaterialMixins } from '../meshmaterial.js';
3
- import { mixinTextureProps } from './texture.js';
4
- import { MaterialVaryingFlags } from '../../values.js';
5
-
6
- /**
7
- * Albedo color mixin
8
- * @param BaseCls - Class to mix in
9
- * @returns Mixed class
10
- *
11
- * @public
12
- */ function mixinAlbedoColor(BaseCls) {
13
- if (BaseCls.albedoColorMixed) {
14
- return BaseCls;
15
- }
16
- const S = applyMaterialMixins(BaseCls, mixinTextureProps('albedo'));
17
- const ALBEDO_COLOR_UNIFORM = S.defineInstanceUniform('albedoColor', 'rgba');
18
- return class extends S {
19
- static albedoColorMixed = true;
20
- _albedoColor;
21
- constructor(){
22
- super();
23
- this._albedoColor = Vector4.one();
24
- }
25
- copyFrom(other) {
26
- super.copyFrom(other);
27
- this.albedoColor = other.albedoColor;
28
- }
29
- /** Albedo color */ get albedoColor() {
30
- return this._albedoColor;
31
- }
32
- set albedoColor(val) {
33
- this._albedoColor.set(val);
34
- this.uniformChanged();
35
- }
36
- getUniformValueAlbedoColor(scope) {
37
- return this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING ? scope.$inputs.zAlbedo : scope.zAlbedo;
38
- }
39
- calculateAlbedoColor(scope, uv) {
40
- const pb = scope.$builder;
41
- if (!this.needFragmentColor()) {
42
- console.warn('mixinAlbedoColor.calculateAlbedoColor(): No need to calculate albedo color, make sure needFragmentColor() returns true');
43
- return pb.vec4(1);
44
- }
45
- let color = this.getUniformValueAlbedoColor(scope);
46
- if (this.albedoTexture) {
47
- color = pb.mul(color, this.sampleAlbedoTexture(scope, uv));
48
- }
49
- return color;
50
- }
51
- vertexShader(scope) {
52
- super.vertexShader(scope);
53
- if (this.needFragmentColor()) {
54
- if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {
55
- scope.$outputs.zAlbedo = this.getInstancedUniform(scope, ALBEDO_COLOR_UNIFORM);
56
- }
57
- }
58
- }
59
- fragmentShader(scope) {
60
- super.fragmentShader(scope);
61
- if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {
62
- const pb = scope.$builder;
63
- scope.zAlbedo = pb.vec4().uniform(2);
64
- }
65
- }
66
- applyUniformValues(bindGroup, ctx, pass) {
67
- super.applyUniformValues(bindGroup, ctx, pass);
68
- if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {
69
- bindGroup.setValue('zAlbedo', this._albedoColor);
70
- }
71
- }
72
- };
73
- }
74
-
75
- export { mixinAlbedoColor };
76
- //# sourceMappingURL=albedocolor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"albedocolor.js","sources":["../../../../src/material/mixins/albedocolor.ts"],"sourcesContent":["import { Vector4 } from '@zephyr3d/base';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\nimport { applyMaterialMixins } from '../meshmaterial';\r\nimport type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../../render';\r\nimport type { TextureMixinInstanceTypes } from './texture';\r\nimport { mixinTextureProps } from './texture';\r\nimport { MaterialVaryingFlags } from '../../values';\r\n\r\n/**\r\n * Interface for albedo color mixin\r\n * @public\r\n */\r\nexport type IMixinAlbedoColor = {\r\n albedoColor: Vector4;\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp): PBShaderExp;\r\n} & TextureMixinInstanceTypes<['albedo']>;\r\n\r\n/**\r\n * Albedo color mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nfunction mixinAlbedoColor<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).albedoColorMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinAlbedoColor };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinTextureProps('albedo'));\r\n const ALBEDO_COLOR_UNIFORM = S.defineInstanceUniform('albedoColor', 'rgba');\r\n return class extends S {\r\n static albedoColorMixed = true;\r\n private readonly _albedoColor: Vector4;\r\n constructor() {\r\n super();\r\n this._albedoColor = Vector4.one();\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.albedoColor = other.albedoColor;\r\n }\r\n /** Albedo color */\r\n get albedoColor(): Vector4 {\r\n return this._albedoColor;\r\n }\r\n set albedoColor(val: Vector4) {\r\n this._albedoColor.set(val);\r\n this.uniformChanged();\r\n }\r\n getUniformValueAlbedoColor(scope: PBInsideFunctionScope): PBShaderExp {\r\n return this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? scope.$inputs.zAlbedo\r\n : scope.zAlbedo;\r\n }\r\n calculateAlbedoColor(scope: PBInsideFunctionScope, uv?: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (!this.needFragmentColor()) {\r\n console.warn(\r\n 'mixinAlbedoColor.calculateAlbedoColor(): No need to calculate albedo color, make sure needFragmentColor() returns true'\r\n );\r\n return pb.vec4(1);\r\n }\r\n let color = this.getUniformValueAlbedoColor(scope);\r\n if (this.albedoTexture) {\r\n color = pb.mul(color, this.sampleAlbedoTexture(scope, uv));\r\n }\r\n return color;\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor()) {\r\n if (this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zAlbedo = this.getInstancedUniform(scope, ALBEDO_COLOR_UNIFORM);\r\n }\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n const pb = scope.$builder;\r\n scope.zAlbedo = pb.vec4().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zAlbedo', this._albedoColor);\r\n }\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinAlbedoColor };\r\n}\r\n\r\nexport { mixinAlbedoColor };\r\n"],"names":["mixinAlbedoColor","BaseCls","albedoColorMixed","S","applyMaterialMixins","mixinTextureProps","ALBEDO_COLOR_UNIFORM","defineInstanceUniform","_albedoColor","Vector4","one","copyFrom","other","albedoColor","val","set","uniformChanged","getUniformValueAlbedoColor","scope","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$inputs","zAlbedo","calculateAlbedoColor","uv","pb","$builder","needFragmentColor","console","warn","vec4","color","albedoTexture","mul","sampleAlbedoTexture","vertexShader","$outputs","getInstancedUniform","fragmentShader","uniform","applyUniformValues","bindGroup","ctx","pass","setValue"],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Foliage mixin
3
- *
4
- * @param BaseCls - Class to mix in
5
- * @returns Mixed class
6
- *
7
- * @public
8
- */ function mixinFoliage(BaseCls) {
9
- if (BaseCls.foliageMixed) {
10
- return BaseCls;
11
- }
12
- return class extends BaseCls {
13
- static foliageMixed = true;
14
- constructor(){
15
- super();
16
- this.cullMode = 'none';
17
- }
18
- calculateFoliageAlbedo(scope, albedoColor, texelCoord) {
19
- const pb = scope.$builder;
20
- const that = this;
21
- const funcNameCalcMipLevel = 'Z_CalcFoliageMipLevel';
22
- pb.func(funcNameCalcMipLevel, [
23
- pb.vec2('coord')
24
- ], function() {
25
- this.$l.dx = pb.dpdx(this.coord);
26
- this.$l.dy = pb.dpdy(this.coord);
27
- this.$l.deltaMaxSqr = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));
28
- this.$return(pb.max(0, pb.mul(pb.log2(this.deltaMaxSqr), 0.5)));
29
- });
30
- const funcNameCalcFoliageAlbedo = 'Z_calcFoliageAlbedo';
31
- pb.func(funcNameCalcFoliageAlbedo, [
32
- pb.vec4('albedo'),
33
- pb.vec2('coord')
34
- ], function() {
35
- this.$l.a = pb.mul(this.albedo.a, pb.add(1, pb.mul(pb.max(0, scope[funcNameCalcMipLevel](this.coord)), 0.25)));
36
- if (that.alphaToCoverage) {
37
- this.a = pb.add(pb.div(pb.sub(this.a, 0.4), pb.max(pb.fwidth(this.albedo.a), 0.0001)), 0.5);
38
- }
39
- this.$return(pb.vec4(this.albedo.rgb, this.a));
40
- });
41
- return pb.getGlobalScope()[funcNameCalcFoliageAlbedo](albedoColor, texelCoord);
42
- }
43
- };
44
- }
45
-
46
- export { mixinFoliage };
47
- //# sourceMappingURL=foliage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"foliage.js","sources":["../../../../src/material/mixins/foliage.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../meshmaterial';\r\n\r\n/**\r\n * Interface for foliage mixin\r\n * @public\r\n */\r\nexport interface IMixinFoliage {\r\n calculateFoliageAlbedo(\r\n scope: PBInsideFunctionScope,\r\n albedoColor: PBShaderExp,\r\n texelCoord: PBShaderExp\r\n ): PBShaderExp;\r\n}\r\n\r\n/**\r\n * Foliage mixin\r\n *\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n *\r\n * @public\r\n */\r\nfunction mixinFoliage<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).foliageMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinFoliage };\r\n }\r\n return class extends (BaseCls as typeof MeshMaterial) {\r\n static foliageMixed = true;\r\n constructor() {\r\n super();\r\n this.cullMode = 'none';\r\n }\r\n calculateFoliageAlbedo(\r\n scope: PBInsideFunctionScope,\r\n albedoColor: PBShaderExp,\r\n texelCoord: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n const funcNameCalcMipLevel = 'Z_CalcFoliageMipLevel';\r\n pb.func(funcNameCalcMipLevel, [pb.vec2('coord')], function () {\r\n this.$l.dx = pb.dpdx(this.coord);\r\n this.$l.dy = pb.dpdy(this.coord);\r\n this.$l.deltaMaxSqr = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));\r\n this.$return(pb.max(0, pb.mul(pb.log2(this.deltaMaxSqr), 0.5)));\r\n });\r\n const funcNameCalcFoliageAlbedo = 'Z_calcFoliageAlbedo';\r\n pb.func(funcNameCalcFoliageAlbedo, [pb.vec4('albedo'), pb.vec2('coord')], function () {\r\n this.$l.a = pb.mul(\r\n this.albedo.a,\r\n pb.add(1, pb.mul(pb.max(0, scope[funcNameCalcMipLevel](this.coord)), 0.25))\r\n );\r\n if (that.alphaToCoverage) {\r\n this.a = pb.add(pb.div(pb.sub(this.a, 0.4), pb.max(pb.fwidth(this.albedo.a), 0.0001)), 0.5);\r\n }\r\n this.$return(pb.vec4(this.albedo.rgb, this.a));\r\n });\r\n return pb.getGlobalScope()[funcNameCalcFoliageAlbedo](albedoColor, texelCoord);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinFoliage };\r\n}\r\n\r\nexport { mixinFoliage };\r\n"],"names":["mixinFoliage","BaseCls","foliageMixed","cullMode","calculateFoliageAlbedo","scope","albedoColor","texelCoord","pb","$builder","that","funcNameCalcMipLevel","func","vec2","$l","dx","dpdx","coord","dy","dpdy","deltaMaxSqr","max","dot","$return","mul","log2","funcNameCalcFoliageAlbedo","vec4","a","albedo","add","alphaToCoverage","div","sub","fwidth","rgb","getGlobalScope"],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- import { applyMaterialMixins } from '../../meshmaterial.js';
2
- import { mixinLight } from '../lit.js';
3
- import { ShaderHelper } from '../../shader/helper.js';
4
- import { MaterialVaryingFlags } from '../../../values.js';
5
-
6
- /**
7
- * Blinn-phong lighting model mixin
8
- * @param BaseCls - Class to mix in
9
- * @returns Mixed class
10
- * @public
11
- */ function mixinBlinnPhong(BaseCls) {
12
- if (BaseCls.blinnPhongMixed) {
13
- return BaseCls;
14
- }
15
- const S = applyMaterialMixins(BaseCls, mixinLight);
16
- const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float');
17
- return class extends S {
18
- static blinnPhongMixed = true;
19
- _shininess;
20
- constructor(){
21
- super();
22
- this._shininess = 32;
23
- }
24
- copyFrom(other) {
25
- super.copyFrom(other);
26
- this.shininess = other.shininess;
27
- }
28
- /** Shininess */ get shininess() {
29
- return this._shininess;
30
- }
31
- set shininess(val) {
32
- if (val !== this._shininess) {
33
- this._shininess = val;
34
- this.uniformChanged();
35
- }
36
- }
37
- vertexShader(scope) {
38
- super.vertexShader(scope);
39
- if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {
40
- scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);
41
- }
42
- }
43
- fragmentShader(scope) {
44
- super.fragmentShader(scope);
45
- const pb = scope.$builder;
46
- if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {
47
- scope.zShininess = pb.float().uniform(2);
48
- }
49
- }
50
- applyUniformValues(bindGroup, ctx, pass) {
51
- super.applyUniformValues(bindGroup, ctx, pass);
52
- if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {
53
- bindGroup.setValue('zShininess', this._shininess);
54
- }
55
- }
56
- blinnPhongLight(scope, worldPos, normal, viewVec, albedo, outRoughness) {
57
- const pb = scope.$builder;
58
- const funcName = 'Z_blinnPhongLight';
59
- const that = this;
60
- pb.func(funcName, [
61
- pb.vec3('worldPos'),
62
- pb.vec3('normal'),
63
- pb.vec3('viewVec'),
64
- pb.vec4('albedo'),
65
- ...outRoughness ? [
66
- pb.vec4('outRoughness').out()
67
- ] : []
68
- ], function() {
69
- if (!that.needFragmentColor()) {
70
- this.$return(this.albedo.rgb);
71
- } else {
72
- const shininess = that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING ? this.$inputs.zShininess : this.zShininess;
73
- if (that.needCalculateEnvLight() && !outRoughness) {
74
- this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);
75
- } else {
76
- this.$l.diffuseColor = pb.vec3(0);
77
- }
78
- this.$l.specularColor = pb.vec3(0);
79
- that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
80
- this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
81
- this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
82
- this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
83
- this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));
84
- this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);
85
- this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
86
- this.$l.diffuse = pb.mul(this.lightColor, this.NoL);
87
- this.$l.specular = pb.mul(this.lightColor, pb.pow(this.NoH, shininess));
88
- if (shadow) {
89
- this.$if(pb.greaterThan(this.NoL, 0), function() {
90
- this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));
91
- this.diffuse = pb.mul(this.diffuse, this.shadow);
92
- this.specular = pb.mul(this.specular, this.shadow);
93
- });
94
- }
95
- this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
96
- this.specularColor = pb.add(this.specularColor, this.specular);
97
- });
98
- this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);
99
- if (outRoughness) {
100
- this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));
101
- this.outRoughness = pb.vec4(pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)), pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this)));
102
- }
103
- this.$return(this.litColor);
104
- }
105
- });
106
- return outRoughness ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, outRoughness) : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo);
107
- }
108
- };
109
- }
110
-
111
- export { mixinBlinnPhong };
112
- //# sourceMappingURL=blinnphong.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blinnphong.js","sources":["../../../../../src/material/mixins/lightmodel/blinnphong.ts"],"sourcesContent":["import type { BindGroup, PBFunctionScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\nimport type { DrawContext } from '../../../render';\r\nimport { ShaderHelper } from '../../shader/helper';\r\nimport { MaterialVaryingFlags } from '../../../values';\r\n\r\n/**\r\n * Interface for blinn-phong lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinBlinnPhong = {\r\n shininess: number;\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Blinn-phong lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinBlinnPhong<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).blinnPhongMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinBlinnPhong };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n const SHININESS_UNIFORM = S.defineInstanceUniform('shininess', 'float');\r\n return class extends S {\r\n protected static blinnPhongMixed = true;\r\n private _shininess: number;\r\n constructor() {\r\n super();\r\n this._shininess = 32;\r\n }\r\n copyFrom(other: this): void {\r\n super.copyFrom(other);\r\n this.shininess = other.shininess;\r\n }\r\n /** Shininess */\r\n get shininess(): number {\r\n return this._shininess;\r\n }\r\n set shininess(val: number) {\r\n if (val !== this._shininess) {\r\n this._shininess = val;\r\n this.uniformChanged();\r\n }\r\n }\r\n vertexShader(scope: PBFunctionScope): void {\r\n super.vertexShader(scope);\r\n if (this.needFragmentColor() && this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING) {\r\n scope.$outputs.zShininess = this.getInstancedUniform(scope, SHININESS_UNIFORM);\r\n }\r\n }\r\n fragmentShader(scope: PBFunctionScope): void {\r\n super.fragmentShader(scope);\r\n const pb = scope.$builder;\r\n if (this.needFragmentColor() && !(this.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n scope.zShininess = pb.float().uniform(2);\r\n }\r\n }\r\n applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void {\r\n super.applyUniformValues(bindGroup, ctx, pass);\r\n if (this.needFragmentColor(ctx) && !(ctx.materialFlags & MaterialVaryingFlags.INSTANCING)) {\r\n bindGroup.setValue('zShininess', this._shininess);\r\n }\r\n }\r\n blinnPhongLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n albedo: PBShaderExp,\r\n outRoughness?: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_blinnPhongLight';\r\n const that = this;\r\n pb.func(\r\n funcName,\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.vec4('albedo'),\r\n ...(outRoughness ? [pb.vec4('outRoughness').out()] : [])\r\n ],\r\n function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n const shininess =\r\n that.drawContext.materialFlags & MaterialVaryingFlags.INSTANCING\r\n ? this.$inputs.zShininess\r\n : this.zShininess;\r\n if (that.needCalculateEnvLight() && !outRoughness) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n this.$l.specularColor = pb.vec3(0);\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));\r\n this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.diffuse = pb.mul(this.lightColor, this.NoL);\r\n this.$l.specular = pb.mul(this.lightColor, pb.pow(this.NoH, shininess));\r\n if (shadow) {\r\n this.$if(pb.greaterThan(this.NoL, 0), function () {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n this.specular = pb.mul(this.specular, this.shadow);\r\n });\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n this.specularColor = pb.add(this.specularColor, this.specular);\r\n });\r\n this.$l.litColor = pb.add(pb.mul(this.albedo.rgb, this.diffuseColor), this.specularColor);\r\n if (outRoughness) {\r\n this.$l.roughness = pb.sqrt(pb.div(2, pb.add(shininess, 2)));\r\n this.outRoughness = pb.vec4(\r\n pb.mul(this.albedo.rgb, pb.sub(1, this.roughness)),\r\n pb.mul(this.roughness, ShaderHelper.getCameraRoughnessFactor(this))\r\n );\r\n }\r\n this.$return(this.litColor);\r\n }\r\n }\r\n );\r\n return outRoughness\r\n ? pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo, outRoughness)\r\n : pb.getGlobalScope()[funcName](worldPos, normal, viewVec, albedo);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinBlinnPhong };\r\n}\r\n"],"names":["mixinBlinnPhong","BaseCls","blinnPhongMixed","S","applyMaterialMixins","mixinLight","SHININESS_UNIFORM","defineInstanceUniform","_shininess","copyFrom","other","shininess","val","uniformChanged","vertexShader","scope","needFragmentColor","drawContext","materialFlags","MaterialVaryingFlags","INSTANCING","$outputs","zShininess","getInstancedUniform","fragmentShader","pb","$builder","float","uniform","applyUniformValues","bindGroup","ctx","pass","setValue","blinnPhongLight","worldPos","normal","viewVec","albedo","outRoughness","funcName","that","func","vec3","vec4","out","$return","rgb","$inputs","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","specularColor","forEachLight","type","posRange","dirCutoff","colorIntensity","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","halfVec","normalize","add","NoH","lightColor","mul","a","diffuse","specular","pow","$if","greaterThan","calculateShadow","litColor","roughness","sqrt","div","sub","ShaderHelper","getCameraRoughnessFactor","getGlobalScope"],"mappings":";;;;;AAyBA;;;;;IAMO,SAASA,eAAAA,CAA+CC,OAAU,EAAA;IACvE,IAAKA,OAAgBC,CAAAA,eAAe,EAAE;QACpC,OAAOD,OAAAA;AACT;IACA,MAAME,CAAAA,GAAIC,oBAAoBH,OAASI,EAAAA,UAAAA,CAAAA;AACvC,IAAA,MAAMC,iBAAoBH,GAAAA,CAAAA,CAAEI,qBAAqB,CAAC,WAAa,EAAA,OAAA,CAAA;AAC/D,IAAA,OAAO,cAAcJ,CAAAA,CAAAA;AACnB,QAAA,OAAiBD,kBAAkB,IAAK;QAChCM,UAAmB;QAC3B,WAAc,EAAA;YACZ,KAAK,EAAA;YACL,IAAI,CAACA,UAAU,GAAG,EAAA;AACpB;AACAC,QAAAA,QAAAA,CAASC,KAAW,EAAQ;AAC1B,YAAA,KAAK,CAACD,QAASC,CAAAA,KAAAA,CAAAA;AACf,YAAA,IAAI,CAACC,SAAS,GAAGD,KAAAA,CAAMC,SAAS;AAClC;yBAEA,IAAIA,SAAoB,GAAA;YACtB,OAAO,IAAI,CAACH,UAAU;AACxB;QACA,IAAIG,SAAAA,CAAUC,GAAW,EAAE;AACzB,YAAA,IAAIA,GAAQ,KAAA,IAAI,CAACJ,UAAU,EAAE;gBAC3B,IAAI,CAACA,UAAU,GAAGI,GAAAA;AAClB,gBAAA,IAAI,CAACC,cAAc,EAAA;AACrB;AACF;AACAC,QAAAA,YAAAA,CAAaC,KAAsB,EAAQ;AACzC,YAAA,KAAK,CAACD,YAAaC,CAAAA,KAAAA,CAAAA;AACnB,YAAA,IAAI,IAAI,CAACC,iBAAiB,EAAA,IAAM,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,EAAE;gBAChGL,KAAMM,CAAAA,QAAQ,CAACC,UAAU,GAAG,IAAI,CAACC,mBAAmB,CAACR,KAAOT,EAAAA,iBAAAA,CAAAA;AAC9D;AACF;AACAkB,QAAAA,cAAAA,CAAeT,KAAsB,EAAQ;AAC3C,YAAA,KAAK,CAACS,cAAeT,CAAAA,KAAAA,CAAAA;YACrB,MAAMU,EAAAA,GAAKV,MAAMW,QAAQ;AACzB,YAAA,IAAI,IAAI,CAACV,iBAAiB,EAAA,IAAM,EAAE,IAAI,CAACC,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAG,EAAA;AACnGL,gBAAAA,KAAAA,CAAMO,UAAU,GAAGG,EAAAA,CAAGE,KAAK,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACxC;AACF;AACAC,QAAAA,kBAAAA,CAAmBC,SAAoB,EAAEC,GAAgB,EAAEC,IAAY,EAAQ;YAC7E,KAAK,CAACH,kBAAmBC,CAAAA,SAAAA,EAAWC,GAAKC,EAAAA,IAAAA,CAAAA;AACzC,YAAA,IAAI,IAAI,CAAChB,iBAAiB,CAACe,GAAQ,CAAA,IAAA,EAAEA,GAAAA,CAAIb,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,CAAG,EAAA;AACzFU,gBAAAA,SAAAA,CAAUG,QAAQ,CAAC,YAAc,EAAA,IAAI,CAACzB,UAAU,CAAA;AAClD;AACF;QACA0B,eACEnB,CAAAA,KAA4B,EAC5BoB,QAAqB,EACrBC,MAAmB,EACnBC,OAAoB,EACpBC,MAAmB,EACnBC,YAA0B,EACb;YACb,MAAMd,EAAAA,GAAKV,MAAMW,QAAQ;AACzB,YAAA,MAAMc,QAAW,GAAA,mBAAA;AACjB,YAAA,MAAMC,OAAO,IAAI;YACjBhB,EAAGiB,CAAAA,IAAI,CACLF,QACA,EAAA;AACEf,gBAAAA,EAAAA,CAAGkB,IAAI,CAAC,UAAA,CAAA;AACRlB,gBAAAA,EAAAA,CAAGkB,IAAI,CAAC,QAAA,CAAA;AACRlB,gBAAAA,EAAAA,CAAGkB,IAAI,CAAC,SAAA,CAAA;AACRlB,gBAAAA,EAAAA,CAAGmB,IAAI,CAAC,QAAA,CAAA;mBACJL,YAAe,GAAA;oBAACd,EAAGmB,CAAAA,IAAI,CAAC,cAAA,CAAA,CAAgBC,GAAG;AAAG,iBAAA,GAAG;aACtD,EACD,WAAA;gBACE,IAAI,CAACJ,IAAKzB,CAAAA,iBAAiB,EAAI,EAAA;AAC7B,oBAAA,IAAI,CAAC8B,OAAO,CAAC,IAAI,CAACR,MAAM,CAACS,GAAG,CAAA;iBACvB,MAAA;AACL,oBAAA,MAAMpC,YACJ8B,IAAKxB,CAAAA,WAAW,CAACC,aAAa,GAAGC,oBAAqBC,CAAAA,UAAU,GAC5D,IAAI,CAAC4B,OAAO,CAAC1B,UAAU,GACvB,IAAI,CAACA,UAAU;AACrB,oBAAA,IAAImB,IAAKQ,CAAAA,qBAAqB,EAAM,IAAA,CAACV,YAAc,EAAA;AACjD,wBAAA,IAAI,CAACW,EAAE,CAACC,YAAY,GAAGV,IAAAA,CAAKW,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAChB,MAAM,CAAA;qBAC9D,MAAA;AACL,wBAAA,IAAI,CAACc,EAAE,CAACC,YAAY,GAAG1B,EAAAA,CAAGkB,IAAI,CAAC,CAAA,CAAA;AACjC;AACA,oBAAA,IAAI,CAACO,EAAE,CAACG,aAAa,GAAG5B,EAAAA,CAAGkB,IAAI,CAAC,CAAA,CAAA;AAChCF,oBAAAA,IAAAA,CAAKa,YAAY,CAAC,IAAI,EAAE,SAAUC,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,cAAc,EAAEC,MAAM,EAAA;AACjF,wBAAA,IAAI,CAACT,EAAE,CAACU,UAAU,GAAGnB,IAAKoB,CAAAA,yBAAyB,CACjD,IAAI,EACJN,IACA,EAAA,IAAI,CAACpB,QAAQ,EACbqB,QACAC,EAAAA,SAAAA,CAAAA;AAEF,wBAAA,IAAI,CAACP,EAAE,CAACY,QAAQ,GAAGrB,IAAKsB,CAAAA,uBAAuB,CAAC,IAAI,EAAER,IAAM,EAAA,IAAI,CAACpB,QAAQ,EAAEqB,QAAUC,EAAAA,SAAAA,CAAAA;AACrF,wBAAA,IAAI,CAACP,EAAE,CAACc,GAAG,GAAGvC,EAAAA,CAAGwC,KAAK,CAACxC,EAAAA,CAAGyC,GAAG,CAAC,IAAI,CAAC9B,MAAM,EAAE,IAAI,CAAC0B,QAAQ,GAAG,CAAG,EAAA,CAAA,CAAA;AAC9D,wBAAA,IAAI,CAACZ,EAAE,CAACiB,OAAO,GAAG1C,GAAG2C,SAAS,CAAC3C,EAAG4C,CAAAA,GAAG,CAAC,IAAI,CAAChC,OAAO,EAAE,IAAI,CAACyB,QAAQ,CAAA,CAAA;AACjE,wBAAA,IAAI,CAACZ,EAAE,CAACoB,GAAG,GAAG7C,EAAAA,CAAGwC,KAAK,CAACxC,EAAAA,CAAGyC,GAAG,CAAC,IAAI,CAAC9B,MAAM,EAAE,IAAI,CAAC+B,OAAO,GAAG,CAAG,EAAA,CAAA,CAAA;AAC7D,wBAAA,IAAI,CAACjB,EAAE,CAACqB,UAAU,GAAG9C,GAAG+C,GAAG,CAACd,cAAeX,CAAAA,GAAG,EAAEW,cAAee,CAAAA,CAAC,EAAE,IAAI,CAACb,UAAU,CAAA;AACjF,wBAAA,IAAI,CAACV,EAAE,CAACwB,OAAO,GAAGjD,EAAG+C,CAAAA,GAAG,CAAC,IAAI,CAACD,UAAU,EAAE,IAAI,CAACP,GAAG,CAAA;AAClD,wBAAA,IAAI,CAACd,EAAE,CAACyB,QAAQ,GAAGlD,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAACD,UAAU,EAAE9C,EAAGmD,CAAAA,GAAG,CAAC,IAAI,CAACN,GAAG,EAAE3D,SAAAA,CAAAA,CAAAA;AAC5D,wBAAA,IAAIgD,MAAQ,EAAA;4BACV,IAAI,CAACkB,GAAG,CAACpD,EAAGqD,CAAAA,WAAW,CAAC,IAAI,CAACd,GAAG,EAAE,CAAI,CAAA,EAAA,WAAA;AACpC,gCAAA,IAAI,CAACd,EAAE,CAACS,MAAM,GAAGlC,EAAAA,CAAGkB,IAAI,CAACF,IAAAA,CAAKsC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC5C,QAAQ,EAAE,IAAI,CAAC6B,GAAG,CAAA,CAAA;AAC3E,gCAAA,IAAI,CAACU,OAAO,GAAGjD,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAACE,OAAO,EAAE,IAAI,CAACf,MAAM,CAAA;AAC/C,gCAAA,IAAI,CAACgB,QAAQ,GAAGlD,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAACG,QAAQ,EAAE,IAAI,CAAChB,MAAM,CAAA;AACnD,6BAAA,CAAA;AACF;AACA,wBAAA,IAAI,CAACR,YAAY,GAAG1B,EAAAA,CAAG4C,GAAG,CAAC,IAAI,CAAClB,YAAY,EAAE,IAAI,CAACuB,OAAO,CAAA;AAC1D,wBAAA,IAAI,CAACrB,aAAa,GAAG5B,EAAAA,CAAG4C,GAAG,CAAC,IAAI,CAAChB,aAAa,EAAE,IAAI,CAACsB,QAAQ,CAAA;AAC/D,qBAAA,CAAA;oBACA,IAAI,CAACzB,EAAE,CAAC8B,QAAQ,GAAGvD,EAAG4C,CAAAA,GAAG,CAAC5C,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAAClC,MAAM,CAACS,GAAG,EAAE,IAAI,CAACI,YAAY,CAAA,EAAG,IAAI,CAACE,aAAa,CAAA;AACxF,oBAAA,IAAId,YAAc,EAAA;AAChB,wBAAA,IAAI,CAACW,EAAE,CAAC+B,SAAS,GAAGxD,EAAGyD,CAAAA,IAAI,CAACzD,EAAAA,CAAG0D,GAAG,CAAC,CAAA,EAAG1D,EAAG4C,CAAAA,GAAG,CAAC1D,SAAW,EAAA,CAAA,CAAA,CAAA,CAAA;AACxD,wBAAA,IAAI,CAAC4B,YAAY,GAAGd,EAAAA,CAAGmB,IAAI,CACzBnB,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAAClC,MAAM,CAACS,GAAG,EAAEtB,EAAAA,CAAG2D,GAAG,CAAC,CAAG,EAAA,IAAI,CAACH,SAAS,IAChDxD,EAAG+C,CAAAA,GAAG,CAAC,IAAI,CAACS,SAAS,EAAEI,YAAaC,CAAAA,wBAAwB,CAAC,IAAI,CAAA,CAAA,CAAA;AAErE;AACA,oBAAA,IAAI,CAACxC,OAAO,CAAC,IAAI,CAACkC,QAAQ,CAAA;AAC5B;AACF,aAAA,CAAA;YAEF,OAAOzC,YAAAA,GACHd,GAAG8D,cAAc,EAAE,CAAC/C,QAAS,CAAA,CAACL,UAAUC,MAAQC,EAAAA,OAAAA,EAASC,QAAQC,YACjEd,CAAAA,GAAAA,EAAAA,CAAG8D,cAAc,EAAE,CAAC/C,SAAS,CAACL,QAAAA,EAAUC,QAAQC,OAASC,EAAAA,MAAAA,CAAAA;AAC/D;AACF,KAAA;AACF;;;;"}
@@ -1,58 +0,0 @@
1
- import { applyMaterialMixins } from '../../meshmaterial.js';
2
- import { mixinLight } from '../lit.js';
3
-
4
- /**
5
- * Lambert lighting model mixin
6
- * @param BaseCls - Class to mix in
7
- * @returns Mixed class
8
- * @public
9
- */ function mixinLambert(BaseCls) {
10
- if (BaseCls.lambertMixed) {
11
- return BaseCls;
12
- }
13
- const S = applyMaterialMixins(BaseCls, mixinLight);
14
- return class extends S {
15
- static lambertMixed = true;
16
- constructor(){
17
- super();
18
- }
19
- lambertLight(scope, worldPos, normal, albedo) {
20
- const pb = scope.$builder;
21
- const funcName = 'Z_lambertLight';
22
- const that = this;
23
- pb.func(funcName, [
24
- pb.vec3('worldPos'),
25
- pb.vec3('normal'),
26
- pb.vec4('albedo')
27
- ], function() {
28
- if (!that.needFragmentColor()) {
29
- this.$return(this.albedo.rgb);
30
- } else {
31
- if (that.needCalculateEnvLight()) {
32
- this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);
33
- } else {
34
- this.$l.diffuseColor = pb.vec3(0);
35
- }
36
- that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
37
- this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
38
- this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
39
- this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
40
- this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
41
- this.$l.diffuse = pb.mul(this.lightColor, this.NoL);
42
- if (shadow) {
43
- this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));
44
- this.diffuse = pb.mul(this.diffuse, this.shadow);
45
- }
46
- this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
47
- });
48
- this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);
49
- this.$return(this.litColor);
50
- }
51
- });
52
- return pb.getGlobalScope()[funcName](worldPos, normal, albedo);
53
- }
54
- };
55
- }
56
-
57
- export { mixinLambert };
58
- //# sourceMappingURL=lambert.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lambert.js","sources":["../../../../../src/material/mixins/lightmodel/lambert.ts"],"sourcesContent":["import type { PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\nimport type { MeshMaterial } from '../../meshmaterial';\r\nimport { applyMaterialMixins } from '../../meshmaterial';\r\nimport type { IMixinLight } from '../lit';\r\nimport { mixinLight } from '../lit';\r\n\r\n/**\r\n * Interface of lambert lighting model mixin\r\n * @public\r\n */\r\nexport type IMixinLambert = {\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ): PBShaderExp;\r\n} & IMixinLight;\r\n\r\n/**\r\n * Lambert lighting model mixin\r\n * @param BaseCls - Class to mix in\r\n * @returns Mixed class\r\n * @public\r\n */\r\nexport function mixinLambert<T extends typeof MeshMaterial>(BaseCls: T) {\r\n if ((BaseCls as any).lambertMixed) {\r\n return BaseCls as T & { new (...args: any[]): IMixinLambert };\r\n }\r\n const S = applyMaterialMixins(BaseCls, mixinLight);\r\n return class extends S {\r\n protected static lambertMixed = true;\r\n constructor() {\r\n super();\r\n }\r\n lambertLight(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n albedo: PBShaderExp\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_lambertLight';\r\n const that = this;\r\n pb.func(funcName, [pb.vec3('worldPos'), pb.vec3('normal'), pb.vec4('albedo')], function () {\r\n if (!that.needFragmentColor()) {\r\n this.$return(this.albedo.rgb);\r\n } else {\r\n if (that.needCalculateEnvLight()) {\r\n this.$l.diffuseColor = that.getEnvLightIrradiance(this, this.normal);\r\n } else {\r\n this.$l.diffuseColor = pb.vec3(0);\r\n }\r\n that.forEachLight(this, function (type, posRange, dirCutoff, colorIntensity, shadow) {\r\n this.$l.lightAtten = that.calculateLightAttenuation(\r\n this,\r\n type,\r\n this.worldPos,\r\n posRange,\r\n dirCutoff\r\n );\r\n this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);\r\n this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);\r\n this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);\r\n this.$l.diffuse = pb.mul(this.lightColor, this.NoL);\r\n if (shadow) {\r\n this.$l.shadow = pb.vec3(that.calculateShadow(this, this.worldPos, this.NoL));\r\n this.diffuse = pb.mul(this.diffuse, this.shadow);\r\n }\r\n this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);\r\n });\r\n this.$l.litColor = pb.mul(this.albedo.rgb, this.diffuseColor);\r\n this.$return(this.litColor);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcName](worldPos, normal, albedo);\r\n }\r\n } as unknown as T & { new (...args: any[]): IMixinLambert };\r\n}\r\n"],"names":["mixinLambert","BaseCls","lambertMixed","S","applyMaterialMixins","mixinLight","lambertLight","scope","worldPos","normal","albedo","pb","$builder","funcName","that","func","vec3","vec4","needFragmentColor","$return","rgb","needCalculateEnvLight","$l","diffuseColor","getEnvLightIrradiance","forEachLight","type","posRange","dirCutoff","colorIntensity","shadow","lightAtten","calculateLightAttenuation","lightDir","calculateLightDirection","NoL","clamp","dot","lightColor","mul","a","diffuse","calculateShadow","add","litColor","getGlobalScope"],"mappings":"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"}