@aura3d/rendering 2.0.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/dist/AtmosphereWetness.d.ts +61 -0
  2. package/dist/AtmosphereWetness.d.ts.map +1 -0
  3. package/dist/AtmosphereWetness.js +99 -0
  4. package/dist/AtmosphereWetness.js.map +1 -0
  5. package/dist/ClusteredForwardLighting.d.ts +25 -1
  6. package/dist/ClusteredForwardLighting.d.ts.map +1 -1
  7. package/dist/ClusteredForwardLighting.js +80 -3
  8. package/dist/ClusteredForwardLighting.js.map +1 -1
  9. package/dist/DayNightSky.d.ts +63 -0
  10. package/dist/DayNightSky.d.ts.map +1 -0
  11. package/dist/DayNightSky.js +156 -0
  12. package/dist/DayNightSky.js.map +1 -0
  13. package/dist/EnvironmentPresetPack.d.ts +30 -0
  14. package/dist/EnvironmentPresetPack.d.ts.map +1 -0
  15. package/dist/EnvironmentPresetPack.js +49 -0
  16. package/dist/EnvironmentPresetPack.js.map +1 -0
  17. package/dist/ForwardPass.d.ts +67 -0
  18. package/dist/ForwardPass.d.ts.map +1 -1
  19. package/dist/ForwardPass.js +196 -2
  20. package/dist/ForwardPass.js.map +1 -1
  21. package/dist/InstancedPBRMaterial.d.ts +1 -0
  22. package/dist/InstancedPBRMaterial.d.ts.map +1 -1
  23. package/dist/InstancedPBRMaterial.js +3 -0
  24. package/dist/InstancedPBRMaterial.js.map +1 -1
  25. package/dist/InstancingDiagnostics.d.ts +69 -0
  26. package/dist/InstancingDiagnostics.d.ts.map +1 -0
  27. package/dist/InstancingDiagnostics.js +98 -0
  28. package/dist/InstancingDiagnostics.js.map +1 -0
  29. package/dist/LightingRig.d.ts +19 -1
  30. package/dist/LightingRig.d.ts.map +1 -1
  31. package/dist/LightingRig.js +61 -1
  32. package/dist/LightingRig.js.map +1 -1
  33. package/dist/MeshConsolidation.d.ts +12 -0
  34. package/dist/MeshConsolidation.d.ts.map +1 -1
  35. package/dist/MeshConsolidation.js +28 -0
  36. package/dist/MeshConsolidation.js.map +1 -1
  37. package/dist/MorphTargetPlan.d.ts +29 -2
  38. package/dist/MorphTargetPlan.d.ts.map +1 -1
  39. package/dist/MorphTargetPlan.js +23 -4
  40. package/dist/MorphTargetPlan.js.map +1 -1
  41. package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
  42. package/dist/NormalMappedPBRMaterial.js +22 -2
  43. package/dist/NormalMappedPBRMaterial.js.map +1 -1
  44. package/dist/OceanSurface.d.ts +75 -0
  45. package/dist/OceanSurface.d.ts.map +1 -1
  46. package/dist/OceanSurface.js +211 -0
  47. package/dist/OceanSurface.js.map +1 -1
  48. package/dist/PBRMaterial.d.ts +1 -0
  49. package/dist/PBRMaterial.d.ts.map +1 -1
  50. package/dist/PBRMaterial.js +23 -2
  51. package/dist/PBRMaterial.js.map +1 -1
  52. package/dist/PbrReference.d.ts +48 -0
  53. package/dist/PbrReference.d.ts.map +1 -1
  54. package/dist/PbrReference.js +126 -0
  55. package/dist/PbrReference.js.map +1 -1
  56. package/dist/PlanarReflection.d.ts +221 -0
  57. package/dist/PlanarReflection.d.ts.map +1 -0
  58. package/dist/PlanarReflection.js +541 -0
  59. package/dist/PlanarReflection.js.map +1 -0
  60. package/dist/PostProcessPass.d.ts +13 -0
  61. package/dist/PostProcessPass.d.ts.map +1 -1
  62. package/dist/PostProcessPass.js +15 -4
  63. package/dist/PostProcessPass.js.map +1 -1
  64. package/dist/ReflectionSurfaces.d.ts +14 -0
  65. package/dist/ReflectionSurfaces.d.ts.map +1 -1
  66. package/dist/ReflectionSurfaces.js +93 -0
  67. package/dist/ReflectionSurfaces.js.map +1 -1
  68. package/dist/RenderDevice.d.ts +87 -0
  69. package/dist/RenderDevice.d.ts.map +1 -1
  70. package/dist/RenderDevice.js +85 -0
  71. package/dist/RenderDevice.js.map +1 -1
  72. package/dist/Renderer.js +8 -5
  73. package/dist/Renderer.js.map +1 -1
  74. package/dist/RendererPostprocessPlan.d.ts +48 -0
  75. package/dist/RendererPostprocessPlan.d.ts.map +1 -1
  76. package/dist/RendererPostprocessPlan.js +101 -11
  77. package/dist/RendererPostprocessPlan.js.map +1 -1
  78. package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
  79. package/dist/RendererVisualPipelineReport.js +3 -1
  80. package/dist/RendererVisualPipelineReport.js.map +1 -1
  81. package/dist/Sampler.d.ts +29 -0
  82. package/dist/Sampler.d.ts.map +1 -1
  83. package/dist/Sampler.js +47 -0
  84. package/dist/Sampler.js.map +1 -1
  85. package/dist/SceneOptimization.d.ts +1 -0
  86. package/dist/SceneOptimization.d.ts.map +1 -1
  87. package/dist/SceneOptimization.js +4 -2
  88. package/dist/SceneOptimization.js.map +1 -1
  89. package/dist/SdfText.d.ts +250 -0
  90. package/dist/SdfText.d.ts.map +1 -0
  91. package/dist/SdfText.js +551 -0
  92. package/dist/SdfText.js.map +1 -0
  93. package/dist/ShaderChunks.d.ts.map +1 -1
  94. package/dist/ShaderChunks.js +30 -12
  95. package/dist/ShaderChunks.js.map +1 -1
  96. package/dist/ShaderLibrary.d.ts.map +1 -1
  97. package/dist/ShaderLibrary.js +478 -34
  98. package/dist/ShaderLibrary.js.map +1 -1
  99. package/dist/ShaderLibraryCore.d.ts.map +1 -1
  100. package/dist/ShaderLibraryCore.js +70 -12
  101. package/dist/ShaderLibraryCore.js.map +1 -1
  102. package/dist/ShadowMap.d.ts +24 -0
  103. package/dist/ShadowMap.d.ts.map +1 -1
  104. package/dist/ShadowMap.js +43 -0
  105. package/dist/ShadowMap.js.map +1 -1
  106. package/dist/SkinnedLitMaterial.d.ts.map +1 -1
  107. package/dist/SkinnedLitMaterial.js +2 -0
  108. package/dist/SkinnedLitMaterial.js.map +1 -1
  109. package/dist/SkinningBounds.d.ts +10 -0
  110. package/dist/SkinningBounds.d.ts.map +1 -1
  111. package/dist/SkinningBounds.js +27 -0
  112. package/dist/SkinningBounds.js.map +1 -1
  113. package/dist/SpriteFlipbook.d.ts +60 -0
  114. package/dist/SpriteFlipbook.d.ts.map +1 -0
  115. package/dist/SpriteFlipbook.js +128 -0
  116. package/dist/SpriteFlipbook.js.map +1 -0
  117. package/dist/TerrainTiles.d.ts +120 -0
  118. package/dist/TerrainTiles.d.ts.map +1 -0
  119. package/dist/TerrainTiles.js +221 -0
  120. package/dist/TerrainTiles.js.map +1 -0
  121. package/dist/TexturedPBRMaterial.d.ts +1 -0
  122. package/dist/TexturedPBRMaterial.d.ts.map +1 -1
  123. package/dist/TexturedPBRMaterial.js +23 -2
  124. package/dist/TexturedPBRMaterial.js.map +1 -1
  125. package/dist/TexturedUnlitMaterial.d.ts.map +1 -1
  126. package/dist/TexturedUnlitMaterial.js +20 -2
  127. package/dist/TexturedUnlitMaterial.js.map +1 -1
  128. package/dist/UnlitMaterial.d.ts.map +1 -1
  129. package/dist/UnlitMaterial.js +20 -2
  130. package/dist/UnlitMaterial.js.map +1 -1
  131. package/dist/VertexFormat.d.ts +6 -0
  132. package/dist/VertexFormat.d.ts.map +1 -1
  133. package/dist/VertexFormat.js +12 -0
  134. package/dist/VertexFormat.js.map +1 -1
  135. package/dist/VolumetricFog.d.ts +55 -0
  136. package/dist/VolumetricFog.d.ts.map +1 -0
  137. package/dist/VolumetricFog.js +91 -0
  138. package/dist/VolumetricFog.js.map +1 -0
  139. package/dist/WaterSurface.d.ts +77 -0
  140. package/dist/WaterSurface.d.ts.map +1 -0
  141. package/dist/WaterSurface.js +133 -0
  142. package/dist/WaterSurface.js.map +1 -0
  143. package/dist/WebGL2Device.d.ts +58 -0
  144. package/dist/WebGL2Device.d.ts.map +1 -1
  145. package/dist/WebGL2Device.js +536 -17
  146. package/dist/WebGL2Device.js.map +1 -1
  147. package/dist/WebGPUDevice.d.ts +50 -0
  148. package/dist/WebGPUDevice.d.ts.map +1 -1
  149. package/dist/WebGPUDevice.js +504 -10
  150. package/dist/WebGPUDevice.js.map +1 -1
  151. package/dist/WebGPUSkinningLimits.d.ts +40 -0
  152. package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
  153. package/dist/WebGPUSkinningLimits.js +32 -0
  154. package/dist/WebGPUSkinningLimits.js.map +1 -1
  155. package/dist/effects/CollisionModule.d.ts +9 -0
  156. package/dist/effects/CollisionModule.d.ts.map +1 -1
  157. package/dist/effects/CollisionModule.js +10 -0
  158. package/dist/effects/CollisionModule.js.map +1 -1
  159. package/dist/effects/ColorModule.d.ts +7 -0
  160. package/dist/effects/ColorModule.d.ts.map +1 -1
  161. package/dist/effects/ColorModule.js +23 -0
  162. package/dist/effects/ColorModule.js.map +1 -1
  163. package/dist/effects/ForceModule.d.ts +35 -0
  164. package/dist/effects/ForceModule.d.ts.map +1 -1
  165. package/dist/effects/ForceModule.js +49 -0
  166. package/dist/effects/ForceModule.js.map +1 -1
  167. package/dist/effects/GPUParticleBackend.d.ts +186 -0
  168. package/dist/effects/GPUParticleBackend.d.ts.map +1 -1
  169. package/dist/effects/GPUParticleBackend.js +692 -1
  170. package/dist/effects/GPUParticleBackend.js.map +1 -1
  171. package/dist/effects/HeightfieldModule.d.ts +58 -0
  172. package/dist/effects/HeightfieldModule.d.ts.map +1 -0
  173. package/dist/effects/HeightfieldModule.js +129 -0
  174. package/dist/effects/HeightfieldModule.js.map +1 -0
  175. package/dist/effects/LightingModule.d.ts +34 -0
  176. package/dist/effects/LightingModule.d.ts.map +1 -0
  177. package/dist/effects/LightingModule.js +54 -0
  178. package/dist/effects/LightingModule.js.map +1 -0
  179. package/dist/effects/ParticleDiagnostics.d.ts +8 -0
  180. package/dist/effects/ParticleDiagnostics.d.ts.map +1 -1
  181. package/dist/effects/ParticleDiagnostics.js +3 -0
  182. package/dist/effects/ParticleDiagnostics.js.map +1 -1
  183. package/dist/effects/ParticleModule.d.ts +8 -0
  184. package/dist/effects/ParticleModule.d.ts.map +1 -1
  185. package/dist/effects/ParticleModule.js.map +1 -1
  186. package/dist/effects/ParticleRenderer.d.ts +20 -0
  187. package/dist/effects/ParticleRenderer.d.ts.map +1 -1
  188. package/dist/effects/ParticleRenderer.js +57 -7
  189. package/dist/effects/ParticleRenderer.js.map +1 -1
  190. package/dist/effects/ParticleSystem.d.ts +45 -1
  191. package/dist/effects/ParticleSystem.d.ts.map +1 -1
  192. package/dist/effects/ParticleSystem.js +373 -4
  193. package/dist/effects/ParticleSystem.js.map +1 -1
  194. package/dist/effects/SizeModule.d.ts +4 -0
  195. package/dist/effects/SizeModule.d.ts.map +1 -1
  196. package/dist/effects/SizeModule.js +16 -0
  197. package/dist/effects/SizeModule.js.map +1 -1
  198. package/dist/effects/SubEmitterModule.d.ts +61 -0
  199. package/dist/effects/SubEmitterModule.d.ts.map +1 -0
  200. package/dist/effects/SubEmitterModule.js +119 -0
  201. package/dist/effects/SubEmitterModule.js.map +1 -0
  202. package/dist/effects/TrailModule.d.ts +38 -0
  203. package/dist/effects/TrailModule.d.ts.map +1 -1
  204. package/dist/effects/TrailModule.js +95 -2
  205. package/dist/effects/TrailModule.js.map +1 -1
  206. package/dist/effects/TurbulenceModule.d.ts +43 -0
  207. package/dist/effects/TurbulenceModule.d.ts.map +1 -0
  208. package/dist/effects/TurbulenceModule.js +130 -0
  209. package/dist/effects/TurbulenceModule.js.map +1 -0
  210. package/dist/effects/index.d.ts +4 -0
  211. package/dist/effects/index.d.ts.map +1 -1
  212. package/dist/effects/index.js +4 -0
  213. package/dist/effects/index.js.map +1 -1
  214. package/dist/index.d.ts +57 -19
  215. package/dist/index.d.ts.map +1 -1
  216. package/dist/index.js +31 -10
  217. package/dist/index.js.map +1 -1
  218. package/dist/materials/MaterialExtensions.js +3 -3
  219. package/dist/materials/MaterialExtensions.js.map +1 -1
  220. package/dist/postprocess/NativeBloomPyramid.d.ts +28 -0
  221. package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -0
  222. package/dist/postprocess/NativeBloomPyramid.js +54 -0
  223. package/dist/postprocess/NativeBloomPyramid.js.map +1 -0
  224. package/dist/postprocess/NativeLdrEffectLuts.d.ts +10 -1
  225. package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
  226. package/dist/postprocess/NativeLdrEffectLuts.js +19 -2
  227. package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -1
  228. package/dist/postprocess/index.d.ts +2 -0
  229. package/dist/postprocess/index.d.ts.map +1 -1
  230. package/dist/postprocess/index.js +1 -0
  231. package/dist/postprocess/index.js.map +1 -1
  232. package/dist/production-runtime/PBRHDRPipeline.d.ts +22 -0
  233. package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  234. package/dist/production-runtime/PBRHDRPipeline.js +125 -0
  235. package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
  236. package/dist/production-runtime/ProductionWebGPURenderer.d.ts +52 -0
  237. package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  238. package/dist/production-runtime/ProductionWebGPURenderer.js +101 -0
  239. package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  240. package/dist/production-runtime/index.d.ts +5 -4
  241. package/dist/production-runtime/index.d.ts.map +1 -1
  242. package/dist/production-runtime/index.js +3 -2
  243. package/dist/production-runtime/index.js.map +1 -1
  244. package/dist/production-runtime/passes/DepthPrepass.d.ts +26 -1
  245. package/dist/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
  246. package/dist/production-runtime/passes/DepthPrepass.js +49 -2
  247. package/dist/production-runtime/passes/DepthPrepass.js.map +1 -1
  248. package/dist/production-runtime/passes/FramegraphTopology.d.ts +13 -0
  249. package/dist/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
  250. package/dist/production-runtime/passes/FramegraphTopology.js +59 -0
  251. package/dist/production-runtime/passes/FramegraphTopology.js.map +1 -0
  252. package/dist/production-runtime/passes/OpaquePass.d.ts +24 -1
  253. package/dist/production-runtime/passes/OpaquePass.d.ts.map +1 -1
  254. package/dist/production-runtime/passes/OpaquePass.js +41 -2
  255. package/dist/production-runtime/passes/OpaquePass.js.map +1 -1
  256. package/dist/production-runtime/passes/ShadowPass.d.ts +24 -1
  257. package/dist/production-runtime/passes/ShadowPass.d.ts.map +1 -1
  258. package/dist/production-runtime/passes/ShadowPass.js +43 -2
  259. package/dist/production-runtime/passes/ShadowPass.js.map +1 -1
  260. package/dist/production-runtime/passes/SkyboxPass.d.ts +21 -1
  261. package/dist/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
  262. package/dist/production-runtime/passes/SkyboxPass.js +39 -2
  263. package/dist/production-runtime/passes/SkyboxPass.js.map +1 -1
  264. package/dist/production-runtime/passes/ToneMappingPass.d.ts +29 -1
  265. package/dist/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
  266. package/dist/production-runtime/passes/ToneMappingPass.js +53 -2
  267. package/dist/production-runtime/passes/ToneMappingPass.js.map +1 -1
  268. package/dist/production-runtime/passes/TransparentPass.d.ts +24 -1
  269. package/dist/production-runtime/passes/TransparentPass.d.ts.map +1 -1
  270. package/dist/production-runtime/passes/TransparentPass.js +42 -2
  271. package/dist/production-runtime/passes/TransparentPass.js.map +1 -1
  272. package/dist/shadows/CascadeHysteresis.d.ts +67 -0
  273. package/dist/shadows/CascadeHysteresis.d.ts.map +1 -0
  274. package/dist/shadows/CascadeHysteresis.js +104 -0
  275. package/dist/shadows/CascadeHysteresis.js.map +1 -0
  276. package/dist/shadows/ContactShadows.d.ts +52 -0
  277. package/dist/shadows/ContactShadows.d.ts.map +1 -1
  278. package/dist/shadows/ContactShadows.js +122 -0
  279. package/dist/shadows/ContactShadows.js.map +1 -1
  280. package/dist/shadows/SpotShadowMaps.d.ts +77 -0
  281. package/dist/shadows/SpotShadowMaps.d.ts.map +1 -0
  282. package/dist/shadows/SpotShadowMaps.js +106 -0
  283. package/dist/shadows/SpotShadowMaps.js.map +1 -0
  284. package/dist/webgpu/WebGPUPostProcess.d.ts +2 -0
  285. package/dist/webgpu/WebGPUPostProcess.d.ts.map +1 -1
  286. package/dist/webgpu/WebGPUPostProcess.js +1 -0
  287. package/dist/webgpu/WebGPUPostProcess.js.map +1 -1
  288. package/dist/webgpu/WebGPUPostShaders.d.ts +78 -0
  289. package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -0
  290. package/dist/webgpu/WebGPUPostShaders.js +262 -0
  291. package/dist/webgpu/WebGPUPostShaders.js.map +1 -0
  292. package/package.json +3 -3
@@ -11,4 +11,44 @@
11
11
  */
12
12
  /** Joint-palette capacity of the WebGPU skinning path — parity with the WebGL2 `u_jointMatrices[96]`. */
13
13
  export declare const MAX_WEBGPU_SKINNING_JOINTS = 96;
14
+ /**
15
+ * Machine-readable reason a skinned mesh takes (or avoids) the CPU skinning fallback.
16
+ * Reported in diagnostics so gates can distinguish "too many joints" from "no GPU path
17
+ * available" instead of lumping every fallback together.
18
+ */
19
+ export type SkinningCpuFallbackReason =
20
+ /** Joint count fits the uniform array; no fallback involved. */
21
+ "none-uniform-array"
22
+ /** Joint count exceeds the uniform array but fits the data-texture palette path. */
23
+ | "none-data-texture"
24
+ /** Joint count exceeds even the data-texture ceiling — CPU skinning is the only option. */
25
+ | "joint-count-exceeds-data-texture-limit"
26
+ /** The shader has no data-texture palette uniforms, so palettes above the uniform cap fall back. */
27
+ | "shader-lacks-data-texture-palette"
28
+ /** No joint-palette uniforms at all on this shader — CPU skinning is the only option. */
29
+ | "shader-lacks-skinning-uniforms";
30
+ export interface SkinningPaletteDecision {
31
+ readonly jointCount: number;
32
+ /** `"uniform-array"` | `"data-texture"` — the GPU upload path, or `"cpu"` when neither fits. */
33
+ readonly path: "uniform-array" | "data-texture" | "cpu";
34
+ readonly reason: SkinningCpuFallbackReason;
35
+ /** True when the mesh must be skinned on the CPU for this shader/capability set. */
36
+ readonly cpuFallback: boolean;
37
+ }
38
+ /**
39
+ * Decide the joint-palette upload path for a skinned mesh without touching the GPU.
40
+ * Pure and deterministic: same inputs always produce the same decision, so diagnostics
41
+ * and gates can assert on it in unit tests.
42
+ *
43
+ * Mirrors the runtime rule in the forward pass (uniform array up to the uniform cap,
44
+ * data-texture palette above it when the shader declares the uniforms, CPU otherwise)
45
+ * without importing renderer internals.
46
+ */
47
+ export declare function decideSkinningPalettePath(options: {
48
+ readonly jointCount: number;
49
+ readonly maxUniformJoints?: number;
50
+ readonly maxDataTextureJoints?: number;
51
+ readonly shaderHasDataTexturePalette?: boolean;
52
+ readonly shaderHasSkinningUniforms?: boolean;
53
+ }): SkinningPaletteDecision;
14
54
  //# sourceMappingURL=WebGPUSkinningLimits.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebGPUSkinningLimits.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/WebGPUSkinningLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yGAAyG;AACzG,eAAO,MAAM,0BAA0B,KAAK,CAAC"}
1
+ {"version":3,"file":"WebGPUSkinningLimits.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/WebGPUSkinningLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yGAAyG;AACzG,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;GAIG;AACH,MAAM,MAAM,yBAAyB;AACnC,gEAAgE;AAC9D,oBAAoB;AACtB,oFAAoF;GAClF,mBAAmB;AACrB,2FAA2F;GACzF,wCAAwC;AAC1C,oGAAoG;GAClG,mCAAmC;AACrC,yFAAyF;GACvF,gCAAgC,CAAC;AAErC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,KAAK,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAC/C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CAC9C,GAAG,uBAAuB,CAsB1B"}
@@ -11,4 +11,36 @@
11
11
  */
12
12
  /** Joint-palette capacity of the WebGPU skinning path — parity with the WebGL2 `u_jointMatrices[96]`. */
13
13
  export const MAX_WEBGPU_SKINNING_JOINTS = 96;
14
+ /**
15
+ * Decide the joint-palette upload path for a skinned mesh without touching the GPU.
16
+ * Pure and deterministic: same inputs always produce the same decision, so diagnostics
17
+ * and gates can assert on it in unit tests.
18
+ *
19
+ * Mirrors the runtime rule in the forward pass (uniform array up to the uniform cap,
20
+ * data-texture palette above it when the shader declares the uniforms, CPU otherwise)
21
+ * without importing renderer internals.
22
+ */
23
+ export function decideSkinningPalettePath(options) {
24
+ const jointCount = options.jointCount;
25
+ if (!Number.isInteger(jointCount) || jointCount < 0) {
26
+ throw new Error("decideSkinningPalettePath jointCount must be a non-negative integer.");
27
+ }
28
+ const maxUniformJoints = options.maxUniformJoints ?? MAX_WEBGPU_SKINNING_JOINTS;
29
+ const maxDataTextureJoints = options.maxDataTextureJoints ?? MAX_WEBGPU_SKINNING_JOINTS;
30
+ const shaderHasSkinningUniforms = options.shaderHasSkinningUniforms ?? true;
31
+ const shaderHasDataTexturePalette = options.shaderHasDataTexturePalette ?? true;
32
+ if (jointCount <= maxUniformJoints && shaderHasSkinningUniforms) {
33
+ return { jointCount, path: "uniform-array", reason: "none-uniform-array", cpuFallback: false };
34
+ }
35
+ if (!shaderHasSkinningUniforms) {
36
+ return { jointCount, path: "cpu", reason: "shader-lacks-skinning-uniforms", cpuFallback: true };
37
+ }
38
+ if (jointCount <= maxDataTextureJoints && shaderHasDataTexturePalette) {
39
+ return { jointCount, path: "data-texture", reason: "none-data-texture", cpuFallback: false };
40
+ }
41
+ if (!shaderHasDataTexturePalette) {
42
+ return { jointCount, path: "cpu", reason: "shader-lacks-data-texture-palette", cpuFallback: true };
43
+ }
44
+ return { jointCount, path: "cpu", reason: "joint-count-exceeds-data-texture-limit", cpuFallback: true };
45
+ }
14
46
  //# sourceMappingURL=WebGPUSkinningLimits.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebGPUSkinningLimits.js","sourceRoot":"","sources":["../../../../packages/rendering/src/WebGPUSkinningLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yGAAyG;AACzG,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"WebGPUSkinningLimits.js","sourceRoot":"","sources":["../../../../packages/rendering/src/WebGPUSkinningLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yGAAyG;AACzG,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AA4B7C;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAMzC;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,0BAA0B,CAAC;IACxF,MAAM,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,IAAI,IAAI,CAAC;IAC5E,MAAM,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,IAAI,IAAI,CAAC;IAChF,IAAI,UAAU,IAAI,gBAAgB,IAAI,yBAAyB,EAAE,CAAC;QAChE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gCAAgC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAClG,CAAC;IACD,IAAI,UAAU,IAAI,oBAAoB,IAAI,2BAA2B,EAAE,CAAC;QACtE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACjC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC1G,CAAC"}
@@ -6,10 +6,19 @@ export interface CollisionPlane {
6
6
  restitution?: number;
7
7
  mode?: "bounce" | "kill";
8
8
  }
9
+ export interface GPUCollisionPlane {
10
+ readonly normal: Vector3Like;
11
+ readonly constant: number;
12
+ readonly restitution: number;
13
+ readonly killOnContact: boolean;
14
+ }
9
15
  export declare class CollisionModule implements ParticleModule {
10
16
  readonly name = "CollisionModule";
17
+ readonly supportsGPU = true;
11
18
  readonly plane: Required<CollisionPlane>;
12
19
  constructor(plane: CollisionPlane);
20
+ /** Encode this plane for the WGSL compute kernel (analytic-plane slot). */
21
+ toGPUPlane(): GPUCollisionPlane;
13
22
  afterIntegrate(particle: Particle, _context: ParticleUpdateContext): void;
14
23
  }
15
24
  //# sourceMappingURL=CollisionModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollisionModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/CollisionModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAeD,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAE7B,KAAK,EAAE,cAAc;IAajC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;CAuB1E"}
1
+ {"version":3,"file":"CollisionModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/CollisionModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAeD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAE7B,KAAK,EAAE,cAAc;IAajC,2EAA2E;IAC3E,UAAU,IAAI,iBAAiB;IAS/B,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;CAuB1E"}
@@ -10,6 +10,7 @@ function normalize(value) {
10
10
  }
11
11
  export class CollisionModule {
12
12
  name = "CollisionModule";
13
+ supportsGPU = true;
13
14
  plane;
14
15
  constructor(plane) {
15
16
  this.plane = {
@@ -22,6 +23,15 @@ export class CollisionModule {
22
23
  throw new RangeError("Collision plane constant and restitution must be finite numbers.");
23
24
  }
24
25
  }
26
+ /** Encode this plane for the WGSL compute kernel (analytic-plane slot). */
27
+ toGPUPlane() {
28
+ return {
29
+ normal: { ...this.plane.normal },
30
+ constant: this.plane.constant,
31
+ restitution: this.plane.restitution,
32
+ killOnContact: this.plane.mode === "kill",
33
+ };
34
+ }
25
35
  afterIntegrate(particle, _context) {
26
36
  const distance = dot(this.plane.normal, particle.position) + this.plane.constant;
27
37
  if (distance >= 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"CollisionModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/CollisionModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CollisionModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/CollisionModule.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,17 @@ export interface ColorKeyframe {
6
6
  color: ColorLike;
7
7
  }
8
8
  export declare function sampleColorGradient(keyframes: readonly ColorKeyframe[], time: number): ColorLike;
9
+ /**
10
+ * Pack a color/alpha-over-life gradient into a fixed-stop RGBA LUT for the
11
+ * compute kernel. Alpha-over-life travels in the fourth channel.
12
+ */
13
+ export declare function encodeColorGradientLUT(keyframes: readonly ColorKeyframe[], stops?: number): Float32Array;
9
14
  export declare class ColorModule implements ParticleModule {
10
15
  readonly name = "ColorModule";
16
+ readonly supportsGPU = true;
11
17
  readonly gradient: readonly ColorKeyframe[];
12
18
  constructor(gradient: readonly ColorKeyframe[]);
13
19
  update(particle: Particle, context: ParticleUpdateContext): void;
20
+ toGPUColorGradient(stops?: number): Float32Array;
14
21
  }
15
22
  //# sourceMappingURL=ColorModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ColorModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB;AAgBD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAsBhG;AAED,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;gBAEhC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAK9C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;CAGjE"}
1
+ {"version":3,"file":"ColorModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ColorModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB;AAgBD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAsBhG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,EAAE,KAAK,SAAK,GAAG,YAAY,CAcpG;AAED,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;gBAEhC,QAAQ,EAAE,SAAS,aAAa,EAAE;IAK9C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAIhE,kBAAkB,CAAC,KAAK,SAAK,GAAG,YAAY;CAG7C"}
@@ -31,8 +31,28 @@ export function sampleColorGradient(keyframes, time) {
31
31
  }
32
32
  return { ...keyframes[keyframes.length - 1].color };
33
33
  }
34
+ /**
35
+ * Pack a color/alpha-over-life gradient into a fixed-stop RGBA LUT for the
36
+ * compute kernel. Alpha-over-life travels in the fourth channel.
37
+ */
38
+ export function encodeColorGradientLUT(keyframes, stops = 16) {
39
+ validateGradient(keyframes);
40
+ if (!Number.isInteger(stops) || stops < 2 || stops > 64) {
41
+ throw new RangeError("Color gradient LUT stops must be an integer in [2, 64].");
42
+ }
43
+ const lut = new Float32Array(stops * 4);
44
+ for (let index = 0; index < stops; index += 1) {
45
+ const color = sampleColorGradient(keyframes, stops === 1 ? 0 : index / (stops - 1));
46
+ lut[index * 4] = color.r;
47
+ lut[index * 4 + 1] = color.g;
48
+ lut[index * 4 + 2] = color.b;
49
+ lut[index * 4 + 3] = color.a;
50
+ }
51
+ return lut;
52
+ }
34
53
  export class ColorModule {
35
54
  name = "ColorModule";
55
+ supportsGPU = true;
36
56
  gradient;
37
57
  constructor(gradient) {
38
58
  this.gradient = gradient;
@@ -41,5 +61,8 @@ export class ColorModule {
41
61
  update(particle, context) {
42
62
  particle.color = sampleColorGradient(this.gradient, context.normalizedAge);
43
63
  }
64
+ toGPUColorGradient(stops = 16) {
65
+ return encodeColorGradientLUT(this.gradient, stops);
66
+ }
44
67
  }
45
68
  //# sourceMappingURL=ColorModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ColorModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,eAAe,CAAC;AAS/C,SAAS,gBAAgB,CAAC,SAAmC;IAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,mDAAmD,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YACvE,MAAM,IAAI,UAAU,CAAC,2EAA2E,CAAC,CAAC;QACpG,CAAC;QACD,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAmC,EAAE,IAAY;IACnF,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAE5C,OAAO;gBACL,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC/D,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC/D,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;gBAC/D,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,aAAa,CAAC;IACrB,QAAQ,CAA2B;IAE5C,YAAY,QAAkC;QAC5C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,QAAkB,EAAE,OAA8B;QACvD,QAAQ,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7E,CAAC;CACF"}
1
+ {"version":3,"file":"ColorModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ColorModule.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,39 @@ export declare class ForceModule implements ParticleModule {
8
8
  update(particle: Particle, context: ParticleUpdateContext): void;
9
9
  }
10
10
  export declare function gravityForce(gravity?: number): ForceModule;
11
+ export interface WindModuleOptions {
12
+ readonly direction: Vector3Like;
13
+ readonly strength?: number;
14
+ /** Gust amplitude as a fraction of strength (0 = steady wind). */
15
+ readonly gustAmplitude?: number;
16
+ readonly gustDirection?: Vector3Like;
17
+ readonly gustFrequency?: number;
18
+ readonly gustSpeed?: number;
19
+ }
20
+ export interface GPUWindParams {
21
+ readonly direction: Vector3Like;
22
+ readonly strength: number;
23
+ readonly gustAmplitude: number;
24
+ readonly gustDirection: Vector3Like;
25
+ readonly gustFrequency: number;
26
+ readonly gustSpeed: number;
27
+ }
28
+ /**
29
+ * Analytic wind field with a traveling sinusoidal gust. The CPU fallback
30
+ * evaluates the same closed form the WGSL kernel implements, so the wind
31
+ * costs zero CPU per-particle work on the GPU path.
32
+ */
33
+ export declare class WindModule implements ParticleModule {
34
+ readonly name = "WindModule";
35
+ readonly supportsGPU = true;
36
+ readonly direction: Vector3Like;
37
+ readonly strength: number;
38
+ readonly gustAmplitude: number;
39
+ readonly gustDirection: Vector3Like;
40
+ readonly gustFrequency: number;
41
+ readonly gustSpeed: number;
42
+ constructor(options: WindModuleOptions);
43
+ update(particle: Particle, context: ParticleUpdateContext): void;
44
+ toGPUWind(): GPUWindParams;
45
+ }
11
46
  //# sourceMappingURL=ForceModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForceModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ForceModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,KAAK,WAAW,CAAC,CAAC;AAE/G,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;gBAEjB,KAAK,EAAE,YAAY;IAI/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;CAOjE;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAQ,GAAG,WAAW,CAEzD"}
1
+ {"version":3,"file":"ForceModule.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ForceModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,KAAK,WAAW,CAAC,CAAC;AAE/G,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;gBAEjB,KAAK,EAAE,YAAY;IAI/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;CAOjE;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAQ,GAAG,WAAW,CAEzD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,iBAAiB;IAgBtC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAahE,SAAS,IAAI,aAAa;CAU3B"}
@@ -14,4 +14,53 @@ export class ForceModule {
14
14
  export function gravityForce(gravity = -9.81) {
15
15
  return new ForceModule({ x: 0, y: gravity, z: 0 });
16
16
  }
17
+ /**
18
+ * Analytic wind field with a traveling sinusoidal gust. The CPU fallback
19
+ * evaluates the same closed form the WGSL kernel implements, so the wind
20
+ * costs zero CPU per-particle work on the GPU path.
21
+ */
22
+ export class WindModule {
23
+ name = "WindModule";
24
+ supportsGPU = true;
25
+ direction;
26
+ strength;
27
+ gustAmplitude;
28
+ gustDirection;
29
+ gustFrequency;
30
+ gustSpeed;
31
+ constructor(options) {
32
+ this.direction = { ...options.direction };
33
+ this.strength = options.strength ?? 1;
34
+ this.gustAmplitude = options.gustAmplitude ?? 0;
35
+ this.gustDirection = { ...(options.gustDirection ?? { x: 1, y: 0, z: 0 }) };
36
+ this.gustFrequency = options.gustFrequency ?? 0.5;
37
+ this.gustSpeed = options.gustSpeed ?? 0.8;
38
+ if (!Number.isFinite(this.strength) || !Number.isFinite(this.gustAmplitude) ||
39
+ !Number.isFinite(this.gustFrequency) || !Number.isFinite(this.gustSpeed)) {
40
+ throw new RangeError("WindModule strength and gust parameters must be finite numbers.");
41
+ }
42
+ if (this.gustAmplitude < 0) {
43
+ throw new RangeError("WindModule gustAmplitude must be non-negative.");
44
+ }
45
+ }
46
+ update(particle, context) {
47
+ const alongWind = particle.position.x * this.gustDirection.x +
48
+ particle.position.y * this.gustDirection.y +
49
+ particle.position.z * this.gustDirection.z;
50
+ const gust = 1 + this.gustAmplitude * Math.sin(alongWind * this.gustFrequency + context.elapsedTime * this.gustSpeed);
51
+ particle.velocity.x += this.direction.x * this.strength * gust * context.deltaTime;
52
+ particle.velocity.y += this.direction.y * this.strength * gust * context.deltaTime;
53
+ particle.velocity.z += this.direction.z * this.strength * gust * context.deltaTime;
54
+ }
55
+ toGPUWind() {
56
+ return {
57
+ direction: { ...this.direction },
58
+ strength: this.strength,
59
+ gustAmplitude: this.gustAmplitude,
60
+ gustDirection: { ...this.gustDirection },
61
+ gustFrequency: this.gustFrequency,
62
+ gustSpeed: this.gustSpeed,
63
+ };
64
+ }
65
+ }
17
66
  //# sourceMappingURL=ForceModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForceModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ForceModule.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,aAAa,CAAC;IACrB,KAAK,CAAe;IAE7B,YAAY,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,QAAkB,EAAE,OAA8B;QACvD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAE5F,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QACnD,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QACnD,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IACrD,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,CAAC,IAAI;IAC1C,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"ForceModule.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/ForceModule.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,29 @@ export interface GPUParticleUpdateInput {
10
10
  accelerations?: Float32Array;
11
11
  deltaTime: number;
12
12
  count: number;
13
+ /**
14
+ * Optional A4 effect set (wind, curl turbulence, analytic planes,
15
+ * heightfield ground, sub-emitters, life curves, lighting, trails).
16
+ * Absent = the proven legacy advection path, bit-identical to before.
17
+ * Honor the velocities.w contract: when effects.lifeCurves is set, the w
18
+ * component of each velocity vec4 carries that particle's lifetime so the
19
+ * kernel can evaluate normalized age on GPU.
20
+ */
21
+ effects?: GPUParticleEffectsInput;
22
+ /**
23
+ * Current per-particle color/size snapshot (count * 8 floats: rgba, then
24
+ * size in the fifth lane) uploaded as the lighting/curve base when
25
+ * effects request life curves or lighting. Omit when effects is absent.
26
+ */
27
+ baseAttributes?: Float32Array;
28
+ /**
29
+ * Previous trail ring (count * depth * 4 floats, newest-first with ages)
30
+ * used to seed the ring so history accumulates across calls. Omit (or pass
31
+ * a short buffer) to start fresh: slot 0 takes the live position/age and
32
+ * older slots start expired. ParticleSystem feeds back the previous
33
+ * result's trailPositions row-per-particle-id for this.
34
+ */
35
+ trailHistory?: Float32Array;
13
36
  }
14
37
  export interface GPUParticleUpdateResult {
15
38
  backend: "webgpu";
@@ -17,6 +40,113 @@ export interface GPUParticleUpdateResult {
17
40
  workgroups: number;
18
41
  positions: Float32Array;
19
42
  velocities: Float32Array;
43
+ /** Per-particle child-spawn counts; present only when effects requested sub-emitters. */
44
+ spawnRequests?: Uint32Array;
45
+ /**
46
+ * GPU-evaluated size/color-over-life: count * 2 vec4 entries
47
+ * (rgba, then size in x). Present only when effects requested life
48
+ * curves or lighting. A compute kill is signaled as positions w = -1.
49
+ */
50
+ attributes?: Float32Array;
51
+ /** GPU trail ring: count * depth vec4 entries (xyz, age), newest first. */
52
+ trailPositions?: Float32Array;
53
+ }
54
+ /** Effect flag bits for the extended compute uniform. */
55
+ export declare const GPU_PARTICLE_EFFECT_WIND = 1;
56
+ export declare const GPU_PARTICLE_EFFECT_TURBULENCE = 2;
57
+ export declare const GPU_PARTICLE_EFFECT_PLANES = 4;
58
+ export declare const GPU_PARTICLE_EFFECT_HEIGHTFIELD = 8;
59
+ export declare const GPU_PARTICLE_EFFECT_SUB_EMITTERS = 16;
60
+ export declare const GPU_PARTICLE_EFFECT_LIFE_CURVES = 32;
61
+ export declare const GPU_PARTICLE_EFFECT_LIGHTING = 64;
62
+ export declare const GPU_PARTICLE_EFFECT_TRAILS = 128;
63
+ export declare const GPU_PARTICLE_EFFECT_SIZE_CURVES = 256;
64
+ export declare const GPU_PARTICLE_MAX_PLANES = 3;
65
+ export declare const GPU_PARTICLE_MAX_SUB_EMITTERS = 2;
66
+ export declare const GPU_PARTICLE_CURVE_STOPS = 16;
67
+ export declare const GPU_PARTICLE_UNIFORM_BYTE_LENGTH = 272;
68
+ export interface GPUParticleWindEffect {
69
+ readonly direction: {
70
+ readonly x: number;
71
+ readonly y: number;
72
+ readonly z: number;
73
+ };
74
+ readonly strength: number;
75
+ readonly gustAmplitude: number;
76
+ readonly gustDirection: {
77
+ readonly x: number;
78
+ readonly y: number;
79
+ readonly z: number;
80
+ };
81
+ readonly gustFrequency: number;
82
+ readonly gustSpeed: number;
83
+ }
84
+ export interface GPUParticleTurbulenceEffect {
85
+ readonly strength: number;
86
+ readonly scale: number;
87
+ readonly flowSpeed: number;
88
+ /** Packed curl-noise LUT, resolution^3 vec4 entries. GPU requires resolution 8. */
89
+ readonly lut: Float32Array;
90
+ readonly lutResolution: number;
91
+ }
92
+ export interface GPUParticlePlaneEffect {
93
+ readonly normal: {
94
+ readonly x: number;
95
+ readonly y: number;
96
+ readonly z: number;
97
+ };
98
+ readonly constant: number;
99
+ readonly restitution: number;
100
+ readonly killOnContact: boolean;
101
+ }
102
+ export interface GPUParticleHeightfieldEffect {
103
+ readonly originX: number;
104
+ readonly originZ: number;
105
+ readonly cellSize: number;
106
+ readonly columns: number;
107
+ readonly rows: number;
108
+ readonly heights: Float32Array;
109
+ readonly restitution: number;
110
+ readonly killOnContact: boolean;
111
+ }
112
+ export interface GPUParticleSubEmitterEffect {
113
+ readonly triggerAge: number;
114
+ readonly chance: number;
115
+ readonly childCount: number;
116
+ }
117
+ export interface GPUParticleLifeCurvesEffect {
118
+ /**
119
+ * stops RGBA entries (stops * 4 floats). Present when a ColorModule is
120
+ * covered; absent sides are never sampled by the kernel.
121
+ */
122
+ readonly colors?: Float32Array;
123
+ /** stops size entries. Present when a SizeModule is covered. */
124
+ readonly sizes?: Float32Array;
125
+ readonly stops: number;
126
+ }
127
+ export interface GPUParticleLightingEffect {
128
+ readonly ambient: readonly [number, number, number];
129
+ readonly keyDirection: {
130
+ readonly x: number;
131
+ readonly y: number;
132
+ readonly z: number;
133
+ };
134
+ readonly diffuseStrength: number;
135
+ }
136
+ export interface GPUParticleEffectsInput {
137
+ readonly time?: number;
138
+ readonly seed?: number;
139
+ readonly wind?: GPUParticleWindEffect;
140
+ readonly turbulence?: GPUParticleTurbulenceEffect;
141
+ /** Analytic collision planes, applied in order. Max 3. */
142
+ readonly planes?: readonly GPUParticlePlaneEffect[];
143
+ readonly heightfield?: GPUParticleHeightfieldEffect;
144
+ /** Sub-emitter triggers. Max 2. */
145
+ readonly subEmitters?: readonly GPUParticleSubEmitterEffect[];
146
+ readonly lifeCurves?: GPUParticleLifeCurvesEffect;
147
+ readonly lighting?: GPUParticleLightingEffect;
148
+ /** Trail history depth per particle (1..8). Enables the GPU trail ring. */
149
+ readonly trailPointsPerParticle?: number;
20
150
  }
21
151
  export interface GPUParticleSpawnInput {
22
152
  positions: Float32Array;
@@ -34,6 +164,12 @@ export interface GPUParticleSpawnResult {
34
164
  }
35
165
  export interface GPUParticleBackend {
36
166
  readonly capabilities: GPUParticleBackendCapabilities;
167
+ /**
168
+ * True when update() honors GPUParticleUpdateInput.effects (the A4
169
+ * extended compute path). Backends without this flag ignore effects, and
170
+ * ParticleSystem keeps their CPU module hooks running instead.
171
+ */
172
+ readonly supportsEffects?: boolean;
37
173
  initialize(): Promise<void>;
38
174
  spawn?(input: GPUParticleSpawnInput): Promise<GPUParticleSpawnResult>;
39
175
  update(input: GPUParticleUpdateInput): Promise<GPUParticleUpdateResult>;
@@ -121,6 +257,7 @@ interface WebGPUComputePassEncoderLike {
121
257
  export interface WebGPUParticleBackendOptions {
122
258
  gpu?: WebGPULike;
123
259
  shaderSource?: string;
260
+ effectsShaderSource?: string;
124
261
  }
125
262
  export declare function detectGPUParticleBackend(globalScope?: Pick<typeof globalThis, "navigator">): GPUParticleBackendCapabilities;
126
263
  export declare function queryGPUParticleBackendCapabilities(globalScope?: Pick<typeof globalThis, "navigator">): Promise<GPUParticleBackendCapabilities>;
@@ -134,20 +271,69 @@ export declare class UnsupportedGPUParticleBackend implements GPUParticleBackend
134
271
  }
135
272
  export declare class WebGPUParticleBackend implements GPUParticleBackend {
136
273
  readonly capabilities: GPUParticleBackendCapabilities;
274
+ readonly supportsEffects = true;
137
275
  private readonly gpu;
138
276
  private readonly shaderSource;
277
+ private readonly effectsShaderSource;
139
278
  private adapter;
140
279
  private device;
141
280
  private updatePipeline;
142
281
  private spawnPipeline;
282
+ private effectsPipeline;
143
283
  constructor(options?: WebGPUParticleBackendOptions);
144
284
  initialize(): Promise<void>;
145
285
  spawn(input: GPUParticleSpawnInput): Promise<GPUParticleSpawnResult>;
146
286
  update(input: GPUParticleUpdateInput): Promise<GPUParticleUpdateResult>;
287
+ private updateWithEffects;
147
288
  dispose(): void;
148
289
  private requireDevice;
149
290
  private requireUpdatePipeline;
150
291
  private requireSpawnPipeline;
292
+ private requireEffectsPipeline;
293
+ }
294
+ export interface EncodedGPUParticleEffects {
295
+ readonly uniform: ArrayBuffer;
296
+ readonly flags: number;
297
+ readonly trailDepth: number;
298
+ readonly captureSpawnRequests: boolean;
299
+ readonly captureAttributes: boolean;
300
+ readonly captureTrails: boolean;
301
+ /**
302
+ * Single read-only field buffer (f32 words) shared by binding 4 so the
303
+ * kernel fits the default maxStorageBuffersPerShaderStage limit of 8:
304
+ * [curl LUT (2048 words when TURB, else 4 zero words),
305
+ * heights (columns*rows when HEIGHT, else 1 zero word),
306
+ * life curves (128 words: slots 0..15 color RGBA, 16..31 size in x)].
307
+ */
308
+ readonly fieldData: Float32Array;
151
309
  }
310
+ /**
311
+ * Pure encoder for the extended compute uniform. The 272-byte layout is:
312
+ * header (deltaTime f32 @0, count u32 @4, time f32 @8, flags u32 @12),
313
+ * then 16 vec4 slots: wind, windGust, windTurb, fxCounts, 3x(plane, planeMisc),
314
+ * sub0, sub1, height0, height1, light0, light1. Unit-tested byte-for-byte, and
315
+ * mirrored by the fake devices in tests plus the WGSL kernel below.
316
+ */
317
+ export declare function encodeGPUParticleEffects(effects: GPUParticleEffectsInput, deltaTime: number, count: number): EncodedGPUParticleEffects;
318
+ /**
319
+ * Snapshot helper for the base-attributes buffer. Missing lanes default to
320
+ * opaque white / size 1 so lighting without a color module stays sane.
321
+ */
322
+ export declare function createBaseAttributeSnapshot(baseAttributes: Float32Array | undefined, count: number): Float32Array;
323
+ /**
324
+ * Seed the GPU trail ring from the caller's previous result so history
325
+ * accumulates across calls. A missing or short history starts fresh: slot 0
326
+ * takes the live position/age and older slots carry +Infinity age so
327
+ * decoders drop them until real history exists.
328
+ */
329
+ export declare function snapshotTrailHistory(trailHistory: Float32Array | undefined, positions: Float32Array, count: number, depth: number): Float32Array;
330
+ export declare function createTrailRingInit(positions: Float32Array, count: number, depth: number): Float32Array;
331
+ /**
332
+ * Extended A4 compute kernel. Header offsets mirror encodeGPUParticleEffects:
333
+ * deltaTime f32 @0, count u32 @4, time f32 @8, flags u32 @12, then 16 vec4
334
+ * slots (wind, windGust, windTurb, fxCounts, 3x plane pairs, sub0, sub1,
335
+ * height0, height1, light0, light1). Kill signaling: positions w = -1.
336
+ */
337
+ export declare function createEffectsParticleComputeShader(): string;
152
338
  export {};
153
339
  //# sourceMappingURL=GPUParticleBackend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUParticleBackend.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/GPUParticleBackend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GPUParticleBackend.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/effects/GPUParticleBackend.ts"],"names":[],"mappings":"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"}