@zephyr3d/scene 0.9.25 → 0.9.26

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 (262) hide show
  1. package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
  2. package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
  3. package/dist/animation/joint_dynamics/controller.js +7 -5
  4. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/morphtrack.js +3 -4
  8. package/dist/animation/morphtrack.js.map +1 -1
  9. package/dist/animation/skeleton.js +58 -24
  10. package/dist/animation/skeleton.js.map +1 -1
  11. package/dist/animation/spring/multi_chain_spring_system.js +577 -179
  12. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  13. package/dist/animation/spring/spring_collider.js +4 -3
  14. package/dist/animation/spring/spring_collider.js.map +1 -1
  15. package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
  16. package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
  17. package/dist/animation/spring/spring_particle.js +2 -0
  18. package/dist/animation/spring/spring_particle.js.map +1 -1
  19. package/dist/animation/spring/spring_system.js +11 -3
  20. package/dist/animation/spring/spring_system.js.map +1 -1
  21. package/dist/animation/spring_modifier.js +10 -0
  22. package/dist/animation/spring_modifier.js.map +1 -1
  23. package/dist/app/engine.js +53 -43
  24. package/dist/app/engine.js.map +1 -1
  25. package/dist/app/scriptingsystem.js +119 -6
  26. package/dist/app/scriptingsystem.js.map +1 -1
  27. package/dist/app/scriptregistry.js +3 -2
  28. package/dist/app/scriptregistry.js.map +1 -1
  29. package/dist/asset/assetmanager.js +284 -67
  30. package/dist/asset/assetmanager.js.map +1 -1
  31. package/dist/asset/loaders/zhair/zhair_format.js +288 -0
  32. package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
  33. package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
  34. package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
  35. package/dist/asset/model.js +178 -67
  36. package/dist/asset/model.js.map +1 -1
  37. package/dist/camera/camera.js +193 -21
  38. package/dist/camera/camera.js.map +1 -1
  39. package/dist/camera/perspectivecamera.js +3 -1
  40. package/dist/camera/perspectivecamera.js.map +1 -1
  41. package/dist/index.d.ts +4019 -1278
  42. package/dist/index.js +15 -5
  43. package/dist/index.js.map +1 -1
  44. package/dist/material/eye.js +932 -0
  45. package/dist/material/eye.js.map +1 -0
  46. package/dist/material/hair.js +917 -0
  47. package/dist/material/hair.js.map +1 -0
  48. package/dist/material/hairstrand.js +842 -0
  49. package/dist/material/hairstrand.js.map +1 -0
  50. package/dist/material/hairstrand_data.js +162 -0
  51. package/dist/material/hairstrand_data.js.map +1 -0
  52. package/dist/material/lambert.js +5 -2
  53. package/dist/material/lambert.js.map +1 -1
  54. package/dist/material/material.js +338 -300
  55. package/dist/material/material.js.map +1 -1
  56. package/dist/material/meshmaterial.js +120 -19
  57. package/dist/material/meshmaterial.js.map +1 -1
  58. package/dist/material/mixins/albedocolor.js +1 -1
  59. package/dist/material/mixins/albedocolor.js.map +1 -1
  60. package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
  61. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/lambert.js +5 -4
  63. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  64. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
  65. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  67. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  68. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
  69. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  70. package/dist/material/mixins/lit.js +73 -18
  71. package/dist/material/mixins/lit.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +4 -4
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/mixins/texture.js +48 -11
  75. package/dist/material/mixins/texture.js.map +1 -1
  76. package/dist/material/mtoon.js +6 -5
  77. package/dist/material/mtoon.js.map +1 -1
  78. package/dist/material/pbrblueprint.js +146 -28
  79. package/dist/material/pbrblueprint.js.map +1 -1
  80. package/dist/material/pbrblueprint_instance.js +501 -0
  81. package/dist/material/pbrblueprint_instance.js.map +1 -0
  82. package/dist/material/pbrmr.js +15 -16
  83. package/dist/material/pbrmr.js.map +1 -1
  84. package/dist/material/shader/helper.js +330 -20
  85. package/dist/material/shader/helper.js.map +1 -1
  86. package/dist/material/shader/terrain_blend.js +55 -0
  87. package/dist/material/shader/terrain_blend.js.map +1 -0
  88. package/dist/material/skin.js +192 -32
  89. package/dist/material/skin.js.map +1 -1
  90. package/dist/material/spriteblueprint.js +16 -1
  91. package/dist/material/spriteblueprint.js.map +1 -1
  92. package/dist/material/subsurfaceprofile.js +86 -23
  93. package/dist/material/subsurfaceprofile.js.map +1 -1
  94. package/dist/material/water.js +3 -1
  95. package/dist/material/water.js.map +1 -1
  96. package/dist/posteffect/bloom.js +167 -7
  97. package/dist/posteffect/bloom.js.map +1 -1
  98. package/dist/posteffect/coloradjust.js +2 -1
  99. package/dist/posteffect/coloradjust.js.map +1 -1
  100. package/dist/posteffect/compositor.js.map +1 -1
  101. package/dist/posteffect/fxaa.js +2 -1
  102. package/dist/posteffect/fxaa.js.map +1 -1
  103. package/dist/posteffect/grayscale.js +3 -1
  104. package/dist/posteffect/grayscale.js.map +1 -1
  105. package/dist/posteffect/motionblur.js +4 -1
  106. package/dist/posteffect/motionblur.js.map +1 -1
  107. package/dist/posteffect/posteffect.js.map +1 -1
  108. package/dist/posteffect/skinsss.js +368 -69
  109. package/dist/posteffect/skinsss.js.map +1 -1
  110. package/dist/posteffect/ssgi.js +16 -9
  111. package/dist/posteffect/ssgi.js.map +1 -1
  112. package/dist/posteffect/ssr.js +3 -0
  113. package/dist/posteffect/ssr.js.map +1 -1
  114. package/dist/posteffect/sss.js +91 -34
  115. package/dist/posteffect/sss.js.map +1 -1
  116. package/dist/posteffect/taa.js.map +1 -1
  117. package/dist/posteffect/tonemap.js +44 -1
  118. package/dist/posteffect/tonemap.js.map +1 -1
  119. package/dist/render/abuffer_oit.js +45 -39
  120. package/dist/render/abuffer_oit.js.map +1 -1
  121. package/dist/render/cull_visitor.js +19 -0
  122. package/dist/render/cull_visitor.js.map +1 -1
  123. package/dist/render/depthpass.js +36 -2
  124. package/dist/render/depthpass.js.map +1 -1
  125. package/dist/render/drawable_mixin.js +26 -1
  126. package/dist/render/drawable_mixin.js.map +1 -1
  127. package/dist/render/dualdepthpeeling_oit.js +52 -51
  128. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  129. package/dist/render/envlight.js +1 -1
  130. package/dist/render/envlight.js.map +1 -1
  131. package/dist/render/fbm_wavegenerator.js +3 -0
  132. package/dist/render/fbm_wavegenerator.js.map +1 -1
  133. package/dist/render/gerstner_wavegenerator.js +3 -0
  134. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  135. package/dist/render/globalbindgroup_allocator.js +3 -0
  136. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  137. package/dist/render/oit.js +29 -0
  138. package/dist/render/oit.js.map +1 -0
  139. package/dist/render/render_queue.js +3 -0
  140. package/dist/render/render_queue.js.map +1 -1
  141. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  142. package/dist/render/rendergraph/executor.js +2 -0
  143. package/dist/render/rendergraph/executor.js.map +1 -1
  144. package/dist/render/rendergraph/forward_plus_builder.js +61 -1
  145. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  146. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  147. package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
  148. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
  149. package/dist/render/rendergraph/types.js.map +1 -1
  150. package/dist/render/shadow_mask_pass.js +73 -8
  151. package/dist/render/shadow_mask_pass.js.map +1 -1
  152. package/dist/render/sky.js +166 -126
  153. package/dist/render/sky.js.map +1 -1
  154. package/dist/render/weightedblended_oit.js +36 -35
  155. package/dist/render/weightedblended_oit.js.map +1 -1
  156. package/dist/scene/basesprite.js +8 -0
  157. package/dist/scene/basesprite.js.map +1 -1
  158. package/dist/scene/batchgroup.js +3 -0
  159. package/dist/scene/batchgroup.js.map +1 -1
  160. package/dist/scene/environment.js +4 -1
  161. package/dist/scene/environment.js.map +1 -1
  162. package/dist/scene/hair.js +963 -0
  163. package/dist/scene/hair.js.map +1 -0
  164. package/dist/scene/light.js +5 -1
  165. package/dist/scene/light.js.map +1 -1
  166. package/dist/scene/mesh.js +481 -47
  167. package/dist/scene/mesh.js.map +1 -1
  168. package/dist/scene/meshdrawable.js +6 -0
  169. package/dist/scene/meshdrawable.js.map +1 -1
  170. package/dist/scene/msdftext.js +3 -0
  171. package/dist/scene/msdftext.js.map +1 -1
  172. package/dist/scene/msdftextsprite.js +3 -0
  173. package/dist/scene/msdftextsprite.js.map +1 -1
  174. package/dist/scene/particlesys.js +6 -0
  175. package/dist/scene/particlesys.js.map +1 -1
  176. package/dist/scene/scene.js +3 -0
  177. package/dist/scene/scene.js.map +1 -1
  178. package/dist/scene/scene_node.js +6 -1
  179. package/dist/scene/scene_node.js.map +1 -1
  180. package/dist/scene/terrain-cm/grass.js +3 -0
  181. package/dist/scene/terrain-cm/grass.js.map +1 -1
  182. package/dist/scene/terrain-cm/grassmaterial.js +3 -0
  183. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  184. package/dist/scene/terrain-cm/terrain-cm.js +6 -0
  185. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  186. package/dist/scene/terrain-cm/texture_cache.js +309 -0
  187. package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
  188. package/dist/scene/water.js +6 -0
  189. package/dist/scene/water.js.map +1 -1
  190. package/dist/shaders/atmosphere.js.map +1 -1
  191. package/dist/shaders/diffusion.js +54 -0
  192. package/dist/shaders/diffusion.js.map +1 -0
  193. package/dist/shaders/shadow.js +33 -21
  194. package/dist/shaders/shadow.js.map +1 -1
  195. package/dist/shaders/temporal.js +71 -33
  196. package/dist/shaders/temporal.js.map +1 -1
  197. package/dist/shadow/dom.js +546 -0
  198. package/dist/shadow/dom.js.map +1 -0
  199. package/dist/shadow/pcf_opt.js +3 -5
  200. package/dist/shadow/pcf_opt.js.map +1 -1
  201. package/dist/shadow/pcf_pd.js +1 -1
  202. package/dist/shadow/pcf_pd.js.map +1 -1
  203. package/dist/shadow/receiver_bias.js +41 -0
  204. package/dist/shadow/receiver_bias.js.map +1 -0
  205. package/dist/shadow/shader.js +20 -60
  206. package/dist/shadow/shader.js.map +1 -1
  207. package/dist/shadow/shadow_impl.js +89 -0
  208. package/dist/shadow/shadow_impl.js.map +1 -1
  209. package/dist/shadow/shadow_region.js +50 -50
  210. package/dist/shadow/shadow_region.js.map +1 -1
  211. package/dist/shadow/shadowmapper.js +150 -37
  212. package/dist/shadow/shadowmapper.js.map +1 -1
  213. package/dist/shapes/shape.js +11 -2
  214. package/dist/shapes/shape.js.map +1 -1
  215. package/dist/shapes/sphere.js +50 -9
  216. package/dist/shapes/sphere.js.map +1 -1
  217. package/dist/utility/blueprint/common/constants.js +112 -2
  218. package/dist/utility/blueprint/common/constants.js.map +1 -1
  219. package/dist/utility/blueprint/material/func.js +142 -49
  220. package/dist/utility/blueprint/material/func.js.map +1 -1
  221. package/dist/utility/blueprint/material/ir.js +490 -25
  222. package/dist/utility/blueprint/material/ir.js.map +1 -1
  223. package/dist/utility/blueprint/material/texture.js +898 -4
  224. package/dist/utility/blueprint/material/texture.js.map +1 -1
  225. package/dist/utility/serialization/manager.js +431 -100
  226. package/dist/utility/serialization/manager.js.map +1 -1
  227. package/dist/utility/serialization/scene/animation.js +370 -3
  228. package/dist/utility/serialization/scene/animation.js.map +1 -1
  229. package/dist/utility/serialization/scene/batch.js +4 -0
  230. package/dist/utility/serialization/scene/batch.js.map +1 -1
  231. package/dist/utility/serialization/scene/camera.js +133 -1
  232. package/dist/utility/serialization/scene/camera.js.map +1 -1
  233. package/dist/utility/serialization/scene/common.js +26 -5
  234. package/dist/utility/serialization/scene/common.js.map +1 -1
  235. package/dist/utility/serialization/scene/hair.js +1141 -0
  236. package/dist/utility/serialization/scene/hair.js.map +1 -0
  237. package/dist/utility/serialization/scene/light.js +84 -4
  238. package/dist/utility/serialization/scene/light.js.map +1 -1
  239. package/dist/utility/serialization/scene/material.js +1867 -166
  240. package/dist/utility/serialization/scene/material.js.map +1 -1
  241. package/dist/utility/serialization/scene/mesh.js +231 -14
  242. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  243. package/dist/utility/serialization/scene/node.js +141 -7
  244. package/dist/utility/serialization/scene/node.js.map +1 -1
  245. package/dist/utility/serialization/scene/particle.js +4 -0
  246. package/dist/utility/serialization/scene/particle.js.map +1 -1
  247. package/dist/utility/serialization/scene/primitive.js +18 -0
  248. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  249. package/dist/utility/serialization/scene/sprite.js +4 -0
  250. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  251. package/dist/utility/serialization/scene/terrain.js +4 -0
  252. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  253. package/dist/utility/serialization/scene/text.js +4 -0
  254. package/dist/utility/serialization/scene/text.js.map +1 -1
  255. package/dist/utility/serialization/scene/water.js +4 -0
  256. package/dist/utility/serialization/scene/water.js.map +1 -1
  257. package/dist/utility/serialization/types.js.map +1 -1
  258. package/dist/utility/shprojector.js +96 -95
  259. package/dist/utility/shprojector.js.map +1 -1
  260. package/dist/values.js +49 -2
  261. package/dist/values.js.map +1 -1
  262. package/package.json +3 -3
@@ -3,23 +3,23 @@ import { Disposable, DRef, Vector4 } from '@zephyr3d/base';
3
3
  import { fetchSampler } from './misc.js';
4
4
  import { getDevice } from '../app/api.js';
5
5
 
6
- /**
7
- * CubemapSHProjector is responsible for projecting a cubemap texture into spherical harmonics (SH) coefficients.
8
- * This is commonly used for efficient environment lighting approximation in real-time rendering.
9
- *
10
- * The class uses Monte Carlo sampling to compute the first 9 spherical harmonics coefficients (up to order 2)
11
- * from a cubemap texture, which can then be used for ambient lighting calculations.
12
- *
13
- * @example
14
- * ```typescript
15
- * const projector = new CubemapSHProjector(10000);
16
- * const shBuffer = device.createBuffer(4 * 4 * 9, { usage: 'uniform' });
17
- * projector.projectCubemap(environmentCubemap, shBuffer);
18
- * // shBuffer now contains the 9 SH coefficients as RGB values
19
- * projector.dispose();
20
- * ```
21
- *
22
- * @public
6
+ /**
7
+ * CubemapSHProjector is responsible for projecting a cubemap texture into spherical harmonics (SH) coefficients.
8
+ * This is commonly used for efficient environment lighting approximation in real-time rendering.
9
+ *
10
+ * The class uses Monte Carlo sampling to compute the first 9 spherical harmonics coefficients (up to order 2)
11
+ * from a cubemap texture, which can then be used for ambient lighting calculations.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const projector = new CubemapSHProjector(10000);
16
+ * const shBuffer = device.createBuffer(4 * 4 * 9, { usage: 'uniform' });
17
+ * projector.projectCubemap(environmentCubemap, shBuffer);
18
+ * // shBuffer now contains the 9 SH coefficients as RGB values
19
+ * projector.dispose();
20
+ * ```
21
+ *
22
+ * @public
23
23
  */ class CubemapSHProjector extends Disposable {
24
24
  static _programInst = null;
25
25
  static _bindGroupInst = null;
@@ -27,60 +27,69 @@ import { getDevice } from '../app/api.js';
27
27
  _primitive;
28
28
  _renderTarget;
29
29
  _numSamples;
30
- /**
31
- * Creates a new CubemapSHProjector instance.
32
- *
33
- * @param numSamples - Number of Monte Carlo samples to use for SH projection.
34
- * Higher values provide better accuracy but slower computation.
35
- * Default is 10000.
30
+ /**
31
+ * Creates a new CubemapSHProjector instance.
32
+ *
33
+ * @param numSamples - Number of Monte Carlo samples to use for SH projection.
34
+ * Higher values provide better accuracy but slower computation.
35
+ * Default is 10000.
36
36
  */ constructor(numSamples = 10000){
37
37
  super();
38
38
  this._numSamples = numSamples;
39
39
  this._primitive = new DRef();
40
40
  this._renderTarget = new DRef();
41
41
  }
42
- /**
43
- * Projects a cubemap texture into spherical harmonics coefficients and stores them in a GPUBuffer.
44
- *
45
- * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.
46
- * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.
47
- * The layout is:
48
- * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀
49
- * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁
50
- * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂
51
- *
52
- * @param cubemap - The input cubemap texture to project
53
- * @param outBuffer - GPU data buffer to receive the computed SH coefficients.
54
- * Must be large enough to hold 9 RGB values (36 floats for RGBA32F format).
55
- *
56
- * @example
57
- * ```typescript
58
- * const shBuffer = device.createDataBuffer(9 * 4 * 4); // 9 coefficients * 4 components * 4 bytes
59
- * projector.projectCubemap(environmentMap, shBuffer);
60
- * ```
42
+ /**
43
+ * Projects a cubemap texture into spherical harmonics coefficients and stores them in a GPUBuffer.
44
+ *
45
+ * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.
46
+ * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.
47
+ * The layout is:
48
+ * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀
49
+ * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁
50
+ * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂
51
+ *
52
+ * @param cubemap - The input cubemap texture to project
53
+ * @param outBuffer - GPU data buffer to receive the computed SH coefficients.
54
+ * Must be large enough to hold 9 RGB values (36 floats for RGBA32F format).
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const shBuffer = device.createDataBuffer(9 * 4 * 4); // 9 coefficients * 4 components * 4 bytes
59
+ * projector.projectCubemap(environmentMap, shBuffer);
60
+ * ```
61
61
  */ projectCubemap(cubemap, outBuffer, radianceSource = true) {
62
+ const device = getDevice();
63
+ if (!this._renderTarget.get()) {
64
+ const texture = device.createTexture2D('rgba32f', 3, 3, {
65
+ mipmapping: false
66
+ });
67
+ this._renderTarget.set(device.createFrameBuffer([
68
+ texture
69
+ ], null));
70
+ }
62
71
  this.projectCubemapToTexture(cubemap, this._renderTarget.get(), radianceSource);
63
72
  this._renderTarget.get().getColorAttachments()[0].readPixelsToBuffer(0, 0, 3, 3, 0, 0, outBuffer);
64
73
  }
65
- /**
66
- * Projects a cubemap texture into spherical harmonics coefficients and stores them in a 3x3 texture.
67
- *
68
- * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.
69
- * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.
70
- * The layout is:
71
- * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀
72
- * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁
73
- * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂
74
- *
75
- * @param cubemap - The input cubemap texture to project
76
- * @param outFramebuffer - Framebuffer that contains the 3x3 texture to receive the computed SH coefficients in color attachment slot 0.
77
- *
78
- * @example
79
- * ```typescript
80
- * const shTexture = device.createTexture2D('rgba32f', 3, 3); // 9 coefficients * 4 components * 4 bytes
81
- * const shFramebuffer = device.createFrameBuffer([shTexture], null);
82
- * projector.projectCubemapToTexture(environmentMap, shFramebuffer);
83
- * ```
74
+ /**
75
+ * Projects a cubemap texture into spherical harmonics coefficients and stores them in a 3x3 texture.
76
+ *
77
+ * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.
78
+ * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.
79
+ * The layout is:
80
+ * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀
81
+ * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁
82
+ * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂
83
+ *
84
+ * @param cubemap - The input cubemap texture to project
85
+ * @param outFramebuffer - Framebuffer that contains the 3x3 texture to receive the computed SH coefficients in color attachment slot 0.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const shTexture = device.createTexture2D('rgba32f', 3, 3); // 9 coefficients * 4 components * 4 bytes
90
+ * const shFramebuffer = device.createFrameBuffer([shTexture], null);
91
+ * projector.projectCubemapToTexture(environmentMap, shFramebuffer);
92
+ * ```
84
93
  */ projectCubemapToTexture(cubemap, framebuffer, radianceSource = true) {
85
94
  const device = getDevice();
86
95
  const clearColor = new Vector4(0, 0, 0, 1);
@@ -97,9 +106,9 @@ import { getDevice } from '../app/api.js';
97
106
  this._primitive.get().drawInstanced(9);
98
107
  device.popDeviceStates();
99
108
  }
100
- /**
101
- * Disposes of all resources allocated by this projector instance.
102
- * Should be called when the projector is no longer needed to prevent memory leaks.
109
+ /**
110
+ * Disposes of all resources allocated by this projector instance.
111
+ * Should be called when the projector is no longer needed to prevent memory leaks.
103
112
  */ onDispose() {
104
113
  super.onDispose();
105
114
  this._primitive.dispose();
@@ -108,16 +117,16 @@ import { getDevice } from '../app/api.js';
108
117
  this._renderTarget.dispose();
109
118
  }
110
119
  }
111
- /**
112
- * Initializes the GPU resources needed for SH projection.
113
- * This method is called automatically by projectCubemap() and sets up:
114
- * - Sample directions primitive (Monte Carlo samples on unit sphere)
115
- * - Render target (3x3 RGBA32F texture)
116
- * - Render states (additive blending, no depth test)
117
- * - GPU program for SH evaluation
118
- *
119
- * @param device - The graphics device to create resources with
120
- * @internal
120
+ /**
121
+ * Initializes the GPU resources needed for SH projection.
122
+ * This method is called automatically by projectCubemap() and sets up:
123
+ * - Sample directions primitive (Monte Carlo samples on unit sphere)
124
+ * - Render target (3x3 RGBA32F texture)
125
+ * - Render states (additive blending, no depth test)
126
+ * - GPU program for SH evaluation
127
+ *
128
+ * @param device - The graphics device to create resources with
129
+ * @internal
121
130
  */ init(device) {
122
131
  if (!this._primitive.get()) {
123
132
  const samples = new Float32Array(this._numSamples * 4);
@@ -154,14 +163,6 @@ import { getDevice } from '../app/api.js';
154
163
  primitive.primitiveType = 'point-list';
155
164
  this._primitive.set(primitive);
156
165
  }
157
- if (!this._renderTarget.get()) {
158
- const texture = device.createTexture2D('rgba32f', 3, 3, {
159
- mipmapping: false
160
- });
161
- this._renderTarget.set(device.createFrameBuffer([
162
- texture
163
- ], null));
164
- }
165
166
  if (!CubemapSHProjector._renderStats) {
166
167
  CubemapSHProjector._renderStats = device.createRenderStateSet();
167
168
  CubemapSHProjector._renderStats.useDepthState().enableTest(false).enableWrite(false);
@@ -173,19 +174,19 @@ import { getDevice } from '../app/api.js';
173
174
  CubemapSHProjector._bindGroupInst = device.createBindGroup(CubemapSHProjector._programInst.bindGroupLayouts[0]);
174
175
  }
175
176
  }
176
- /**
177
- * Creates the GPU program for spherical harmonics evaluation.
178
- *
179
- * The vertex shader uses instanced rendering to generate 9 instances (one per SH coefficient).
180
- * Each instance renders all sample points, but the vertex shader maps them to different
181
- * pixels in the 3x3 output texture based on the instance ID.
182
- *
183
- * The fragment shader evaluates the appropriate SH basis function based on the pixel location,
184
- * samples the cubemap in the sample direction, and multiplies by the integration weight.
185
- *
186
- * @param device - The graphics device to create the program with
187
- * @returns The compiled GPU program
188
- * @internal
177
+ /**
178
+ * Creates the GPU program for spherical harmonics evaluation.
179
+ *
180
+ * The vertex shader uses instanced rendering to generate 9 instances (one per SH coefficient).
181
+ * Each instance renders all sample points, but the vertex shader maps them to different
182
+ * pixels in the 3x3 output texture based on the instance ID.
183
+ *
184
+ * The fragment shader evaluates the appropriate SH basis function based on the pixel location,
185
+ * samples the cubemap in the sample direction, and multiplies by the integration weight.
186
+ *
187
+ * @param device - The graphics device to create the program with
188
+ * @returns The compiled GPU program
189
+ * @internal
189
190
  */ static _createProgram(device) {
190
191
  const program = device.buildRenderProgram({
191
192
  vertex (pb) {
@@ -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 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
+ {"version":3,"file":"shprojector.js","sources":["../../src/utility/shprojector.ts"],"sourcesContent":["import type {\n AbstractDevice,\n BindGroup,\n FrameBuffer,\n GPUDataBuffer,\n GPUProgram,\n RenderStateSet,\n TextureCube\n} from '@zephyr3d/device';\nimport { Primitive } from '../render/primitive';\nimport type { Nullable } from '@zephyr3d/base';\nimport { Disposable, DRef, Vector4 } from '@zephyr3d/base';\nimport { fetchSampler } from './misc';\nimport { getDevice } from '../app/api';\n\n/**\n * CubemapSHProjector is responsible for projecting a cubemap texture into spherical harmonics (SH) coefficients.\n * This is commonly used for efficient environment lighting approximation in real-time rendering.\n *\n * The class uses Monte Carlo sampling to compute the first 9 spherical harmonics coefficients (up to order 2)\n * from a cubemap texture, which can then be used for ambient lighting calculations.\n *\n * @example\n * ```typescript\n * const projector = new CubemapSHProjector(10000);\n * const shBuffer = device.createBuffer(4 * 4 * 9, { usage: 'uniform' });\n * projector.projectCubemap(environmentCubemap, shBuffer);\n * // shBuffer now contains the 9 SH coefficients as RGB values\n * projector.dispose();\n * ```\n *\n * @public\n */\nexport class CubemapSHProjector extends Disposable {\n private static _programInst: Nullable<GPUProgram> = null;\n private static _bindGroupInst: Nullable<BindGroup> = null;\n private static _renderStats: Nullable<RenderStateSet> = null;\n private readonly _primitive: DRef<Primitive>;\n private readonly _renderTarget: DRef<FrameBuffer>;\n private readonly _numSamples: number;\n /**\n * Creates a new CubemapSHProjector instance.\n *\n * @param numSamples - Number of Monte Carlo samples to use for SH projection.\n * Higher values provide better accuracy but slower computation.\n * Default is 10000.\n */\n constructor(numSamples = 10000) {\n super();\n this._numSamples = numSamples;\n this._primitive = new DRef();\n this._renderTarget = new DRef();\n }\n /**\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a GPUBuffer.\n *\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\n * The layout is:\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\n *\n * @param cubemap - The input cubemap texture to project\n * @param outBuffer - GPU data buffer to receive the computed SH coefficients.\n * Must be large enough to hold 9 RGB values (36 floats for RGBA32F format).\n *\n * @example\n * ```typescript\n * const shBuffer = device.createDataBuffer(9 * 4 * 4); // 9 coefficients * 4 components * 4 bytes\n * projector.projectCubemap(environmentMap, shBuffer);\n * ```\n */\n projectCubemap(cubemap: TextureCube, outBuffer: GPUDataBuffer, radianceSource = true) {\n const device = getDevice();\n if (!this._renderTarget.get()) {\n const texture = device.createTexture2D('rgba32f', 3, 3, {\n mipmapping: false\n })!;\n this._renderTarget.set(device.createFrameBuffer([texture], null));\n }\n this.projectCubemapToTexture(cubemap, this._renderTarget.get()!, radianceSource);\n this._renderTarget.get()!.getColorAttachments()[0].readPixelsToBuffer(0, 0, 3, 3, 0, 0, outBuffer);\n }\n /**\n * Projects a cubemap texture into spherical harmonics coefficients and stores them in a 3x3 texture.\n *\n * The method performs Monte Carlo integration over the sphere to compute the first 9 SH coefficients.\n * The results are written to a 3x3 render target where each pixel contains RGB values for one SH coefficient.\n * The layout is:\n * - (0,0): Y₀₀ (0,1): Y₁₋₁ (0,2): Y₁₀\n * - (1,0): Y₁₁ (1,1): Y₂₋₂ (1,2): Y₂₋₁\n * - (2,0): Y₂₀ (2,1): Y₂₁ (2,2): Y₂₂\n *\n * @param cubemap - The input cubemap texture to project\n * @param outFramebuffer - Framebuffer that contains the 3x3 texture to receive the computed SH coefficients in color attachment slot 0.\n *\n * @example\n * ```typescript\n * const shTexture = device.createTexture2D('rgba32f', 3, 3); // 9 coefficients * 4 components * 4 bytes\n * const shFramebuffer = device.createFrameBuffer([shTexture], null);\n * projector.projectCubemapToTexture(environmentMap, shFramebuffer);\n * ```\n */\n projectCubemapToTexture(cubemap: TextureCube, framebuffer: FrameBuffer, radianceSource = true) {\n const device = getDevice();\n const clearColor = new Vector4(0, 0, 0, 1);\n this.init(device);\n device.pushDeviceStates();\n device.setRenderStates(CubemapSHProjector._renderStats);\n device.setProgram(CubemapSHProjector._programInst);\n device.setFramebuffer(framebuffer);\n device.clearFrameBuffer(clearColor, null, null);\n const bindGroup = CubemapSHProjector._bindGroupInst!;\n bindGroup.setTexture('cubemap', cubemap, fetchSampler('clamp_linear_nomip'));\n bindGroup.setValue('scale', radianceSource ? 1.0 : Math.PI);\n device.setBindGroup(0, bindGroup);\n this._primitive.get()!.drawInstanced(9);\n device.popDeviceStates();\n }\n /**\n * Disposes of all resources allocated by this projector instance.\n * Should be called when the projector is no longer needed to prevent memory leaks.\n */\n protected onDispose() {\n super.onDispose();\n this._primitive.dispose();\n if (this._renderTarget.get()) {\n this._renderTarget.get()!.getColorAttachments()[0].dispose();\n this._renderTarget.dispose();\n }\n }\n /**\n * Initializes the GPU resources needed for SH projection.\n * This method is called automatically by projectCubemap() and sets up:\n * - Sample directions primitive (Monte Carlo samples on unit sphere)\n * - Render target (3x3 RGBA32F texture)\n * - Render states (additive blending, no depth test)\n * - GPU program for SH evaluation\n *\n * @param device - The graphics device to create resources with\n * @internal\n */\n private init(device: AbstractDevice) {\n if (!this._primitive.get()) {\n const samples = new Float32Array(this._numSamples * 4);\n for (let i = 0; i < this._numSamples; i++) {\n let x1: number, x2: number, s: number;\n do {\n x1 = Math.random() * 2 - 1;\n x2 = Math.random() * 2 - 1;\n s = x1 * x1 + x2 * x2;\n } while (s >= 1);\n const sqrtS = Math.sqrt(1 - s);\n samples[i * 4 + 0] = 2 * x1 * sqrtS;\n samples[i * 4 + 1] = 2 * x2 * sqrtS;\n samples[i * 4 + 2] = 1 - 2 * s;\n samples[i * 4 + 3] = (4 * Math.PI) / this._numSamples;\n }\n const primitive = new Primitive();\n primitive.createAndSetVertexBuffer('position_f32x4', samples);\n if (device.type === 'webgl') {\n primitive.createAndSetVertexBuffer(\n 'tex0_f32',\n new Float32Array([0, 1, 2, 3, 4, 5, 6, 7, 8]),\n 'instance'\n );\n }\n primitive.indexCount = this._numSamples;\n primitive.indexStart = 0;\n primitive.primitiveType = 'point-list';\n this._primitive.set(primitive);\n }\n\n if (!CubemapSHProjector._renderStats) {\n CubemapSHProjector._renderStats = device.createRenderStateSet();\n CubemapSHProjector._renderStats.useDepthState().enableTest(false).enableWrite(false);\n CubemapSHProjector._renderStats\n .useBlendingState()\n .enable(true)\n .setBlendEquation('add', 'add')\n .setBlendFuncRGB('one', 'one')\n .setBlendFuncAlpha('zero', 'one');\n CubemapSHProjector._renderStats.useRasterizerState().setCullMode('none');\n }\n\n if (!CubemapSHProjector._programInst) {\n CubemapSHProjector._programInst = CubemapSHProjector._createProgram(device)!;\n CubemapSHProjector._bindGroupInst = device.createBindGroup(\n CubemapSHProjector._programInst.bindGroupLayouts[0]\n );\n }\n }\n /**\n * Creates the GPU program for spherical harmonics evaluation.\n *\n * The vertex shader uses instanced rendering to generate 9 instances (one per SH coefficient).\n * Each instance renders all sample points, but the vertex shader maps them to different\n * pixels in the 3x3 output texture based on the instance ID.\n *\n * The fragment shader evaluates the appropriate SH basis function based on the pixel location,\n * samples the cubemap in the sample direction, and multiplies by the integration weight.\n *\n * @param device - The graphics device to create the program with\n * @returns The compiled GPU program\n * @internal\n */\n private static _createProgram(device: AbstractDevice) {\n const program = device.buildRenderProgram({\n vertex(pb) {\n this.$inputs.directionWeight = pb.vec4().attrib('position');\n if (device.type === 'webgl') {\n this.$inputs.instanceId = pb.float().attrib('texCoord0');\n }\n pb.main(function () {\n this.$outputs.direction = this.$inputs.directionWeight.xyz;\n this.$outputs.weight = this.$inputs.directionWeight.w;\n if (pb.getDevice().type !== 'webgpu') {\n this.$builtins.pointSize = 1;\n }\n this.$outputs.shIndex =\n device.type === 'webgl' ? this.$inputs.instanceId : pb.int(this.$builtins.instanceIndex);\n this.$l.x = pb.mod(this.$outputs.shIndex, 3);\n this.$l.y = pb.div(this.$outputs.shIndex, 3);\n this.$l.ndcX = pb.sub(pb.div(pb.add(pb.float(this.x), 0.5), 1.5), 1);\n this.$l.ndcY = pb.sub(pb.div(pb.add(pb.float(this.y), 0.5), 1.5), 1);\n this.$l.$builtins.position = pb.vec4(this.ndcX, this.ndcY, 0, 1);\n if (pb.getDevice().type === 'webgpu') {\n this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));\n }\n });\n },\n fragment(pb) {\n this.$outputs.color = pb.vec4();\n this.cubemap = pb.texCube().uniform(0);\n this.scale = pb.float().uniform(0);\n pb.func('cosineLobeBandFactor', [pb.int('l')], function () {\n this.$if(pb.equal(this.l, 0), function () {\n this.$return(pb.float(1));\n });\n this.$if(pb.lessThanEqual(this.l, 3), function () {\n this.$return(2 / 3);\n });\n this.$return(1 / 4);\n });\n pb.func('Y0', [pb.vec3('v')], function () {\n this.$return(0.282094791773878);\n });\n pb.func('Y1', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.y, -0.4886025119));\n });\n pb.func('Y2', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.z, 0.4886025119));\n });\n pb.func('Y3', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.x, -0.4886025119));\n });\n pb.func('Y4', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.x, this.v.y, 1.0925484306));\n });\n pb.func('Y5', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.y, this.v.z, -1.0925484306));\n });\n pb.func('Y6', [pb.vec3('v')], function () {\n this.$return(pb.mul(pb.sub(pb.mul(this.v.z, this.v.z, 3), 1), 0.3153915652));\n });\n pb.func('Y7', [pb.vec3('v')], function () {\n this.$return(pb.mul(this.v.x, this.v.z, -1.0925484306));\n });\n pb.func('Y8', [pb.vec3('v')], function () {\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));\n });\n pb.func('evalBasis', [pb.vec3('dir'), pb.int('c')], function () {\n this.$if(pb.equal(this.c, 0), function () {\n this.$return(this.Y0(this.dir));\n })\n .$elseif(pb.equal(this.c, 1), function () {\n this.$return(this.Y1(this.dir));\n })\n .$elseif(pb.equal(this.c, 2), function () {\n this.$return(this.Y2(this.dir));\n })\n .$elseif(pb.equal(this.c, 3), function () {\n this.$return(this.Y3(this.dir));\n })\n .$elseif(pb.equal(this.c, 4), function () {\n this.$return(this.Y4(this.dir));\n })\n .$elseif(pb.equal(this.c, 5), function () {\n this.$return(this.Y5(this.dir));\n })\n .$elseif(pb.equal(this.c, 6), function () {\n this.$return(this.Y6(this.dir));\n })\n .$elseif(pb.equal(this.c, 7), function () {\n this.$return(this.Y7(this.dir));\n })\n .$elseif(pb.equal(this.c, 8), function () {\n this.$return(this.Y8(this.dir));\n })\n .$else(function () {\n this.$return(0);\n });\n });\n pb.main(function () {\n this.$l.radiance = pb.textureSampleLevel(this.cubemap, this.$inputs.direction, 0).rgb;\n this.$l.bandFactor = this.cosineLobeBandFactor(\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\n );\n this.$l.sh = this.evalBasis(\n this.$inputs.direction,\n pb.getDevice().type === 'webgl' ? pb.int(this.$inputs.shIndex) : this.$inputs.shIndex\n );\n this.$outputs.color = pb.vec4(\n pb.mul(this.radiance, this.sh, this.$inputs.weight, this.bandFactor, this.scale),\n 1\n );\n });\n }\n })!;\n program.name = '@CubemapSHProjector_SHProject';\n return program;\n }\n}\n"],"names":["CubemapSHProjector","Disposable","_programInst","_bindGroupInst","_renderStats","_primitive","_renderTarget","_numSamples","numSamples","DRef","projectCubemap","cubemap","outBuffer","radianceSource","device","getDevice","get","texture","createTexture2D","mipmapping","set","createFrameBuffer","projectCubemapToTexture","getColorAttachments","readPixelsToBuffer","framebuffer","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","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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"}
package/dist/values.js CHANGED
@@ -70,9 +70,56 @@ import { Vector3 } from '@zephyr3d/base';
70
70
  /** @public */ const MORPH_TARGET_TEX2 = 6;
71
71
  /** @public */ const MORPH_TARGET_TEX3 = 7;
72
72
  /** @public */ const MAX_MORPH_ATTRIBUTES = 8;
73
- /** @public */ const MAX_MORPH_TARGETS = 256;
73
+ /** @public */ const DEFAULT_MORPH_TARGET_LIMIT = 256;
74
+ /** @public */ const DEFAULT_ACTIVE_MORPH_TARGET_LIMIT = 64;
75
+ /** @public */ const MAX_MORPH_TARGETS = 1024;
76
+ /** @public */ const DEFAULT_SKIN_INFLUENCE_LIMIT = 4;
77
+ /** @public */ const MAX_SKIN_INFLUENCES = 12;
78
+ /** @public */ const MAX_SKIN_EXTRA_INFLUENCE_PAIRS = Math.ceil(Math.max(0, MAX_SKIN_INFLUENCES - 4) / 2);
74
79
  /** @public */ const MORPH_WEIGHTS_VECTOR_COUNT = MAX_MORPH_TARGETS + 3 >> 2;
75
80
  /** @public */ const MORPH_ATTRIBUTE_VECTOR_COUNT = MAX_MORPH_ATTRIBUTES + 3 >> 2;
81
+ let morphTargetLimit = DEFAULT_MORPH_TARGET_LIMIT;
82
+ let activeMorphTargetLimit = DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;
83
+ let skinInfluenceLimit = DEFAULT_SKIN_INFLUENCE_LIMIT;
84
+ /** @public */ function normalizeMorphTargetLimit(value) {
85
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
86
+ return DEFAULT_MORPH_TARGET_LIMIT;
87
+ }
88
+ return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));
89
+ }
90
+ /** @public */ function getMorphTargetLimit() {
91
+ return morphTargetLimit;
92
+ }
93
+ /** @public */ function setMorphTargetLimit(value) {
94
+ morphTargetLimit = normalizeMorphTargetLimit(value);
95
+ return morphTargetLimit;
96
+ }
97
+ /** @public */ function normalizeActiveMorphTargetLimit(value) {
98
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
99
+ return DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;
100
+ }
101
+ return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));
102
+ }
103
+ /** @public */ function getActiveMorphTargetLimit() {
104
+ return activeMorphTargetLimit;
105
+ }
106
+ /** @public */ function setActiveMorphTargetLimit(value) {
107
+ activeMorphTargetLimit = normalizeActiveMorphTargetLimit(value);
108
+ return activeMorphTargetLimit;
109
+ }
110
+ /** @public */ function normalizeSkinInfluenceLimit(value) {
111
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
112
+ return DEFAULT_SKIN_INFLUENCE_LIMIT;
113
+ }
114
+ return Math.min(MAX_SKIN_INFLUENCES, Math.max(1, Math.trunc(value)));
115
+ }
116
+ /** @public */ function getSkinInfluenceLimit() {
117
+ return skinInfluenceLimit;
118
+ }
119
+ /** @public */ function setSkinInfluenceLimit(value) {
120
+ skinInfluenceLimit = normalizeSkinInfluenceLimit(value);
121
+ return skinInfluenceLimit;
122
+ }
76
123
  /** @public */ const MAX_TERRAIN_MIPMAP_LEVELS = 64;
77
124
  /** @public */ const MAX_GERSTNER_WAVE_COUNT = 16;
78
125
  /**
@@ -171,5 +218,5 @@ import { Vector3 } from '@zephyr3d/base';
171
218
  return Fog;
172
219
  }({});
173
220
 
174
- export { ATMOSPHERIC_FOG_BIT, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, Fog, HEIGHT_FOG_BIT, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_SHADOW_MASK_LIGHTS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, uniformSphereSamples };
221
+ export { ATMOSPHERIC_FOG_BIT, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, DEFAULT_ACTIVE_MORPH_TARGET_LIMIT, DEFAULT_MORPH_TARGET_LIMIT, DEFAULT_SKIN_INFLUENCE_LIMIT, Fog, HEIGHT_FOG_BIT, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_SHADOW_MASK_LIGHTS, MAX_SKIN_EXTRA_INFLUENCE_PAIRS, MAX_SKIN_INFLUENCES, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, getActiveMorphTargetLimit, getMorphTargetLimit, getSkinInfluenceLimit, normalizeActiveMorphTargetLimit, normalizeMorphTargetLimit, normalizeSkinInfluenceLimit, setActiveMorphTargetLimit, setMorphTargetLimit, setSkinInfluenceLimit, uniformSphereSamples };
175
222
  //# sourceMappingURL=values.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.js","sources":["../src/values.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Forward render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_LIGHT = 0;\r\n/**\r\n * Shadow map render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_SHADOWMAP = 1;\r\n/**\r\n * Depth only render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_DEPTH = 2;\r\n/**\r\n * Object color render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_OBJECT_COLOR = 3;\r\n\r\n/**\r\n * Builtin texture name for sheen LUT\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEXTURE_SHEEN_LUT = 'LUT_Sheen';\r\n\r\n/**\r\n * Builtin cube texture for test\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEST_CUBEMAP = 'TEST_Cubemap';\r\n\r\n/**\r\n * No light\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_NONE = 0;\r\n\r\n/**\r\n * Directional light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_DIRECTIONAL = 1;\r\n\r\n/**\r\n * Point light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_POINT = 2;\r\n\r\n/**\r\n * Spot light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_SPOT = 3;\r\n/**\r\n * Rectangular area light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_RECT = 4;\r\n\r\n/**\r\n * Max number of shadow-casting lights backed by the screen-space shadow mask.\r\n *\r\n * Each mask layer packs 4 lights (one per RGBA8 channel), so this maps to\r\n * `MAX_SHADOW_MASK_LIGHTS / 4` texture array layers. Shadow-casting lights are\r\n * placed at the head of the clustered light buffer. Shadow lights beyond this\r\n * cap fall back to being lit without a mask-backed shadow.\r\n * @public\r\n */\r\nexport const MAX_SHADOW_MASK_LIGHTS = 32;\r\n\r\n/**\r\n * Opaque render queue type\r\n * @public\r\n */\r\nexport const QUEUE_OPAQUE = 1;\r\n\r\n/**\r\n * Transparent render queue type\r\n * @public\r\n */\r\nexport const QUEUE_TRANSPARENT = 2;\r\n\r\n/** @public */\r\nexport const MORPH_TARGET_POSITION = 0;\r\n/** @public */\r\nexport const MORPH_TARGET_NORMAL = 1;\r\n/** @public */\r\nexport const MORPH_TARGET_TANGENT = 2;\r\n/** @public */\r\nexport const MORPH_TARGET_COLOR = 3;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX0 = 4;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX1 = 5;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX2 = 6;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX3 = 7;\r\n/** @public */\r\nexport const MAX_MORPH_ATTRIBUTES = 8;\r\n/** @public */\r\nexport const MAX_MORPH_TARGETS = 256;\r\n/** @public */\r\nexport const MORPH_WEIGHTS_VECTOR_COUNT = (MAX_MORPH_TARGETS + 3) >> 2;\r\n/** @public */\r\nexport const MORPH_ATTRIBUTE_VECTOR_COUNT = (MAX_MORPH_ATTRIBUTES + 3) >> 2;\r\n\r\n/** @public */\r\nexport const MAX_TERRAIN_MIPMAP_LEVELS = 64;\r\n\r\n/** @public */\r\nexport const MAX_GERSTNER_WAVE_COUNT = 16;\r\n\r\n/**\r\n * Material varying flags\r\n * @public\r\n */\r\nexport const enum MaterialVaryingFlags {\r\n MORPH_ANIMATION = 1 << 0,\r\n SKIN_ANIMATION = 1 << 1,\r\n INSTANCING = 1 << 2,\r\n SCENE_STORE_ROUGHNESS = 1 << 3,\r\n APPLY_FOG = 1 << 4,\r\n SSS_STORE_PROFILE = 1 << 5,\r\n SSS_STORE_DIFFUSE = 1 << 6,\r\n SCENE_STORE_NORMAL = 1 << 7,\r\n SSS_STORE_TRANSMISSION = 1 << 8,\r\n SKIN_SSS_STORE = 1 << 9\r\n}\r\n\r\n/**\r\n * Atmospheric Fog flag\r\n * @public\r\n */\r\nexport const ATMOSPHERIC_FOG_BIT = 1 << 0;\r\n/**\r\n * Exponential Fog flag\r\n * @public\r\n */\r\nexport const HEIGHT_FOG_BIT = 1 << 1;\r\n\r\n/** @internal */\r\nexport const uniformSphereSamples = [\r\n new Vector3(-0.7838, -0.620933, 0.00996137),\r\n new Vector3(0.106751, 0.965982, 0.235549),\r\n new Vector3(-0.215177, -0.687115, -0.693954),\r\n new Vector3(0.318002, 0.0640084, -0.945927),\r\n new Vector3(0.357396, 0.555673, 0.750664),\r\n new Vector3(0.866397, -0.19756, 0.458613),\r\n new Vector3(0.130216, 0.232736, -0.963783),\r\n new Vector3(-0.00174431, 0.376657, 0.926351),\r\n new Vector3(0.663478, 0.704806, -0.251089),\r\n new Vector3(0.0327851, 0.110534, -0.993331),\r\n new Vector3(0.0561973, 0.0234288, 0.998145),\r\n new Vector3(0.0905264, -0.169771, 0.981317),\r\n new Vector3(0.26694, 0.95222, -0.148393),\r\n new Vector3(-0.812874, -0.559051, -0.163393),\r\n new Vector3(-0.323378, -0.25855, -0.910263),\r\n new Vector3(-0.1333, 0.591356, -0.795317),\r\n new Vector3(0.480876, 0.408711, 0.775702),\r\n new Vector3(-0.332263, -0.533895, -0.777533),\r\n new Vector3(-0.0392473, -0.704457, -0.708661),\r\n new Vector3(0.427015, 0.239811, 0.871865),\r\n new Vector3(-0.416624, -0.563856, 0.713085),\r\n new Vector3(0.12793, 0.334479, -0.933679),\r\n new Vector3(-0.0343373, -0.160593, -0.986423),\r\n new Vector3(0.580614, 0.0692947, 0.811225),\r\n new Vector3(-0.459187, 0.43944, 0.772036),\r\n new Vector3(0.215474, -0.539436, -0.81399),\r\n new Vector3(-0.378969, -0.31988, -0.868366),\r\n new Vector3(-0.279978, -0.0109692, 0.959944),\r\n new Vector3(0.692547, 0.690058, 0.210234),\r\n new Vector3(0.53227, -0.123044, -0.837585),\r\n new Vector3(-0.772313, -0.283334, -0.568555),\r\n new Vector3(-0.0311218, 0.995988, -0.0838977),\r\n new Vector3(-0.366931, -0.276531, -0.888196),\r\n new Vector3(0.488778, 0.367878, -0.791051),\r\n new Vector3(-0.885561, -0.453445, 0.100842),\r\n new Vector3(0.71656, 0.443635, 0.538265),\r\n new Vector3(0.645383, -0.152576, -0.748466),\r\n new Vector3(-0.171259, 0.91907, 0.354939),\r\n new Vector3(-0.0031122, 0.9457, 0.325026),\r\n new Vector3(0.731503, 0.623089, -0.276881),\r\n new Vector3(-0.91466, 0.186904, 0.358419),\r\n new Vector3(0.15595, 0.828193, -0.538309),\r\n new Vector3(0.175396, 0.584732, 0.792038),\r\n new Vector3(-0.0838381, -0.943461, 0.320707),\r\n new Vector3(0.305876, 0.727604, 0.614029),\r\n new Vector3(0.754642, -0.197903, -0.62558),\r\n new Vector3(0.217255, -0.0177771, -0.975953),\r\n new Vector3(0.140412, -0.844826, 0.516287),\r\n new Vector3(-0.549042, 0.574859, -0.606705),\r\n new Vector3(0.570057, 0.17459, 0.802841),\r\n new Vector3(-0.0330304, 0.775077, 0.631003),\r\n new Vector3(-0.938091, 0.138937, 0.317304),\r\n new Vector3(0.483197, -0.726405, -0.48873),\r\n new Vector3(0.485263, 0.52926, 0.695991),\r\n new Vector3(0.224189, 0.742282, -0.631472),\r\n new Vector3(-0.322429, 0.662214, -0.676396),\r\n new Vector3(0.625577, -0.12711, 0.769738),\r\n new Vector3(-0.714032, -0.584461, -0.385439),\r\n new Vector3(-0.0652053, -0.892579, -0.446151),\r\n new Vector3(0.408421, -0.912487, 0.0236566),\r\n new Vector3(0.0900381, 0.319983, 0.943135),\r\n new Vector3(-0.708553, 0.483646, 0.513847),\r\n new Vector3(0.803855, -0.0902273, 0.587942),\r\n new Vector3(-0.0555802, -0.374602, -0.925519)\r\n];\r\n\r\n/** @internal */\r\nexport enum Fog {\r\n FOG_TYPE_NONE = 0,\r\n FOG_TYPE_HEIGHT = 4\r\n}\r\n"],"names":["RENDER_PASS_TYPE_LIGHT","RENDER_PASS_TYPE_SHADOWMAP","RENDER_PASS_TYPE_DEPTH","RENDER_PASS_TYPE_OBJECT_COLOR","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","BUILTIN_ASSET_TEST_CUBEMAP","LIGHT_TYPE_NONE","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","LIGHT_TYPE_RECT","MAX_SHADOW_MASK_LIGHTS","QUEUE_OPAQUE","QUEUE_TRANSPARENT","MORPH_TARGET_POSITION","MORPH_TARGET_NORMAL","MORPH_TARGET_TANGENT","MORPH_TARGET_COLOR","MORPH_TARGET_TEX0","MORPH_TARGET_TEX1","MORPH_TARGET_TEX2","MORPH_TARGET_TEX3","MAX_MORPH_ATTRIBUTES","MAX_MORPH_TARGETS","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","MAX_TERRAIN_MIPMAP_LEVELS","MAX_GERSTNER_WAVE_COUNT","MaterialVaryingFlags","ATMOSPHERIC_FOG_BIT","HEIGHT_FOG_BIT","uniformSphereSamples","Vector3","Fog"],"mappings":"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"}
1
+ {"version":3,"file":"values.js","sources":["../src/values.ts"],"sourcesContent":["import { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Forward render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_LIGHT = 0;\r\n/**\r\n * Shadow map render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_SHADOWMAP = 1;\r\n/**\r\n * Depth only render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_DEPTH = 2;\r\n/**\r\n * Object color render pass type\r\n * @public\r\n */\r\nexport const RENDER_PASS_TYPE_OBJECT_COLOR = 3;\r\n\r\n/**\r\n * Builtin texture name for sheen LUT\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEXTURE_SHEEN_LUT = 'LUT_Sheen';\r\n\r\n/**\r\n * Builtin cube texture for test\r\n * @public\r\n */\r\nexport const BUILTIN_ASSET_TEST_CUBEMAP = 'TEST_Cubemap';\r\n\r\n/**\r\n * No light\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_NONE = 0;\r\n\r\n/**\r\n * Directional light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_DIRECTIONAL = 1;\r\n\r\n/**\r\n * Point light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_POINT = 2;\r\n\r\n/**\r\n * Spot light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_SPOT = 3;\r\n/**\r\n * Rectangular area light type\r\n * @public\r\n */\r\nexport const LIGHT_TYPE_RECT = 4;\r\n\r\n/**\r\n * Max number of shadow-casting lights backed by the screen-space shadow mask.\r\n *\r\n * Each mask layer packs 4 lights (one per RGBA8 channel), so this maps to\r\n * `MAX_SHADOW_MASK_LIGHTS / 4` texture array layers. Shadow-casting lights are\r\n * placed at the head of the clustered light buffer. Shadow lights beyond this\r\n * cap fall back to being lit without a mask-backed shadow.\r\n * @public\r\n */\r\nexport const MAX_SHADOW_MASK_LIGHTS = 32;\r\n\r\n/**\r\n * Opaque render queue type\r\n * @public\r\n */\r\nexport const QUEUE_OPAQUE = 1;\r\n\r\n/**\r\n * Transparent render queue type\r\n * @public\r\n */\r\nexport const QUEUE_TRANSPARENT = 2;\r\n\r\n/** @public */\r\nexport const MORPH_TARGET_POSITION = 0;\r\n/** @public */\r\nexport const MORPH_TARGET_NORMAL = 1;\r\n/** @public */\r\nexport const MORPH_TARGET_TANGENT = 2;\r\n/** @public */\r\nexport const MORPH_TARGET_COLOR = 3;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX0 = 4;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX1 = 5;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX2 = 6;\r\n/** @public */\r\nexport const MORPH_TARGET_TEX3 = 7;\r\n/** @public */\r\nexport const MAX_MORPH_ATTRIBUTES = 8;\r\n/** @public */\r\nexport const DEFAULT_MORPH_TARGET_LIMIT = 256;\r\n/** @public */\r\nexport const DEFAULT_ACTIVE_MORPH_TARGET_LIMIT = 64;\r\n/** @public */\r\nexport const MAX_MORPH_TARGETS = 1024;\r\n/** @public */\r\nexport const DEFAULT_SKIN_INFLUENCE_LIMIT = 4;\r\n/** @public */\r\nexport const MAX_SKIN_INFLUENCES = 12;\r\n/** @public */\r\nexport const MAX_SKIN_EXTRA_INFLUENCE_PAIRS = Math.ceil(Math.max(0, MAX_SKIN_INFLUENCES - 4) / 2);\r\n/** @public */\r\nexport const MORPH_WEIGHTS_VECTOR_COUNT = (MAX_MORPH_TARGETS + 3) >> 2;\r\n/** @public */\r\nexport const MORPH_ATTRIBUTE_VECTOR_COUNT = (MAX_MORPH_ATTRIBUTES + 3) >> 2;\r\n\r\nlet morphTargetLimit = DEFAULT_MORPH_TARGET_LIMIT;\r\nlet activeMorphTargetLimit = DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;\r\nlet skinInfluenceLimit = DEFAULT_SKIN_INFLUENCE_LIMIT;\r\n\r\n/** @public */\r\nexport function normalizeMorphTargetLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_MORPH_TARGET_LIMIT;\r\n }\r\n return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getMorphTargetLimit(): number {\r\n return morphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setMorphTargetLimit(value: number | null | undefined): number {\r\n morphTargetLimit = normalizeMorphTargetLimit(value);\r\n return morphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function normalizeActiveMorphTargetLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_ACTIVE_MORPH_TARGET_LIMIT;\r\n }\r\n return Math.min(MAX_MORPH_TARGETS, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getActiveMorphTargetLimit(): number {\r\n return activeMorphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setActiveMorphTargetLimit(value: number | null | undefined): number {\r\n activeMorphTargetLimit = normalizeActiveMorphTargetLimit(value);\r\n return activeMorphTargetLimit;\r\n}\r\n\r\n/** @public */\r\nexport function normalizeSkinInfluenceLimit(value: number | null | undefined): number {\r\n if (typeof value !== 'number' || !Number.isFinite(value)) {\r\n return DEFAULT_SKIN_INFLUENCE_LIMIT;\r\n }\r\n return Math.min(MAX_SKIN_INFLUENCES, Math.max(1, Math.trunc(value)));\r\n}\r\n\r\n/** @public */\r\nexport function getSkinInfluenceLimit(): number {\r\n return skinInfluenceLimit;\r\n}\r\n\r\n/** @public */\r\nexport function setSkinInfluenceLimit(value: number | null | undefined): number {\r\n skinInfluenceLimit = normalizeSkinInfluenceLimit(value);\r\n return skinInfluenceLimit;\r\n}\r\n\r\n/** @public */\r\nexport const MAX_TERRAIN_MIPMAP_LEVELS = 64;\r\n\r\n/** @public */\r\nexport const MAX_GERSTNER_WAVE_COUNT = 16;\r\n\r\n/**\r\n * Material varying flags\r\n * @public\r\n */\r\nexport const enum MaterialVaryingFlags {\r\n MORPH_ANIMATION = 1 << 0,\r\n SKIN_ANIMATION = 1 << 1,\r\n INSTANCING = 1 << 2,\r\n SCENE_STORE_ROUGHNESS = 1 << 3,\r\n APPLY_FOG = 1 << 4,\r\n SSS_STORE_PROFILE = 1 << 5,\r\n SSS_STORE_DIFFUSE = 1 << 6,\r\n SCENE_STORE_NORMAL = 1 << 7,\r\n SSS_STORE_TRANSMISSION = 1 << 8,\r\n SKIN_SSS_STORE = 1 << 9\r\n}\r\n\r\n/**\r\n * Atmospheric Fog flag\r\n * @public\r\n */\r\nexport const ATMOSPHERIC_FOG_BIT = 1 << 0;\r\n/**\r\n * Exponential Fog flag\r\n * @public\r\n */\r\nexport const HEIGHT_FOG_BIT = 1 << 1;\r\n\r\n/** @internal */\r\nexport const uniformSphereSamples = [\r\n new Vector3(-0.7838, -0.620933, 0.00996137),\r\n new Vector3(0.106751, 0.965982, 0.235549),\r\n new Vector3(-0.215177, -0.687115, -0.693954),\r\n new Vector3(0.318002, 0.0640084, -0.945927),\r\n new Vector3(0.357396, 0.555673, 0.750664),\r\n new Vector3(0.866397, -0.19756, 0.458613),\r\n new Vector3(0.130216, 0.232736, -0.963783),\r\n new Vector3(-0.00174431, 0.376657, 0.926351),\r\n new Vector3(0.663478, 0.704806, -0.251089),\r\n new Vector3(0.0327851, 0.110534, -0.993331),\r\n new Vector3(0.0561973, 0.0234288, 0.998145),\r\n new Vector3(0.0905264, -0.169771, 0.981317),\r\n new Vector3(0.26694, 0.95222, -0.148393),\r\n new Vector3(-0.812874, -0.559051, -0.163393),\r\n new Vector3(-0.323378, -0.25855, -0.910263),\r\n new Vector3(-0.1333, 0.591356, -0.795317),\r\n new Vector3(0.480876, 0.408711, 0.775702),\r\n new Vector3(-0.332263, -0.533895, -0.777533),\r\n new Vector3(-0.0392473, -0.704457, -0.708661),\r\n new Vector3(0.427015, 0.239811, 0.871865),\r\n new Vector3(-0.416624, -0.563856, 0.713085),\r\n new Vector3(0.12793, 0.334479, -0.933679),\r\n new Vector3(-0.0343373, -0.160593, -0.986423),\r\n new Vector3(0.580614, 0.0692947, 0.811225),\r\n new Vector3(-0.459187, 0.43944, 0.772036),\r\n new Vector3(0.215474, -0.539436, -0.81399),\r\n new Vector3(-0.378969, -0.31988, -0.868366),\r\n new Vector3(-0.279978, -0.0109692, 0.959944),\r\n new Vector3(0.692547, 0.690058, 0.210234),\r\n new Vector3(0.53227, -0.123044, -0.837585),\r\n new Vector3(-0.772313, -0.283334, -0.568555),\r\n new Vector3(-0.0311218, 0.995988, -0.0838977),\r\n new Vector3(-0.366931, -0.276531, -0.888196),\r\n new Vector3(0.488778, 0.367878, -0.791051),\r\n new Vector3(-0.885561, -0.453445, 0.100842),\r\n new Vector3(0.71656, 0.443635, 0.538265),\r\n new Vector3(0.645383, -0.152576, -0.748466),\r\n new Vector3(-0.171259, 0.91907, 0.354939),\r\n new Vector3(-0.0031122, 0.9457, 0.325026),\r\n new Vector3(0.731503, 0.623089, -0.276881),\r\n new Vector3(-0.91466, 0.186904, 0.358419),\r\n new Vector3(0.15595, 0.828193, -0.538309),\r\n new Vector3(0.175396, 0.584732, 0.792038),\r\n new Vector3(-0.0838381, -0.943461, 0.320707),\r\n new Vector3(0.305876, 0.727604, 0.614029),\r\n new Vector3(0.754642, -0.197903, -0.62558),\r\n new Vector3(0.217255, -0.0177771, -0.975953),\r\n new Vector3(0.140412, -0.844826, 0.516287),\r\n new Vector3(-0.549042, 0.574859, -0.606705),\r\n new Vector3(0.570057, 0.17459, 0.802841),\r\n new Vector3(-0.0330304, 0.775077, 0.631003),\r\n new Vector3(-0.938091, 0.138937, 0.317304),\r\n new Vector3(0.483197, -0.726405, -0.48873),\r\n new Vector3(0.485263, 0.52926, 0.695991),\r\n new Vector3(0.224189, 0.742282, -0.631472),\r\n new Vector3(-0.322429, 0.662214, -0.676396),\r\n new Vector3(0.625577, -0.12711, 0.769738),\r\n new Vector3(-0.714032, -0.584461, -0.385439),\r\n new Vector3(-0.0652053, -0.892579, -0.446151),\r\n new Vector3(0.408421, -0.912487, 0.0236566),\r\n new Vector3(0.0900381, 0.319983, 0.943135),\r\n new Vector3(-0.708553, 0.483646, 0.513847),\r\n new Vector3(0.803855, -0.0902273, 0.587942),\r\n new Vector3(-0.0555802, -0.374602, -0.925519)\r\n];\r\n\r\n/** @internal */\r\nexport enum Fog {\r\n FOG_TYPE_NONE = 0,\r\n FOG_TYPE_HEIGHT = 4\r\n}\r\n"],"names":["RENDER_PASS_TYPE_LIGHT","RENDER_PASS_TYPE_SHADOWMAP","RENDER_PASS_TYPE_DEPTH","RENDER_PASS_TYPE_OBJECT_COLOR","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","BUILTIN_ASSET_TEST_CUBEMAP","LIGHT_TYPE_NONE","LIGHT_TYPE_DIRECTIONAL","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","LIGHT_TYPE_RECT","MAX_SHADOW_MASK_LIGHTS","QUEUE_OPAQUE","QUEUE_TRANSPARENT","MORPH_TARGET_POSITION","MORPH_TARGET_NORMAL","MORPH_TARGET_TANGENT","MORPH_TARGET_COLOR","MORPH_TARGET_TEX0","MORPH_TARGET_TEX1","MORPH_TARGET_TEX2","MORPH_TARGET_TEX3","MAX_MORPH_ATTRIBUTES","DEFAULT_MORPH_TARGET_LIMIT","DEFAULT_ACTIVE_MORPH_TARGET_LIMIT","MAX_MORPH_TARGETS","DEFAULT_SKIN_INFLUENCE_LIMIT","MAX_SKIN_INFLUENCES","MAX_SKIN_EXTRA_INFLUENCE_PAIRS","Math","ceil","max","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphTargetLimit","activeMorphTargetLimit","skinInfluenceLimit","normalizeMorphTargetLimit","value","Number","isFinite","min","trunc","getMorphTargetLimit","setMorphTargetLimit","normalizeActiveMorphTargetLimit","getActiveMorphTargetLimit","setActiveMorphTargetLimit","normalizeSkinInfluenceLimit","getSkinInfluenceLimit","setSkinInfluenceLimit","MAX_TERRAIN_MIPMAP_LEVELS","MAX_GERSTNER_WAVE_COUNT","MaterialVaryingFlags","ATMOSPHERIC_FOG_BIT","HEIGHT_FOG_BIT","uniformSphereSamples","Vector3","Fog"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zephyr3d/scene",
3
- "version": "0.9.25",
3
+ "version": "0.9.26",
4
4
  "description": "Scene API for zephyr3d",
5
5
  "homepage": "https://github.com/gavinyork/zephyr3d#readme",
6
6
  "type": "module",
@@ -67,8 +67,8 @@
67
67
  "dependencies": {
68
68
  "@types/draco3d": "^1.4.9",
69
69
  "@webgpu/types": "^0.1.65",
70
- "@zephyr3d/base": "^0.2.9",
71
- "@zephyr3d/device": "^0.2.18",
70
+ "@zephyr3d/base": "^0.2.10",
71
+ "@zephyr3d/device": "^0.2.19",
72
72
  "es-module-lexer": "^1.7.0"
73
73
  },
74
74
  "scripts": {