@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DayNightSky.js","sourceRoot":"","sources":["../../../../packages/rendering/src/DayNightSky.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ExternalParityEnvironmentPreset } from "./ExternalParityRenderPreset.js";
2
+ export type EnvironmentPresetPackSlot = "indoor" | "outdoor" | "night";
3
+ export interface EnvironmentPresetPackEntry {
4
+ readonly slot: EnvironmentPresetPackSlot;
5
+ readonly basePreset: ExternalParityEnvironmentPreset;
6
+ /**
7
+ * Measured exposure gain applied to the generated HDR source so every
8
+ * slot's mean linear luma matches the pack target (outdoor daylight).
9
+ * Measured 2026-09-03 from 64x32 generated sources, not guessed.
10
+ */
11
+ readonly exposureFactor: number;
12
+ readonly evidence: string;
13
+ }
14
+ export interface EnvironmentPresetPack {
15
+ /** Pack-wide mean-luma target: the measured outdoor daylight source mean. */
16
+ readonly targetMeanLuma: number;
17
+ readonly entries: readonly EnvironmentPresetPackEntry[];
18
+ /** Frozen-reference SSIM floor for exposure-normalized PMREM rows. */
19
+ readonly pmremRowSsimFloor: 0.975;
20
+ }
21
+ export declare const AURA_INDOOR_OUTDOOR_NIGHT_PRESET_PACK: EnvironmentPresetPack;
22
+ /**
23
+ * Applies a pack entry's measured exposure gain to generated HDR float
24
+ * data (pure linear gain: structure-preserving by construction, which is
25
+ * what lets the frozen-reference SSIM gate isolate pipeline regressions
26
+ * from exposure intent).
27
+ */
28
+ export declare function applyPresetPackExposure(data: Float32Array, exposureFactor: number): Float32Array;
29
+ export declare function meanLinearLuma(data: Float32Array, pixelCount: number): number;
30
+ //# sourceMappingURL=EnvironmentPresetPack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentPresetPack.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/EnvironmentPresetPack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAEpF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACxD,sEAAsE;IACtE,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC;CACnC;AAED,eAAO,MAAM,qCAAqC,EAAE,qBAuBnD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,cAAc,EAAE,MAAM,GACrB,YAAY,CASd;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAO7E"}
@@ -0,0 +1,49 @@
1
+ export const AURA_INDOOR_OUTDOOR_NIGHT_PRESET_PACK = {
2
+ targetMeanLuma: 0.60698,
3
+ entries: [
4
+ {
5
+ slot: "indoor",
6
+ basePreset: "softbox",
7
+ exposureFactor: 0.866755,
8
+ evidence: "softbox interior source mean 0.70029 normalized to the daylight target 0.60698"
9
+ },
10
+ {
11
+ slot: "outdoor",
12
+ basePreset: "daylight",
13
+ exposureFactor: 1,
14
+ evidence: "daylight source mean 0.60698 defines the pack target; identity gain"
15
+ },
16
+ {
17
+ slot: "night",
18
+ basePreset: "evening",
19
+ exposureFactor: 2.114618,
20
+ evidence: "evening source mean 0.28704 normalized to the daylight target 0.60698"
21
+ }
22
+ ],
23
+ pmremRowSsimFloor: 0.975
24
+ };
25
+ /**
26
+ * Applies a pack entry's measured exposure gain to generated HDR float
27
+ * data (pure linear gain: structure-preserving by construction, which is
28
+ * what lets the frozen-reference SSIM gate isolate pipeline regressions
29
+ * from exposure intent).
30
+ */
31
+ export function applyPresetPackExposure(data, exposureFactor) {
32
+ if (!Number.isFinite(exposureFactor) || exposureFactor <= 0) {
33
+ throw new RangeError(`Preset pack exposure factor must be finite and positive, got ${exposureFactor}.`);
34
+ }
35
+ const out = new Float32Array(data.length);
36
+ for (let index = 0; index < data.length; index += 1) {
37
+ out[index] = data[index] * exposureFactor;
38
+ }
39
+ return out;
40
+ }
41
+ export function meanLinearLuma(data, pixelCount) {
42
+ let sum = 0;
43
+ for (let pixel = 0; pixel < pixelCount; pixel += 1) {
44
+ const base = pixel * 4;
45
+ sum += 0.2126 * data[base] + 0.7152 * data[base + 1] + 0.0722 * data[base + 2];
46
+ }
47
+ return sum / Math.max(1, pixelCount);
48
+ }
49
+ //# sourceMappingURL=EnvironmentPresetPack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentPresetPack.js","sourceRoot":"","sources":["../../../../packages/rendering/src/EnvironmentPresetPack.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,qCAAqC,GAA0B;IAC1E,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,QAAQ;YACxB,QAAQ,EAAE,gFAAgF;SAC3F;QACD;YACE,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,UAAU;YACtB,cAAc,EAAE,CAAC;YACjB,QAAQ,EAAE,qEAAqE;SAChF;QACD;YACE,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,QAAQ;YACxB,QAAQ,EAAE,uEAAuE;SAClF;KACF;IACD,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAkB,EAClB,cAAsB;IAEtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,gEAAgE,cAAc,GAAG,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,GAAG,cAAc,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,UAAkB;IACnE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAE,CAAC;IACpF,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC"}
@@ -3,9 +3,12 @@ import { type CollectedLight } from "./LightCollector.js";
3
3
  import { Material } from "./Material.js";
4
4
  import { MaterialInstance } from "./MaterialInstance.js";
5
5
  import { type MorphTargetDelta } from "./MorphTarget.js";
6
+ import { type RenderShaderProgram, type UniformValue } from "./RenderDevice.js";
6
7
  import { BaseRenderPass, type RenderPassContext } from "./RenderPass.js";
8
+ import { type SkinningCpuFallbackReason } from "./WebGPUSkinningLimits.js";
7
9
  import { type ShaderLibrary } from "./ShaderLibraryCore.js";
8
10
  import { type ShadowFilterKernel } from "./ShadowMap.js";
11
+ import type { ForwardSpotShadowMapOptions } from "./shadows/SpotShadowMaps.js";
9
12
  import { TextureBinding } from "./TextureBinding.js";
10
13
  export interface RenderItem {
11
14
  readonly geometry: Geometry;
@@ -19,10 +22,18 @@ export interface RenderItem {
19
22
  readonly skinning?: SkinningPaletteBinding;
20
23
  readonly morphTargets?: readonly MorphTargetDelta[];
21
24
  readonly morphWeights?: readonly number[];
25
+ /**
26
+ * Wrinkle-detail intensity resolved engine-side from live morph weights
27
+ * (`resolveWrinkleMapStrength`). Shaders that declare `u_wrinkleStrength` modulate
28
+ * procedural normal detail by it; absent (or zero) leaves rendering bit-identical.
29
+ */
30
+ readonly wrinkleStrength?: number;
22
31
  readonly instanceTransforms?: Float32Array | readonly number[];
23
32
  readonly instanceColors?: Float32Array | readonly number[];
24
33
  readonly instanceAttributes?: readonly RenderItemInstanceAttribute[];
25
34
  readonly boundingBoxCenter?: readonly [number, number, number];
35
+ /** Exclude supporting/decorative geometry from renderer-owned shadow depth passes. */
36
+ readonly castShadow?: boolean;
26
37
  }
27
38
  export interface RenderItemDrawRange {
28
39
  readonly start: number;
@@ -55,7 +66,23 @@ export interface SkinningPaletteDiagnostics {
55
66
  readonly uniformArraySubmissions: number;
56
67
  readonly dataTextureSubmissions: number;
57
68
  readonly eightInfluenceSubmissions: number;
69
+ readonly cpuFallbackCount: number;
58
70
  readonly maxUniformJoints: number;
71
+ /**
72
+ * Per-mesh palette decision (bounded: the first 64 submissions; overflow counted in
73
+ * `decisionOverflow`). Each entry carries the CPU-fallback reason code so a claim about
74
+ * which path carried a rig rests on observed decisions, not inference.
75
+ */
76
+ readonly decisions: readonly SkinningPaletteDecisionRecord[];
77
+ readonly decisionOverflow: number;
78
+ }
79
+ /** One observed joint-palette decision for a submitted skinned mesh. */
80
+ export interface SkinningPaletteDecisionRecord {
81
+ readonly label: string;
82
+ readonly jointCount: number;
83
+ readonly path: SkinningPalettePath | "cpu";
84
+ readonly reason: SkinningCpuFallbackReason;
85
+ readonly cpuFallback: boolean;
59
86
  }
60
87
  /** Joints addressable through the uniform-array palette. Re-exported for shaders. */
61
88
  export declare const MAX_UNIFORM_SKINNING_JOINTS = 96;
@@ -113,6 +140,16 @@ export interface ForwardEnvironmentFogOptions {
113
140
  readonly heightFalloff?: number;
114
141
  readonly heightReference?: number;
115
142
  readonly maxOpacity?: number;
143
+ /**
144
+ * A5 volumetric inscatter (muse3jsparity-PRD). 0/absent reproduces the
145
+ * legacy fog path exactly; the forward pass binds these only when the
146
+ * program declares them.
147
+ */
148
+ readonly volumetricIntensity?: number;
149
+ /** World-space direction TOWARD the dominant volumetric light. */
150
+ readonly volumetricLightDirection?: readonly [number, number, number];
151
+ /** Linear RGB of the dominant volumetric light. */
152
+ readonly volumetricLightColor?: readonly [number, number, number];
116
153
  }
117
154
  export interface ForwardShadowMapOptions {
118
155
  readonly texture: TextureBinding;
@@ -123,6 +160,12 @@ export interface ForwardShadowMapOptions {
123
160
  readonly texelSize?: readonly [number, number];
124
161
  readonly filterKernel?: ShadowFilterKernel;
125
162
  readonly pointLight?: ForwardPointShadowMapOptions;
163
+ /**
164
+ * B1 spot shadow path (muse3jsparity-PRD): perspective spot shadow uniforms.
165
+ * Bound only when the program declares the `u_spotShadow*` uniforms, so
166
+ * existing programs render exactly as before.
167
+ */
168
+ readonly spotLight?: ForwardSpotShadowMapOptions;
126
169
  readonly cascades?: readonly ForwardShadowCascadeOptions[];
127
170
  }
128
171
  export interface ForwardShadowCascadeOptions {
@@ -156,5 +199,29 @@ export declare class ForwardPass extends BaseRenderPass {
156
199
  private applyLightUniforms;
157
200
  private getShader;
158
201
  }
202
+ export declare class SkinningPaletteUploadManager {
203
+ private static readonly validatedGeometryJointCounts;
204
+ private static readonly maxRecordedDecisions;
205
+ private submissions;
206
+ private jointsUploaded;
207
+ private maxJointCount;
208
+ private uniformArraySubmissions;
209
+ private dataTextureSubmissions;
210
+ private eightInfluenceSubmissions;
211
+ private cpuFallbackCount;
212
+ private decisions;
213
+ private decisionOverflow;
214
+ beginFrame(): void;
215
+ /**
216
+ * Which palette paths this frame actually used. Published rather than inferred so a
217
+ * claim about data-texture or eight-influence skinning rests on observed submissions.
218
+ * Each submission also records its `decideSkinningPalettePath` decision (same inputs the
219
+ * upload path used) so the CPU-fallback reason code travels with the diagnostics.
220
+ */
221
+ diagnostics(): SkinningPaletteDiagnostics;
222
+ bind(item: RenderItem, skinning: SkinningPaletteBinding, material: Material, shader: RenderShaderProgram, uniforms: Map<string, UniformValue>): void;
223
+ private recordDecision;
224
+ }
159
225
  export declare function selectForwardShadowMap(shadowMap: ForwardShadowMapOptions | undefined, item: RenderItem, cameraViewMatrix?: Float32Array | readonly number[], cameraPosition?: readonly [number, number, number]): ForwardShadowMapOptions | undefined;
226
+ export declare function applyForwardSpotShadowMapUniforms(spotShadowMap: ForwardSpotShadowMapOptions | undefined, item: RenderItem, shader: RenderShaderProgram, uniforms: Map<string, UniformValue>): void;
160
227
  //# sourceMappingURL=ForwardPass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ForwardPass.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ForwardPass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ForwardPass.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ForwardPass.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { RenderDeviceError } from "./RenderDevice.js";
9
9
  import { RenderPipeline } from "./RenderPipeline.js";
10
10
  import { BaseRenderPass } from "./RenderPass.js";
11
11
  import { MAX_UNIFORM_SKINNING_JOINTS as SHADER_MAX_UNIFORM_SKINNING_JOINTS } from "./ShaderChunks.js";
12
+ import { decideSkinningPalettePath } from "./WebGPUSkinningLimits.js";
12
13
  import { ShaderModule } from "./ShaderModule.js";
13
14
  import { createLeanCoreShaderLibrary } from "./ShaderLibraryCore.js";
14
15
  import { createShadowFilterKernel } from "./ShadowMap.js";
@@ -98,6 +99,7 @@ export class ForwardPass extends BaseRenderPass {
98
99
  applyOutputColorSpaceUniform(this.options.outputColorSpace ?? "srgb", item, shader, uniforms);
99
100
  applyCameraUniforms(this.options.cameraPosition, item, shader, uniforms);
100
101
  applyAlphaCutoffUniform(item, shader, uniforms);
102
+ applyWrinkleUniform(item, shader, uniforms);
101
103
  applyTransformUniforms(item, shader, uniforms);
102
104
  if (item.skinning) {
103
105
  this.skinningPaletteUploads.bind(item, item.skinning, baseMaterial, shader, uniforms);
@@ -173,14 +175,18 @@ export class ForwardPass extends BaseRenderPass {
173
175
  return module.compile(device);
174
176
  }
175
177
  }
176
- class SkinningPaletteUploadManager {
178
+ export class SkinningPaletteUploadManager {
177
179
  static validatedGeometryJointCounts = new WeakMap();
180
+ static maxRecordedDecisions = 64;
178
181
  submissions = 0;
179
182
  jointsUploaded = 0;
180
183
  maxJointCount = 0;
181
184
  uniformArraySubmissions = 0;
182
185
  dataTextureSubmissions = 0;
183
186
  eightInfluenceSubmissions = 0;
187
+ cpuFallbackCount = 0;
188
+ decisions = [];
189
+ decisionOverflow = 0;
184
190
  beginFrame() {
185
191
  this.submissions = 0;
186
192
  this.jointsUploaded = 0;
@@ -188,10 +194,15 @@ class SkinningPaletteUploadManager {
188
194
  this.uniformArraySubmissions = 0;
189
195
  this.dataTextureSubmissions = 0;
190
196
  this.eightInfluenceSubmissions = 0;
197
+ this.cpuFallbackCount = 0;
198
+ this.decisions = [];
199
+ this.decisionOverflow = 0;
191
200
  }
192
201
  /**
193
202
  * Which palette paths this frame actually used. Published rather than inferred so a
194
203
  * claim about data-texture or eight-influence skinning rests on observed submissions.
204
+ * Each submission also records its `decideSkinningPalettePath` decision (same inputs the
205
+ * upload path used) so the CPU-fallback reason code travels with the diagnostics.
195
206
  */
196
207
  diagnostics() {
197
208
  return {
@@ -201,10 +212,15 @@ class SkinningPaletteUploadManager {
201
212
  uniformArraySubmissions: this.uniformArraySubmissions,
202
213
  dataTextureSubmissions: this.dataTextureSubmissions,
203
214
  eightInfluenceSubmissions: this.eightInfluenceSubmissions,
204
- maxUniformJoints: MAX_UNIFORM_SKINNING_JOINTS
215
+ cpuFallbackCount: this.cpuFallbackCount,
216
+ maxUniformJoints: MAX_UNIFORM_SKINNING_JOINTS,
217
+ decisions: [...this.decisions],
218
+ decisionOverflow: this.decisionOverflow
205
219
  };
206
220
  }
207
221
  bind(item, skinning, material, shader, uniforms) {
222
+ // Recorded before the upload so a contract throw still leaves its reason code behind.
223
+ this.recordDecision(item, skinning, shader);
208
224
  const path = applySkinningUniforms(skinning, material, shader, uniforms);
209
225
  if (path === "data-texture")
210
226
  this.dataTextureSubmissions += 1;
@@ -224,6 +240,30 @@ class SkinningPaletteUploadManager {
224
240
  this.jointsUploaded += skinning.jointCount;
225
241
  this.maxJointCount = Math.max(this.maxJointCount, skinning.jointCount);
226
242
  }
243
+ recordDecision(item, skinning, shader) {
244
+ const reflection = shader.reflection.uniforms;
245
+ const decision = decideSkinningPalettePath({
246
+ jointCount: skinning.jointCount,
247
+ maxUniformJoints: MAX_UNIFORM_SKINNING_JOINTS,
248
+ maxDataTextureJoints: MAX_SKINNING_JOINTS,
249
+ shaderHasSkinningUniforms: reflection.has("u_jointMatrices") && reflection.has("u_jointCount"),
250
+ shaderHasDataTexturePalette: reflection.has("u_jointPaletteTexture") && reflection.has("u_jointPaletteMode")
251
+ });
252
+ if (decision.cpuFallback)
253
+ this.cpuFallbackCount += 1;
254
+ if (this.decisions.length < SkinningPaletteUploadManager.maxRecordedDecisions) {
255
+ this.decisions.push({
256
+ label: item.label ?? "skinned-item",
257
+ jointCount: skinning.jointCount,
258
+ path: decision.path,
259
+ reason: decision.reason,
260
+ cpuFallback: decision.cpuFallback
261
+ });
262
+ }
263
+ else {
264
+ this.decisionOverflow += 1;
265
+ }
266
+ }
227
267
  }
228
268
  function getForwardPassShaderCache(device, library) {
229
269
  let libraryCaches = ForwardPass["shaderCaches"].get(device);
@@ -281,6 +321,9 @@ function applyEnvironmentFogUniforms(fog, item, shader, uniforms) {
281
321
  uniforms.set("u_environmentFogHeightFalloff", 0);
282
322
  uniforms.set("u_environmentFogHeightReference", 0);
283
323
  uniforms.set("u_environmentFogMaxOpacity", 1);
324
+ if (shader.reflection.uniforms.has("u_volumetricIntensity")) {
325
+ uniforms.set("u_volumetricIntensity", 0);
326
+ }
284
327
  return;
285
328
  }
286
329
  const color = Array.from(fog.color);
@@ -333,6 +376,26 @@ function applyEnvironmentFogUniforms(fog, item, shader, uniforms) {
333
376
  uniforms.set("u_environmentFogHeightFalloff", heightFalloff);
334
377
  uniforms.set("u_environmentFogHeightReference", heightReference);
335
378
  uniforms.set("u_environmentFogMaxOpacity", maxOpacity);
379
+ // A5: bind the volumetric inscatter terms only when the program declares
380
+ // them; legacy programs keep the exact legacy fog response.
381
+ const volumetricIntensity = fog.volumetricIntensity ?? 0;
382
+ if (!Number.isFinite(volumetricIntensity) || volumetricIntensity < 0) {
383
+ throw new RenderDeviceError("Forward environment fog volumetricIntensity must be finite and non-negative", "FORWARD_ENVIRONMENT_FOG_CONTRACT", {
384
+ label: item.label,
385
+ volumetricIntensity
386
+ });
387
+ }
388
+ const volumetricLightDirection = fog.volumetricLightDirection ?? [0, 1, 0];
389
+ const volumetricLightColor = fog.volumetricLightColor ?? [1, 1, 1];
390
+ if (shader.reflection.uniforms.has("u_volumetricIntensity")) {
391
+ uniforms.set("u_volumetricIntensity", volumetricIntensity);
392
+ }
393
+ if (shader.reflection.uniforms.has("u_volumetricLightDirection")) {
394
+ uniforms.set("u_volumetricLightDirection", Array.from(volumetricLightDirection));
395
+ }
396
+ if (shader.reflection.uniforms.has("u_volumetricLightColor")) {
397
+ uniforms.set("u_volumetricLightColor", Array.from(volumetricLightColor));
398
+ }
336
399
  }
337
400
  function fogModeUniform(mode, label) {
338
401
  switch (mode) {
@@ -572,6 +635,7 @@ function applyForwardShadowMapUniforms(shadowMap, item, shader, uniforms) {
572
635
  return;
573
636
  }
574
637
  applyForwardPointShadowMapUniforms(shadowMap?.pointLight, item, shader, uniforms);
638
+ applyForwardSpotShadowMapUniforms(shadowMap?.spotLight, item, shader, uniforms);
575
639
  if (!shadowMap) {
576
640
  uniforms.set("u_shadowMapTexture", new TextureBinding({ name: "u_shadowMapTexture", required: false }));
577
641
  uniforms.set("u_shadowMapEnabled", 0);
@@ -761,6 +825,125 @@ function applyForwardPointShadowMapUniforms(pointShadowMap, item, shader, unifor
761
825
  uniforms.set("u_pointShadowPcfSampleCount", filterKernel.samples.length);
762
826
  uniforms.set("u_pointShadowPcfSamples", packForwardShadowPcfSamples(filterKernel, item.label));
763
827
  }
828
+ export function applyForwardSpotShadowMapUniforms(spotShadowMap, item, shader, uniforms) {
829
+ const requiredUniforms = [
830
+ "u_spotShadowMapTexture",
831
+ "u_spotShadowMapEnabled",
832
+ "u_spotShadowLightPosition",
833
+ "u_spotShadowLightDirection",
834
+ "u_spotShadowMatrix",
835
+ "u_spotShadowCone",
836
+ "u_spotShadowRange",
837
+ "u_spotShadowStrength",
838
+ "u_spotShadowBias",
839
+ "u_spotShadowSlopeBias",
840
+ "u_spotShadowTexelSize",
841
+ "u_spotShadowPcfSampleCount",
842
+ "u_spotShadowPcfSamples"
843
+ ];
844
+ if (!requiredUniforms.every((uniform) => shader.reflection.uniforms.has(uniform))) {
845
+ return;
846
+ }
847
+ if (!spotShadowMap) {
848
+ uniforms.set("u_spotShadowMapTexture", new TextureBinding({ name: "u_spotShadowMapTexture", required: false }));
849
+ uniforms.set("u_spotShadowMapEnabled", 0);
850
+ uniforms.set("u_spotShadowLightPosition", [0, 0, 0]);
851
+ uniforms.set("u_spotShadowLightDirection", [0, -1, 0]);
852
+ uniforms.set("u_spotShadowMatrix", new Float32Array(identityMatrix()));
853
+ uniforms.set("u_spotShadowCone", [Math.PI / 4, 0]);
854
+ uniforms.set("u_spotShadowRange", 1);
855
+ uniforms.set("u_spotShadowStrength", 0);
856
+ uniforms.set("u_spotShadowBias", 0);
857
+ uniforms.set("u_spotShadowSlopeBias", 0);
858
+ uniforms.set("u_spotShadowTexelSize", [1, 1]);
859
+ uniforms.set("u_spotShadowPcfSampleCount", 1);
860
+ uniforms.set("u_spotShadowPcfSamples", new Float32Array(MAX_FORWARD_SHADOW_PCF_SAMPLES * 4));
861
+ return;
862
+ }
863
+ const validation = spotShadowMap.texture.validate();
864
+ if (!validation.ok) {
865
+ throw new RenderDeviceError("Forward spot-shadow texture binding validation failed", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
866
+ label: item.label,
867
+ diagnostics: validation.diagnostics
868
+ });
869
+ }
870
+ if (spotShadowMap.lightPosition.length !== 3 || !isFiniteArrayLike(spotShadowMap.lightPosition)) {
871
+ throw new RenderDeviceError("Forward spot-shadow lightPosition must contain three finite values", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
872
+ label: item.label,
873
+ lightPosition: spotShadowMap.lightPosition
874
+ });
875
+ }
876
+ if (spotShadowMap.lightDirection.length !== 3 || !isFiniteArrayLike(spotShadowMap.lightDirection)) {
877
+ throw new RenderDeviceError("Forward spot-shadow lightDirection must contain three finite values", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
878
+ label: item.label,
879
+ lightDirection: spotShadowMap.lightDirection
880
+ });
881
+ }
882
+ if (!Number.isFinite(spotShadowMap.angle) || spotShadowMap.angle <= 0 || spotShadowMap.angle >= Math.PI / 2) {
883
+ throw new RenderDeviceError("Forward spot-shadow angle must be within (0, PI / 2)", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
884
+ label: item.label,
885
+ angle: spotShadowMap.angle
886
+ });
887
+ }
888
+ if (spotShadowMap.penumbra !== undefined && (!Number.isFinite(spotShadowMap.penumbra) || spotShadowMap.penumbra < 0 || spotShadowMap.penumbra > 1)) {
889
+ throw new RenderDeviceError("Forward spot-shadow penumbra must be in [0, 1]", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
890
+ label: item.label,
891
+ penumbra: spotShadowMap.penumbra
892
+ });
893
+ }
894
+ if (!Number.isFinite(spotShadowMap.range) || spotShadowMap.range <= 0) {
895
+ throw new RenderDeviceError("Forward spot-shadow range must be finite and positive", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
896
+ label: item.label,
897
+ range: spotShadowMap.range
898
+ });
899
+ }
900
+ const shadowMatrix = toFloat32Array(spotShadowMap.shadowMatrix, 16, "spotShadowMap.shadowMatrix", item.label);
901
+ const strength = spotShadowMap.strength ?? 0.65;
902
+ const bias = spotShadowMap.bias ?? 0.001;
903
+ const slopeBias = spotShadowMap.slopeBias ?? 1;
904
+ const texelSize = spotShadowMap.texelSize ?? [
905
+ 1 / Math.max(1, spotShadowMap.texture.texture?.width ?? 1),
906
+ 1 / Math.max(1, spotShadowMap.texture.texture?.height ?? 1)
907
+ ];
908
+ if (!Number.isFinite(strength) || strength < 0 || strength > 1) {
909
+ throw new RenderDeviceError("Forward spot-shadow strength must be finite in [0, 1]", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
910
+ label: item.label,
911
+ strength
912
+ });
913
+ }
914
+ if (!Number.isFinite(bias) || bias < 0) {
915
+ throw new RenderDeviceError("Forward spot-shadow bias must be finite and non-negative", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
916
+ label: item.label,
917
+ bias
918
+ });
919
+ }
920
+ if (!Number.isFinite(slopeBias) || slopeBias < 0) {
921
+ throw new RenderDeviceError("Forward spot-shadow slopeBias must be finite and non-negative", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
922
+ label: item.label,
923
+ slopeBias
924
+ });
925
+ }
926
+ if (texelSize.length !== 2 || !texelSize.every((value) => Number.isFinite(value) && value > 0)) {
927
+ throw new RenderDeviceError("Forward spot-shadow texelSize must contain two finite positive values", "FORWARD_SPOT_SHADOW_MAP_CONTRACT", {
928
+ label: item.label,
929
+ texelSize: Array.from(texelSize)
930
+ });
931
+ }
932
+ const filterKernel = spotShadowMap.filterKernel ?? DEFAULT_FORWARD_SHADOW_FILTER_KERNEL;
933
+ uniforms.set("u_spotShadowMapTexture", spotShadowMap.texture);
934
+ uniforms.set("u_spotShadowMapEnabled", 1);
935
+ uniforms.set("u_spotShadowLightPosition", spotShadowMap.lightPosition);
936
+ uniforms.set("u_spotShadowLightDirection", spotShadowMap.lightDirection);
937
+ uniforms.set("u_spotShadowMatrix", shadowMatrix);
938
+ uniforms.set("u_spotShadowCone", [spotShadowMap.angle, spotShadowMap.penumbra ?? 0]);
939
+ uniforms.set("u_spotShadowRange", spotShadowMap.range);
940
+ uniforms.set("u_spotShadowStrength", strength);
941
+ uniforms.set("u_spotShadowBias", bias);
942
+ uniforms.set("u_spotShadowSlopeBias", slopeBias);
943
+ uniforms.set("u_spotShadowTexelSize", texelSize);
944
+ uniforms.set("u_spotShadowPcfSampleCount", filterKernel.samples.length);
945
+ uniforms.set("u_spotShadowPcfSamples", packForwardShadowPcfSamples(filterKernel, item.label));
946
+ }
764
947
  function toFloat32Array(values, expectedLength, name, label) {
765
948
  const source = values instanceof Float32Array ? values : new Float32Array(values);
766
949
  if (source.length !== expectedLength || !isFiniteArrayLike(source)) {
@@ -1059,6 +1242,17 @@ function applyAlphaCutoffUniform(item, shader, uniforms) {
1059
1242
  return;
1060
1243
  uniforms.set("u_alphaCutoff", 0);
1061
1244
  }
1245
+ /**
1246
+ * Wrinkle-detail intensity (E1 face-rig demo): mirrors the morph-uniform pattern — only
1247
+ * shaders declaring `u_wrinkleStrength` are touched, and an absent item value uploads 0,
1248
+ * which every such shader treats as "today's rendering exactly".
1249
+ */
1250
+ function applyWrinkleUniform(item, shader, uniforms) {
1251
+ if (!shader.reflection.uniforms.has("u_wrinkleStrength") || uniforms.has("u_wrinkleStrength"))
1252
+ return;
1253
+ const strength = item.wrinkleStrength ?? 0;
1254
+ uniforms.set("u_wrinkleStrength", Number.isFinite(strength) ? Math.max(0, strength) : 0);
1255
+ }
1062
1256
  function applyTransformUniforms(item, shader, uniforms) {
1063
1257
  const modelMatrix = shader.reflection.uniforms.has("u_modelMatrix") || shader.reflection.uniforms.has("u_normalMatrix")
1064
1258
  ? toMat4Uniform(item.modelMatrix ?? identityMatrix(), "modelMatrix", item.label)