@aura3d/rendering 3.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1826) hide show
  1. package/dist/BlendModes.d.ts +34 -0
  2. package/dist/BlendModes.d.ts.map +1 -0
  3. package/dist/BlendModes.js +42 -0
  4. package/dist/BlendModes.js.map +1 -0
  5. package/dist/DepthPass.d.ts +18 -0
  6. package/dist/DepthPass.d.ts.map +1 -1
  7. package/dist/DepthPass.js +103 -20
  8. package/dist/DepthPass.js.map +1 -1
  9. package/dist/EnvironmentBackgroundPass.d.ts +7 -0
  10. package/dist/EnvironmentBackgroundPass.d.ts.map +1 -1
  11. package/dist/EnvironmentBackgroundPass.js +39 -14
  12. package/dist/EnvironmentBackgroundPass.js.map +1 -1
  13. package/dist/EnvironmentMapResources.d.ts +1 -1
  14. package/dist/EnvironmentMapResources.d.ts.map +1 -1
  15. package/dist/EnvironmentMapResources.js +19 -8
  16. package/dist/EnvironmentMapResources.js.map +1 -1
  17. package/dist/EnvironmentPlatform.d.ts +6 -0
  18. package/dist/EnvironmentPlatform.d.ts.map +1 -1
  19. package/dist/EnvironmentPlatform.js +3 -1
  20. package/dist/EnvironmentPlatform.js.map +1 -1
  21. package/dist/EnvironmentPreset.d.ts +7 -0
  22. package/dist/EnvironmentPreset.d.ts.map +1 -1
  23. package/dist/EnvironmentPreset.js +11 -11
  24. package/dist/EnvironmentPreset.js.map +1 -1
  25. package/dist/EnvironmentPresetPack.d.ts +16 -0
  26. package/dist/EnvironmentPresetPack.d.ts.map +1 -1
  27. package/dist/EnvironmentPresetPack.js +28 -0
  28. package/dist/EnvironmentPresetPack.js.map +1 -1
  29. package/dist/ExternalParityRenderPreset.d.ts +15 -1
  30. package/dist/ExternalParityRenderPreset.d.ts.map +1 -1
  31. package/dist/ExternalParityRenderPreset.js +52 -7
  32. package/dist/ExternalParityRenderPreset.js.map +1 -1
  33. package/dist/ForwardPass.d.ts +240 -50
  34. package/dist/ForwardPass.d.ts.map +1 -1
  35. package/dist/ForwardPass.js +845 -866
  36. package/dist/ForwardPass.js.map +1 -1
  37. package/dist/Geometry.d.ts +44 -1
  38. package/dist/Geometry.d.ts.map +1 -1
  39. package/dist/Geometry.js +174 -24
  40. package/dist/Geometry.js.map +1 -1
  41. package/dist/InstancedPBRMaterial.d.ts +5 -0
  42. package/dist/InstancedPBRMaterial.d.ts.map +1 -1
  43. package/dist/InstancedPBRMaterial.js +7 -0
  44. package/dist/InstancedPBRMaterial.js.map +1 -1
  45. package/dist/LightCollector.d.ts +8 -0
  46. package/dist/LightCollector.d.ts.map +1 -1
  47. package/dist/LightCollector.js +1 -1
  48. package/dist/LightCollector.js.map +1 -1
  49. package/dist/LightUniforms.d.ts +78 -0
  50. package/dist/LightUniforms.d.ts.map +1 -1
  51. package/dist/LightUniforms.js +100 -0
  52. package/dist/LightUniforms.js.map +1 -1
  53. package/dist/Material.d.ts +15 -0
  54. package/dist/Material.d.ts.map +1 -1
  55. package/dist/Material.js +19 -2
  56. package/dist/Material.js.map +1 -1
  57. package/dist/MaterialBinding.d.ts +10 -0
  58. package/dist/MaterialBinding.d.ts.map +1 -1
  59. package/dist/MaterialBinding.js +91 -1
  60. package/dist/MaterialBinding.js.map +1 -1
  61. package/dist/MaterialPresets.d.ts +60 -0
  62. package/dist/MaterialPresets.d.ts.map +1 -1
  63. package/dist/MaterialPresets.js +212 -0
  64. package/dist/MaterialPresets.js.map +1 -1
  65. package/dist/NormalMappedPBRMaterial.d.ts +5 -0
  66. package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
  67. package/dist/NormalMappedPBRMaterial.js +7 -0
  68. package/dist/NormalMappedPBRMaterial.js.map +1 -1
  69. package/dist/OceanSurface.d.ts +8 -0
  70. package/dist/OceanSurface.d.ts.map +1 -1
  71. package/dist/OceanSurface.js +10 -79
  72. package/dist/OceanSurface.js.map +1 -1
  73. package/dist/PBRLightingDefaults.d.ts +8 -0
  74. package/dist/PBRLightingDefaults.d.ts.map +1 -1
  75. package/dist/PBRLightingDefaults.js +8 -0
  76. package/dist/PBRLightingDefaults.js.map +1 -1
  77. package/dist/PBRMaterial.d.ts +5 -0
  78. package/dist/PBRMaterial.d.ts.map +1 -1
  79. package/dist/PBRMaterial.js +7 -0
  80. package/dist/PBRMaterial.js.map +1 -1
  81. package/dist/PostProcessPass.d.ts +6 -490
  82. package/dist/PostProcessPass.d.ts.map +1 -1
  83. package/dist/PostProcessPass.js +6 -2016
  84. package/dist/PostProcessPass.js.map +1 -1
  85. package/dist/ProceduralMaterialTextures.d.ts +28 -0
  86. package/dist/ProceduralMaterialTextures.d.ts.map +1 -0
  87. package/dist/ProceduralMaterialTextures.js +217 -0
  88. package/dist/ProceduralMaterialTextures.js.map +1 -0
  89. package/dist/ReflectionProbe.d.ts.map +1 -1
  90. package/dist/ReflectionProbe.js +4 -1
  91. package/dist/ReflectionProbe.js.map +1 -1
  92. package/dist/RenderBackend.d.ts +2 -0
  93. package/dist/RenderBackend.d.ts.map +1 -1
  94. package/dist/RenderBackend.js +3 -0
  95. package/dist/RenderBackend.js.map +1 -1
  96. package/dist/RenderDevice.d.ts +92 -5
  97. package/dist/RenderDevice.d.ts.map +1 -1
  98. package/dist/RenderDevice.js +166 -9
  99. package/dist/RenderDevice.js.map +1 -1
  100. package/dist/RenderGraph.d.ts.map +1 -1
  101. package/dist/RenderGraph.js +17 -0
  102. package/dist/RenderGraph.js.map +1 -1
  103. package/dist/RenderPass.d.ts +7 -0
  104. package/dist/RenderPass.d.ts.map +1 -1
  105. package/dist/RenderPass.js.map +1 -1
  106. package/dist/RenderPipeline.d.ts +5 -0
  107. package/dist/RenderPipeline.d.ts.map +1 -1
  108. package/dist/RenderPipeline.js +6 -0
  109. package/dist/RenderPipeline.js.map +1 -1
  110. package/dist/Renderer.d.ts +261 -66
  111. package/dist/Renderer.d.ts.map +1 -1
  112. package/dist/Renderer.js +902 -1256
  113. package/dist/Renderer.js.map +1 -1
  114. package/dist/RendererPostprocessPlan.d.ts +4 -0
  115. package/dist/RendererPostprocessPlan.d.ts.map +1 -1
  116. package/dist/RendererPostprocessPlan.js +16 -2
  117. package/dist/RendererPostprocessPlan.js.map +1 -1
  118. package/dist/RendererTiming.d.ts +27 -0
  119. package/dist/RendererTiming.d.ts.map +1 -1
  120. package/dist/RendererTiming.js +179 -12
  121. package/dist/RendererTiming.js.map +1 -1
  122. package/dist/ResolutionGovernor.d.ts +56 -0
  123. package/dist/ResolutionGovernor.d.ts.map +1 -0
  124. package/dist/ResolutionGovernor.js +87 -0
  125. package/dist/ResolutionGovernor.js.map +1 -0
  126. package/dist/Sampler.d.ts +34 -1
  127. package/dist/Sampler.d.ts.map +1 -1
  128. package/dist/Sampler.js +55 -2
  129. package/dist/Sampler.js.map +1 -1
  130. package/dist/ShaderLibrary.d.ts.map +1 -1
  131. package/dist/ShaderLibrary.js +15 -10
  132. package/dist/ShaderLibrary.js.map +1 -1
  133. package/dist/ShaderLibraryCore.d.ts.map +1 -1
  134. package/dist/ShaderLibraryCore.js +3 -2
  135. package/dist/ShaderLibraryCore.js.map +1 -1
  136. package/dist/ShaderModule.d.ts +7 -1
  137. package/dist/ShaderModule.d.ts.map +1 -1
  138. package/dist/ShaderModule.js +20 -5
  139. package/dist/ShaderModule.js.map +1 -1
  140. package/dist/ShadowPass.d.ts.map +1 -1
  141. package/dist/ShadowPass.js +14 -7
  142. package/dist/ShadowPass.js.map +1 -1
  143. package/dist/SkinnedLitMaterial.d.ts +5 -0
  144. package/dist/SkinnedLitMaterial.d.ts.map +1 -1
  145. package/dist/SkinnedLitMaterial.js +13 -0
  146. package/dist/SkinnedLitMaterial.js.map +1 -1
  147. package/dist/SkinningBounds.d.ts +18 -0
  148. package/dist/SkinningBounds.d.ts.map +1 -1
  149. package/dist/SkinningBounds.js +78 -0
  150. package/dist/SkinningBounds.js.map +1 -1
  151. package/dist/SkinningPaletteTextureCache.d.ts +117 -0
  152. package/dist/SkinningPaletteTextureCache.d.ts.map +1 -0
  153. package/dist/SkinningPaletteTextureCache.js +205 -0
  154. package/dist/SkinningPaletteTextureCache.js.map +1 -0
  155. package/dist/SkinningUniforms.d.ts +56 -0
  156. package/dist/SkinningUniforms.d.ts.map +1 -0
  157. package/dist/SkinningUniforms.js +262 -0
  158. package/dist/SkinningUniforms.js.map +1 -0
  159. package/dist/TemporalHistory.d.ts +33 -0
  160. package/dist/TemporalHistory.d.ts.map +1 -1
  161. package/dist/TemporalHistory.js +84 -1
  162. package/dist/TemporalHistory.js.map +1 -1
  163. package/dist/TerrainHeightfield.d.ts +12 -0
  164. package/dist/TerrainHeightfield.d.ts.map +1 -1
  165. package/dist/TerrainHeightfield.js +29 -6
  166. package/dist/TerrainHeightfield.js.map +1 -1
  167. package/dist/TerrainTiles.d.ts +40 -10
  168. package/dist/TerrainTiles.d.ts.map +1 -1
  169. package/dist/TerrainTiles.js +18 -57
  170. package/dist/TerrainTiles.js.map +1 -1
  171. package/dist/Texture.d.ts +47 -2
  172. package/dist/Texture.d.ts.map +1 -1
  173. package/dist/Texture.js +119 -3
  174. package/dist/Texture.js.map +1 -1
  175. package/dist/TexturedPBRMaterial.d.ts +24 -0
  176. package/dist/TexturedPBRMaterial.d.ts.map +1 -1
  177. package/dist/TexturedPBRMaterial.js +72 -20
  178. package/dist/TexturedPBRMaterial.js.map +1 -1
  179. package/dist/TransmissionRenderTarget.d.ts +33 -0
  180. package/dist/TransmissionRenderTarget.d.ts.map +1 -0
  181. package/dist/TransmissionRenderTarget.js +61 -0
  182. package/dist/TransmissionRenderTarget.js.map +1 -0
  183. package/dist/VegetationScatter.js +1 -1
  184. package/dist/VegetationScatter.js.map +1 -1
  185. package/dist/VolumetricFog.d.ts +42 -0
  186. package/dist/VolumetricFog.d.ts.map +1 -1
  187. package/dist/VolumetricFog.js +52 -1
  188. package/dist/VolumetricFog.js.map +1 -1
  189. package/dist/WaterSurface.d.ts +5 -0
  190. package/dist/WaterSurface.d.ts.map +1 -1
  191. package/dist/WaterSurface.js +5 -0
  192. package/dist/WaterSurface.js.map +1 -1
  193. package/dist/WebGL2Device.d.ts +154 -207
  194. package/dist/WebGL2Device.d.ts.map +1 -1
  195. package/dist/WebGL2Device.js +831 -3703
  196. package/dist/WebGL2Device.js.map +1 -1
  197. package/dist/WebGL2StateCache.d.ts +15 -1
  198. package/dist/WebGL2StateCache.d.ts.map +1 -1
  199. package/dist/WebGL2StateCache.js +31 -2
  200. package/dist/WebGL2StateCache.js.map +1 -1
  201. package/dist/WebGPUDevice.d.ts +0 -4
  202. package/dist/WebGPUDevice.d.ts.map +1 -1
  203. package/dist/WebGPUDevice.js +31 -605
  204. package/dist/WebGPUDevice.js.map +1 -1
  205. package/dist/WebGPUSkinningLimits.d.ts +10 -1
  206. package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
  207. package/dist/WebGPUSkinningLimits.js +15 -1
  208. package/dist/WebGPUSkinningLimits.js.map +1 -1
  209. package/dist/advanced-runtime/index.d.ts +6 -2
  210. package/dist/advanced-runtime/index.d.ts.map +1 -1
  211. package/dist/advanced-runtime/index.js +0 -1
  212. package/dist/advanced-runtime/index.js.map +1 -1
  213. package/dist/animation/AnimationRenderPreset.d.ts +1 -1
  214. package/dist/animation/AnimationRenderPreset.d.ts.map +1 -1
  215. package/dist/animation/AnimationRenderPreset.js +1 -1
  216. package/dist/animation/AnimationRenderPreset.js.map +1 -1
  217. package/dist/animation/applyAnimationRenderPreset.d.ts +1 -1
  218. package/dist/animation/applyAnimationRenderPreset.d.ts.map +1 -1
  219. package/dist/animation/index.d.ts +2 -1
  220. package/dist/animation/index.d.ts.map +1 -1
  221. package/dist/animation/index.js +1 -1
  222. package/dist/animation/index.js.map +1 -1
  223. package/dist/atmosphere/CloudLayer.d.ts +24 -0
  224. package/dist/atmosphere/CloudLayer.d.ts.map +1 -0
  225. package/dist/atmosphere/CloudLayer.js +30 -0
  226. package/dist/atmosphere/CloudLayer.js.map +1 -0
  227. package/dist/atmosphere/FogVolumes.d.ts +30 -0
  228. package/dist/atmosphere/FogVolumes.d.ts.map +1 -0
  229. package/dist/atmosphere/FogVolumes.js +96 -0
  230. package/dist/atmosphere/FogVolumes.js.map +1 -0
  231. package/dist/atmosphere/GradientSky.d.ts +40 -0
  232. package/dist/atmosphere/GradientSky.d.ts.map +1 -0
  233. package/dist/atmosphere/GradientSky.js +75 -0
  234. package/dist/atmosphere/GradientSky.js.map +1 -0
  235. package/dist/atmosphere/HeightFog.d.ts +154 -0
  236. package/dist/atmosphere/HeightFog.d.ts.map +1 -0
  237. package/dist/atmosphere/HeightFog.js +379 -0
  238. package/dist/atmosphere/HeightFog.js.map +1 -0
  239. package/dist/atmosphere/PreethamSky.d.ts +38 -0
  240. package/dist/atmosphere/PreethamSky.d.ts.map +1 -0
  241. package/dist/atmosphere/PreethamSky.js +150 -0
  242. package/dist/atmosphere/PreethamSky.js.map +1 -0
  243. package/dist/atmosphere/SkyBackgroundPass.d.ts +63 -0
  244. package/dist/atmosphere/SkyBackgroundPass.d.ts.map +1 -0
  245. package/dist/atmosphere/SkyBackgroundPass.js +233 -0
  246. package/dist/atmosphere/SkyBackgroundPass.js.map +1 -0
  247. package/dist/atmosphere/SkyCaptureAdapter.d.ts +45 -0
  248. package/dist/atmosphere/SkyCaptureAdapter.d.ts.map +1 -0
  249. package/dist/atmosphere/SkyCaptureAdapter.js +65 -0
  250. package/dist/atmosphere/SkyCaptureAdapter.js.map +1 -0
  251. package/dist/atmosphere/SkyEval.d.ts +56 -0
  252. package/dist/atmosphere/SkyEval.d.ts.map +1 -0
  253. package/dist/atmosphere/SkyEval.js +99 -0
  254. package/dist/atmosphere/SkyEval.js.map +1 -0
  255. package/dist/atmosphere/StarField.d.ts +26 -0
  256. package/dist/atmosphere/StarField.d.ts.map +1 -0
  257. package/dist/atmosphere/StarField.js +31 -0
  258. package/dist/atmosphere/StarField.js.map +1 -0
  259. package/dist/atmosphere/VolumetricFogPass.d.ts +69 -0
  260. package/dist/atmosphere/VolumetricFogPass.d.ts.map +1 -0
  261. package/dist/atmosphere/VolumetricFogPass.js +265 -0
  262. package/dist/atmosphere/VolumetricFogPass.js.map +1 -0
  263. package/dist/atmosphere/fogChunks.d.ts +8 -0
  264. package/dist/atmosphere/fogChunks.d.ts.map +1 -0
  265. package/dist/atmosphere/fogChunks.js +39 -0
  266. package/dist/atmosphere/fogChunks.js.map +1 -0
  267. package/dist/atmosphere/fogUniformStore.d.ts +20 -0
  268. package/dist/atmosphere/fogUniformStore.d.ts.map +1 -0
  269. package/dist/atmosphere/fogUniformStore.js +45 -0
  270. package/dist/atmosphere/fogUniformStore.js.map +1 -0
  271. package/dist/atmosphere/shaders/fog.glsl.d.ts +10 -0
  272. package/dist/atmosphere/shaders/fog.glsl.d.ts.map +1 -0
  273. package/dist/atmosphere/shaders/fog.glsl.js +161 -0
  274. package/dist/atmosphere/shaders/fog.glsl.js.map +1 -0
  275. package/dist/atmosphere/shaders/volumetric-apply.glsl.d.ts +3 -0
  276. package/dist/atmosphere/shaders/volumetric-apply.glsl.d.ts.map +1 -0
  277. package/dist/atmosphere/shaders/volumetric-apply.glsl.js +61 -0
  278. package/dist/atmosphere/shaders/volumetric-apply.glsl.js.map +1 -0
  279. package/dist/atmosphere/shaders/volumetric-inject.glsl.d.ts +4 -0
  280. package/dist/atmosphere/shaders/volumetric-inject.glsl.d.ts.map +1 -0
  281. package/dist/atmosphere/shaders/volumetric-inject.glsl.js +129 -0
  282. package/dist/atmosphere/shaders/volumetric-inject.glsl.js.map +1 -0
  283. package/dist/atmosphere/shaders/volumetric-integrate.glsl.d.ts +3 -0
  284. package/dist/atmosphere/shaders/volumetric-integrate.glsl.d.ts.map +1 -0
  285. package/dist/atmosphere/shaders/volumetric-integrate.glsl.js +55 -0
  286. package/dist/atmosphere/shaders/volumetric-integrate.glsl.js.map +1 -0
  287. package/dist/atmosphere/shaders/wetness.glsl.d.ts +34 -0
  288. package/dist/atmosphere/shaders/wetness.glsl.d.ts.map +1 -0
  289. package/dist/atmosphere/shaders/wetness.glsl.js +101 -0
  290. package/dist/atmosphere/shaders/wetness.glsl.js.map +1 -0
  291. package/dist/atmosphere/sky.glsl.d.ts +8 -0
  292. package/dist/atmosphere/sky.glsl.d.ts.map +1 -0
  293. package/dist/atmosphere/sky.glsl.js +249 -0
  294. package/dist/atmosphere/sky.glsl.js.map +1 -0
  295. package/dist/batching/BatchedGeometryPool.d.ts +72 -0
  296. package/dist/batching/BatchedGeometryPool.d.ts.map +1 -0
  297. package/dist/batching/BatchedGeometryPool.js +138 -0
  298. package/dist/batching/BatchedGeometryPool.js.map +1 -0
  299. package/dist/batching/ContentKeys.d.ts +29 -0
  300. package/dist/batching/ContentKeys.d.ts.map +1 -0
  301. package/dist/batching/ContentKeys.js +220 -0
  302. package/dist/batching/ContentKeys.js.map +1 -0
  303. package/dist/batching/DrawDataTexture.d.ts +51 -0
  304. package/dist/batching/DrawDataTexture.d.ts.map +1 -0
  305. package/dist/batching/DrawDataTexture.js +99 -0
  306. package/dist/batching/DrawDataTexture.js.map +1 -0
  307. package/dist/batching/MultiDrawBatch.d.ts +64 -0
  308. package/dist/batching/MultiDrawBatch.d.ts.map +1 -0
  309. package/dist/batching/MultiDrawBatch.js +103 -0
  310. package/dist/batching/MultiDrawBatch.js.map +1 -0
  311. package/dist/batching/StaticMergePlanner.d.ts +80 -0
  312. package/dist/batching/StaticMergePlanner.d.ts.map +1 -0
  313. package/dist/batching/StaticMergePlanner.js +323 -0
  314. package/dist/batching/StaticMergePlanner.js.map +1 -0
  315. package/dist/batching/index.d.ts +8 -0
  316. package/dist/batching/index.d.ts.map +1 -0
  317. package/dist/batching/index.js +8 -0
  318. package/dist/batching/index.js.map +1 -0
  319. package/dist/batching/shaders/drawId.glsl.d.ts +29 -0
  320. package/dist/batching/shaders/drawId.glsl.d.ts.map +1 -0
  321. package/dist/batching/shaders/drawId.glsl.js +93 -0
  322. package/dist/batching/shaders/drawId.glsl.js.map +1 -0
  323. package/dist/batching/shaders/instanceEmissive.glsl.d.ts +16 -0
  324. package/dist/batching/shaders/instanceEmissive.glsl.d.ts.map +1 -0
  325. package/dist/batching/shaders/instanceEmissive.glsl.js +63 -0
  326. package/dist/batching/shaders/instanceEmissive.glsl.js.map +1 -0
  327. package/dist/cinematic/BloomPass.d.ts +5 -9
  328. package/dist/cinematic/BloomPass.d.ts.map +1 -1
  329. package/dist/cinematic/BloomPass.js +5 -17
  330. package/dist/cinematic/BloomPass.js.map +1 -1
  331. package/dist/cinematic/DepthHazePass.d.ts +5 -11
  332. package/dist/cinematic/DepthHazePass.d.ts.map +1 -1
  333. package/dist/cinematic/DepthHazePass.js +5 -19
  334. package/dist/cinematic/DepthHazePass.js.map +1 -1
  335. package/dist/cinematic/FilmGrainPass.d.ts +5 -8
  336. package/dist/cinematic/FilmGrainPass.d.ts.map +1 -1
  337. package/dist/cinematic/FilmGrainPass.js +5 -16
  338. package/dist/cinematic/FilmGrainPass.js.map +1 -1
  339. package/dist/cinematic/VignettePass.d.ts +5 -9
  340. package/dist/cinematic/VignettePass.d.ts.map +1 -1
  341. package/dist/cinematic/VignettePass.js +5 -16
  342. package/dist/cinematic/VignettePass.js.map +1 -1
  343. package/dist/cinematic/index.d.ts +2 -1
  344. package/dist/cinematic/index.d.ts.map +1 -1
  345. package/dist/cinematic/index.js +1 -1
  346. package/dist/cinematic/index.js.map +1 -1
  347. package/dist/contracts/atmosphere.d.ts +30 -0
  348. package/dist/contracts/atmosphere.d.ts.map +1 -0
  349. package/dist/contracts/atmosphere.js +42 -0
  350. package/dist/contracts/atmosphere.js.map +1 -0
  351. package/dist/contracts/blend.d.ts +28 -0
  352. package/dist/contracts/blend.d.ts.map +1 -0
  353. package/dist/contracts/blend.js +73 -0
  354. package/dist/contracts/blend.js.map +1 -0
  355. package/dist/contracts/core.d.ts +47 -0
  356. package/dist/contracts/core.d.ts.map +1 -0
  357. package/dist/contracts/core.js +70 -0
  358. package/dist/contracts/core.js.map +1 -0
  359. package/dist/contracts/deform.d.ts +38 -0
  360. package/dist/contracts/deform.d.ts.map +1 -0
  361. package/dist/contracts/deform.js +14 -0
  362. package/dist/contracts/deform.js.map +1 -0
  363. package/dist/contracts/device.d.ts +71 -0
  364. package/dist/contracts/device.d.ts.map +1 -0
  365. package/dist/contracts/device.js +97 -0
  366. package/dist/contracts/device.js.map +1 -0
  367. package/dist/contracts/environment.d.ts +55 -0
  368. package/dist/contracts/environment.d.ts.map +1 -0
  369. package/dist/contracts/environment.js +115 -0
  370. package/dist/contracts/environment.js.map +1 -0
  371. package/dist/contracts/flags.state.d.ts +15 -0
  372. package/dist/contracts/flags.state.d.ts.map +1 -0
  373. package/dist/contracts/flags.state.js +45 -0
  374. package/dist/contracts/flags.state.js.map +1 -0
  375. package/dist/contracts/frameGraph.d.ts +78 -0
  376. package/dist/contracts/frameGraph.d.ts.map +1 -0
  377. package/dist/contracts/frameGraph.js +32 -0
  378. package/dist/contracts/frameGraph.js.map +1 -0
  379. package/dist/contracts/frameUniforms.d.ts +43 -0
  380. package/dist/contracts/frameUniforms.d.ts.map +1 -0
  381. package/dist/contracts/frameUniforms.js +35 -0
  382. package/dist/contracts/frameUniforms.js.map +1 -0
  383. package/dist/contracts/geometry.d.ts +33 -0
  384. package/dist/contracts/geometry.d.ts.map +1 -0
  385. package/dist/contracts/geometry.js +59 -0
  386. package/dist/contracts/geometry.js.map +1 -0
  387. package/dist/contracts/index.d.ts +27 -0
  388. package/dist/contracts/index.d.ts.map +1 -0
  389. package/dist/contracts/index.js +27 -0
  390. package/dist/contracts/index.js.map +1 -0
  391. package/dist/contracts/materialLobes.d.ts +41 -0
  392. package/dist/contracts/materialLobes.d.ts.map +1 -0
  393. package/dist/contracts/materialLobes.js +14 -0
  394. package/dist/contracts/materialLobes.js.map +1 -0
  395. package/dist/contracts/output.d.ts +35 -0
  396. package/dist/contracts/output.d.ts.map +1 -0
  397. package/dist/contracts/output.js +18 -0
  398. package/dist/contracts/output.js.map +1 -0
  399. package/dist/contracts/particles.d.ts +41 -0
  400. package/dist/contracts/particles.d.ts.map +1 -0
  401. package/dist/contracts/particles.js +15 -0
  402. package/dist/contracts/particles.js.map +1 -0
  403. package/dist/contracts/post.d.ts +71 -0
  404. package/dist/contracts/post.d.ts.map +1 -0
  405. package/dist/contracts/post.js +28 -0
  406. package/dist/contracts/post.js.map +1 -0
  407. package/dist/contracts/program.d.ts +158 -0
  408. package/dist/contracts/program.d.ts.map +1 -0
  409. package/dist/contracts/program.js +128 -0
  410. package/dist/contracts/program.js.map +1 -0
  411. package/dist/contracts/quality.d.ts +93 -0
  412. package/dist/contracts/quality.d.ts.map +1 -0
  413. package/dist/contracts/quality.js +149 -0
  414. package/dist/contracts/quality.js.map +1 -0
  415. package/dist/contracts/renderItem.d.ts +58 -0
  416. package/dist/contracts/renderItem.d.ts.map +1 -0
  417. package/dist/contracts/renderItem.js +8 -0
  418. package/dist/contracts/renderItem.js.map +1 -0
  419. package/dist/contracts/renderSource.d.ts +63 -0
  420. package/dist/contracts/renderSource.d.ts.map +1 -0
  421. package/dist/contracts/renderSource.js +7 -0
  422. package/dist/contracts/renderSource.js.map +1 -0
  423. package/dist/contracts/rendererFactory.d.ts +42 -0
  424. package/dist/contracts/rendererFactory.d.ts.map +1 -0
  425. package/dist/contracts/rendererFactory.js +32 -0
  426. package/dist/contracts/rendererFactory.js.map +1 -0
  427. package/dist/contracts/sampling.d.ts +23 -0
  428. package/dist/contracts/sampling.d.ts.map +1 -0
  429. package/dist/contracts/sampling.js +17 -0
  430. package/dist/contracts/sampling.js.map +1 -0
  431. package/dist/contracts/shadows.d.ts +53 -0
  432. package/dist/contracts/shadows.d.ts.map +1 -0
  433. package/dist/contracts/shadows.js +66 -0
  434. package/dist/contracts/shadows.js.map +1 -0
  435. package/dist/contracts/testing/ChunkHarness.d.ts +18 -0
  436. package/dist/contracts/testing/ChunkHarness.d.ts.map +1 -0
  437. package/dist/contracts/testing/ChunkHarness.js +68 -0
  438. package/dist/contracts/testing/ChunkHarness.js.map +1 -0
  439. package/dist/contracts/textureFormats.d.ts +18 -0
  440. package/dist/contracts/textureFormats.d.ts.map +1 -0
  441. package/dist/contracts/textureFormats.js +13 -0
  442. package/dist/contracts/textureFormats.js.map +1 -0
  443. package/dist/contracts/velocity.d.ts +37 -0
  444. package/dist/contracts/velocity.d.ts.map +1 -0
  445. package/dist/contracts/velocity.js +22 -0
  446. package/dist/contracts/velocity.js.map +1 -0
  447. package/dist/effects/ResidentGPUParticleRenderer.d.ts.map +1 -1
  448. package/dist/effects/ResidentGPUParticleRenderer.js +10 -5
  449. package/dist/effects/ResidentGPUParticleRenderer.js.map +1 -1
  450. package/dist/environment/EnvUniforms.d.ts +42 -0
  451. package/dist/environment/EnvUniforms.d.ts.map +1 -0
  452. package/dist/environment/EnvUniforms.js +54 -0
  453. package/dist/environment/EnvUniforms.js.map +1 -0
  454. package/dist/environment/EnvironmentCache.d.ts +83 -0
  455. package/dist/environment/EnvironmentCache.d.ts.map +1 -0
  456. package/dist/environment/EnvironmentCache.js +205 -0
  457. package/dist/environment/EnvironmentCache.js.map +1 -0
  458. package/dist/environment/EnvironmentProbeFactory.d.ts +41 -0
  459. package/dist/environment/EnvironmentProbeFactory.d.ts.map +1 -0
  460. package/dist/environment/EnvironmentProbeFactory.js +52 -0
  461. package/dist/environment/EnvironmentProbeFactory.js.map +1 -0
  462. package/dist/environment/GPUPMREMGenerator.d.ts +44 -0
  463. package/dist/environment/GPUPMREMGenerator.d.ts.map +1 -0
  464. package/dist/environment/GPUPMREMGenerator.js +98 -0
  465. package/dist/environment/GPUPMREMGenerator.js.map +1 -0
  466. package/dist/environment/HdrEquirect.d.ts +28 -0
  467. package/dist/environment/HdrEquirect.d.ts.map +1 -0
  468. package/dist/environment/HdrEquirect.js +205 -0
  469. package/dist/environment/HdrEquirect.js.map +1 -0
  470. package/dist/environment/LightingSamplerBudget.d.ts +20 -0
  471. package/dist/environment/LightingSamplerBudget.d.ts.map +1 -0
  472. package/dist/environment/LightingSamplerBudget.js +94 -0
  473. package/dist/environment/LightingSamplerBudget.js.map +1 -0
  474. package/dist/environment/Prd02BackgroundShaderLibrary.d.ts +10 -0
  475. package/dist/environment/Prd02BackgroundShaderLibrary.d.ts.map +1 -0
  476. package/dist/environment/Prd02BackgroundShaderLibrary.js +100 -0
  477. package/dist/environment/Prd02BackgroundShaderLibrary.js.map +1 -0
  478. package/dist/environment/Rgb9e5Cube.d.ts +25 -0
  479. package/dist/environment/Rgb9e5Cube.d.ts.map +1 -0
  480. package/dist/environment/Rgb9e5Cube.js +103 -0
  481. package/dist/environment/Rgb9e5Cube.js.map +1 -0
  482. package/dist/environment/RoomEnvironmentScene.d.ts +57 -0
  483. package/dist/environment/RoomEnvironmentScene.d.ts.map +1 -0
  484. package/dist/environment/RoomEnvironmentScene.js +165 -0
  485. package/dist/environment/RoomEnvironmentScene.js.map +1 -0
  486. package/dist/environment/SphericalHarmonics.d.ts +32 -0
  487. package/dist/environment/SphericalHarmonics.d.ts.map +1 -0
  488. package/dist/environment/SphericalHarmonics.js +155 -0
  489. package/dist/environment/SphericalHarmonics.js.map +1 -0
  490. package/dist/environment/probeBuild.d.ts +97 -0
  491. package/dist/environment/probeBuild.d.ts.map +1 -0
  492. package/dist/environment/probeBuild.js +406 -0
  493. package/dist/environment/probeBuild.js.map +1 -0
  494. package/dist/environment/workers/cpuPrefilter.d.ts +58 -0
  495. package/dist/environment/workers/cpuPrefilter.d.ts.map +1 -0
  496. package/dist/environment/workers/cpuPrefilter.js +288 -0
  497. package/dist/environment/workers/cpuPrefilter.js.map +1 -0
  498. package/dist/forward/Deform.d.ts +56 -0
  499. package/dist/forward/Deform.d.ts.map +1 -0
  500. package/dist/forward/Deform.js +517 -0
  501. package/dist/forward/Deform.js.map +1 -0
  502. package/dist/forward/DrawSubmit.d.ts +32 -0
  503. package/dist/forward/DrawSubmit.d.ts.map +1 -0
  504. package/dist/forward/DrawSubmit.js +75 -0
  505. package/dist/forward/DrawSubmit.js.map +1 -0
  506. package/dist/forward/Lighting.d.ts +35 -0
  507. package/dist/forward/Lighting.d.ts.map +1 -0
  508. package/dist/forward/Lighting.js +477 -0
  509. package/dist/forward/Lighting.js.map +1 -0
  510. package/dist/forward/Transmission.d.ts +62 -0
  511. package/dist/forward/Transmission.d.ts.map +1 -0
  512. package/dist/forward/Transmission.js +299 -0
  513. package/dist/forward/Transmission.js.map +1 -0
  514. package/dist/forward/Velocity.d.ts +47 -0
  515. package/dist/forward/Velocity.d.ts.map +1 -0
  516. package/dist/forward/Velocity.js +153 -0
  517. package/dist/forward/Velocity.js.map +1 -0
  518. package/dist/forward/transmissionTargetStore.d.ts +21 -0
  519. package/dist/forward/transmissionTargetStore.d.ts.map +1 -0
  520. package/dist/forward/transmissionTargetStore.js +8 -0
  521. package/dist/forward/transmissionTargetStore.js.map +1 -0
  522. package/dist/geometry/Primitives.d.ts +28 -0
  523. package/dist/geometry/Primitives.d.ts.map +1 -0
  524. package/dist/geometry/Primitives.js +110 -0
  525. package/dist/geometry/Primitives.js.map +1 -0
  526. package/dist/index.d.ts +140 -58
  527. package/dist/index.d.ts.map +1 -1
  528. package/dist/index.js +102 -52
  529. package/dist/index.js.map +1 -1
  530. package/dist/lanes/index.d.ts +17 -0
  531. package/dist/lanes/index.d.ts.map +1 -0
  532. package/dist/lanes/index.js +17 -0
  533. package/dist/lanes/index.js.map +1 -0
  534. package/dist/lanes/prd01.d.ts +6 -0
  535. package/dist/lanes/prd01.d.ts.map +1 -0
  536. package/dist/lanes/prd01.js +19 -0
  537. package/dist/lanes/prd01.js.map +1 -0
  538. package/dist/lanes/prd02.d.ts +62 -0
  539. package/dist/lanes/prd02.d.ts.map +1 -0
  540. package/dist/lanes/prd02.js +117 -0
  541. package/dist/lanes/prd02.js.map +1 -0
  542. package/dist/lanes/prd03.d.ts +19 -0
  543. package/dist/lanes/prd03.d.ts.map +1 -0
  544. package/dist/lanes/prd03.js +55 -0
  545. package/dist/lanes/prd03.js.map +1 -0
  546. package/dist/lanes/prd04.d.ts +22 -0
  547. package/dist/lanes/prd04.d.ts.map +1 -0
  548. package/dist/lanes/prd04.js +35 -0
  549. package/dist/lanes/prd04.js.map +1 -0
  550. package/dist/lanes/prd05.d.ts +4 -0
  551. package/dist/lanes/prd05.d.ts.map +1 -0
  552. package/dist/lanes/prd05.js +31 -0
  553. package/dist/lanes/prd05.js.map +1 -0
  554. package/dist/lanes/prd06.d.ts +33 -0
  555. package/dist/lanes/prd06.d.ts.map +1 -0
  556. package/dist/lanes/prd06.js +217 -0
  557. package/dist/lanes/prd06.js.map +1 -0
  558. package/dist/lanes/prd07.d.ts +49 -0
  559. package/dist/lanes/prd07.d.ts.map +1 -0
  560. package/dist/lanes/prd07.js +112 -0
  561. package/dist/lanes/prd07.js.map +1 -0
  562. package/dist/lanes/prd08.d.ts +2 -0
  563. package/dist/lanes/prd08.d.ts.map +1 -0
  564. package/dist/lanes/prd08.js +17 -0
  565. package/dist/lanes/prd08.js.map +1 -0
  566. package/dist/lanes/prd09.d.ts +6 -0
  567. package/dist/lanes/prd09.d.ts.map +1 -0
  568. package/dist/lanes/prd09.js +6 -0
  569. package/dist/lanes/prd09.js.map +1 -0
  570. package/dist/lanes/prd10.d.ts +2 -0
  571. package/dist/lanes/prd10.d.ts.map +1 -0
  572. package/dist/lanes/prd10.js +10 -0
  573. package/dist/lanes/prd10.js.map +1 -0
  574. package/dist/lanes/prd11.d.ts +61 -0
  575. package/dist/lanes/prd11.d.ts.map +1 -0
  576. package/dist/lanes/prd11.js +244 -0
  577. package/dist/lanes/prd11.js.map +1 -0
  578. package/dist/lanes/prd12.d.ts +6 -0
  579. package/dist/lanes/prd12.d.ts.map +1 -0
  580. package/dist/lanes/prd12.js +6 -0
  581. package/dist/lanes/prd12.js.map +1 -0
  582. package/dist/lanes/prd13.d.ts +6 -0
  583. package/dist/lanes/prd13.d.ts.map +1 -0
  584. package/dist/lanes/prd13.js +6 -0
  585. package/dist/lanes/prd13.js.map +1 -0
  586. package/dist/lanes/prd14.d.ts +6 -0
  587. package/dist/lanes/prd14.d.ts.map +1 -0
  588. package/dist/lanes/prd14.js +6 -0
  589. package/dist/lanes/prd14.js.map +1 -0
  590. package/dist/lanes/prd15.d.ts +6 -0
  591. package/dist/lanes/prd15.d.ts.map +1 -0
  592. package/dist/lanes/prd15.js +6 -0
  593. package/dist/lanes/prd15.js.map +1 -0
  594. package/dist/materials/PhysicalFeatures.d.ts +71 -0
  595. package/dist/materials/PhysicalFeatures.d.ts.map +1 -0
  596. package/dist/materials/PhysicalFeatures.js +255 -0
  597. package/dist/materials/PhysicalFeatures.js.map +1 -0
  598. package/dist/materials/PhysicalMaterial.d.ts +85 -0
  599. package/dist/materials/PhysicalMaterial.d.ts.map +1 -1
  600. package/dist/materials/PhysicalMaterial.js +21 -0
  601. package/dist/materials/PhysicalMaterial.js.map +1 -1
  602. package/dist/materials/features.d.ts +47 -0
  603. package/dist/materials/features.d.ts.map +1 -0
  604. package/dist/materials/features.js +282 -0
  605. package/dist/materials/features.js.map +1 -0
  606. package/dist/materials/lobes.d.ts +3 -0
  607. package/dist/materials/lobes.d.ts.map +1 -0
  608. package/dist/materials/lobes.js +225 -0
  609. package/dist/materials/lobes.js.map +1 -0
  610. package/dist/output/HdrTarget.d.ts +27 -0
  611. package/dist/output/HdrTarget.d.ts.map +1 -0
  612. package/dist/output/HdrTarget.js +48 -0
  613. package/dist/output/HdrTarget.js.map +1 -0
  614. package/dist/output/OutputPass.d.ts +28 -0
  615. package/dist/output/OutputPass.d.ts.map +1 -0
  616. package/dist/output/OutputPass.js +142 -0
  617. package/dist/output/OutputPass.js.map +1 -0
  618. package/dist/output/ToneMappingOperators.glsl.d.ts +22 -0
  619. package/dist/output/ToneMappingOperators.glsl.d.ts.map +1 -0
  620. package/dist/output/ToneMappingOperators.glsl.js +217 -0
  621. package/dist/output/ToneMappingOperators.glsl.js.map +1 -0
  622. package/dist/passes/ContactShadowPass.d.ts +57 -0
  623. package/dist/passes/ContactShadowPass.d.ts.map +1 -0
  624. package/dist/passes/ContactShadowPass.js +151 -0
  625. package/dist/passes/ContactShadowPass.js.map +1 -0
  626. package/dist/passes/Prd02ContactShadowsContributor.d.ts +16 -0
  627. package/dist/passes/Prd02ContactShadowsContributor.d.ts.map +1 -0
  628. package/dist/passes/Prd02ContactShadowsContributor.js +133 -0
  629. package/dist/passes/Prd02ContactShadowsContributor.js.map +1 -0
  630. package/dist/passes/Prd02SubFlags.d.ts +22 -0
  631. package/dist/passes/Prd02SubFlags.d.ts.map +1 -0
  632. package/dist/passes/Prd02SubFlags.js +32 -0
  633. package/dist/passes/Prd02SubFlags.js.map +1 -0
  634. package/dist/performance/BVH.d.ts +46 -0
  635. package/dist/performance/BVH.d.ts.map +1 -1
  636. package/dist/performance/BVH.js +212 -0
  637. package/dist/performance/BVH.js.map +1 -1
  638. package/dist/performance/Batcher.d.ts +11 -0
  639. package/dist/performance/Batcher.d.ts.map +1 -1
  640. package/dist/performance/Batcher.js +10 -0
  641. package/dist/performance/Batcher.js.map +1 -1
  642. package/dist/performance/FrustumCuller.d.ts +29 -0
  643. package/dist/performance/FrustumCuller.d.ts.map +1 -1
  644. package/dist/performance/FrustumCuller.js +78 -1
  645. package/dist/performance/FrustumCuller.js.map +1 -1
  646. package/dist/performance/LOD.d.ts +6 -0
  647. package/dist/performance/LOD.d.ts.map +1 -1
  648. package/dist/performance/LOD.js +12 -0
  649. package/dist/performance/LOD.js.map +1 -1
  650. package/dist/performance/RenderItemSorting.d.ts +2 -0
  651. package/dist/performance/RenderItemSorting.d.ts.map +1 -1
  652. package/dist/performance/RenderItemSorting.js +5 -1
  653. package/dist/performance/RenderItemSorting.js.map +1 -1
  654. package/dist/post/CubeLut.d.ts +15 -0
  655. package/dist/post/CubeLut.d.ts.map +1 -0
  656. package/dist/post/CubeLut.js +86 -0
  657. package/dist/post/CubeLut.js.map +1 -0
  658. package/dist/post/DisplayLutCache.d.ts +31 -0
  659. package/dist/post/DisplayLutCache.d.ts.map +1 -0
  660. package/dist/post/DisplayLutCache.js +44 -0
  661. package/dist/post/DisplayLutCache.js.map +1 -0
  662. package/dist/post/PostAntiAlias.d.ts +49 -0
  663. package/dist/post/PostAntiAlias.d.ts.map +1 -0
  664. package/dist/post/PostAntiAlias.js +75 -0
  665. package/dist/post/PostAntiAlias.js.map +1 -0
  666. package/dist/post/PostGraph.d.ts +206 -0
  667. package/dist/post/PostGraph.d.ts.map +1 -0
  668. package/dist/post/PostGraph.js +234 -0
  669. package/dist/post/PostGraph.js.map +1 -0
  670. package/dist/post/PostQualityTiers.d.ts +95 -0
  671. package/dist/post/PostQualityTiers.d.ts.map +1 -0
  672. package/dist/post/PostQualityTiers.js +62 -0
  673. package/dist/post/PostQualityTiers.js.map +1 -0
  674. package/dist/post/PostResources.d.ts +49 -0
  675. package/dist/post/PostResources.d.ts.map +1 -0
  676. package/dist/post/PostResources.js +124 -0
  677. package/dist/post/PostResources.js.map +1 -0
  678. package/dist/post/PostTimer.d.ts +37 -0
  679. package/dist/post/PostTimer.d.ts.map +1 -0
  680. package/dist/post/PostTimer.js +88 -0
  681. package/dist/post/PostTimer.js.map +1 -0
  682. package/dist/post/ScreenFeelPass.d.ts +83 -0
  683. package/dist/post/ScreenFeelPass.d.ts.map +1 -0
  684. package/dist/post/ScreenFeelPass.js +197 -0
  685. package/dist/post/ScreenFeelPass.js.map +1 -0
  686. package/dist/post/ToneOperators.d.ts +42 -0
  687. package/dist/post/ToneOperators.d.ts.map +1 -0
  688. package/dist/post/ToneOperators.js +179 -0
  689. package/dist/post/ToneOperators.js.map +1 -0
  690. package/dist/post/chunks/indirectFraction.glsl.d.ts +50 -0
  691. package/dist/post/chunks/indirectFraction.glsl.d.ts.map +1 -0
  692. package/dist/post/chunks/indirectFraction.glsl.js +82 -0
  693. package/dist/post/chunks/indirectFraction.glsl.js.map +1 -0
  694. package/dist/post/chunks/velocity.glsl.d.ts +35 -0
  695. package/dist/post/chunks/velocity.glsl.d.ts.map +1 -0
  696. package/dist/post/chunks/velocity.glsl.js +86 -0
  697. package/dist/post/chunks/velocity.glsl.js.map +1 -0
  698. package/dist/post/shaders/bloom.glsl.d.ts +21 -0
  699. package/dist/post/shaders/bloom.glsl.d.ts.map +1 -0
  700. package/dist/post/shaders/bloom.glsl.js +120 -0
  701. package/dist/post/shaders/bloom.glsl.js.map +1 -0
  702. package/dist/post/shaders/bloom.wgsl.d.ts +10 -0
  703. package/dist/post/shaders/bloom.wgsl.d.ts.map +1 -0
  704. package/dist/post/shaders/bloom.wgsl.js +121 -0
  705. package/dist/post/shaders/bloom.wgsl.js.map +1 -0
  706. package/dist/post/shaders/common.glsl.d.ts +11 -0
  707. package/dist/post/shaders/common.glsl.d.ts.map +1 -0
  708. package/dist/post/shaders/common.glsl.js +34 -0
  709. package/dist/post/shaders/common.glsl.js.map +1 -0
  710. package/dist/post/shaders/common.wgsl.d.ts +25 -0
  711. package/dist/post/shaders/common.wgsl.d.ts.map +1 -0
  712. package/dist/post/shaders/common.wgsl.js +48 -0
  713. package/dist/post/shaders/common.wgsl.js.map +1 -0
  714. package/dist/post/shaders/composite.glsl.d.ts +25 -0
  715. package/dist/post/shaders/composite.glsl.d.ts.map +1 -0
  716. package/dist/post/shaders/composite.glsl.js +96 -0
  717. package/dist/post/shaders/composite.glsl.js.map +1 -0
  718. package/dist/post/shaders/composite.wgsl.d.ts +10 -0
  719. package/dist/post/shaders/composite.wgsl.d.ts.map +1 -0
  720. package/dist/post/shaders/composite.wgsl.js +92 -0
  721. package/dist/post/shaders/composite.wgsl.js.map +1 -0
  722. package/dist/post/shaders/depthDownsample.glsl.d.ts +20 -0
  723. package/dist/post/shaders/depthDownsample.glsl.d.ts.map +1 -0
  724. package/dist/post/shaders/depthDownsample.glsl.js +78 -0
  725. package/dist/post/shaders/depthDownsample.glsl.js.map +1 -0
  726. package/dist/post/shaders/depthDownsample.wgsl.d.ts +17 -0
  727. package/dist/post/shaders/depthDownsample.wgsl.d.ts.map +1 -0
  728. package/dist/post/shaders/depthDownsample.wgsl.js +87 -0
  729. package/dist/post/shaders/depthDownsample.wgsl.js.map +1 -0
  730. package/dist/post/shaders/displayGrade.glsl.d.ts +18 -0
  731. package/dist/post/shaders/displayGrade.glsl.d.ts.map +1 -0
  732. package/dist/post/shaders/displayGrade.glsl.js +80 -0
  733. package/dist/post/shaders/displayGrade.glsl.js.map +1 -0
  734. package/dist/post/shaders/displayGrade.wgsl.d.ts +9 -0
  735. package/dist/post/shaders/displayGrade.wgsl.d.ts.map +1 -0
  736. package/dist/post/shaders/displayGrade.wgsl.js +75 -0
  737. package/dist/post/shaders/displayGrade.wgsl.js.map +1 -0
  738. package/dist/post/shaders/dof.glsl.d.ts +25 -0
  739. package/dist/post/shaders/dof.glsl.d.ts.map +1 -0
  740. package/dist/post/shaders/dof.glsl.js +129 -0
  741. package/dist/post/shaders/dof.glsl.js.map +1 -0
  742. package/dist/post/shaders/dof.wgsl.d.ts +11 -0
  743. package/dist/post/shaders/dof.wgsl.d.ts.map +1 -0
  744. package/dist/post/shaders/dof.wgsl.js +119 -0
  745. package/dist/post/shaders/dof.wgsl.js.map +1 -0
  746. package/dist/post/shaders/exposure.glsl.d.ts +43 -0
  747. package/dist/post/shaders/exposure.glsl.d.ts.map +1 -0
  748. package/dist/post/shaders/exposure.glsl.js +115 -0
  749. package/dist/post/shaders/exposure.glsl.js.map +1 -0
  750. package/dist/post/shaders/exposure.wgsl.d.ts +16 -0
  751. package/dist/post/shaders/exposure.wgsl.d.ts.map +1 -0
  752. package/dist/post/shaders/exposure.wgsl.js +97 -0
  753. package/dist/post/shaders/exposure.wgsl.js.map +1 -0
  754. package/dist/post/shaders/finalize.glsl.d.ts +17 -0
  755. package/dist/post/shaders/finalize.glsl.d.ts.map +1 -0
  756. package/dist/post/shaders/finalize.glsl.js +120 -0
  757. package/dist/post/shaders/finalize.glsl.js.map +1 -0
  758. package/dist/post/shaders/finalize.wgsl.d.ts +13 -0
  759. package/dist/post/shaders/finalize.wgsl.d.ts.map +1 -0
  760. package/dist/post/shaders/finalize.wgsl.js +124 -0
  761. package/dist/post/shaders/finalize.wgsl.js.map +1 -0
  762. package/dist/post/shaders/fxaa.glsl.d.ts +26 -0
  763. package/dist/post/shaders/fxaa.glsl.d.ts.map +1 -0
  764. package/dist/post/shaders/fxaa.glsl.js +246 -0
  765. package/dist/post/shaders/fxaa.glsl.js.map +1 -0
  766. package/dist/post/shaders/fxaa.wgsl.d.ts +17 -0
  767. package/dist/post/shaders/fxaa.wgsl.d.ts.map +1 -0
  768. package/dist/post/shaders/fxaa.wgsl.js +268 -0
  769. package/dist/post/shaders/fxaa.wgsl.js.map +1 -0
  770. package/dist/post/shaders/godrays.glsl.d.ts +16 -0
  771. package/dist/post/shaders/godrays.glsl.d.ts.map +1 -0
  772. package/dist/post/shaders/godrays.glsl.js +70 -0
  773. package/dist/post/shaders/godrays.glsl.js.map +1 -0
  774. package/dist/post/shaders/godrays.wgsl.d.ts +8 -0
  775. package/dist/post/shaders/godrays.wgsl.d.ts.map +1 -0
  776. package/dist/post/shaders/godrays.wgsl.js +60 -0
  777. package/dist/post/shaders/godrays.wgsl.js.map +1 -0
  778. package/dist/post/shaders/gtao.glsl.d.ts +29 -0
  779. package/dist/post/shaders/gtao.glsl.d.ts.map +1 -0
  780. package/dist/post/shaders/gtao.glsl.js +190 -0
  781. package/dist/post/shaders/gtao.glsl.js.map +1 -0
  782. package/dist/post/shaders/gtao.wgsl.d.ts +13 -0
  783. package/dist/post/shaders/gtao.wgsl.d.ts.map +1 -0
  784. package/dist/post/shaders/gtao.wgsl.js +163 -0
  785. package/dist/post/shaders/gtao.wgsl.js.map +1 -0
  786. package/dist/post/shaders/gtaoDenoise.glsl.d.ts +22 -0
  787. package/dist/post/shaders/gtaoDenoise.glsl.d.ts.map +1 -0
  788. package/dist/post/shaders/gtaoDenoise.glsl.js +121 -0
  789. package/dist/post/shaders/gtaoDenoise.glsl.js.map +1 -0
  790. package/dist/post/shaders/gtaoDenoise.wgsl.d.ts +11 -0
  791. package/dist/post/shaders/gtaoDenoise.wgsl.d.ts.map +1 -0
  792. package/dist/post/shaders/gtaoDenoise.wgsl.js +117 -0
  793. package/dist/post/shaders/gtaoDenoise.wgsl.js.map +1 -0
  794. package/dist/post/shaders/motionBlur.glsl.d.ts +21 -0
  795. package/dist/post/shaders/motionBlur.glsl.d.ts.map +1 -0
  796. package/dist/post/shaders/motionBlur.glsl.js +110 -0
  797. package/dist/post/shaders/motionBlur.glsl.js.map +1 -0
  798. package/dist/post/shaders/motionBlur.wgsl.d.ts +10 -0
  799. package/dist/post/shaders/motionBlur.wgsl.d.ts.map +1 -0
  800. package/dist/post/shaders/motionBlur.wgsl.js +102 -0
  801. package/dist/post/shaders/motionBlur.wgsl.js.map +1 -0
  802. package/dist/post/shaders/smaa.glsl.d.ts +28 -0
  803. package/dist/post/shaders/smaa.glsl.d.ts.map +1 -0
  804. package/dist/post/shaders/smaa.glsl.js +354 -0
  805. package/dist/post/shaders/smaa.glsl.js.map +1 -0
  806. package/dist/post/shaders/smaa.wgsl.d.ts +20 -0
  807. package/dist/post/shaders/smaa.wgsl.d.ts.map +1 -0
  808. package/dist/post/shaders/smaa.wgsl.js +375 -0
  809. package/dist/post/shaders/smaa.wgsl.js.map +1 -0
  810. package/dist/post/shaders/taa.glsl.d.ts +23 -0
  811. package/dist/post/shaders/taa.glsl.d.ts.map +1 -0
  812. package/dist/post/shaders/taa.glsl.js +169 -0
  813. package/dist/post/shaders/taa.glsl.js.map +1 -0
  814. package/dist/post/shaders/taa.wgsl.d.ts +10 -0
  815. package/dist/post/shaders/taa.wgsl.d.ts.map +1 -0
  816. package/dist/post/shaders/taa.wgsl.js +185 -0
  817. package/dist/post/shaders/taa.wgsl.js.map +1 -0
  818. package/dist/post/shaders/velocityDilate.glsl.d.ts +16 -0
  819. package/dist/post/shaders/velocityDilate.glsl.d.ts.map +1 -0
  820. package/dist/post/shaders/velocityDilate.glsl.js +45 -0
  821. package/dist/post/shaders/velocityDilate.glsl.js.map +1 -0
  822. package/dist/post/shaders/velocityDilate.wgsl.d.ts +8 -0
  823. package/dist/post/shaders/velocityDilate.wgsl.d.ts.map +1 -0
  824. package/dist/post/shaders/velocityDilate.wgsl.js +30 -0
  825. package/dist/post/shaders/velocityDilate.wgsl.js.map +1 -0
  826. package/dist/post/smaa/textures.d.ts +17 -0
  827. package/dist/post/smaa/textures.d.ts.map +1 -0
  828. package/dist/post/smaa/textures.js +17 -0
  829. package/dist/post/smaa/textures.js.map +1 -0
  830. package/dist/post/v2Entry.d.ts +25 -0
  831. package/dist/post/v2Entry.d.ts.map +1 -0
  832. package/dist/post/v2Entry.js +28 -0
  833. package/dist/post/v2Entry.js.map +1 -0
  834. package/dist/post/v2Stages.d.ts +156 -0
  835. package/dist/post/v2Stages.d.ts.map +1 -0
  836. package/dist/post/v2Stages.js +1189 -0
  837. package/dist/post/v2Stages.js.map +1 -0
  838. package/dist/postprocess/EffectComposer.d.ts +6 -109
  839. package/dist/postprocess/EffectComposer.d.ts.map +1 -1
  840. package/dist/postprocess/EffectComposer.js +6 -246
  841. package/dist/postprocess/EffectComposer.js.map +1 -1
  842. package/dist/postprocess/NativeBloomPyramid.d.ts +34 -0
  843. package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -1
  844. package/dist/postprocess/NativeBloomPyramid.js +57 -0
  845. package/dist/postprocess/NativeBloomPyramid.js.map +1 -1
  846. package/dist/postprocess/SSAOPass.d.ts +5 -5
  847. package/dist/postprocess/SSAOPass.d.ts.map +1 -1
  848. package/dist/postprocess/SSAOPass.js +5 -17
  849. package/dist/postprocess/SSAOPass.js.map +1 -1
  850. package/dist/probes/IrradianceVolume.d.ts +45 -0
  851. package/dist/probes/IrradianceVolume.d.ts.map +1 -0
  852. package/dist/probes/IrradianceVolume.js +230 -0
  853. package/dist/probes/IrradianceVolume.js.map +1 -0
  854. package/dist/probes/LtcLuts.d.ts +30 -0
  855. package/dist/probes/LtcLuts.d.ts.map +1 -0
  856. package/dist/probes/LtcLuts.js +120 -0
  857. package/dist/probes/LtcLuts.js.map +1 -0
  858. package/dist/probes/Prd02ProbesContributor.d.ts +53 -0
  859. package/dist/probes/Prd02ProbesContributor.d.ts.map +1 -0
  860. package/dist/probes/Prd02ProbesContributor.js +241 -0
  861. package/dist/probes/Prd02ProbesContributor.js.map +1 -0
  862. package/dist/probes/ProbeBoxProjection.d.ts +53 -0
  863. package/dist/probes/ProbeBoxProjection.d.ts.map +1 -0
  864. package/dist/probes/ProbeBoxProjection.js +99 -0
  865. package/dist/probes/ProbeBoxProjection.js.map +1 -0
  866. package/dist/probes/ReflectionProbeSystem.d.ts +64 -0
  867. package/dist/probes/ReflectionProbeSystem.d.ts.map +1 -0
  868. package/dist/probes/ReflectionProbeSystem.js +157 -0
  869. package/dist/probes/ReflectionProbeSystem.js.map +1 -0
  870. package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  871. package/dist/production-runtime/PBRHDRPipeline.js +23 -9
  872. package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
  873. package/dist/production-runtime/ProductionRendererTypes.d.ts +16 -6
  874. package/dist/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
  875. package/dist/production-runtime/ProductionRendererTypes.js.map +1 -1
  876. package/dist/production-runtime/ProductionWebGPURenderer.d.ts +4 -4
  877. package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  878. package/dist/production-runtime/ProductionWebGPURenderer.js +10 -45
  879. package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  880. package/dist/production-runtime/backendSelection.d.ts +26 -0
  881. package/dist/production-runtime/backendSelection.d.ts.map +1 -0
  882. package/dist/production-runtime/backendSelection.js +46 -0
  883. package/dist/production-runtime/backendSelection.js.map +1 -0
  884. package/dist/production-runtime/backends/WebGL2RendererBackend.d.ts +1 -1
  885. package/dist/production-runtime/backends/WebGL2RendererBackend.d.ts.map +1 -1
  886. package/dist/production-runtime/backends/WebGL2RendererBackend.js +8 -4
  887. package/dist/production-runtime/backends/WebGL2RendererBackend.js.map +1 -1
  888. package/dist/production-runtime/backends/WebGPURendererBackend.d.ts +2 -19
  889. package/dist/production-runtime/backends/WebGPURendererBackend.d.ts.map +1 -1
  890. package/dist/production-runtime/backends/WebGPURendererBackend.js +2 -18
  891. package/dist/production-runtime/backends/WebGPURendererBackend.js.map +1 -1
  892. package/dist/production-runtime/backends/webgl2/WebGL2Buffer.d.ts +2 -10
  893. package/dist/production-runtime/backends/webgl2/WebGL2Buffer.d.ts.map +1 -1
  894. package/dist/production-runtime/backends/webgl2/WebGL2Buffer.js +2 -7
  895. package/dist/production-runtime/backends/webgl2/WebGL2Buffer.js.map +1 -1
  896. package/dist/production-runtime/backends/webgl2/WebGL2Capabilities.d.ts +2 -10
  897. package/dist/production-runtime/backends/webgl2/WebGL2Capabilities.d.ts.map +1 -1
  898. package/dist/production-runtime/backends/webgl2/WebGL2Capabilities.js +2 -7
  899. package/dist/production-runtime/backends/webgl2/WebGL2Capabilities.js.map +1 -1
  900. package/dist/production-runtime/backends/webgl2/WebGL2RenderTarget.d.ts +2 -10
  901. package/dist/production-runtime/backends/webgl2/WebGL2RenderTarget.d.ts.map +1 -1
  902. package/dist/production-runtime/backends/webgl2/WebGL2RenderTarget.js +2 -7
  903. package/dist/production-runtime/backends/webgl2/WebGL2RenderTarget.js.map +1 -1
  904. package/dist/production-runtime/backends/webgl2/WebGL2Shader.d.ts +2 -10
  905. package/dist/production-runtime/backends/webgl2/WebGL2Shader.d.ts.map +1 -1
  906. package/dist/production-runtime/backends/webgl2/WebGL2Shader.js +2 -7
  907. package/dist/production-runtime/backends/webgl2/WebGL2Shader.js.map +1 -1
  908. package/dist/production-runtime/backends/webgl2/WebGL2StateCache.d.ts +1 -0
  909. package/dist/production-runtime/backends/webgl2/WebGL2StateCache.d.ts.map +1 -1
  910. package/dist/production-runtime/backends/webgl2/WebGL2StateCache.js +1 -0
  911. package/dist/production-runtime/backends/webgl2/WebGL2StateCache.js.map +1 -1
  912. package/dist/production-runtime/backends/webgl2/WebGL2Texture.d.ts +2 -10
  913. package/dist/production-runtime/backends/webgl2/WebGL2Texture.d.ts.map +1 -1
  914. package/dist/production-runtime/backends/webgl2/WebGL2Texture.js +2 -7
  915. package/dist/production-runtime/backends/webgl2/WebGL2Texture.js.map +1 -1
  916. package/dist/production-runtime/backends/webgpu/WebGPUBuffer.d.ts +2 -10
  917. package/dist/production-runtime/backends/webgpu/WebGPUBuffer.d.ts.map +1 -1
  918. package/dist/production-runtime/backends/webgpu/WebGPUBuffer.js +2 -7
  919. package/dist/production-runtime/backends/webgpu/WebGPUBuffer.js.map +1 -1
  920. package/dist/production-runtime/backends/webgpu/WebGPUCapabilities.d.ts +2 -10
  921. package/dist/production-runtime/backends/webgpu/WebGPUCapabilities.d.ts.map +1 -1
  922. package/dist/production-runtime/backends/webgpu/WebGPUCapabilities.js +2 -7
  923. package/dist/production-runtime/backends/webgpu/WebGPUCapabilities.js.map +1 -1
  924. package/dist/production-runtime/backends/webgpu/WebGPURenderTarget.d.ts +2 -10
  925. package/dist/production-runtime/backends/webgpu/WebGPURenderTarget.d.ts.map +1 -1
  926. package/dist/production-runtime/backends/webgpu/WebGPURenderTarget.js +2 -7
  927. package/dist/production-runtime/backends/webgpu/WebGPURenderTarget.js.map +1 -1
  928. package/dist/production-runtime/backends/webgpu/WebGPUShader.d.ts +2 -10
  929. package/dist/production-runtime/backends/webgpu/WebGPUShader.d.ts.map +1 -1
  930. package/dist/production-runtime/backends/webgpu/WebGPUShader.js +2 -7
  931. package/dist/production-runtime/backends/webgpu/WebGPUShader.js.map +1 -1
  932. package/dist/production-runtime/backends/webgpu/WebGPUTexture.d.ts +2 -10
  933. package/dist/production-runtime/backends/webgpu/WebGPUTexture.d.ts.map +1 -1
  934. package/dist/production-runtime/backends/webgpu/WebGPUTexture.js +2 -7
  935. package/dist/production-runtime/backends/webgpu/WebGPUTexture.js.map +1 -1
  936. package/dist/production-runtime/index.d.ts +6 -6
  937. package/dist/production-runtime/index.d.ts.map +1 -1
  938. package/dist/production-runtime/index.js +9 -3
  939. package/dist/production-runtime/index.js.map +1 -1
  940. package/dist/production-runtime/materials/GLTFMaterialAdapter.d.ts +12 -13
  941. package/dist/production-runtime/materials/GLTFMaterialAdapter.d.ts.map +1 -1
  942. package/dist/production-runtime/materials/GLTFMaterialAdapter.js +10 -4
  943. package/dist/production-runtime/materials/GLTFMaterialAdapter.js.map +1 -1
  944. package/dist/production-runtime/materials/GLTFPBRMaterialAdapter.d.ts +9 -2
  945. package/dist/production-runtime/materials/GLTFPBRMaterialAdapter.d.ts.map +1 -1
  946. package/dist/production-runtime/materials/GLTFPBRMaterialAdapter.js +7 -1
  947. package/dist/production-runtime/materials/GLTFPBRMaterialAdapter.js.map +1 -1
  948. package/dist/production-runtime/materials/MaterialCompiler.d.ts +10 -8
  949. package/dist/production-runtime/materials/MaterialCompiler.d.ts.map +1 -1
  950. package/dist/production-runtime/materials/MaterialCompiler.js +9 -4
  951. package/dist/production-runtime/materials/MaterialCompiler.js.map +1 -1
  952. package/dist/production-runtime/materials/PBRShaderFeatures.d.ts.map +1 -1
  953. package/dist/production-runtime/materials/PBRShaderFeatures.js +30 -1
  954. package/dist/production-runtime/materials/PBRShaderFeatures.js.map +1 -1
  955. package/dist/production-runtime/passes/ContactShadowPass.d.ts.map +1 -1
  956. package/dist/production-runtime/passes/ContactShadowPass.js +14 -13
  957. package/dist/production-runtime/passes/ContactShadowPass.js.map +1 -1
  958. package/dist/production-runtime/renderProofs.d.ts +54 -0
  959. package/dist/production-runtime/renderProofs.d.ts.map +1 -0
  960. package/dist/production-runtime/renderProofs.js +245 -0
  961. package/dist/production-runtime/renderProofs.js.map +1 -0
  962. package/dist/program/DFGLut.d.ts +23 -0
  963. package/dist/program/DFGLut.d.ts.map +1 -0
  964. package/dist/program/DFGLut.js +58 -0
  965. package/dist/program/DFGLut.js.map +1 -0
  966. package/dist/program/DFGLutData.d.ts +35 -0
  967. package/dist/program/DFGLutData.d.ts.map +1 -0
  968. package/dist/program/DFGLutData.js +52 -0
  969. package/dist/program/DFGLutData.js.map +1 -0
  970. package/dist/program/FeatureSelect.d.ts +35 -0
  971. package/dist/program/FeatureSelect.d.ts.map +1 -0
  972. package/dist/program/FeatureSelect.js +88 -0
  973. package/dist/program/FeatureSelect.js.map +1 -0
  974. package/dist/program/MaterialFeatures.d.ts +66 -0
  975. package/dist/program/MaterialFeatures.d.ts.map +1 -0
  976. package/dist/program/MaterialFeatures.js +242 -0
  977. package/dist/program/MaterialFeatures.js.map +1 -0
  978. package/dist/program/ProgramCache.d.ts +83 -0
  979. package/dist/program/ProgramCache.d.ts.map +1 -0
  980. package/dist/program/ProgramCache.js +194 -0
  981. package/dist/program/ProgramCache.js.map +1 -0
  982. package/dist/program/ProgramFeatures.d.ts +21 -0
  983. package/dist/program/ProgramFeatures.d.ts.map +1 -0
  984. package/dist/program/ProgramFeatures.js +95 -0
  985. package/dist/program/ProgramFeatures.js.map +1 -0
  986. package/dist/program/ProgramGenerator.d.ts +60 -0
  987. package/dist/program/ProgramGenerator.d.ts.map +1 -0
  988. package/dist/program/ProgramGenerator.js +760 -0
  989. package/dist/program/ProgramGenerator.js.map +1 -0
  990. package/dist/program/ProgramKey.d.ts +10 -0
  991. package/dist/program/ProgramKey.d.ts.map +1 -0
  992. package/dist/program/ProgramKey.js +13 -0
  993. package/dist/program/ProgramKey.js.map +1 -0
  994. package/dist/program/ProgramWarmup.d.ts +37 -0
  995. package/dist/program/ProgramWarmup.d.ts.map +1 -0
  996. package/dist/program/ProgramWarmup.js +68 -0
  997. package/dist/program/ProgramWarmup.js.map +1 -0
  998. package/dist/program/UniformLayout.d.ts +40 -0
  999. package/dist/program/UniformLayout.d.ts.map +1 -0
  1000. package/dist/program/UniformLayout.js +105 -0
  1001. package/dist/program/UniformLayout.js.map +1 -0
  1002. package/dist/program/chunks/alpha.glsl.d.ts +7 -0
  1003. package/dist/program/chunks/alpha.glsl.d.ts.map +1 -0
  1004. package/dist/program/chunks/alpha.glsl.js +17 -0
  1005. package/dist/program/chunks/alpha.glsl.js.map +1 -0
  1006. package/dist/program/chunks/brdf.glsl.d.ts +12 -0
  1007. package/dist/program/chunks/brdf.glsl.d.ts.map +1 -0
  1008. package/dist/program/chunks/brdf.glsl.js +144 -0
  1009. package/dist/program/chunks/brdf.glsl.js.map +1 -0
  1010. package/dist/program/chunks/colorspace.glsl.d.ts +8 -0
  1011. package/dist/program/chunks/colorspace.glsl.d.ts.map +1 -0
  1012. package/dist/program/chunks/colorspace.glsl.js +16 -0
  1013. package/dist/program/chunks/colorspace.glsl.js.map +1 -0
  1014. package/dist/program/chunks/common.glsl.d.ts +7 -0
  1015. package/dist/program/chunks/common.glsl.d.ts.map +1 -0
  1016. package/dist/program/chunks/common.glsl.js +25 -0
  1017. package/dist/program/chunks/common.glsl.js.map +1 -0
  1018. package/dist/program/chunks/depth.glsl.d.ts +9 -0
  1019. package/dist/program/chunks/depth.glsl.d.ts.map +1 -0
  1020. package/dist/program/chunks/depth.glsl.js +18 -0
  1021. package/dist/program/chunks/depth.glsl.js.map +1 -0
  1022. package/dist/program/chunks/drawId.wgsl.d.ts +9 -0
  1023. package/dist/program/chunks/drawId.wgsl.d.ts.map +1 -0
  1024. package/dist/program/chunks/drawId.wgsl.js +29 -0
  1025. package/dist/program/chunks/drawId.wgsl.js.map +1 -0
  1026. package/dist/program/chunks/fog_default.glsl.d.ts +8 -0
  1027. package/dist/program/chunks/fog_default.glsl.d.ts.map +1 -0
  1028. package/dist/program/chunks/fog_default.glsl.js +31 -0
  1029. package/dist/program/chunks/fog_default.glsl.js.map +1 -0
  1030. package/dist/program/chunks/indirect_default.glsl.d.ts +29 -0
  1031. package/dist/program/chunks/indirect_default.glsl.d.ts.map +1 -0
  1032. package/dist/program/chunks/indirect_default.glsl.js +113 -0
  1033. package/dist/program/chunks/indirect_default.glsl.js.map +1 -0
  1034. package/dist/program/chunks/instanceEmissive.wgsl.d.ts +10 -0
  1035. package/dist/program/chunks/instanceEmissive.wgsl.d.ts.map +1 -0
  1036. package/dist/program/chunks/instanceEmissive.wgsl.js +21 -0
  1037. package/dist/program/chunks/instanceEmissive.wgsl.js.map +1 -0
  1038. package/dist/program/chunks/instancing.glsl.d.ts +8 -0
  1039. package/dist/program/chunks/instancing.glsl.d.ts.map +1 -0
  1040. package/dist/program/chunks/instancing.glsl.js +25 -0
  1041. package/dist/program/chunks/instancing.glsl.js.map +1 -0
  1042. package/dist/program/chunks/lights_legacy.glsl.d.ts +15 -0
  1043. package/dist/program/chunks/lights_legacy.glsl.d.ts.map +1 -0
  1044. package/dist/program/chunks/lights_legacy.glsl.js +95 -0
  1045. package/dist/program/chunks/lights_legacy.glsl.js.map +1 -0
  1046. package/dist/program/chunks/manifest.d.ts +42 -0
  1047. package/dist/program/chunks/manifest.d.ts.map +1 -0
  1048. package/dist/program/chunks/manifest.js +48 -0
  1049. package/dist/program/chunks/manifest.js.map +1 -0
  1050. package/dist/program/chunks/normal.glsl.d.ts +8 -0
  1051. package/dist/program/chunks/normal.glsl.d.ts.map +1 -0
  1052. package/dist/program/chunks/normal.glsl.js +34 -0
  1053. package/dist/program/chunks/normal.glsl.js.map +1 -0
  1054. package/dist/program/chunks/shadow_forward.glsl.d.ts +23 -0
  1055. package/dist/program/chunks/shadow_forward.glsl.d.ts.map +1 -0
  1056. package/dist/program/chunks/shadow_forward.glsl.js +73 -0
  1057. package/dist/program/chunks/shadow_forward.glsl.js.map +1 -0
  1058. package/dist/quality/DeviceClasses.d.ts +31 -0
  1059. package/dist/quality/DeviceClasses.d.ts.map +1 -0
  1060. package/dist/quality/DeviceClasses.js +83 -0
  1061. package/dist/quality/DeviceClasses.js.map +1 -0
  1062. package/dist/quality/DeviceProbe.d.ts +42 -0
  1063. package/dist/quality/DeviceProbe.d.ts.map +1 -0
  1064. package/dist/quality/DeviceProbe.js +83 -0
  1065. package/dist/quality/DeviceProbe.js.map +1 -0
  1066. package/dist/quality/FrameStats.d.ts +62 -0
  1067. package/dist/quality/FrameStats.d.ts.map +1 -0
  1068. package/dist/quality/FrameStats.js +220 -0
  1069. package/dist/quality/FrameStats.js.map +1 -0
  1070. package/dist/quality/PostprocessGuard.d.ts +49 -0
  1071. package/dist/quality/PostprocessGuard.d.ts.map +1 -0
  1072. package/dist/quality/PostprocessGuard.js +92 -0
  1073. package/dist/quality/PostprocessGuard.js.map +1 -0
  1074. package/dist/quality/QualityController.d.ts +93 -0
  1075. package/dist/quality/QualityController.d.ts.map +1 -0
  1076. package/dist/quality/QualityController.js +248 -0
  1077. package/dist/quality/QualityController.js.map +1 -0
  1078. package/dist/quality/QualityGovernor.d.ts +78 -0
  1079. package/dist/quality/QualityGovernor.d.ts.map +1 -0
  1080. package/dist/quality/QualityGovernor.js +170 -0
  1081. package/dist/quality/QualityGovernor.js.map +1 -0
  1082. package/dist/quality/QualityTier.d.ts +17 -0
  1083. package/dist/quality/QualityTier.d.ts.map +1 -0
  1084. package/dist/quality/QualityTier.js +23 -0
  1085. package/dist/quality/QualityTier.js.map +1 -0
  1086. package/dist/quality/RenderScaleController.d.ts +35 -0
  1087. package/dist/quality/RenderScaleController.d.ts.map +1 -0
  1088. package/dist/quality/RenderScaleController.js +57 -0
  1089. package/dist/quality/RenderScaleController.js.map +1 -0
  1090. package/dist/quality/RetentionPolicy.d.ts +11 -0
  1091. package/dist/quality/RetentionPolicy.d.ts.map +1 -0
  1092. package/dist/quality/RetentionPolicy.js +12 -0
  1093. package/dist/quality/RetentionPolicy.js.map +1 -0
  1094. package/dist/quality/TierResolver.d.ts +52 -0
  1095. package/dist/quality/TierResolver.d.ts.map +1 -0
  1096. package/dist/quality/TierResolver.js +155 -0
  1097. package/dist/quality/TierResolver.js.map +1 -0
  1098. package/dist/quality/liveTier.d.ts +23 -0
  1099. package/dist/quality/liveTier.d.ts.map +1 -0
  1100. package/dist/quality/liveTier.js +16 -0
  1101. package/dist/quality/liveTier.js.map +1 -0
  1102. package/dist/reference/BloomPass.d.ts +10 -0
  1103. package/dist/reference/BloomPass.d.ts.map +1 -0
  1104. package/dist/reference/BloomPass.js +18 -0
  1105. package/dist/reference/BloomPass.js.map +1 -0
  1106. package/dist/reference/DepthHazePass.d.ts +12 -0
  1107. package/dist/reference/DepthHazePass.d.ts.map +1 -0
  1108. package/dist/reference/DepthHazePass.js +20 -0
  1109. package/dist/reference/DepthHazePass.js.map +1 -0
  1110. package/dist/reference/EffectComposer.d.ts +110 -0
  1111. package/dist/reference/EffectComposer.d.ts.map +1 -0
  1112. package/dist/reference/EffectComposer.js +247 -0
  1113. package/dist/reference/EffectComposer.js.map +1 -0
  1114. package/dist/reference/FilmGrainPass.d.ts +9 -0
  1115. package/dist/reference/FilmGrainPass.d.ts.map +1 -0
  1116. package/dist/reference/FilmGrainPass.js +17 -0
  1117. package/dist/reference/FilmGrainPass.js.map +1 -0
  1118. package/dist/reference/PostProcessPass.d.ts +511 -0
  1119. package/dist/reference/PostProcessPass.d.ts.map +1 -0
  1120. package/dist/reference/PostProcessPass.js +2023 -0
  1121. package/dist/reference/PostProcessPass.js.map +1 -0
  1122. package/dist/reference/SSAOPass.d.ts +6 -0
  1123. package/dist/reference/SSAOPass.d.ts.map +1 -0
  1124. package/dist/reference/SSAOPass.js +18 -0
  1125. package/dist/reference/SSAOPass.js.map +1 -0
  1126. package/dist/reference/VignettePass.d.ts +10 -0
  1127. package/dist/reference/VignettePass.d.ts.map +1 -0
  1128. package/dist/reference/VignettePass.js +17 -0
  1129. package/dist/reference/VignettePass.js.map +1 -0
  1130. package/dist/reference/index.d.ts +15 -0
  1131. package/dist/reference/index.d.ts.map +1 -0
  1132. package/dist/reference/index.js +15 -0
  1133. package/dist/reference/index.js.map +1 -0
  1134. package/dist/renderer/Background.d.ts +49 -0
  1135. package/dist/renderer/Background.d.ts.map +1 -0
  1136. package/dist/renderer/Background.js +259 -0
  1137. package/dist/renderer/Background.js.map +1 -0
  1138. package/dist/renderer/CullingBatching.d.ts +55 -0
  1139. package/dist/renderer/CullingBatching.d.ts.map +1 -0
  1140. package/dist/renderer/CullingBatching.js +362 -0
  1141. package/dist/renderer/CullingBatching.js.map +1 -0
  1142. package/dist/renderer/DeviceLifecycle.d.ts +29 -0
  1143. package/dist/renderer/DeviceLifecycle.d.ts.map +1 -0
  1144. package/dist/renderer/DeviceLifecycle.js +48 -0
  1145. package/dist/renderer/DeviceLifecycle.js.map +1 -0
  1146. package/dist/renderer/FrameGraph.d.ts +96 -0
  1147. package/dist/renderer/FrameGraph.d.ts.map +1 -0
  1148. package/dist/renderer/FrameGraph.js +301 -0
  1149. package/dist/renderer/FrameGraph.js.map +1 -0
  1150. package/dist/renderer/InterleavedTransparentPass.d.ts +31 -0
  1151. package/dist/renderer/InterleavedTransparentPass.d.ts.map +1 -0
  1152. package/dist/renderer/InterleavedTransparentPass.js +65 -0
  1153. package/dist/renderer/InterleavedTransparentPass.js.map +1 -0
  1154. package/dist/renderer/PixelRatio.d.ts +64 -0
  1155. package/dist/renderer/PixelRatio.d.ts.map +1 -0
  1156. package/dist/renderer/PixelRatio.js +81 -0
  1157. package/dist/renderer/PixelRatio.js.map +1 -0
  1158. package/dist/renderer/PostprocessExecution.d.ts +82 -0
  1159. package/dist/renderer/PostprocessExecution.d.ts.map +1 -0
  1160. package/dist/renderer/PostprocessExecution.js +745 -0
  1161. package/dist/renderer/PostprocessExecution.js.map +1 -0
  1162. package/dist/renderer/Prd06ShaderWarmup.d.ts +32 -0
  1163. package/dist/renderer/Prd06ShaderWarmup.d.ts.map +1 -0
  1164. package/dist/renderer/Prd06ShaderWarmup.js +45 -0
  1165. package/dist/renderer/Prd06ShaderWarmup.js.map +1 -0
  1166. package/dist/renderer/RenderShared.d.ts +11 -0
  1167. package/dist/renderer/RenderShared.d.ts.map +1 -0
  1168. package/dist/renderer/RenderShared.js +47 -0
  1169. package/dist/renderer/RenderShared.js.map +1 -0
  1170. package/dist/renderer/RendererFactory.d.ts +3 -0
  1171. package/dist/renderer/RendererFactory.d.ts.map +1 -0
  1172. package/dist/renderer/RendererFactory.js +19 -0
  1173. package/dist/renderer/RendererFactory.js.map +1 -0
  1174. package/dist/renderer/RendererHost.d.ts +25 -0
  1175. package/dist/renderer/RendererHost.d.ts.map +1 -0
  1176. package/dist/renderer/RendererHost.js +4 -0
  1177. package/dist/renderer/RendererHost.js.map +1 -0
  1178. package/dist/renderer/SceneDepthCopyPass.d.ts +50 -0
  1179. package/dist/renderer/SceneDepthCopyPass.d.ts.map +1 -0
  1180. package/dist/renderer/SceneDepthCopyPass.js +124 -0
  1181. package/dist/renderer/SceneDepthCopyPass.js.map +1 -0
  1182. package/dist/renderer/ShadowOrchestration.d.ts +32 -0
  1183. package/dist/renderer/ShadowOrchestration.d.ts.map +1 -0
  1184. package/dist/renderer/ShadowOrchestration.js +491 -0
  1185. package/dist/renderer/ShadowOrchestration.js.map +1 -0
  1186. package/dist/renderer/SkinnedBounds.d.ts +6 -0
  1187. package/dist/renderer/SkinnedBounds.d.ts.map +1 -0
  1188. package/dist/renderer/SkinnedBounds.js +74 -0
  1189. package/dist/renderer/SkinnedBounds.js.map +1 -0
  1190. package/dist/renderer/coreOutputPostRoute.d.ts +40 -0
  1191. package/dist/renderer/coreOutputPostRoute.d.ts.map +1 -0
  1192. package/dist/renderer/coreOutputPostRoute.js +46 -0
  1193. package/dist/renderer/coreOutputPostRoute.js.map +1 -0
  1194. package/dist/renderer/postSkipped.d.ts +12 -0
  1195. package/dist/renderer/postSkipped.d.ts.map +1 -0
  1196. package/dist/renderer/postSkipped.js +54 -0
  1197. package/dist/renderer/postSkipped.js.map +1 -0
  1198. package/dist/renderer/qrSubFlags.d.ts +45 -0
  1199. package/dist/renderer/qrSubFlags.d.ts.map +1 -0
  1200. package/dist/renderer/qrSubFlags.js +130 -0
  1201. package/dist/renderer/qrSubFlags.js.map +1 -0
  1202. package/dist/resources/InstanceBuffer.d.ts +34 -0
  1203. package/dist/resources/InstanceBuffer.d.ts.map +1 -0
  1204. package/dist/resources/InstanceBuffer.js +96 -0
  1205. package/dist/resources/InstanceBuffer.js.map +1 -0
  1206. package/dist/resources/MorphTargetTexture.d.ts +53 -0
  1207. package/dist/resources/MorphTargetTexture.d.ts.map +1 -0
  1208. package/dist/resources/MorphTargetTexture.js +135 -0
  1209. package/dist/resources/MorphTargetTexture.js.map +1 -0
  1210. package/dist/resources/RenderTargetPool.d.ts +47 -0
  1211. package/dist/resources/RenderTargetPool.d.ts.map +1 -0
  1212. package/dist/resources/RenderTargetPool.js +122 -0
  1213. package/dist/resources/RenderTargetPool.js.map +1 -0
  1214. package/dist/resources/ResourceRegistry.d.ts +48 -0
  1215. package/dist/resources/ResourceRegistry.d.ts.map +1 -0
  1216. package/dist/resources/ResourceRegistry.js +95 -0
  1217. package/dist/resources/ResourceRegistry.js.map +1 -0
  1218. package/dist/resources/UniformBlock.d.ts +90 -0
  1219. package/dist/resources/UniformBlock.d.ts.map +1 -0
  1220. package/dist/resources/UniformBlock.js +184 -0
  1221. package/dist/resources/UniformBlock.js.map +1 -0
  1222. package/dist/shaders/camera-fade.glsl.d.ts +26 -0
  1223. package/dist/shaders/camera-fade.glsl.d.ts.map +1 -0
  1224. package/dist/shaders/camera-fade.glsl.js +109 -0
  1225. package/dist/shaders/camera-fade.glsl.js.map +1 -0
  1226. package/dist/shaders/chunks/contact_shadow.glsl.d.ts +12 -0
  1227. package/dist/shaders/chunks/contact_shadow.glsl.d.ts.map +1 -0
  1228. package/dist/shaders/chunks/contact_shadow.glsl.js +53 -0
  1229. package/dist/shaders/chunks/contact_shadow.glsl.js.map +1 -0
  1230. package/dist/shaders/chunks/lighting_ibl.glsl.d.ts +29 -0
  1231. package/dist/shaders/chunks/lighting_ibl.glsl.d.ts.map +1 -0
  1232. package/dist/shaders/chunks/lighting_ibl.glsl.js +122 -0
  1233. package/dist/shaders/chunks/lighting_ibl.glsl.js.map +1 -0
  1234. package/dist/shaders/chunks/lighting_mirrors.d.ts +18 -0
  1235. package/dist/shaders/chunks/lighting_mirrors.d.ts.map +1 -0
  1236. package/dist/shaders/chunks/lighting_mirrors.js +35 -0
  1237. package/dist/shaders/chunks/lighting_mirrors.js.map +1 -0
  1238. package/dist/shaders/chunks/lighting_punctual.glsl.d.ts +17 -0
  1239. package/dist/shaders/chunks/lighting_punctual.glsl.d.ts.map +1 -0
  1240. package/dist/shaders/chunks/lighting_punctual.glsl.js +197 -0
  1241. package/dist/shaders/chunks/lighting_punctual.glsl.js.map +1 -0
  1242. package/dist/shaders/chunks/sh9.glsl.d.ts +9 -0
  1243. package/dist/shaders/chunks/sh9.glsl.d.ts.map +1 -0
  1244. package/dist/shaders/chunks/sh9.glsl.js +41 -0
  1245. package/dist/shaders/chunks/sh9.glsl.js.map +1 -0
  1246. package/dist/shaders/chunks/shadow_caster.glsl.d.ts +10 -0
  1247. package/dist/shaders/chunks/shadow_caster.glsl.d.ts.map +1 -0
  1248. package/dist/shaders/chunks/shadow_caster.glsl.js +32 -0
  1249. package/dist/shaders/chunks/shadow_caster.glsl.js.map +1 -0
  1250. package/dist/shaders/chunks/shadow_receive.glsl.d.ts +13 -0
  1251. package/dist/shaders/chunks/shadow_receive.glsl.d.ts.map +1 -0
  1252. package/dist/shaders/chunks/shadow_receive.glsl.js +136 -0
  1253. package/dist/shaders/chunks/shadow_receive.glsl.js.map +1 -0
  1254. package/dist/shaders/debug-view.glsl.d.ts +18 -0
  1255. package/dist/shaders/debug-view.glsl.d.ts.map +1 -0
  1256. package/dist/shaders/debug-view.glsl.js +153 -0
  1257. package/dist/shaders/debug-view.glsl.js.map +1 -0
  1258. package/dist/shaders/deform/deform.glsl.d.ts +17 -0
  1259. package/dist/shaders/deform/deform.glsl.d.ts.map +1 -0
  1260. package/dist/shaders/deform/deform.glsl.js +99 -0
  1261. package/dist/shaders/deform/deform.glsl.js.map +1 -0
  1262. package/dist/shaders/deform/deform.wgsl.d.ts +15 -0
  1263. package/dist/shaders/deform/deform.wgsl.d.ts.map +1 -0
  1264. package/dist/shaders/deform/deform.wgsl.js +89 -0
  1265. package/dist/shaders/deform/deform.wgsl.js.map +1 -0
  1266. package/dist/shaders/deform/depthFeature.d.ts +22 -0
  1267. package/dist/shaders/deform/depthFeature.d.ts.map +1 -0
  1268. package/dist/shaders/deform/depthFeature.js +44 -0
  1269. package/dist/shaders/deform/depthFeature.js.map +1 -0
  1270. package/dist/shaders/deform/forwardFeature.d.ts +114 -0
  1271. package/dist/shaders/deform/forwardFeature.d.ts.map +1 -0
  1272. package/dist/shaders/deform/forwardFeature.js +300 -0
  1273. package/dist/shaders/deform/forwardFeature.js.map +1 -0
  1274. package/dist/shaders/deform/morph.glsl.d.ts +14 -0
  1275. package/dist/shaders/deform/morph.glsl.d.ts.map +1 -0
  1276. package/dist/shaders/deform/morph.glsl.js +45 -0
  1277. package/dist/shaders/deform/morph.glsl.js.map +1 -0
  1278. package/dist/shaders/deform/morph.wgsl.d.ts +21 -0
  1279. package/dist/shaders/deform/morph.wgsl.d.ts.map +1 -0
  1280. package/dist/shaders/deform/morph.wgsl.js +73 -0
  1281. package/dist/shaders/deform/morph.wgsl.js.map +1 -0
  1282. package/dist/shaders/deform/skinning.glsl.d.ts +8 -0
  1283. package/dist/shaders/deform/skinning.glsl.d.ts.map +1 -0
  1284. package/dist/shaders/deform/skinning.glsl.js +37 -0
  1285. package/dist/shaders/deform/skinning.glsl.js.map +1 -0
  1286. package/dist/shaders/deform/skinning.wgsl.d.ts +26 -0
  1287. package/dist/shaders/deform/skinning.wgsl.d.ts.map +1 -0
  1288. package/dist/shaders/deform/skinning.wgsl.js +58 -0
  1289. package/dist/shaders/deform/skinning.wgsl.js.map +1 -0
  1290. package/dist/shaders/deform/twins.d.ts +8 -0
  1291. package/dist/shaders/deform/twins.d.ts.map +1 -0
  1292. package/dist/shaders/deform/twins.js +20 -0
  1293. package/dist/shaders/deform/twins.js.map +1 -0
  1294. package/dist/shaders/lod-dither.glsl.d.ts +12 -0
  1295. package/dist/shaders/lod-dither.glsl.d.ts.map +1 -0
  1296. package/dist/shaders/lod-dither.glsl.js +101 -0
  1297. package/dist/shaders/lod-dither.glsl.js.map +1 -0
  1298. package/dist/shaders/physical/alpha_a2c.glsl.d.ts +19 -0
  1299. package/dist/shaders/physical/alpha_a2c.glsl.d.ts.map +1 -0
  1300. package/dist/shaders/physical/alpha_a2c.glsl.js +29 -0
  1301. package/dist/shaders/physical/alpha_a2c.glsl.js.map +1 -0
  1302. package/dist/shaders/physical/anisotropy.glsl.d.ts +23 -0
  1303. package/dist/shaders/physical/anisotropy.glsl.d.ts.map +1 -0
  1304. package/dist/shaders/physical/anisotropy.glsl.js +116 -0
  1305. package/dist/shaders/physical/anisotropy.glsl.js.map +1 -0
  1306. package/dist/shaders/physical/bsdf_lobes_common.glsl.d.ts +25 -0
  1307. package/dist/shaders/physical/bsdf_lobes_common.glsl.d.ts.map +1 -0
  1308. package/dist/shaders/physical/bsdf_lobes_common.glsl.js +95 -0
  1309. package/dist/shaders/physical/bsdf_lobes_common.glsl.js.map +1 -0
  1310. package/dist/shaders/physical/clearcoat.glsl.d.ts +23 -0
  1311. package/dist/shaders/physical/clearcoat.glsl.d.ts.map +1 -0
  1312. package/dist/shaders/physical/clearcoat.glsl.js +70 -0
  1313. package/dist/shaders/physical/clearcoat.glsl.js.map +1 -0
  1314. package/dist/shaders/physical/debug_view.glsl.d.ts +19 -0
  1315. package/dist/shaders/physical/debug_view.glsl.d.ts.map +1 -0
  1316. package/dist/shaders/physical/debug_view.glsl.js +76 -0
  1317. package/dist/shaders/physical/debug_view.glsl.js.map +1 -0
  1318. package/dist/shaders/physical/dispersion.glsl.d.ts +18 -0
  1319. package/dist/shaders/physical/dispersion.glsl.d.ts.map +1 -0
  1320. package/dist/shaders/physical/dispersion.glsl.js +67 -0
  1321. package/dist/shaders/physical/dispersion.glsl.js.map +1 -0
  1322. package/dist/shaders/physical/emissive_strength.glsl.d.ts +18 -0
  1323. package/dist/shaders/physical/emissive_strength.glsl.d.ts.map +1 -0
  1324. package/dist/shaders/physical/emissive_strength.glsl.js +20 -0
  1325. package/dist/shaders/physical/emissive_strength.glsl.js.map +1 -0
  1326. package/dist/shaders/physical/index.d.ts +27 -0
  1327. package/dist/shaders/physical/index.d.ts.map +1 -0
  1328. package/dist/shaders/physical/index.js +69 -0
  1329. package/dist/shaders/physical/index.js.map +1 -0
  1330. package/dist/shaders/physical/iridescence.glsl.d.ts +25 -0
  1331. package/dist/shaders/physical/iridescence.glsl.d.ts.map +1 -0
  1332. package/dist/shaders/physical/iridescence.glsl.js +186 -0
  1333. package/dist/shaders/physical/iridescence.glsl.js.map +1 -0
  1334. package/dist/shaders/physical/lobe_calls.glsl.d.ts +83 -0
  1335. package/dist/shaders/physical/lobe_calls.glsl.d.ts.map +1 -0
  1336. package/dist/shaders/physical/lobe_calls.glsl.js +397 -0
  1337. package/dist/shaders/physical/lobe_calls.glsl.js.map +1 -0
  1338. package/dist/shaders/physical/sheen.glsl.d.ts +24 -0
  1339. package/dist/shaders/physical/sheen.glsl.d.ts.map +1 -0
  1340. package/dist/shaders/physical/sheen.glsl.js +108 -0
  1341. package/dist/shaders/physical/sheen.glsl.js.map +1 -0
  1342. package/dist/shaders/physical/specular_ior.glsl.d.ts +20 -0
  1343. package/dist/shaders/physical/specular_ior.glsl.d.ts.map +1 -0
  1344. package/dist/shaders/physical/specular_ior.glsl.js +64 -0
  1345. package/dist/shaders/physical/specular_ior.glsl.js.map +1 -0
  1346. package/dist/shaders/physical/tangent_frame.glsl.d.ts +27 -0
  1347. package/dist/shaders/physical/tangent_frame.glsl.d.ts.map +1 -0
  1348. package/dist/shaders/physical/tangent_frame.glsl.js +71 -0
  1349. package/dist/shaders/physical/tangent_frame.glsl.js.map +1 -0
  1350. package/dist/shaders/physical/transmission.glsl.d.ts +25 -0
  1351. package/dist/shaders/physical/transmission.glsl.d.ts.map +1 -0
  1352. package/dist/shaders/physical/transmission.glsl.js +204 -0
  1353. package/dist/shaders/physical/transmission.glsl.js.map +1 -0
  1354. package/dist/shaders/physical/transmission_copy.glsl.d.ts +15 -0
  1355. package/dist/shaders/physical/transmission_copy.glsl.d.ts.map +1 -0
  1356. package/dist/shaders/physical/transmission_copy.glsl.js +33 -0
  1357. package/dist/shaders/physical/transmission_copy.glsl.js.map +1 -0
  1358. package/dist/shaders/physical/unlit.glsl.d.ts +17 -0
  1359. package/dist/shaders/physical/unlit.glsl.d.ts.map +1 -0
  1360. package/dist/shaders/physical/unlit.glsl.js +19 -0
  1361. package/dist/shaders/physical/unlit.glsl.js.map +1 -0
  1362. package/dist/shaders/physical/uv_transform.glsl.d.ts +18 -0
  1363. package/dist/shaders/physical/uv_transform.glsl.d.ts.map +1 -0
  1364. package/dist/shaders/physical/uv_transform.glsl.js +30 -0
  1365. package/dist/shaders/physical/uv_transform.glsl.js.map +1 -0
  1366. package/dist/shaders/physical/volume.glsl.d.ts +19 -0
  1367. package/dist/shaders/physical/volume.glsl.d.ts.map +1 -0
  1368. package/dist/shaders/physical/volume.glsl.js +47 -0
  1369. package/dist/shaders/physical/volume.glsl.js.map +1 -0
  1370. package/dist/shaders/physical-wgsl/alpha_a2c.wgsl.d.ts +8 -0
  1371. package/dist/shaders/physical-wgsl/alpha_a2c.wgsl.d.ts.map +1 -0
  1372. package/dist/shaders/physical-wgsl/alpha_a2c.wgsl.js +26 -0
  1373. package/dist/shaders/physical-wgsl/alpha_a2c.wgsl.js.map +1 -0
  1374. package/dist/shaders/physical-wgsl/anisotropy.wgsl.d.ts +10 -0
  1375. package/dist/shaders/physical-wgsl/anisotropy.wgsl.d.ts.map +1 -0
  1376. package/dist/shaders/physical-wgsl/anisotropy.wgsl.js +97 -0
  1377. package/dist/shaders/physical-wgsl/anisotropy.wgsl.js.map +1 -0
  1378. package/dist/shaders/physical-wgsl/bsdf_lobes_common.wgsl.d.ts +11 -0
  1379. package/dist/shaders/physical-wgsl/bsdf_lobes_common.wgsl.d.ts.map +1 -0
  1380. package/dist/shaders/physical-wgsl/bsdf_lobes_common.wgsl.js +76 -0
  1381. package/dist/shaders/physical-wgsl/bsdf_lobes_common.wgsl.js.map +1 -0
  1382. package/dist/shaders/physical-wgsl/clearcoat.wgsl.d.ts +9 -0
  1383. package/dist/shaders/physical-wgsl/clearcoat.wgsl.d.ts.map +1 -0
  1384. package/dist/shaders/physical-wgsl/clearcoat.wgsl.js +56 -0
  1385. package/dist/shaders/physical-wgsl/clearcoat.wgsl.js.map +1 -0
  1386. package/dist/shaders/physical-wgsl/debug_view.wgsl.d.ts +10 -0
  1387. package/dist/shaders/physical-wgsl/debug_view.wgsl.d.ts.map +1 -0
  1388. package/dist/shaders/physical-wgsl/debug_view.wgsl.js +71 -0
  1389. package/dist/shaders/physical-wgsl/debug_view.wgsl.js.map +1 -0
  1390. package/dist/shaders/physical-wgsl/dispersion.wgsl.d.ts +10 -0
  1391. package/dist/shaders/physical-wgsl/dispersion.wgsl.d.ts.map +1 -0
  1392. package/dist/shaders/physical-wgsl/dispersion.wgsl.js +51 -0
  1393. package/dist/shaders/physical-wgsl/dispersion.wgsl.js.map +1 -0
  1394. package/dist/shaders/physical-wgsl/emissive_strength.wgsl.d.ts +9 -0
  1395. package/dist/shaders/physical-wgsl/emissive_strength.wgsl.d.ts.map +1 -0
  1396. package/dist/shaders/physical-wgsl/emissive_strength.wgsl.js +15 -0
  1397. package/dist/shaders/physical-wgsl/emissive_strength.wgsl.js.map +1 -0
  1398. package/dist/shaders/physical-wgsl/index.d.ts +35 -0
  1399. package/dist/shaders/physical-wgsl/index.d.ts.map +1 -0
  1400. package/dist/shaders/physical-wgsl/index.js +51 -0
  1401. package/dist/shaders/physical-wgsl/index.js.map +1 -0
  1402. package/dist/shaders/physical-wgsl/iridescence.wgsl.d.ts +9 -0
  1403. package/dist/shaders/physical-wgsl/iridescence.wgsl.d.ts.map +1 -0
  1404. package/dist/shaders/physical-wgsl/iridescence.wgsl.js +162 -0
  1405. package/dist/shaders/physical-wgsl/iridescence.wgsl.js.map +1 -0
  1406. package/dist/shaders/physical-wgsl/sheen.wgsl.d.ts +9 -0
  1407. package/dist/shaders/physical-wgsl/sheen.wgsl.d.ts.map +1 -0
  1408. package/dist/shaders/physical-wgsl/sheen.wgsl.js +85 -0
  1409. package/dist/shaders/physical-wgsl/sheen.wgsl.js.map +1 -0
  1410. package/dist/shaders/physical-wgsl/specular_ior.wgsl.d.ts +10 -0
  1411. package/dist/shaders/physical-wgsl/specular_ior.wgsl.d.ts.map +1 -0
  1412. package/dist/shaders/physical-wgsl/specular_ior.wgsl.js +47 -0
  1413. package/dist/shaders/physical-wgsl/specular_ior.wgsl.js.map +1 -0
  1414. package/dist/shaders/physical-wgsl/tangent_frame.wgsl.d.ts +11 -0
  1415. package/dist/shaders/physical-wgsl/tangent_frame.wgsl.d.ts.map +1 -0
  1416. package/dist/shaders/physical-wgsl/tangent_frame.wgsl.js +57 -0
  1417. package/dist/shaders/physical-wgsl/tangent_frame.wgsl.js.map +1 -0
  1418. package/dist/shaders/physical-wgsl/transmission.wgsl.d.ts +14 -0
  1419. package/dist/shaders/physical-wgsl/transmission.wgsl.d.ts.map +1 -0
  1420. package/dist/shaders/physical-wgsl/transmission.wgsl.js +159 -0
  1421. package/dist/shaders/physical-wgsl/transmission.wgsl.js.map +1 -0
  1422. package/dist/shaders/physical-wgsl/unlit.wgsl.d.ts +8 -0
  1423. package/dist/shaders/physical-wgsl/unlit.wgsl.d.ts.map +1 -0
  1424. package/dist/shaders/physical-wgsl/unlit.wgsl.js +13 -0
  1425. package/dist/shaders/physical-wgsl/unlit.wgsl.js.map +1 -0
  1426. package/dist/shaders/physical-wgsl/uv_transform.wgsl.d.ts +10 -0
  1427. package/dist/shaders/physical-wgsl/uv_transform.wgsl.d.ts.map +1 -0
  1428. package/dist/shaders/physical-wgsl/uv_transform.wgsl.js +24 -0
  1429. package/dist/shaders/physical-wgsl/uv_transform.wgsl.js.map +1 -0
  1430. package/dist/shaders/physical-wgsl/volume.wgsl.d.ts +10 -0
  1431. package/dist/shaders/physical-wgsl/volume.wgsl.d.ts.map +1 -0
  1432. package/dist/shaders/physical-wgsl/volume.wgsl.js +35 -0
  1433. package/dist/shaders/physical-wgsl/volume.wgsl.js.map +1 -0
  1434. package/dist/shadows/DirectionalCascadeFitter.d.ts +97 -0
  1435. package/dist/shadows/DirectionalCascadeFitter.d.ts.map +1 -0
  1436. package/dist/shadows/DirectionalCascadeFitter.js +372 -0
  1437. package/dist/shadows/DirectionalCascadeFitter.js.map +1 -0
  1438. package/dist/shadows/Prd02DepthShaderLibrary.d.ts +77 -0
  1439. package/dist/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -0
  1440. package/dist/shadows/Prd02DepthShaderLibrary.js +381 -0
  1441. package/dist/shadows/Prd02DepthShaderLibrary.js.map +1 -0
  1442. package/dist/shadows/Prd02ReceiveShadowContributor.d.ts +20 -0
  1443. package/dist/shadows/Prd02ReceiveShadowContributor.d.ts.map +1 -0
  1444. package/dist/shadows/Prd02ReceiveShadowContributor.js +20 -0
  1445. package/dist/shadows/Prd02ReceiveShadowContributor.js.map +1 -0
  1446. package/dist/shadows/Prd02ShadowBridge.d.ts +111 -0
  1447. package/dist/shadows/Prd02ShadowBridge.d.ts.map +1 -0
  1448. package/dist/shadows/Prd02ShadowBridge.js +267 -0
  1449. package/dist/shadows/Prd02ShadowBridge.js.map +1 -0
  1450. package/dist/shadows/Prd02ShadowFilter.d.ts +29 -0
  1451. package/dist/shadows/Prd02ShadowFilter.d.ts.map +1 -0
  1452. package/dist/shadows/Prd02ShadowFilter.js +35 -0
  1453. package/dist/shadows/Prd02ShadowFilter.js.map +1 -0
  1454. package/dist/shadows/Prd02ShadowsContributor.d.ts +44 -0
  1455. package/dist/shadows/Prd02ShadowsContributor.d.ts.map +1 -0
  1456. package/dist/shadows/Prd02ShadowsContributor.js +197 -0
  1457. package/dist/shadows/Prd02ShadowsContributor.js.map +1 -0
  1458. package/dist/shadows/ShadowAtlas.d.ts +59 -0
  1459. package/dist/shadows/ShadowAtlas.d.ts.map +1 -0
  1460. package/dist/shadows/ShadowAtlas.js +137 -0
  1461. package/dist/shadows/ShadowAtlas.js.map +1 -0
  1462. package/dist/shadows/ShadowDebugViews.d.ts +5 -0
  1463. package/dist/shadows/ShadowDebugViews.d.ts.map +1 -1
  1464. package/dist/shadows/ShadowDebugViews.js +15 -10
  1465. package/dist/shadows/ShadowDebugViews.js.map +1 -1
  1466. package/dist/shadows/ShadowFrameBinding.d.ts +18 -0
  1467. package/dist/shadows/ShadowFrameBinding.d.ts.map +1 -0
  1468. package/dist/shadows/ShadowFrameBinding.js +52 -0
  1469. package/dist/shadows/ShadowFrameBinding.js.map +1 -0
  1470. package/dist/shadows/ShadowSystem.d.ts +125 -0
  1471. package/dist/shadows/ShadowSystem.d.ts.map +1 -0
  1472. package/dist/shadows/ShadowSystem.js +293 -0
  1473. package/dist/shadows/ShadowSystem.js.map +1 -0
  1474. package/dist/textures/TextureBudget.d.ts +42 -0
  1475. package/dist/textures/TextureBudget.d.ts.map +1 -0
  1476. package/dist/textures/TextureBudget.js +180 -0
  1477. package/dist/textures/TextureBudget.js.map +1 -0
  1478. package/dist/vfx/BeamPass.d.ts +42 -0
  1479. package/dist/vfx/BeamPass.d.ts.map +1 -0
  1480. package/dist/vfx/BeamPass.js +249 -0
  1481. package/dist/vfx/BeamPass.js.map +1 -0
  1482. package/dist/vfx/BlendFallback.d.ts +19 -0
  1483. package/dist/vfx/BlendFallback.d.ts.map +1 -0
  1484. package/dist/vfx/BlendFallback.js +73 -0
  1485. package/dist/vfx/BlendFallback.js.map +1 -0
  1486. package/dist/vfx/DecalBatch.d.ts +120 -0
  1487. package/dist/vfx/DecalBatch.d.ts.map +1 -0
  1488. package/dist/vfx/DecalBatch.js +234 -0
  1489. package/dist/vfx/DecalBatch.js.map +1 -0
  1490. package/dist/vfx/DecalPass.d.ts +63 -0
  1491. package/dist/vfx/DecalPass.d.ts.map +1 -0
  1492. package/dist/vfx/DecalPass.js +159 -0
  1493. package/dist/vfx/DecalPass.js.map +1 -0
  1494. package/dist/vfx/LowResParticles.d.ts +31 -0
  1495. package/dist/vfx/LowResParticles.d.ts.map +1 -0
  1496. package/dist/vfx/LowResParticles.js +151 -0
  1497. package/dist/vfx/LowResParticles.js.map +1 -0
  1498. package/dist/vfx/MeshParticleBatch.d.ts +49 -0
  1499. package/dist/vfx/MeshParticleBatch.d.ts.map +1 -0
  1500. package/dist/vfx/MeshParticleBatch.js +184 -0
  1501. package/dist/vfx/MeshParticleBatch.js.map +1 -0
  1502. package/dist/vfx/MeshParticlePass.d.ts +28 -0
  1503. package/dist/vfx/MeshParticlePass.d.ts.map +1 -0
  1504. package/dist/vfx/MeshParticlePass.js +150 -0
  1505. package/dist/vfx/MeshParticlePass.js.map +1 -0
  1506. package/dist/vfx/ParticleBatchPass.d.ts +61 -0
  1507. package/dist/vfx/ParticleBatchPass.d.ts.map +1 -0
  1508. package/dist/vfx/ParticleBatchPass.js +320 -0
  1509. package/dist/vfx/ParticleBatchPass.js.map +1 -0
  1510. package/dist/vfx/ParticleGpuSim.d.ts +85 -0
  1511. package/dist/vfx/ParticleGpuSim.d.ts.map +1 -0
  1512. package/dist/vfx/ParticleGpuSim.js +301 -0
  1513. package/dist/vfx/ParticleGpuSim.js.map +1 -0
  1514. package/dist/vfx/ParticleInstanceLayout.d.ts +38 -0
  1515. package/dist/vfx/ParticleInstanceLayout.d.ts.map +1 -0
  1516. package/dist/vfx/ParticleInstanceLayout.js +105 -0
  1517. package/dist/vfx/ParticleInstanceLayout.js.map +1 -0
  1518. package/dist/vfx/ParticleSort.d.ts +21 -0
  1519. package/dist/vfx/ParticleSort.d.ts.map +1 -0
  1520. package/dist/vfx/ParticleSort.js +80 -0
  1521. package/dist/vfx/ParticleSort.js.map +1 -0
  1522. package/dist/vfx/ProceduralVolumeEmitter.d.ts +90 -0
  1523. package/dist/vfx/ProceduralVolumeEmitter.d.ts.map +1 -0
  1524. package/dist/vfx/ProceduralVolumeEmitter.js +155 -0
  1525. package/dist/vfx/ProceduralVolumeEmitter.js.map +1 -0
  1526. package/dist/vfx/RibbonBatch.d.ts +71 -0
  1527. package/dist/vfx/RibbonBatch.d.ts.map +1 -0
  1528. package/dist/vfx/RibbonBatch.js +234 -0
  1529. package/dist/vfx/RibbonBatch.js.map +1 -0
  1530. package/dist/vfx/RibbonPass.d.ts +21 -0
  1531. package/dist/vfx/RibbonPass.d.ts.map +1 -0
  1532. package/dist/vfx/RibbonPass.js +108 -0
  1533. package/dist/vfx/RibbonPass.js.map +1 -0
  1534. package/dist/vfx/SceneDepthAdapter.d.ts +28 -0
  1535. package/dist/vfx/SceneDepthAdapter.d.ts.map +1 -0
  1536. package/dist/vfx/SceneDepthAdapter.js +70 -0
  1537. package/dist/vfx/SceneDepthAdapter.js.map +1 -0
  1538. package/dist/vfx/VfxAtlas.d.ts +68 -0
  1539. package/dist/vfx/VfxAtlas.d.ts.map +1 -0
  1540. package/dist/vfx/VfxAtlas.js +106 -0
  1541. package/dist/vfx/VfxAtlas.js.map +1 -0
  1542. package/dist/vfx/contributors.d.ts +73 -0
  1543. package/dist/vfx/contributors.d.ts.map +1 -0
  1544. package/dist/vfx/contributors.js +615 -0
  1545. package/dist/vfx/contributors.js.map +1 -0
  1546. package/dist/vfx/decalLighting.d.ts +8 -0
  1547. package/dist/vfx/decalLighting.d.ts.map +1 -0
  1548. package/dist/vfx/decalLighting.js +53 -0
  1549. package/dist/vfx/decalLighting.js.map +1 -0
  1550. package/dist/vfx/depthSampler.d.ts +3 -0
  1551. package/dist/vfx/depthSampler.d.ts.map +1 -0
  1552. package/dist/vfx/depthSampler.js +10 -0
  1553. package/dist/vfx/depthSampler.js.map +1 -0
  1554. package/dist/vfx/prd07FeaturePars.d.ts +12 -0
  1555. package/dist/vfx/prd07FeaturePars.d.ts.map +1 -0
  1556. package/dist/vfx/prd07FeaturePars.js +54 -0
  1557. package/dist/vfx/prd07FeaturePars.js.map +1 -0
  1558. package/dist/vfx/shaders/beam.glsl.d.ts +11 -0
  1559. package/dist/vfx/shaders/beam.glsl.d.ts.map +1 -0
  1560. package/dist/vfx/shaders/beam.glsl.js +89 -0
  1561. package/dist/vfx/shaders/beam.glsl.js.map +1 -0
  1562. package/dist/vfx/shaders/decal.glsl.d.ts +14 -0
  1563. package/dist/vfx/shaders/decal.glsl.d.ts.map +1 -0
  1564. package/dist/vfx/shaders/decal.glsl.js +157 -0
  1565. package/dist/vfx/shaders/decal.glsl.js.map +1 -0
  1566. package/dist/vfx/shaders/gpu-sim.glsl.d.ts +5 -0
  1567. package/dist/vfx/shaders/gpu-sim.glsl.d.ts.map +1 -0
  1568. package/dist/vfx/shaders/gpu-sim.glsl.js +177 -0
  1569. package/dist/vfx/shaders/gpu-sim.glsl.js.map +1 -0
  1570. package/dist/vfx/shaders/lowresComposite.glsl.d.ts +9 -0
  1571. package/dist/vfx/shaders/lowresComposite.glsl.d.ts.map +1 -0
  1572. package/dist/vfx/shaders/lowresComposite.glsl.js +64 -0
  1573. package/dist/vfx/shaders/lowresComposite.glsl.js.map +1 -0
  1574. package/dist/vfx/shaders/mesh-particle.glsl.d.ts +4 -0
  1575. package/dist/vfx/shaders/mesh-particle.glsl.d.ts.map +1 -0
  1576. package/dist/vfx/shaders/mesh-particle.glsl.js +55 -0
  1577. package/dist/vfx/shaders/mesh-particle.glsl.js.map +1 -0
  1578. package/dist/vfx/shaders/particle.glsl.d.ts +24 -0
  1579. package/dist/vfx/shaders/particle.glsl.d.ts.map +1 -0
  1580. package/dist/vfx/shaders/particle.glsl.js +215 -0
  1581. package/dist/vfx/shaders/particle.glsl.js.map +1 -0
  1582. package/dist/vfx/shaders/ribbon.glsl.d.ts +9 -0
  1583. package/dist/vfx/shaders/ribbon.glsl.d.ts.map +1 -0
  1584. package/dist/vfx/shaders/ribbon.glsl.js +60 -0
  1585. package/dist/vfx/shaders/ribbon.glsl.js.map +1 -0
  1586. package/dist/vfx/shaders/volume.glsl.d.ts +5 -0
  1587. package/dist/vfx/shaders/volume.glsl.d.ts.map +1 -0
  1588. package/dist/vfx/shaders/volume.glsl.js +52 -0
  1589. package/dist/vfx/shaders/volume.glsl.js.map +1 -0
  1590. package/dist/webgl2/ContextLifecycle.d.ts +43 -0
  1591. package/dist/webgl2/ContextLifecycle.d.ts.map +1 -0
  1592. package/dist/webgl2/ContextLifecycle.js +189 -0
  1593. package/dist/webgl2/ContextLifecycle.js.map +1 -0
  1594. package/dist/webgl2/Counters.d.ts +58 -0
  1595. package/dist/webgl2/Counters.d.ts.map +1 -0
  1596. package/dist/webgl2/Counters.js +207 -0
  1597. package/dist/webgl2/Counters.js.map +1 -0
  1598. package/dist/webgl2/DeviceHost.d.ts +41 -0
  1599. package/dist/webgl2/DeviceHost.d.ts.map +1 -0
  1600. package/dist/webgl2/DeviceHost.js +3 -0
  1601. package/dist/webgl2/DeviceHost.js.map +1 -0
  1602. package/dist/webgl2/LegacyPost.d.ts +279 -0
  1603. package/dist/webgl2/LegacyPost.d.ts.map +1 -0
  1604. package/dist/webgl2/LegacyPost.js +2480 -0
  1605. package/dist/webgl2/LegacyPost.js.map +1 -0
  1606. package/dist/webgl2/MultiDraw.d.ts +96 -0
  1607. package/dist/webgl2/MultiDraw.d.ts.map +1 -0
  1608. package/dist/webgl2/MultiDraw.js +716 -0
  1609. package/dist/webgl2/MultiDraw.js.map +1 -0
  1610. package/dist/webgl2/Probe.d.ts +27 -0
  1611. package/dist/webgl2/Probe.d.ts.map +1 -0
  1612. package/dist/webgl2/Probe.js +329 -0
  1613. package/dist/webgl2/Probe.js.map +1 -0
  1614. package/dist/webgl2/Samplers.d.ts +20 -0
  1615. package/dist/webgl2/Samplers.d.ts.map +1 -0
  1616. package/dist/webgl2/Samplers.js +179 -0
  1617. package/dist/webgl2/Samplers.js.map +1 -0
  1618. package/dist/webgl2/TextureFormats.d.ts +48 -0
  1619. package/dist/webgl2/TextureFormats.d.ts.map +1 -0
  1620. package/dist/webgl2/TextureFormats.js +185 -0
  1621. package/dist/webgl2/TextureFormats.js.map +1 -0
  1622. package/dist/webgl2/TextureUpload.d.ts +38 -0
  1623. package/dist/webgl2/TextureUpload.d.ts.map +1 -0
  1624. package/dist/webgl2/TextureUpload.js +346 -0
  1625. package/dist/webgl2/TextureUpload.js.map +1 -0
  1626. package/dist/webgpu/WebGPUBuffer.d.ts +1 -0
  1627. package/dist/webgpu/WebGPUBuffer.d.ts.map +1 -1
  1628. package/dist/webgpu/WebGPUCompute.d.ts +1 -0
  1629. package/dist/webgpu/WebGPUCompute.d.ts.map +1 -1
  1630. package/dist/webgpu/WebGPUCompute.js +1 -0
  1631. package/dist/webgpu/WebGPUCompute.js.map +1 -1
  1632. package/dist/webgpu/WebGPUPipelineCache.d.ts +4 -0
  1633. package/dist/webgpu/WebGPUPipelineCache.d.ts.map +1 -1
  1634. package/dist/webgpu/WebGPUPipelineCache.js +4 -0
  1635. package/dist/webgpu/WebGPUPipelineCache.js.map +1 -1
  1636. package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -1
  1637. package/dist/webgpu/WebGPUPostShaders.js +33 -2
  1638. package/dist/webgpu/WebGPUPostShaders.js.map +1 -1
  1639. package/dist/webgpu/WebGPUTexture.d.ts +1 -0
  1640. package/dist/webgpu/WebGPUTexture.d.ts.map +1 -1
  1641. package/dist/webgpu/WebGPUTexture.js.map +1 -1
  1642. package/dist/world/chunks.d.ts +15 -0
  1643. package/dist/world/chunks.d.ts.map +1 -0
  1644. package/dist/world/chunks.js +56 -0
  1645. package/dist/world/chunks.js.map +1 -0
  1646. package/dist/world/index.d.ts +38 -0
  1647. package/dist/world/index.d.ts.map +1 -0
  1648. package/dist/world/index.js +39 -0
  1649. package/dist/world/index.js.map +1 -0
  1650. package/dist/world/shared/shaders/worldLightFallback.d.ts +12 -0
  1651. package/dist/world/shared/shaders/worldLightFallback.d.ts.map +1 -0
  1652. package/dist/world/shared/shaders/worldLightFallback.js +82 -0
  1653. package/dist/world/shared/shaders/worldLightFallback.js.map +1 -0
  1654. package/dist/world/space/PlanetMaterial.d.ts +24 -0
  1655. package/dist/world/space/PlanetMaterial.d.ts.map +1 -0
  1656. package/dist/world/space/PlanetMaterial.js +82 -0
  1657. package/dist/world/space/PlanetMaterial.js.map +1 -0
  1658. package/dist/world/space/SpaceSkyBake.d.ts +46 -0
  1659. package/dist/world/space/SpaceSkyBake.d.ts.map +1 -0
  1660. package/dist/world/space/SpaceSkyBake.js +145 -0
  1661. package/dist/world/space/SpaceSkyBake.js.map +1 -0
  1662. package/dist/world/space/shaders/planet.d.ts +8 -0
  1663. package/dist/world/space/shaders/planet.d.ts.map +1 -0
  1664. package/dist/world/space/shaders/planet.js +55 -0
  1665. package/dist/world/space/shaders/planet.js.map +1 -0
  1666. package/dist/world/space/shaders/spaceBake.d.ts +9 -0
  1667. package/dist/world/space/shaders/spaceBake.d.ts.map +1 -0
  1668. package/dist/world/space/shaders/spaceBake.js +102 -0
  1669. package/dist/world/space/shaders/spaceBake.js.map +1 -0
  1670. package/dist/world/terrain/SplatBake.d.ts +76 -0
  1671. package/dist/world/terrain/SplatBake.d.ts.map +1 -0
  1672. package/dist/world/terrain/SplatBake.js +308 -0
  1673. package/dist/world/terrain/SplatBake.js.map +1 -0
  1674. package/dist/world/terrain/TerrainCdlod.d.ts +67 -0
  1675. package/dist/world/terrain/TerrainCdlod.d.ts.map +1 -0
  1676. package/dist/world/terrain/TerrainCdlod.js +115 -0
  1677. package/dist/world/terrain/TerrainCdlod.js.map +1 -0
  1678. package/dist/world/terrain/TerrainHeightTexture.d.ts +44 -0
  1679. package/dist/world/terrain/TerrainHeightTexture.d.ts.map +1 -0
  1680. package/dist/world/terrain/TerrainHeightTexture.js +173 -0
  1681. package/dist/world/terrain/TerrainHeightTexture.js.map +1 -0
  1682. package/dist/world/terrain/TerrainPatchGeometry.d.ts +18 -0
  1683. package/dist/world/terrain/TerrainPatchGeometry.d.ts.map +1 -0
  1684. package/dist/world/terrain/TerrainPatchGeometry.js +40 -0
  1685. package/dist/world/terrain/TerrainPatchGeometry.js.map +1 -0
  1686. package/dist/world/terrain/shaders/terrain.vert.glsl.d.ts +19 -0
  1687. package/dist/world/terrain/shaders/terrain.vert.glsl.d.ts.map +1 -0
  1688. package/dist/world/terrain/shaders/terrain.vert.glsl.js +162 -0
  1689. package/dist/world/terrain/shaders/terrain.vert.glsl.js.map +1 -0
  1690. package/dist/world/terrain/shaders/terrainCdlod.d.ts +23 -0
  1691. package/dist/world/terrain/shaders/terrainCdlod.d.ts.map +1 -0
  1692. package/dist/world/terrain/shaders/terrainCdlod.js +110 -0
  1693. package/dist/world/terrain/shaders/terrainCdlod.js.map +1 -0
  1694. package/dist/world/terrain/shaders/terrainSplat.d.ts +26 -0
  1695. package/dist/world/terrain/shaders/terrainSplat.d.ts.map +1 -0
  1696. package/dist/world/terrain/shaders/terrainSplat.js +181 -0
  1697. package/dist/world/terrain/shaders/terrainSplat.js.map +1 -0
  1698. package/dist/world/vegetation/FoliageMaterial.d.ts +14 -0
  1699. package/dist/world/vegetation/FoliageMaterial.d.ts.map +1 -0
  1700. package/dist/world/vegetation/FoliageMaterial.js +107 -0
  1701. package/dist/world/vegetation/FoliageMaterial.js.map +1 -0
  1702. package/dist/world/vegetation/GrassField.d.ts +43 -0
  1703. package/dist/world/vegetation/GrassField.d.ts.map +1 -0
  1704. package/dist/world/vegetation/GrassField.js +68 -0
  1705. package/dist/world/vegetation/GrassField.js.map +1 -0
  1706. package/dist/world/vegetation/ImpostorMaterial.d.ts +20 -0
  1707. package/dist/world/vegetation/ImpostorMaterial.d.ts.map +1 -0
  1708. package/dist/world/vegetation/ImpostorMaterial.js +80 -0
  1709. package/dist/world/vegetation/ImpostorMaterial.js.map +1 -0
  1710. package/dist/world/vegetation/InstanceChunkGrid.d.ts +67 -0
  1711. package/dist/world/vegetation/InstanceChunkGrid.d.ts.map +1 -0
  1712. package/dist/world/vegetation/InstanceChunkGrid.js +150 -0
  1713. package/dist/world/vegetation/InstanceChunkGrid.js.map +1 -0
  1714. package/dist/world/vegetation/WindCpu.d.ts +19 -0
  1715. package/dist/world/vegetation/WindCpu.d.ts.map +1 -0
  1716. package/dist/world/vegetation/WindCpu.js +43 -0
  1717. package/dist/world/vegetation/WindCpu.js.map +1 -0
  1718. package/dist/world/vegetation/WindField.d.ts +42 -0
  1719. package/dist/world/vegetation/WindField.d.ts.map +1 -0
  1720. package/dist/world/vegetation/WindField.js +154 -0
  1721. package/dist/world/vegetation/WindField.js.map +1 -0
  1722. package/dist/world/vegetation/shaders/foliage.d.ts +8 -0
  1723. package/dist/world/vegetation/shaders/foliage.d.ts.map +1 -0
  1724. package/dist/world/vegetation/shaders/foliage.js +104 -0
  1725. package/dist/world/vegetation/shaders/foliage.js.map +1 -0
  1726. package/dist/world/vegetation/shaders/grass.d.ts +10 -0
  1727. package/dist/world/vegetation/shaders/grass.d.ts.map +1 -0
  1728. package/dist/world/vegetation/shaders/grass.js +79 -0
  1729. package/dist/world/vegetation/shaders/grass.js.map +1 -0
  1730. package/dist/world/vegetation/shaders/impostor.d.ts +9 -0
  1731. package/dist/world/vegetation/shaders/impostor.d.ts.map +1 -0
  1732. package/dist/world/vegetation/shaders/impostor.js +97 -0
  1733. package/dist/world/vegetation/shaders/impostor.js.map +1 -0
  1734. package/dist/world/vegetation/shaders/wind.d.ts +9 -0
  1735. package/dist/world/vegetation/shaders/wind.d.ts.map +1 -0
  1736. package/dist/world/vegetation/shaders/wind.js +103 -0
  1737. package/dist/world/vegetation/shaders/wind.js.map +1 -0
  1738. package/dist/world/water/GerstnerWaves.d.ts +65 -0
  1739. package/dist/world/water/GerstnerWaves.d.ts.map +1 -0
  1740. package/dist/world/water/GerstnerWaves.js +182 -0
  1741. package/dist/world/water/GerstnerWaves.js.map +1 -0
  1742. package/dist/world/water/ReflectionViewPass.d.ts +46 -0
  1743. package/dist/world/water/ReflectionViewPass.d.ts.map +1 -0
  1744. package/dist/world/water/ReflectionViewPass.js +85 -0
  1745. package/dist/world/water/ReflectionViewPass.js.map +1 -0
  1746. package/dist/world/water/SceneCopyFallback.d.ts +21 -0
  1747. package/dist/world/water/SceneCopyFallback.d.ts.map +1 -0
  1748. package/dist/world/water/SceneCopyFallback.js +150 -0
  1749. package/dist/world/water/SceneCopyFallback.js.map +1 -0
  1750. package/dist/world/water/UnderwaterState.d.ts +25 -0
  1751. package/dist/world/water/UnderwaterState.d.ts.map +1 -0
  1752. package/dist/world/water/UnderwaterState.js +134 -0
  1753. package/dist/world/water/UnderwaterState.js.map +1 -0
  1754. package/dist/world/water/WaterMaterial.d.ts +23 -0
  1755. package/dist/world/water/WaterMaterial.d.ts.map +1 -0
  1756. package/dist/world/water/WaterMaterial.js +129 -0
  1757. package/dist/world/water/WaterMaterial.js.map +1 -0
  1758. package/dist/world/water/shaders/caustics.d.ts +13 -0
  1759. package/dist/world/water/shaders/caustics.d.ts.map +1 -0
  1760. package/dist/world/water/shaders/caustics.js +103 -0
  1761. package/dist/world/water/shaders/caustics.js.map +1 -0
  1762. package/dist/world/water/shaders/gerstner.d.ts +9 -0
  1763. package/dist/world/water/shaders/gerstner.d.ts.map +1 -0
  1764. package/dist/world/water/shaders/gerstner.js +100 -0
  1765. package/dist/world/water/shaders/gerstner.js.map +1 -0
  1766. package/dist/world/water/shaders/water.d.ts +12 -0
  1767. package/dist/world/water/shaders/water.d.ts.map +1 -0
  1768. package/dist/world/water/shaders/water.js +112 -0
  1769. package/dist/world/water/shaders/water.js.map +1 -0
  1770. package/package.json +32 -11
  1771. package/dist/ArchitecturalMaterialCatalog.d.ts +0 -30
  1772. package/dist/ArchitecturalMaterialCatalog.d.ts.map +0 -1
  1773. package/dist/ArchitecturalMaterialCatalog.js +0 -90
  1774. package/dist/ArchitecturalMaterialCatalog.js.map +0 -1
  1775. package/dist/LeanWebGL2Device.d.ts +0 -265
  1776. package/dist/LeanWebGL2Device.d.ts.map +0 -1
  1777. package/dist/LeanWebGL2Device.js +0 -4001
  1778. package/dist/LeanWebGL2Device.js.map +0 -1
  1779. package/dist/advanced-runtime/AdvancedRenderer.d.ts +0 -23
  1780. package/dist/advanced-runtime/AdvancedRenderer.d.ts.map +0 -1
  1781. package/dist/advanced-runtime/AdvancedRenderer.js +0 -45
  1782. package/dist/advanced-runtime/AdvancedRenderer.js.map +0 -1
  1783. package/dist/animation/AnimationMaterialStyle.d.ts +0 -19
  1784. package/dist/animation/AnimationMaterialStyle.d.ts.map +0 -1
  1785. package/dist/animation/AnimationMaterialStyle.js +0 -13
  1786. package/dist/animation/AnimationMaterialStyle.js.map +0 -1
  1787. package/dist/cinematic/CinematicMaterialPresets.d.ts +0 -16
  1788. package/dist/cinematic/CinematicMaterialPresets.d.ts.map +0 -1
  1789. package/dist/cinematic/CinematicMaterialPresets.js +0 -114
  1790. package/dist/cinematic/CinematicMaterialPresets.js.map +0 -1
  1791. package/dist/lean/LeanProductRenderer.d.ts +0 -29
  1792. package/dist/lean/LeanProductRenderer.d.ts.map +0 -1
  1793. package/dist/lean/LeanProductRenderer.js +0 -38
  1794. package/dist/lean/LeanProductRenderer.js.map +0 -1
  1795. package/dist/lean/LeanProductionRenderer.d.ts +0 -38
  1796. package/dist/lean/LeanProductionRenderer.d.ts.map +0 -1
  1797. package/dist/lean/LeanProductionRenderer.js +0 -88
  1798. package/dist/lean/LeanProductionRenderer.js.map +0 -1
  1799. package/dist/lean-core-runtime.d.ts +0 -13
  1800. package/dist/lean-core-runtime.d.ts.map +0 -1
  1801. package/dist/lean-core-runtime.js +0 -10
  1802. package/dist/lean-core-runtime.js.map +0 -1
  1803. package/dist/lean-runtime.d.ts +0 -18
  1804. package/dist/lean-runtime.d.ts.map +0 -1
  1805. package/dist/lean-runtime.js +0 -13
  1806. package/dist/lean-runtime.js.map +0 -1
  1807. package/dist/materials/TransmissionPass.d.ts +0 -16
  1808. package/dist/materials/TransmissionPass.d.ts.map +0 -1
  1809. package/dist/materials/TransmissionPass.js +0 -30
  1810. package/dist/materials/TransmissionPass.js.map +0 -1
  1811. package/dist/production-runtime/ProductionEffectsPipeline.d.ts +0 -20
  1812. package/dist/production-runtime/ProductionEffectsPipeline.d.ts.map +0 -1
  1813. package/dist/production-runtime/ProductionEffectsPipeline.js +0 -65
  1814. package/dist/production-runtime/ProductionEffectsPipeline.js.map +0 -1
  1815. package/dist/production-runtime/ProductionRuntimeRenderer.d.ts +0 -44
  1816. package/dist/production-runtime/ProductionRuntimeRenderer.d.ts.map +0 -1
  1817. package/dist/production-runtime/ProductionRuntimeRenderer.js +0 -179
  1818. package/dist/production-runtime/ProductionRuntimeRenderer.js.map +0 -1
  1819. package/dist/production-runtime/ProductionWebGL2Renderer.d.ts +0 -65
  1820. package/dist/production-runtime/ProductionWebGL2Renderer.d.ts.map +0 -1
  1821. package/dist/production-runtime/ProductionWebGL2Renderer.js +0 -305
  1822. package/dist/production-runtime/ProductionWebGL2Renderer.js.map +0 -1
  1823. package/dist/threejs-example-parity/index.d.ts +0 -57
  1824. package/dist/threejs-example-parity/index.d.ts.map +0 -1
  1825. package/dist/threejs-example-parity/index.js +0 -139
  1826. package/dist/threejs-example-parity/index.js.map +0 -1
package/dist/Renderer.js CHANGED
@@ -1,3 +1,13 @@
1
+ import { collectEnvironmentBackground, collectEnvironmentFog, collectEnvironmentLighting } from "./renderer/Background.js";
2
+ import { applyRendererOwnedStaticBatching, applyRendererOwnedStaticMeshConsolidation, cullExplicitRenderItems, culledCastersReachingView, explicitCullingFrustum } from "./renderer/CullingBatching.js";
3
+ import { rendererDeviceIsLost, subscribeRendererDeviceLost, subscribeRendererDeviceRestored } from "./renderer/DeviceLifecycle.js";
4
+ import { createRendererFrameHooks, toFrameCamera } from "./renderer/FrameGraph.js";
5
+ import { RendererPostprocessPipeline, collectPostprocess, createPostprocessDiagnostics, defaultPostprocessTargetFormat, postGraphV2LastOutcome, postprocessRequiresDepthTexture } from "./renderer/PostprocessExecution.js";
6
+ import { createRenderer } from "./renderer/RendererFactory.js";
7
+ import { collectItemBounds, isIterable, renderableWorldBounds, sceneFromSource, toMat4 } from "./renderer/RenderShared.js";
8
+ import { RendererShadowOrchestrator, collectForwardShadowMap, collectRendererShadowOptions } from "./renderer/ShadowOrchestration.js";
9
+ import { shadowFrameCamera } from "./shadows/Prd02ShadowBridge.js";
10
+ import {} from "./contracts/renderSource.js";
1
11
  import { Bounds3 as SceneBounds3, Camera, DirectionalLight, Light, PerspectiveCamera, PointLight, Scene, SpotLight, identityMat4, invertMat4, multiplyMat4, orthographicMat4, perspectiveMat4, transformPoint, toMathMat4 } from "@aura3d/scene";
2
12
  import { Frustum } from "@aura3d/math";
3
13
  import { createRenderDevice } from "./RenderBackend.js";
@@ -18,9 +28,35 @@ import { Sampler } from "./Sampler.js";
18
28
  import {} from "./Texture.js";
19
29
  import { TextureBinding } from "./TextureBinding.js";
20
30
  import { computeOrthographicCameraFrame, computePerspectiveCameraFrame } from "./CameraFraming.js";
31
+ import { ResolutionGovernor } from "./ResolutionGovernor.js";
32
+ import { frameStatsSlot } from "./contracts/device.js";
33
+ import { resolveCanvasPixelRatio, watchDevicePixelRatio } from "./renderer/PixelRatio.js";
34
+ import { QUALITY_TIERS } from "./contracts/quality.js";
35
+ import { prd11LiveQualityTier } from "./quality/liveTier.js";
36
+ import { MaterialInstance } from "./MaterialInstance.js";
37
+ import { featuresForGeometry, materialRoutesToGeneratedProgram } from "./program/MaterialFeatures.js";
38
+ import { selectShaderFeatureBits } from "./program/FeatureSelect.js";
39
+ import { collectWarmupFeatures, ProgramWarmup } from "./program/ProgramWarmup.js";
40
+ import { PRD03_EXPOSURE, rendererQrFlags, setRendererQrFlags, withRendererQrFlags } from "./renderer/FrameGraph.js";
41
+ import { consumeTaaHistoryWritten } from "./renderer/postSkipped.js";
42
+ import { qrCoreGeneratorOn, qrCoreOutputOn, qrGeneratedProgramsOn, qrMaterialsLobeProgramsOn, rendererOutputPass, rendererProgramCache } from "./renderer/qrSubFlags.js";
43
+ import { resolveCoreOutputPostRoute, withCoreOutputOff } from "./renderer/coreOutputPostRoute.js";
44
+ import { forwardPassFeatureAxes, prd02IblEnvironmentAvailable, splitForwardItems } from "./ForwardPass.js";
45
+ import { PRD02_IBL_FEATURE } from "./contracts/environment.js";
46
+ import { InterleavedTransparentPass } from "./renderer/InterleavedTransparentPass.js";
47
+ import { ensureSceneDepthCopyTarget, SceneDepthCopyPass } from "./renderer/SceneDepthCopyPass.js";
48
+ import { probeHdrTargetFormat, DEFAULT_TONE_MAPPING } from "./contracts/output.js";
49
+ import { resolveForwardClusteredLighting } from "./forward/Lighting.js";
21
50
  import { assertRendererFeatures, createRendererFeatureReport } from "./RendererFeatureGates.js";
22
51
  import { batchStaticRenderItems } from "./SceneOptimization.js";
23
52
  import { createStaticMeshConsolidationCache } from "./MeshConsolidation.js";
53
+ /**
54
+ * C-05 (PRD-01 §8.4-§8.6): output configuration applied by the OutputPass
55
+ * under `A3D_QR_CORE_OUTPUT`. Flag-off: recorded but never applied (legacy
56
+ * present path is untouched).
57
+ */
58
+ /** #1140: OutputPass dithering default (three.js parity); `output.dithering` overrides. */
59
+ export const DEFAULT_OUTPUT_DITHERING = false;
24
60
  export const DEFAULT_RENDERER_AUTO_FRAME_OPTIONS = {
25
61
  paddingRatio: 0.14,
26
62
  yawRadians: -0.38,
@@ -28,32 +64,6 @@ export const DEFAULT_RENDERER_AUTO_FRAME_OPTIONS = {
28
64
  nearPadding: 0.2,
29
65
  farPadding: 2.4
30
66
  };
31
- export const DEFAULT_RENDERER_ENVIRONMENT_LIGHTING = {
32
- color: [0.78, 0.8, 0.84],
33
- intensity: 0.42,
34
- proceduralMap: {
35
- skyColor: [0.64, 0.76, 0.94],
36
- horizonColor: [0.94, 0.82, 0.62],
37
- groundColor: [0.12, 0.13, 0.15],
38
- specularColor: [1, 0.94, 0.78],
39
- intensity: 0.5,
40
- specularIntensity: 0.82
41
- }
42
- };
43
- const DISABLED_RENDERER_ENVIRONMENT_LIGHTING = {
44
- color: [0, 0, 0],
45
- intensity: 0,
46
- proceduralMap: {
47
- skyColor: [0, 0, 0],
48
- horizonColor: [0, 0, 0],
49
- groundColor: [0, 0, 0],
50
- specularColor: [0, 0, 0],
51
- intensity: 0,
52
- specularIntensity: 0
53
- },
54
- environmentMapIntensity: 0,
55
- environmentMapSpecularIntensity: 0
56
- };
57
67
  export const DEFAULT_RENDERER_DIRECT_LIGHTING = {
58
68
  key: {
59
69
  color: [1, 0.92, 0.78],
@@ -66,10 +76,12 @@ export const DEFAULT_RENDERER_DIRECT_LIGHTING = {
66
76
  direction: [-0.35, -0.22, -0.91]
67
77
  }
68
78
  };
79
+ export { DEFAULT_RENDERER_ENVIRONMENT_LIGHTING } from "./renderer/Background.js";
69
80
  export class Renderer {
70
81
  device;
71
82
  graph = new RenderGraph();
72
83
  shaderLibrary;
84
+ host;
73
85
  /**
74
86
  * Depth target reused by the renderer-owned shadow pass across frames.
75
87
  *
@@ -95,36 +107,190 @@ export class Renderer {
95
107
  width;
96
108
  height;
97
109
  clearColor;
110
+ outputClearColor;
98
111
  disposed = false;
99
112
  animationLoop = null;
100
113
  fusedLdrPostprocessScratch = {};
114
+ // §6.9 resolution policy state (present only when `options.resolution` is set).
115
+ resolutionOptions;
116
+ qualityTier;
117
+ qualityTierName;
118
+ programWarmup;
119
+ /** C-05 state: requested output options, the resolved HDR scene target, and the depth copy. */
120
+ outputOptions;
121
+ hdrSceneTarget = null;
122
+ hdrMsaaMrtDegraded = false;
123
+ sceneDepthCopyTarget = null;
124
+ lastAppliedOutput = null;
125
+ warnedV2Postprocess = false;
126
+ /** T0-07: C-36-shaped record of the last legacy postprocess chain skipped
127
+ * under A3D_QR_CORE_OUTPUT (`null` when nothing was skipped). Read by the
128
+ * engine's C-31 `output.postSkipped` section; routing through PostGraph v2
129
+ * is lane 03's Q-03-2/Q-03-3. */
130
+ lastPostSkipped = null;
131
+ get postSkipped() {
132
+ return this.lastPostSkipped;
133
+ }
134
+ warnPostLegacyRoute(record) {
135
+ if (this.warnedV2Postprocess)
136
+ return;
137
+ this.warnedV2Postprocess = true;
138
+ if (typeof console !== "undefined")
139
+ console.warn(`POSTPROCESS_V2_UNMIGRATED: ${record.message}`);
140
+ }
141
+ resolutionGovernor;
142
+ renderScaleCeiling = 1;
143
+ unsubscribeDprWatch;
144
+ /** C-28 FrameStats feeding the governor (intervalMs until lane 11's gpuMs lands). */
145
+ frameStatsMonitor;
146
+ /** PRD-02 S12: private graph for `renderProbeFace` (never the main frame graph). */
147
+ probeGraph;
101
148
  constructor(device, options, temporalHistory) {
102
149
  this.device = device;
150
+ if (options.qrFlags)
151
+ setRendererQrFlags(options.qrFlags, device);
103
152
  this.temporalHistory = temporalHistory;
104
153
  this.unsubscribeTemporalDeviceLoss = device.onDeviceLost?.(() => this.temporalHistory.dispose());
105
154
  this.canvas = options.canvas;
106
155
  this.width = options.width ?? inferInitialCanvasDimension(options.canvas, "width");
107
156
  this.height = options.height ?? inferInitialCanvasDimension(options.canvas, "height");
108
157
  this.clearColor = options.clearColor ?? [0, 0, 0, 1];
158
+ this.outputClearColor = options.outputClearColor;
159
+ this.outputOptions = options.output ?? {};
109
160
  this.shaderLibrary = options.shaderLibrary;
161
+ this.host = {
162
+ device,
163
+ shaderLibrary: options.shaderLibrary,
164
+ fusedLdrPostprocessScratch: this.fusedLdrPostprocessScratch,
165
+ frameIndex: 0
166
+ };
167
+ const host = this.host;
168
+ Object.defineProperty(host, "width", { enumerable: true, get: () => this.width, set: (value) => { this.width = value; } });
169
+ Object.defineProperty(host, "height", { enumerable: true, get: () => this.height, set: (value) => { this.height = value; } });
170
+ Object.defineProperty(host, "shadowDepthTarget", { enumerable: true, get: () => this.shadowDepthTarget, set: (value) => { this.shadowDepthTarget = value; } });
171
+ this.host.post = new RendererPostprocessPipeline(this.host);
172
+ this.host.shadows = new RendererShadowOrchestrator(this.host);
173
+ this.resolutionOptions = options.resolution;
174
+ this.qualityTier = options.qualityTier;
175
+ this.qualityTierName = options.qualityTierName;
176
+ if (options.resolution !== undefined && options.resolution.dynamic !== false) {
177
+ this.resolutionGovernor = new ResolutionGovernor({
178
+ targetFrameMs: options.resolution.targetFrameMs ?? 16.7,
179
+ minRenderScale: options.resolution.minRenderScale ?? options.qualityTier?.minRenderScale ?? 0.5,
180
+ maxRenderScale: 1,
181
+ devicePixelRatio: typeof globalThis !== "undefined" ? globalThis.devicePixelRatio : undefined,
182
+ allowSubCssResolution: options.resolution.allowSubCssResolution
183
+ });
184
+ // C-28 slot: the default impl is a real FrameStats (gpuMs stays null
185
+ // until prd11's timer queries land); flags would pick prd11's provider.
186
+ this.frameStatsMonitor = frameStatsSlot.get({ values: {}, on: () => false })(240);
187
+ }
188
+ // §6.9: re-evaluate the canvas pixel ratio when the display DPR changes.
189
+ this.unsubscribeDprWatch = options.resolution !== undefined && this.canvas
190
+ ? watchDevicePixelRatio(() => {
191
+ if (this.disposed)
192
+ return;
193
+ try {
194
+ this.resizeToDisplay();
195
+ }
196
+ catch { /* keep the current backing size on transient reads */ }
197
+ })
198
+ : undefined;
110
199
  this.resizeCanvas(this.width, this.height);
111
200
  }
112
- static async create(options = {}) {
113
- const device = await createRenderDevice(options);
114
- if (options.requiredFeatures && options.requiredFeatures.length > 0) {
115
- assertRendererFeatures(device, options.requiredFeatures);
201
+ static create(options = {}) {
202
+ return createRenderer(options);
203
+ }
204
+ /** C-28 monitor (PRD-01 Phase 6): lane capture reads cpuSubmitMs percentiles. */
205
+ get frameStats() {
206
+ return this.frameStatsMonitor;
207
+ }
208
+ /**
209
+ * PRD-02 S12 (lane-01 half): render `source` into one reflection-probe face.
210
+ * Signature matches `ReflectionFaceRenderer` (probes/ReflectionProbeSystem.ts)
211
+ * so it can be passed straight to the probe system:
212
+ * new ReflectionProbeSystem(..., (face, target, vp) => renderer.renderProbeFace(scene, face, target, vp))
213
+ * - `target` may be any size (128/256 px faces): the probe frame is sized to
214
+ * it, so RENDER_TARGET_VIEWPORT_MISMATCH does not apply.
215
+ * - Call it OUTSIDE a frame (before `render`): it opens and closes its own
216
+ * device frame and throws FRAME_ALREADY_ACTIVE if one is open (no nesting).
217
+ * - It uses a private RenderGraph, so the main frame's graph is not cleared.
218
+ * - Linear output, scene lights + environment, no shadows / post / output
219
+ * encode / frame contributors (a probe is radiance input to shading).
220
+ * Flag-independent; nothing calls it unless a probe system does.
221
+ */
222
+ renderProbeFace(source, face, target, viewProjection) {
223
+ if (target.disposed) {
224
+ throw new RenderDeviceError("Probe face target is disposed", "RENDER_TARGET_DISPOSED", { face });
225
+ }
226
+ const vp = toMat4(viewProjection, "viewProjection", `probe face ${face}`);
227
+ sceneFromSource(source)?.updateWorldTransforms();
228
+ const items = collectRenderItems(source, vp).filter((item) => !item.environmentCube);
229
+ const split = splitForwardItems(items, undefined);
230
+ const shared = {
231
+ items: split.opaque,
232
+ lights: collectRenderLights(source),
233
+ environmentLighting: collectEnvironmentLighting(source),
234
+ environmentFog: collectEnvironmentFog(source),
235
+ cameraViewProjectionMatrix: vp,
236
+ outputColorSpace: "linear",
237
+ qualityTier: this.liveQualityTier()?.settings
238
+ };
239
+ const graph = (this.probeGraph ??= new RenderGraph());
240
+ graph.clear();
241
+ // A probe face has no screen-space transmission input: transmission items
242
+ // draw with the opaque set; transparent items keep splitForwardItems' sort order.
243
+ graph.addPass(new ForwardPass({ ...shared, items: [...split.opaque, ...split.transmission], framePass: { name: "prd01.probe.opaque", writes: ["aura.probe.color"] } }));
244
+ if (split.transparent.length > 0) {
245
+ graph.addPass(new ForwardPass({ ...shared, items: split.transparent.map((entry) => entry.item), framePass: { name: "prd01.probe.transparent", reads: ["aura.probe.color"], writes: ["aura.probe.color"] } }));
246
+ }
247
+ const previous = this.device.getRenderTarget?.() ?? null;
248
+ this.device.beginFrame(target.width, target.height);
249
+ try {
250
+ this.device.setRenderTarget(target);
251
+ this.device.clear(this.clearColor);
252
+ graph.execute({ device: this.device, width: target.width, height: target.height });
253
+ }
254
+ finally {
255
+ this.device.setRenderTarget(previous);
256
+ this.device.endFrame();
257
+ graph.clear();
116
258
  }
117
- const shaderLibrary = options.shaderLibrary
118
- ?? (await import("./ShaderLibrary.js")).createDefaultShaderLibrary();
119
- // Temporal history is an optional runtime subsystem. Keep it behind the
120
- // asynchronous renderer factory so non-temporal apps do not place its
121
- // shaders, materials, and target owner on their critical download path.
122
- const { TemporalHistory } = await import("./TemporalHistory.js");
123
- return new Renderer(device, { ...options, shaderLibrary }, new TemporalHistory());
259
+ return this.device.getDiagnostics();
260
+ }
261
+ /** C-28 (#91): run `fn` under the frameStats "post" scope when a monitor exists. */
262
+ scopePost(fn) {
263
+ return this.frameStatsMonitor ? this.frameStatsMonitor.scope("post", fn) : fn();
264
+ }
265
+ /** C-05: current output configuration (`app.setOutput` / `renderer.output` seam). */
266
+ get output() {
267
+ return this.outputOptions;
268
+ }
269
+ /** C-05: merge output options; takes effect on the next frame under `A3D_QR_CORE_OUTPUT`. */
270
+ setOutput(options) {
271
+ this.outputOptions = { ...this.outputOptions, ...options };
272
+ }
273
+ /** C-05: install/replace the juice overlay (pass `null` to clear). */
274
+ setOutputOverlay(overlay) {
275
+ this.outputOptions = { ...this.outputOptions, overlay: overlay ?? undefined };
276
+ }
277
+ /** What the last OutputPass call actually applied (C-05 diagnostics; null flag-off). */
278
+ get appliedOutput() {
279
+ return this.lastAppliedOutput;
124
280
  }
125
281
  getFeatureReport() {
126
282
  return createRendererFeatureReport(this.device);
127
283
  }
284
+ /** C-29 seam (PR 0b): renderer-side device-lifecycle delegates. */
285
+ onDeviceLost(listener) {
286
+ return subscribeRendererDeviceLost(this.device, listener);
287
+ }
288
+ onDeviceRestored(listener) {
289
+ return subscribeRendererDeviceRestored(this.device, listener);
290
+ }
291
+ isDeviceLost() {
292
+ return rendererDeviceIsLost(this.device);
293
+ }
128
294
  resize(width, height) {
129
295
  this.assertAlive();
130
296
  if (width <= 0 || height <= 0 || !Number.isInteger(width) || !Number.isInteger(height)) {
@@ -143,7 +309,14 @@ export class Renderer {
143
309
  }
144
310
  const cssWidth = options.cssWidth ?? readCanvasCssSize(this.canvas, "width");
145
311
  const cssHeight = options.cssHeight ?? readCanvasCssSize(this.canvas, "height");
146
- const devicePixelRatio = options.devicePixelRatio ?? globalThis.devicePixelRatio ?? 1;
312
+ // §6.9: explicit override ?? resolution.pixelRatio ?? min(dpr, tier cap) —
313
+ // identical to `globalThis.devicePixelRatio` while `resolution`/`tier` are unset.
314
+ const devicePixelRatio = resolveCanvasPixelRatio({
315
+ devicePixelRatio: globalThis.devicePixelRatio ?? 1,
316
+ tier: this.qualityTier ?? this.liveQualityTier()?.settings ?? { maxPixelRatio: Number.POSITIVE_INFINITY },
317
+ explicit: options.devicePixelRatio,
318
+ resolution: this.resolutionOptions
319
+ });
147
320
  if (![cssWidth, cssHeight, devicePixelRatio].every(Number.isFinite) || cssWidth <= 0 || cssHeight <= 0 || devicePixelRatio <= 0) {
148
321
  throw new RenderDeviceError("Display size and DPR must be finite positive values", "INVALID_DISPLAY_SIZE", {
149
322
  cssWidth,
@@ -159,6 +332,43 @@ export class Renderer {
159
332
  }
160
333
  return { resized, cssWidth, cssHeight, devicePixelRatio, width, height };
161
334
  }
335
+ /**
336
+ * §6.9 manual render-scale ceiling (AuraPerformanceQuality.resolutionScale,
337
+ * request Q-15-1). Caps the scene target only; the canvas backing size is
338
+ * untouched. `renderScale` reports `min(ceiling, governor)`.
339
+ */
340
+ setRenderScaleCeiling(scale) {
341
+ this.assertAlive();
342
+ if (!Number.isFinite(scale) || scale <= 0) {
343
+ throw new RenderDeviceError("Render-scale ceiling must be a positive finite value", "INVALID_RENDER_SCALE", { scale });
344
+ }
345
+ this.renderScaleCeiling = Math.min(scale, 1);
346
+ }
347
+ get renderScaleCeilingValue() {
348
+ return this.renderScaleCeiling;
349
+ }
350
+ /** Effective render scale: `min(setRenderScaleCeiling, ResolutionGovernor)`. */
351
+ get renderScale() {
352
+ return Math.min(this.renderScaleCeiling, this.resolutionGovernor?.scale ?? 1);
353
+ }
354
+ /** C-31 `resolution` section values observed by the renderer. */
355
+ get resolutionReport() {
356
+ const cssWidth = this.canvas ? readCanvasCssSize(this.canvas, "width") : this.width;
357
+ return {
358
+ pixelRatio: cssWidth > 0 ? this.width / cssWidth : 1,
359
+ renderScale: this.renderScale,
360
+ renderScaleCeiling: this.renderScaleCeiling,
361
+ backingWidth: this.width,
362
+ backingHeight: this.height
363
+ };
364
+ }
365
+ /**
366
+ * Feeds one frame's timings to the resolution governor (C-28 `gpuMs` wins
367
+ * over the CPU interval when lane 11's timer queries provide it).
368
+ */
369
+ sampleResolutionGovernor(frameMs, gpuMs) {
370
+ return this.resolutionGovernor?.sample(frameMs, gpuMs) ?? this.renderScale;
371
+ }
162
372
  startAnimationLoop(callback) {
163
373
  this.assertAlive();
164
374
  this.animationLoop?.stop();
@@ -168,10 +378,42 @@ export class Renderer {
168
378
  return loop;
169
379
  }
170
380
  temporalHistory;
381
+ /** PRD-03 Phase 4: camera position at the last temporal frame — the >5 m
382
+ * auto-cut detector. */
383
+ lastTemporalCameraPosition;
171
384
  unsubscribeTemporalDeviceLoss;
172
- resetTemporalHistory(_reason = "explicit-reset") { this.temporalHistory.reset(); }
385
+ /**
386
+ * PRD-03 §8.6 (flag-on): the v2 S5/S7 stages own the history ping-pong.
387
+ * When a frame was served by another chain (v2 modules still loading, an
388
+ * unfusable pass list), the legacy native TAA wrote its own bytes (alpha =
389
+ * depth, presentation-tuned) into the history target; promoting that seeded
390
+ * the v2 resolve with garbage. Such frames — and TAA frames on which S5
391
+ * did not resolve (`markTaaHistoryWritten`) — reset the history instead.
392
+ */
393
+ commitTemporalHistory(taa) {
394
+ const written = consumeTaaHistoryWritten();
395
+ if (rendererQrFlags(this.device).on("A3D_QR_POST") && (postGraphV2LastOutcome() !== "v2" || (taa && !written))) {
396
+ this.temporalHistory.reset();
397
+ return;
398
+ }
399
+ this.temporalHistory.commit();
400
+ }
401
+ resetTemporalHistory(_reason = "explicit-reset") { this.temporalHistory.reset(); this.lastTemporalCameraPosition = undefined; }
173
402
  render(sourceOrInput, camera) {
403
+ // T0-28: ambient `rendererQrFlags()` readers (Lighting, Background, post…)
404
+ // see this renderer's flags for the duration of the synchronous frame.
405
+ return withRendererQrFlags(this.device, () => this.renderFrame(sourceOrInput, camera));
406
+ }
407
+ renderFrame(sourceOrInput, camera) {
174
408
  this.assertAlive();
409
+ // §6.9: FrameStats samples every render while a governor exists (resolution opt-in).
410
+ this.frameStatsMonitor?.begin(typeof performance !== "undefined" ? performance.now() : Date.now());
411
+ // T0-06: reset the per-frame sync-compile bound for this render.
412
+ {
413
+ const flags = rendererQrFlags(this.device);
414
+ if (qrGeneratedProgramsOn(flags))
415
+ rendererProgramCache(this.device, flags).beginFrame?.();
416
+ }
175
417
  const { source, camera: inputCamera } = normalizeRendererInput(sourceOrInput, camera);
176
418
  sceneFromSource(source)?.updateWorldTransforms();
177
419
  const cameraPolicy = collectCameraPolicy(source);
@@ -184,7 +426,7 @@ export class Renderer {
184
426
  throw new RenderDeviceError("RenderSource requires an explicit camera but none was supplied or found in the scene.", "CAMERA_REQUIRED");
185
427
  }
186
428
  let cameraViewProjection = resolvedCamera?.viewProjectionMatrix;
187
- const collectedItems = collectRenderItemsWithDiagnostics(source, cameraViewProjection, resolvedCamera?.camera);
429
+ const collectedItems = collectRenderItemsWithDiagnostics(source, cameraViewProjection, resolvedCamera?.camera, rendererQrFlags().on("A3D_QR_LIGHTING"));
188
430
  const collectionDiagnostics = collectedItems.diagnostics;
189
431
  let items = collectedItems.items;
190
432
  const lights = collectRenderLights(source);
@@ -193,10 +435,26 @@ export class Renderer {
193
435
  const environmentFog = collectEnvironmentFog(source);
194
436
  const explicitShadowMap = collectForwardShadowMap(source);
195
437
  const shadowOptions = collectRendererShadowOptions(source);
438
+ // C-02/T0-06: sync-path warm — kick generated-program compiles for the
439
+ // exact draw feature records before the pass runs (bounded per frame).
440
+ this.warmGeneratedProgramsSync(items, lights, environmentLighting, environmentFog, explicitShadowMap, cameraViewProjection);
196
441
  const sourceCameraPosition = collectSourceCameraPosition(source);
197
442
  const explicitRenderTarget = collectRenderTarget(source);
198
443
  validateExplicitRenderTarget(explicitRenderTarget, this.width, this.height);
199
444
  let cameraPosition = sourceCameraPosition ?? resolvedCamera?.cameraPosition;
445
+ // C-05/T0-07: decide the frame's output route before the hooks exist, so
446
+ // contributors see the same v2/legacy resource names the graph writes.
447
+ const route = resolveCoreOutputPostRoute(qrCoreOutputOn(rendererQrFlags(this.device)), collectPostprocess(source));
448
+ const frameHooks = createRendererFrameHooks({
449
+ device: this.device,
450
+ width: this.width,
451
+ height: this.height,
452
+ source,
453
+ camera: toFrameCamera(resolvedCamera, cameraViewProjection, cameraPosition),
454
+ // PRD 11: the app's live C-27 tier (A3D_QR_TIERS); undefined → high.
455
+ tier: this.liveQualityTier()?.settings,
456
+ ...(route.skipped ? { flags: withCoreOutputOff(rendererQrFlags(this.device)) } : {})
457
+ });
200
458
  if (!resolvedCamera && cameraPolicy === "auto-frame") {
201
459
  const autoFrame = createAutoFrameCamera(source, items, this.width, this.height);
202
460
  if (autoFrame) {
@@ -206,11 +464,24 @@ export class Renderer {
206
464
  }
207
465
  }
208
466
  let postprocess = collectPostprocess(source);
209
- if (!postprocess?.temporal || (!postprocess.motionBlur && !postprocess.taa))
467
+ if (!postprocess?.temporal || (!postprocess.motionBlur && !postprocess.taa)) {
210
468
  this.temporalHistory.reset();
469
+ this.lastTemporalCameraPosition = undefined;
470
+ }
211
471
  const ownedTargets = [];
212
472
  const ownedShadowPasses = [];
213
473
  this.graph.clear();
474
+ // C-05 (§8.4): under A3D_QR_CORE_OUTPUT encode happens once, in OutputPass.
475
+ // A configured legacy post chain still encodes itself (lane 03 migrates it
476
+ // into post-hdr contributors, Q-03-2/Q-03-3), so the frame takes the legacy
477
+ // chain and bypasses OutputPass: encode stays single, and the authored
478
+ // effects (bloom) are kept instead of dropped. The bypass is reported.
479
+ const qrOutput = route.qrOutput;
480
+ // §6.2.7: lane passes encode in-shader only on the legacy LDR path.
481
+ frameHooks.setOutputColorSpace(postprocess || qrOutput ? "linear" : "srgb");
482
+ this.lastPostSkipped = route.skipped;
483
+ if (route.skipped)
484
+ this.warnPostLegacyRoute(route.skipped);
214
485
  let postprocessTargetFormat;
215
486
  if (postprocess) {
216
487
  const format = postprocess.targetFormat ?? defaultPostprocessTargetFormat(this.device, postprocess);
@@ -248,19 +519,52 @@ export class Renderer {
248
519
  const forwardTarget = this.ensureForwardColorTarget(format, requiresDepthTexture, sampleCount);
249
520
  ownedTargets.push(forwardTarget);
250
521
  this.device.setRenderTarget(forwardTarget);
522
+ frameHooks.setForwardTarget(forwardTarget);
523
+ }
524
+ else if (qrOutput) {
525
+ // C-05: the v2 scene always renders into the HDR target — also on the
526
+ // no-effects route (§8.4: encode once, in OutputPass). The governor's
527
+ // renderScale applies to this target only; OutputPass upsamples.
528
+ const probed = probeHdrTargetFormat(this.device);
529
+ const format = probed === "rgba8" ? "rgba8" : "rgba16f";
530
+ const hdrTarget = this.ensureHdrSceneTarget(format, this.outputOptions.backgroundCoverage === true);
531
+ ownedTargets.push(hdrTarget);
532
+ this.device.setRenderTarget(hdrTarget);
533
+ frameHooks.setForwardTarget(hdrTarget);
251
534
  }
252
535
  this.device.beginFrame(this.width, this.height);
253
536
  try {
254
537
  this.lastShadowEvidence = null;
255
- const rendererShadowMap = explicitShadowMap ?? this.executeRendererShadowMap({
538
+ items = frameHooks.collect(items);
539
+ // C-28 (#90): scope the shadow-phase CPU submission for frameStats.
540
+ // 02-S5: under A3D_QR_LIGHTING casters come from the pre-cull set
541
+ // (frustum-culled casters rejoin); flag-off keeps the visible items only.
542
+ const shadowCasterItems = rendererQrFlags().on("A3D_QR_LIGHTING")
543
+ ? [
544
+ ...items,
545
+ ...culledCastersReachingView(collectedItems.culledShadowCasters, items, collectedItems.cullingFrustum, shadowSunTravel(lights))
546
+ ].filter((item) => item.castShadow !== false)
547
+ : items.filter((item) => item.castShadow !== false);
548
+ const rendererShadowMap = this.frameStatsMonitor?.scope("shadow", () => explicitShadowMap ?? this.executeRendererShadowMap({
256
549
  shadowOptions,
257
550
  source,
258
- items: items.filter((item) => item.castShadow !== false),
551
+ items: shadowCasterItems,
259
552
  lights,
260
553
  ownedTargets,
261
554
  ownedShadowPasses,
262
- camera: resolvedCamera?.camera
555
+ camera: resolvedCamera?.camera,
556
+ frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
557
+ })) ?? explicitShadowMap ?? this.executeRendererShadowMap({
558
+ shadowOptions,
559
+ source,
560
+ items: shadowCasterItems,
561
+ lights,
562
+ ownedTargets,
563
+ ownedShadowPasses,
564
+ camera: resolvedCamera?.camera,
565
+ frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
263
566
  });
567
+ frameHooks.addPasses(this.graph, "shadows", items);
264
568
  this.lastShadowEvidence = rendererShadowMap ? {
265
569
  lightMatrix: Array.from(rendererShadowMap.lightMatrix),
266
570
  cascades: rendererShadowMap.cascades?.map(c => ({ index: c.index, near: c.near, far: c.far, lightMatrix: Array.from(c.shadowMap.lightMatrix) })) ?? [],
@@ -276,46 +580,162 @@ export class Renderer {
276
580
  }
277
581
  this.device.setRenderTarget(forwardTarget);
278
582
  }
583
+ else if (qrOutput) {
584
+ // §9.1: clear the HDR target to the linear background color (no ACES
585
+ // pre-inversion — OutputPass owns the whole encode).
586
+ this.device.setRenderTarget(ownedTargets[0] ?? null);
587
+ }
279
588
  else {
280
589
  this.device.setRenderTarget(explicitRenderTarget ?? null);
281
590
  }
282
- this.device.clear(this.clearColor);
591
+ this.device.clear(qrOutput && !postprocess ? this.outputClearColor ?? this.clearColor : this.clearColor);
283
592
  if (environmentBackground) {
284
593
  this.graph.addPass(new EnvironmentBackgroundPass({
285
594
  ...environmentBackground,
286
- outputColorSpace: postprocess ? "linear" : environmentBackground.outputColorSpace,
595
+ outputColorSpace: postprocess || qrOutput ? "linear" : environmentBackground.outputColorSpace,
287
596
  inverseViewProjectionMatrix: environmentBackground.inverseViewProjectionMatrix ?? invertMat4(cameraViewProjection ?? identityMat4()),
288
597
  shaderLibrary: this.shaderLibrary
289
598
  }));
599
+ frameHooks.addPasses(this.graph, "background", items);
600
+ }
601
+ // PRD-03 Phase 4 (flag-on): >5 m of camera translation within one frame
602
+ // is a cut — reprojection would smear everything, so seed fresh history.
603
+ let temporalPrevVp;
604
+ let rasterViewProjection = cameraViewProjection;
605
+ let temporalAutoReset = false;
606
+ if (postprocess?.temporal && (postprocess.motionBlur || postprocess.taa) && cameraPosition && rendererQrFlags(this.device).on("A3D_QR_POST")) {
607
+ const prev = this.lastTemporalCameraPosition;
608
+ if (prev) {
609
+ const dx = cameraPosition[0] - prev[0];
610
+ const dy = cameraPosition[1] - prev[1];
611
+ const dz = cameraPosition[2] - prev[2];
612
+ temporalAutoReset = dx * dx + dy * dy + dz * dz > 25;
613
+ }
614
+ this.lastTemporalCameraPosition = [cameraPosition[0], cameraPosition[1], cameraPosition[2]];
290
615
  }
291
616
  if (postprocess?.temporal && (postprocess.motionBlur || postprocess.taa)) {
292
617
  if (postprocess.execution === "cpu-deterministic" || !this.device.presentLdrPostprocess)
293
618
  throw new RenderDeviceError("Renderer temporal effects require native GPU presentation", "TEMPORAL_NATIVE_REQUIRED");
294
- const temporal = this.temporalHistory.prepare(this.device, this.width, this.height, items, cameraViewProjection, { ...postprocess.temporal, jitter: Boolean(postprocess.taa) });
619
+ const temporal = this.temporalHistory.prepare(this.device, this.width, this.height, items, cameraViewProjection, { ...postprocess.temporal, jitter: Boolean(postprocess.taa), ...(temporalAutoReset ? { reset: true } : {}) });
620
+ temporalPrevVp = temporal.v2?.previous;
621
+ // PRD-03 §8.6 (flag-on): generated programs project through the
622
+ // AuraFrame `u_viewProjection`, not the per-item MVP, so the TAA
623
+ // sub-pixel jitter has to ride the camera matrix too — otherwise the
624
+ // raster never moves and S5 has nothing to resolve.
625
+ if (temporal.v2)
626
+ rasterViewProjection = temporal.v2.jittered;
295
627
  items = this.temporalHistory.renderItems;
296
628
  postprocess = { ...postprocess, ...(postprocess.motionBlur ? { motionBlur: { ...postprocess.motionBlur, temporal } } : {}), ...(postprocess.taa ? { taa: { ...postprocess.taa, temporal } } : {}) };
297
629
  this.device.setRenderTarget(ownedTargets[0]);
298
630
  }
299
- this.graph.addPass(new ForwardPass({
300
- items,
301
- lights,
302
- environmentLighting,
303
- environmentFog,
304
- inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
305
- shadowMap: rendererShadowMap,
306
- cameraPosition,
307
- cameraViewMatrix: resolvedCamera?.viewMatrix,
308
- cameraViewProjectionMatrix: cameraViewProjection,
309
- outputColorSpace: postprocess ? "linear" : "srgb",
310
- shaderLibrary: this.shaderLibrary
311
- }));
312
- this.graph.execute({ device: this.device, width: this.width, height: this.height });
631
+ if (qrOutput) {
632
+ // §9.1 v2 frame order: opaque → after-opaque (scene-depth copy,
633
+ // contributors) → transmission → transmissive → transparent (engine
634
+ // items + contributor TransparentQueueItems interleaved by sortDepth)
635
+ // → after-transparent.
636
+ const hdrTarget = ownedTargets[0] ?? null;
637
+ const coverage = this.outputOptions.backgroundCoverage === true;
638
+ const split = splitForwardItems(items, cameraPosition ?? undefined);
639
+ const shared = {
640
+ items: split.opaque,
641
+ lights,
642
+ environmentLighting,
643
+ environmentFog,
644
+ inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
645
+ shadowMap: rendererShadowMap,
646
+ cameraPosition,
647
+ cameraViewMatrix: resolvedCamera?.viewMatrix,
648
+ cameraViewProjectionMatrix: rasterViewProjection,
649
+ outputColorSpace: "linear",
650
+ shaderLibrary: this.shaderLibrary,
651
+ backgroundCoverage: coverage,
652
+ qualityTier: this.liveQualityTier()?.settings
653
+ };
654
+ // The graph enforces unique names + single-producer writes; per-phase
655
+ // resources chain the order, and `aura.scene.color` is written once —
656
+ // by the final interleaved transparent pass.
657
+ this.graph.addPass(new ForwardPass({ ...shared, framePass: { name: "prd01.opaque", writes: ["aura.scene.color.opaque"] } }));
658
+ if (hdrTarget?.depthTexture) {
659
+ const depthCopy = this.ensureSceneDepthCopy();
660
+ frameHooks.setSceneDepthCopy(depthCopy);
661
+ this.graph.addPass(new SceneDepthCopyPass(hdrTarget, depthCopy));
662
+ }
663
+ frameHooks.addPasses(this.graph, "after-opaque", items);
664
+ frameHooks.addPasses(this.graph, "transmission", items);
665
+ let lastColorResource = "aura.scene.color.opaque";
666
+ if (split.transmission.length > 0) {
667
+ lastColorResource = "aura.scene.color.transmission";
668
+ this.graph.addPass(new ForwardPass({
669
+ ...shared,
670
+ items: split.transmission,
671
+ framePass: { name: "prd01.transmission", reads: ["aura.scene.color.opaque"], writes: [lastColorResource] }
672
+ }));
673
+ }
674
+ frameHooks.addTransparentContributorPasses(this.graph, items);
675
+ const { ctx: contributorCtx, queues } = frameHooks.transparentQueues(items);
676
+ this.graph.addPass(new InterleavedTransparentPass({ ...shared, items: [] }, split.transparent, queues, contributorCtx, [lastColorResource]));
677
+ frameHooks.addPasses(this.graph, "after-transparent", items);
678
+ }
679
+ else {
680
+ this.graph.addPass(new ForwardPass({
681
+ items,
682
+ lights,
683
+ environmentLighting,
684
+ environmentFog,
685
+ inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
686
+ shadowMap: rendererShadowMap,
687
+ cameraPosition,
688
+ cameraViewMatrix: resolvedCamera?.viewMatrix,
689
+ cameraViewProjectionMatrix: rasterViewProjection,
690
+ outputColorSpace: postprocess ? "linear" : "srgb",
691
+ shaderLibrary: this.shaderLibrary
692
+ }));
693
+ frameHooks.addPasses(this.graph, "after-opaque", items);
694
+ frameHooks.addPasses(this.graph, "transmission", items);
695
+ frameHooks.addPasses(this.graph, "transparent", items);
696
+ frameHooks.addPasses(this.graph, "after-transparent", items);
697
+ }
698
+ // C-28 (#90): scope the forward-phase CPU submission for frameStats.
699
+ if (this.frameStatsMonitor) {
700
+ this.frameStatsMonitor.scope("forward", () => this.graph.execute({ device: this.device, width: this.width, height: this.height }));
701
+ }
702
+ else {
703
+ this.graph.execute({ device: this.device, width: this.width, height: this.height });
704
+ }
313
705
  if (postprocess) {
314
706
  postprocess = bindRendererSsrProjection(postprocess, cameraViewProjection ?? identityMat4());
315
- this.executePostprocess(postprocess, ownedTargets, explicitRenderTarget);
707
+ const frameCamera = toFrameCamera(resolvedCamera, cameraViewProjection, cameraPosition);
708
+ postprocess = {
709
+ ...postprocess,
710
+ cameraFrame: frameCamera && temporalPrevVp ? { ...frameCamera, previousViewProjectionMatrix: temporalPrevVp } : frameCamera,
711
+ postFrameContext: {
712
+ source,
713
+ items,
714
+ sceneDepth: {
715
+ texture: ownedTargets[0]?.depthTexture ?? null,
716
+ available: (ownedTargets[0]?.depthTexture ?? null) !== null,
717
+ linearize: {
718
+ near: frameCamera?.near ?? 0.1,
719
+ far: frameCamera?.far ?? 1000,
720
+ orthographic: frameCamera?.projection === "orthographic"
721
+ }
722
+ }
723
+ }
724
+ };
725
+ // C-28 (#91): the post-hdr contributors and the postprocess chain report
726
+ // under the "post" scope (lane 03 owns the chain internals).
727
+ this.scopePost(() => {
728
+ frameHooks.runPhase("post-hdr", items, postprocess !== undefined);
729
+ this.executePostprocess(postprocess, ownedTargets, explicitRenderTarget);
730
+ });
316
731
  if (postprocess.temporal && (postprocess.motionBlur || postprocess.taa))
317
- this.temporalHistory.commit();
732
+ this.commitTemporalHistory(Boolean(postprocess.taa));
733
+ }
734
+ else if (qrOutput) {
735
+ this.scopePost(() => frameHooks.runPhase("post-hdr", items, true));
736
+ this.executeOutputPass(frameHooks, items, ownedTargets[0] ?? null, explicitRenderTarget);
318
737
  }
738
+ frameHooks.runPhase("after-output", items);
319
739
  }
320
740
  catch (error) {
321
741
  this.lastShadowEvidence = null;
@@ -325,6 +745,10 @@ export class Renderer {
325
745
  }
326
746
  finally {
327
747
  this.device.endFrame();
748
+ if (this.resolutionGovernor && this.frameStatsMonitor) {
749
+ const frameSample = this.frameStatsMonitor.end();
750
+ this.resolutionGovernor.sample(frameSample.intervalMs, frameSample.gpuMs);
751
+ }
328
752
  for (const shadowPass of ownedShadowPasses) {
329
753
  shadowPass.dispose();
330
754
  }
@@ -347,6 +771,13 @@ export class Renderer {
347
771
  }
348
772
  async renderAsync(sourceOrInput, camera) {
349
773
  this.assertAlive();
774
+ this.frameStatsMonitor?.begin(typeof performance !== "undefined" ? performance.now() : Date.now());
775
+ // T0-06: reset the per-frame sync-compile bound for this render.
776
+ {
777
+ const flags = rendererQrFlags(this.device);
778
+ if (qrGeneratedProgramsOn(flags))
779
+ rendererProgramCache(this.device, flags).beginFrame?.();
780
+ }
350
781
  const { source, camera: inputCamera } = normalizeRendererInput(sourceOrInput, camera);
351
782
  sceneFromSource(source)?.updateWorldTransforms();
352
783
  const cameraPolicy = collectCameraPolicy(source);
@@ -359,7 +790,7 @@ export class Renderer {
359
790
  throw new RenderDeviceError("RenderSource requires an explicit camera but none was supplied or found in the scene.", "CAMERA_REQUIRED");
360
791
  }
361
792
  let cameraViewProjection = resolvedCamera?.viewProjectionMatrix;
362
- const collectedItems = collectRenderItemsWithDiagnostics(source, cameraViewProjection, resolvedCamera?.camera);
793
+ const collectedItems = collectRenderItemsWithDiagnostics(source, cameraViewProjection, resolvedCamera?.camera, rendererQrFlags().on("A3D_QR_LIGHTING"));
363
794
  const collectionDiagnostics = collectedItems.diagnostics;
364
795
  let items = collectedItems.items;
365
796
  const lights = collectRenderLights(source);
@@ -368,10 +799,29 @@ export class Renderer {
368
799
  const environmentFog = collectEnvironmentFog(source);
369
800
  const explicitShadowMap = collectForwardShadowMap(source);
370
801
  const shadowOptions = collectRendererShadowOptions(source);
802
+ // C-02 (PRD-01 §403): pre-render warm-then-block compile of the generated
803
+ // programs this scene needs. Flag-off: nothing (sync path untouched).
804
+ await this.warmGeneratedPrograms(items, lights, environmentLighting, environmentFog, explicitShadowMap, cameraViewProjection);
805
+ if (this.disposed || this.device.disposed) {
806
+ return withRendererFrameDiagnostics(this.device.getDiagnostics(), collectionDiagnostics);
807
+ }
371
808
  const sourceCameraPosition = collectSourceCameraPosition(source);
372
809
  const explicitRenderTarget = collectRenderTarget(source);
373
810
  validateExplicitRenderTarget(explicitRenderTarget, this.width, this.height);
374
811
  let cameraPosition = sourceCameraPosition ?? resolvedCamera?.cameraPosition;
812
+ // C-05/T0-07: decide the frame's output route before the hooks exist, so
813
+ // contributors see the same v2/legacy resource names the graph writes.
814
+ const route = resolveCoreOutputPostRoute(qrCoreOutputOn(rendererQrFlags(this.device)), collectPostprocess(source));
815
+ const frameHooks = createRendererFrameHooks({
816
+ device: this.device,
817
+ width: this.width,
818
+ height: this.height,
819
+ source,
820
+ camera: toFrameCamera(resolvedCamera, cameraViewProjection, cameraPosition),
821
+ // PRD 11: the app's live C-27 tier (A3D_QR_TIERS); undefined → high.
822
+ tier: this.liveQualityTier()?.settings,
823
+ ...(route.skipped ? { flags: withCoreOutputOff(rendererQrFlags(this.device)) } : {})
824
+ });
375
825
  if (!resolvedCamera && cameraPolicy === "auto-frame") {
376
826
  const autoFrame = createAutoFrameCamera(source, items, this.width, this.height);
377
827
  if (autoFrame) {
@@ -381,11 +831,24 @@ export class Renderer {
381
831
  }
382
832
  }
383
833
  let postprocess = collectPostprocess(source);
384
- if (!postprocess?.temporal || (!postprocess.motionBlur && !postprocess.taa))
834
+ if (!postprocess?.temporal || (!postprocess.motionBlur && !postprocess.taa)) {
385
835
  this.temporalHistory.reset();
836
+ this.lastTemporalCameraPosition = undefined;
837
+ }
386
838
  const ownedTargets = [];
387
839
  const ownedShadowPasses = [];
388
840
  this.graph.clear();
841
+ // C-05 (§8.4): under A3D_QR_CORE_OUTPUT encode happens once, in OutputPass.
842
+ // A configured legacy post chain still encodes itself (lane 03 migrates it
843
+ // into post-hdr contributors, Q-03-2/Q-03-3), so the frame takes the legacy
844
+ // chain and bypasses OutputPass: encode stays single, and the authored
845
+ // effects (bloom) are kept instead of dropped. The bypass is reported.
846
+ const qrOutput = route.qrOutput;
847
+ // §6.2.7: lane passes encode in-shader only on the legacy LDR path.
848
+ frameHooks.setOutputColorSpace(postprocess || qrOutput ? "linear" : "srgb");
849
+ this.lastPostSkipped = route.skipped;
850
+ if (route.skipped)
851
+ this.warnPostLegacyRoute(route.skipped);
389
852
  let postprocessTargetFormat;
390
853
  if (postprocess) {
391
854
  const format = postprocess.targetFormat ?? defaultPostprocessTargetFormat(this.device, postprocess);
@@ -423,19 +886,52 @@ export class Renderer {
423
886
  const forwardTarget = this.ensureForwardColorTarget(format, requiresDepthTexture, sampleCount);
424
887
  ownedTargets.push(forwardTarget);
425
888
  this.device.setRenderTarget(forwardTarget);
889
+ frameHooks.setForwardTarget(forwardTarget);
890
+ }
891
+ else if (qrOutput) {
892
+ // C-05: the v2 scene always renders into the HDR target — also on the
893
+ // no-effects route (§8.4: encode once, in OutputPass). The governor's
894
+ // renderScale applies to this target only; OutputPass upsamples.
895
+ const probed = probeHdrTargetFormat(this.device);
896
+ const format = probed === "rgba8" ? "rgba8" : "rgba16f";
897
+ const hdrTarget = this.ensureHdrSceneTarget(format, this.outputOptions.backgroundCoverage === true);
898
+ ownedTargets.push(hdrTarget);
899
+ this.device.setRenderTarget(hdrTarget);
900
+ frameHooks.setForwardTarget(hdrTarget);
426
901
  }
427
902
  this.device.beginFrame(this.width, this.height);
428
903
  try {
429
904
  this.lastShadowEvidence = null;
430
- const rendererShadowMap = explicitShadowMap ?? this.executeRendererShadowMap({
905
+ items = frameHooks.collect(items);
906
+ // C-28 (#90): scope the shadow-phase CPU submission for frameStats.
907
+ // 02-S5: under A3D_QR_LIGHTING casters come from the pre-cull set
908
+ // (frustum-culled casters rejoin); flag-off keeps the visible items only.
909
+ const shadowCasterItems = rendererQrFlags().on("A3D_QR_LIGHTING")
910
+ ? [
911
+ ...items,
912
+ ...culledCastersReachingView(collectedItems.culledShadowCasters, items, collectedItems.cullingFrustum, shadowSunTravel(lights))
913
+ ].filter((item) => item.castShadow !== false)
914
+ : items.filter((item) => item.castShadow !== false);
915
+ const rendererShadowMap = this.frameStatsMonitor?.scope("shadow", () => explicitShadowMap ?? this.executeRendererShadowMap({
916
+ shadowOptions,
917
+ source,
918
+ items: shadowCasterItems,
919
+ lights,
920
+ ownedTargets,
921
+ ownedShadowPasses,
922
+ camera: resolvedCamera?.camera,
923
+ frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
924
+ })) ?? explicitShadowMap ?? this.executeRendererShadowMap({
431
925
  shadowOptions,
432
926
  source,
433
- items: items.filter((item) => item.castShadow !== false),
927
+ items: shadowCasterItems,
434
928
  lights,
435
929
  ownedTargets,
436
930
  ownedShadowPasses,
437
- camera: resolvedCamera?.camera
931
+ camera: resolvedCamera?.camera,
932
+ frameCamera: shadowFrameCamera(cameraViewProjection, cameraPosition)
438
933
  });
934
+ frameHooks.addPasses(this.graph, "shadows", items);
439
935
  this.lastShadowEvidence = rendererShadowMap ? {
440
936
  lightMatrix: Array.from(rendererShadowMap.lightMatrix),
441
937
  cascades: rendererShadowMap.cascades?.map(c => ({ index: c.index, near: c.near, far: c.far, lightMatrix: Array.from(c.shadowMap.lightMatrix) })) ?? [],
@@ -451,45 +947,167 @@ export class Renderer {
451
947
  }
452
948
  this.device.setRenderTarget(forwardTarget);
453
949
  }
950
+ else if (qrOutput) {
951
+ // §9.1: clear the HDR target to the linear background color (no ACES
952
+ // pre-inversion — OutputPass owns the whole encode).
953
+ this.device.setRenderTarget(ownedTargets[0] ?? null);
954
+ }
454
955
  else {
455
956
  this.device.setRenderTarget(explicitRenderTarget ?? null);
456
957
  }
457
- this.device.clear(this.clearColor);
958
+ this.device.clear(qrOutput && !postprocess ? this.outputClearColor ?? this.clearColor : this.clearColor);
458
959
  if (environmentBackground) {
459
960
  this.graph.addPass(new EnvironmentBackgroundPass({
460
961
  ...environmentBackground,
461
- outputColorSpace: postprocess ? "linear" : environmentBackground.outputColorSpace,
962
+ outputColorSpace: postprocess || qrOutput ? "linear" : environmentBackground.outputColorSpace,
462
963
  inverseViewProjectionMatrix: environmentBackground.inverseViewProjectionMatrix ?? invertMat4(cameraViewProjection ?? identityMat4()),
463
964
  shaderLibrary: this.shaderLibrary
464
965
  }));
966
+ frameHooks.addPasses(this.graph, "background", items);
967
+ }
968
+ // PRD-03 Phase 4 (flag-on): >5 m of camera translation within one frame
969
+ // is a cut — reprojection would smear everything, so seed fresh history.
970
+ let temporalPrevVp;
971
+ let rasterViewProjection = cameraViewProjection;
972
+ let temporalAutoReset = false;
973
+ if (postprocess?.temporal && (postprocess.motionBlur || postprocess.taa) && cameraPosition && rendererQrFlags(this.device).on("A3D_QR_POST")) {
974
+ const prev = this.lastTemporalCameraPosition;
975
+ if (prev) {
976
+ const dx = cameraPosition[0] - prev[0];
977
+ const dy = cameraPosition[1] - prev[1];
978
+ const dz = cameraPosition[2] - prev[2];
979
+ temporalAutoReset = dx * dx + dy * dy + dz * dz > 25;
980
+ }
981
+ this.lastTemporalCameraPosition = [cameraPosition[0], cameraPosition[1], cameraPosition[2]];
465
982
  }
466
983
  if (postprocess?.temporal && (postprocess.motionBlur || postprocess.taa)) {
467
984
  if (postprocess.execution === "cpu-deterministic" || !this.device.presentLdrPostprocess)
468
985
  throw new RenderDeviceError("Renderer temporal effects require native GPU presentation", "TEMPORAL_NATIVE_REQUIRED");
469
- const temporal = this.temporalHistory.prepare(this.device, this.width, this.height, items, cameraViewProjection, { ...postprocess.temporal, jitter: Boolean(postprocess.taa) });
986
+ const temporal = this.temporalHistory.prepare(this.device, this.width, this.height, items, cameraViewProjection, { ...postprocess.temporal, jitter: Boolean(postprocess.taa), ...(temporalAutoReset ? { reset: true } : {}) });
987
+ temporalPrevVp = temporal.v2?.previous;
988
+ // PRD-03 §8.6 (flag-on): generated programs project through the
989
+ // AuraFrame `u_viewProjection`, not the per-item MVP, so the TAA
990
+ // sub-pixel jitter has to ride the camera matrix too — otherwise the
991
+ // raster never moves and S5 has nothing to resolve.
992
+ if (temporal.v2)
993
+ rasterViewProjection = temporal.v2.jittered;
470
994
  items = this.temporalHistory.renderItems;
471
995
  postprocess = { ...postprocess, ...(postprocess.motionBlur ? { motionBlur: { ...postprocess.motionBlur, temporal } } : {}), ...(postprocess.taa ? { taa: { ...postprocess.taa, temporal } } : {}) };
472
996
  this.device.setRenderTarget(ownedTargets[0]);
473
997
  }
474
- this.graph.addPass(new ForwardPass({
475
- items,
476
- lights,
477
- environmentLighting,
478
- environmentFog,
479
- inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
480
- shadowMap: rendererShadowMap,
481
- cameraPosition,
482
- cameraViewMatrix: resolvedCamera?.viewMatrix,
483
- cameraViewProjectionMatrix: cameraViewProjection,
484
- outputColorSpace: postprocess ? "linear" : "srgb",
485
- shaderLibrary: this.shaderLibrary
486
- }));
487
- this.graph.execute({ device: this.device, width: this.width, height: this.height });
998
+ if (qrOutput) {
999
+ // §9.1 v2 frame order: opaque → after-opaque (scene-depth copy,
1000
+ // contributors) → transmission → transmissive → transparent (engine
1001
+ // items + contributor TransparentQueueItems interleaved by sortDepth)
1002
+ // → after-transparent.
1003
+ const hdrTarget = ownedTargets[0] ?? null;
1004
+ const coverage = this.outputOptions.backgroundCoverage === true;
1005
+ const split = splitForwardItems(items, cameraPosition ?? undefined);
1006
+ const shared = {
1007
+ items: split.opaque,
1008
+ lights,
1009
+ environmentLighting,
1010
+ environmentFog,
1011
+ inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
1012
+ shadowMap: rendererShadowMap,
1013
+ cameraPosition,
1014
+ cameraViewMatrix: resolvedCamera?.viewMatrix,
1015
+ cameraViewProjectionMatrix: rasterViewProjection,
1016
+ outputColorSpace: "linear",
1017
+ shaderLibrary: this.shaderLibrary,
1018
+ backgroundCoverage: coverage,
1019
+ qualityTier: this.liveQualityTier()?.settings
1020
+ };
1021
+ // The graph enforces unique names + single-producer writes; per-phase
1022
+ // resources chain the order, and `aura.scene.color` is written once —
1023
+ // by the final interleaved transparent pass.
1024
+ this.graph.addPass(new ForwardPass({ ...shared, framePass: { name: "prd01.opaque", writes: ["aura.scene.color.opaque"] } }));
1025
+ if (hdrTarget?.depthTexture) {
1026
+ const depthCopy = this.ensureSceneDepthCopy();
1027
+ frameHooks.setSceneDepthCopy(depthCopy);
1028
+ this.graph.addPass(new SceneDepthCopyPass(hdrTarget, depthCopy));
1029
+ }
1030
+ frameHooks.addPasses(this.graph, "after-opaque", items);
1031
+ frameHooks.addPasses(this.graph, "transmission", items);
1032
+ let lastColorResource = "aura.scene.color.opaque";
1033
+ if (split.transmission.length > 0) {
1034
+ lastColorResource = "aura.scene.color.transmission";
1035
+ this.graph.addPass(new ForwardPass({
1036
+ ...shared,
1037
+ items: split.transmission,
1038
+ framePass: { name: "prd01.transmission", reads: ["aura.scene.color.opaque"], writes: [lastColorResource] }
1039
+ }));
1040
+ }
1041
+ frameHooks.addTransparentContributorPasses(this.graph, items);
1042
+ const { ctx: contributorCtx, queues } = frameHooks.transparentQueues(items);
1043
+ this.graph.addPass(new InterleavedTransparentPass({ ...shared, items: [] }, split.transparent, queues, contributorCtx, [lastColorResource]));
1044
+ frameHooks.addPasses(this.graph, "after-transparent", items);
1045
+ }
1046
+ else {
1047
+ this.graph.addPass(new ForwardPass({
1048
+ items,
1049
+ lights,
1050
+ environmentLighting,
1051
+ environmentFog,
1052
+ inputColorResource: environmentBackground ? ENVIRONMENT_BACKGROUND_COLOR_RESOURCE : undefined,
1053
+ shadowMap: rendererShadowMap,
1054
+ cameraPosition,
1055
+ cameraViewMatrix: resolvedCamera?.viewMatrix,
1056
+ cameraViewProjectionMatrix: rasterViewProjection,
1057
+ outputColorSpace: postprocess ? "linear" : "srgb",
1058
+ shaderLibrary: this.shaderLibrary
1059
+ }));
1060
+ frameHooks.addPasses(this.graph, "after-opaque", items);
1061
+ frameHooks.addPasses(this.graph, "transmission", items);
1062
+ frameHooks.addPasses(this.graph, "transparent", items);
1063
+ frameHooks.addPasses(this.graph, "after-transparent", items);
1064
+ }
1065
+ // C-28 (#90): scope the forward-phase CPU submission for frameStats.
1066
+ if (this.frameStatsMonitor) {
1067
+ this.frameStatsMonitor.scope("forward", () => this.graph.execute({ device: this.device, width: this.width, height: this.height }));
1068
+ }
1069
+ else {
1070
+ this.graph.execute({ device: this.device, width: this.width, height: this.height });
1071
+ }
488
1072
  if (postprocess) {
489
1073
  postprocess = bindRendererSsrProjection(postprocess, cameraViewProjection ?? identityMat4());
490
- await this.executePostprocessAsync(postprocess, ownedTargets, explicitRenderTarget);
491
- if (postprocess.temporal && (postprocess.motionBlur || postprocess.taa))
492
- this.temporalHistory.commit();
1074
+ const frameCamera = toFrameCamera(resolvedCamera, cameraViewProjection, cameraPosition);
1075
+ postprocess = {
1076
+ ...postprocess,
1077
+ cameraFrame: frameCamera && temporalPrevVp ? { ...frameCamera, previousViewProjectionMatrix: temporalPrevVp } : frameCamera,
1078
+ postFrameContext: {
1079
+ source,
1080
+ items,
1081
+ sceneDepth: {
1082
+ texture: ownedTargets[0]?.depthTexture ?? null,
1083
+ available: (ownedTargets[0]?.depthTexture ?? null) !== null,
1084
+ linearize: {
1085
+ near: frameCamera?.near ?? 0.1,
1086
+ far: frameCamera?.far ?? 1000,
1087
+ orthographic: frameCamera?.projection === "orthographic"
1088
+ }
1089
+ }
1090
+ }
1091
+ };
1092
+ // C-28 (#91): "post" scope. FrameStats.scope is synchronous, so on the
1093
+ // async path it times the CPU submission up to the first await.
1094
+ await this.scopePost(async () => {
1095
+ await frameHooks.runPhaseAsync("post-hdr", items, postprocess !== undefined);
1096
+ if (this.disposed || this.device.disposed)
1097
+ return;
1098
+ await this.executePostprocessAsync(postprocess, ownedTargets, explicitRenderTarget);
1099
+ });
1100
+ if (!this.disposed && !this.device.disposed && postprocess.temporal && (postprocess.motionBlur || postprocess.taa))
1101
+ this.commitTemporalHistory(Boolean(postprocess.taa));
1102
+ }
1103
+ else if (qrOutput) {
1104
+ await this.scopePost(() => frameHooks.runPhaseAsync("post-hdr", items, true));
1105
+ if (!this.disposed && !this.device.disposed) {
1106
+ this.executeOutputPass(frameHooks, items, ownedTargets[0] ?? null, explicitRenderTarget);
1107
+ }
1108
+ }
1109
+ if (!this.disposed && !this.device.disposed) {
1110
+ await frameHooks.runPhaseAsync("after-output", items);
493
1111
  }
494
1112
  }
495
1113
  catch (error) {
@@ -499,7 +1117,13 @@ export class Renderer {
499
1117
  throw error;
500
1118
  }
501
1119
  finally {
502
- this.device.endFrame();
1120
+ if (!this.device.disposed) {
1121
+ this.device.endFrame();
1122
+ }
1123
+ if (this.resolutionGovernor && this.frameStatsMonitor) {
1124
+ const frameSample = this.frameStatsMonitor.end();
1125
+ this.resolutionGovernor.sample(frameSample.intervalMs, frameSample.gpuMs);
1126
+ }
503
1127
  for (const shadowPass of ownedShadowPasses) {
504
1128
  shadowPass.dispose();
505
1129
  }
@@ -520,6 +1144,89 @@ export class Renderer {
520
1144
  rendererDepthAvailable: Boolean(postprocess && postprocessRequiresDepthTexture(postprocess) && this.device.info.capabilities?.includes("depth-textures"))
521
1145
  }));
522
1146
  }
1147
+ /**
1148
+ * C-02 (PRD-01 §8.2/§403): warm-then-block. Under `A3D_QR_CORE_GENERATOR`
1149
+ * (default-on under `A3D_QR_CORE`), precompiles the generated programs for
1150
+ * every allow-listed material in the frame — at the current tier and the
1151
+ * next-lower one — before the first draw, so the pass never async-skips in
1152
+ * steady state. Flag-off and non-generated materials are no-ops.
1153
+ */
1154
+ /**
1155
+ * Shared T0-06 warm input: the exact draw feature records the frame's
1156
+ * generated-program materials need (lights/shadow/environment axes at the
1157
+ * current tier). Returns `materials: []` early when nothing generated.
1158
+ */
1159
+ collectWarmupInput(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection, flags, tier) {
1160
+ const ctx = { flags, tier: QUALITY_TIERS[tier] };
1161
+ // T0-05: one record per (material revision, selected feature bits) — the
1162
+ // draw key carries `ShaderFeature.select` bits per item, so the warm list
1163
+ // must too or warmed keys never match draw keys.
1164
+ const records = new Map();
1165
+ const route = { core: qrCoreGeneratorOn(flags), lobes: qrMaterialsLobeProgramsOn(flags) };
1166
+ for (const item of items) {
1167
+ const m = item.material instanceof MaterialInstance ? item.material.baseMaterial : item.material;
1168
+ if (!m || !materialRoutesToGeneratedProgram(m, route, ctx))
1169
+ continue;
1170
+ const mf = m.programFeatures(ctx);
1171
+ const selected = selectShaderFeatureBits({ item, pass: "forward", tier: ctx.tier, flags });
1172
+ // E3 stage-2b: same probe-availability gate ForwardPass applies, so
1173
+ // warmed keys match draw keys for the `prd02.ibl` bit.
1174
+ if (selected[PRD02_IBL_FEATURE] !== undefined && !prd02IblEnvironmentAvailable(environmentLighting, item)) {
1175
+ delete selected[PRD02_IBL_FEATURE];
1176
+ }
1177
+ // #867 (games): same geometry-driven feature mask ForwardPass applies.
1178
+ const attrs = item.geometry.vertexBuffer.format.attributes;
1179
+ const has = (name) => attrs.some((a) => a.semantic === name || a.shaderName === name);
1180
+ const record = featuresForGeometry({ ...mf, features: { ...mf.features, ...selected } }, has);
1181
+ const geometryMask = ["a_uv", "a_uv1", "a_color", "a_joints", "a_weights", "a_joints1", "a_weights1"].map((n) => (has(n) ? 1 : 0)).join("");
1182
+ const key = `${m.shaderKey}:${m.getRevision()}:${geometryMask}:${JSON.stringify(Object.entries(record.features).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)))}`;
1183
+ if (!records.has(key))
1184
+ records.set(key, record);
1185
+ }
1186
+ if (records.size === 0)
1187
+ return { materials: [] };
1188
+ const clustered = resolveForwardClusteredLighting(lights, this.width, this.height, cameraViewProjection);
1189
+ const axes = forwardPassFeatureAxes({ lights, shadowMap, environmentLighting, environmentFog }, clustered !== null);
1190
+ clustered?.dispose();
1191
+ return {
1192
+ materials: [...records.values()],
1193
+ lights: [axes.lights],
1194
+ shadows: axes.shadows ? [axes.shadows] : [],
1195
+ environments: [axes.environment]
1196
+ };
1197
+ }
1198
+ async warmGeneratedPrograms(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection) {
1199
+ const flags = rendererQrFlags(this.device);
1200
+ if (!qrGeneratedProgramsOn(flags))
1201
+ return;
1202
+ const tier = this.qualityTierName ?? prd11LiveQualityTier(flags)?.tier ?? "high";
1203
+ const cache = rendererProgramCache(this.device, flags);
1204
+ const input = this.collectWarmupInput(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection, flags, tier);
1205
+ if (input.materials.length > 0) {
1206
+ const warmup = (this.programWarmup ??= new ProgramWarmup(cache));
1207
+ await warmup.warm(input, tier);
1208
+ }
1209
+ // T0-06: the ready barrier for `programsCompiledSinceReady` — compiles
1210
+ // completing after the first warm count as steady-state leaks.
1211
+ cache.markReady?.();
1212
+ }
1213
+ /**
1214
+ * T0-06: the sync `render` half of warm-then-block. Kicks `acquire` for the
1215
+ * exact draw feature records — async-compile devices start pending entries
1216
+ * (`precompile`/`app.ready` settle them); sync-compile devices compile under
1217
+ * the per-frame bound and converge over the next frames.
1218
+ */
1219
+ warmGeneratedProgramsSync(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection) {
1220
+ const flags = rendererQrFlags(this.device);
1221
+ if (!qrGeneratedProgramsOn(flags))
1222
+ return;
1223
+ const tier = this.qualityTierName ?? prd11LiveQualityTier(flags)?.tier ?? "high";
1224
+ const cache = rendererProgramCache(this.device, flags);
1225
+ const input = this.collectWarmupInput(items, lights, environmentLighting, environmentFog, shadowMap, cameraViewProjection, flags, tier);
1226
+ for (const features of collectWarmupFeatures(input, tier))
1227
+ cache.acquire(features);
1228
+ cache.markReady?.();
1229
+ }
523
1230
  renderScene(scene, camera) {
524
1231
  return this.render(scene, camera);
525
1232
  }
@@ -555,14 +1262,83 @@ export class Renderer {
555
1262
  this.shadowDepthTarget = null;
556
1263
  this.forwardColorTarget?.target.dispose();
557
1264
  this.forwardColorTarget = null;
1265
+ this.hdrSceneTarget?.target.dispose();
1266
+ this.hdrSceneTarget = null;
1267
+ this.sceneDepthCopyTarget?.dispose();
1268
+ this.sceneDepthCopyTarget = null;
558
1269
  this.unsubscribeTemporalDeviceLoss?.();
1270
+ this.unsubscribeDprWatch?.();
559
1271
  this.temporalHistory.dispose();
560
1272
  this.device.dispose();
561
1273
  this.disposed = true;
562
1274
  }
563
1275
  /** True for renderer-lifetime targets that must survive end-of-frame disposal. */
564
1276
  isReusedTarget(target) {
565
- return target === this.forwardColorTarget?.target || target === this.shadowDepthTarget;
1277
+ return target === this.forwardColorTarget?.target || target === this.shadowDepthTarget || target === this.hdrSceneTarget?.target || target === this.sceneDepthCopyTarget;
1278
+ }
1279
+ /**
1280
+ * C-05 HDR scene target under `A3D_QR_CORE_OUTPUT` — always a sampleable
1281
+ * depth texture (sceneDepth / after-opaque copy), renderScale-sized, MSAA 4x,
1282
+ * plus the BACKGROUND_COVERAGE rgba8 attachment when the option is on.
1283
+ */
1284
+ ensureHdrSceneTarget(format, coverage) {
1285
+ const scale = Math.min(Math.max(this.renderScale, 0.01), 1);
1286
+ const width = Math.max(1, Math.round(this.width * scale));
1287
+ const height = Math.max(1, Math.round(this.height * scale));
1288
+ // C-36: WebGL2 does not support multisample MRT — coverage forces a
1289
+ // non-MSAA target and is declared via `hdr-msaa-mrt-unsupported`.
1290
+ const sampleCount = coverage ? 1 : 4;
1291
+ const key = `${width}x${height}:${format}:depth-texture:${sampleCount}:${coverage ? "cov" : "std"}`;
1292
+ const cached = this.hdrSceneTarget;
1293
+ if (cached && cached.key === key && !cached.target.disposed)
1294
+ return cached.target;
1295
+ cached?.target.dispose();
1296
+ const target = this.device.createRenderTarget({
1297
+ width,
1298
+ height,
1299
+ label: "renderer-hdr-scene",
1300
+ format,
1301
+ ...(coverage ? { colorAttachments: [{ format }, { format: "rgba8" }] } : {}),
1302
+ depth: "texture",
1303
+ sampleCount
1304
+ });
1305
+ this.hdrMsaaMrtDegraded = coverage;
1306
+ this.hdrSceneTarget = { target, key };
1307
+ return target;
1308
+ }
1309
+ ensureSceneDepthCopy() {
1310
+ this.sceneDepthCopyTarget = ensureSceneDepthCopyTarget(this.device, this.sceneDepthCopyTarget, this.width, this.height);
1311
+ return this.sceneDepthCopyTarget;
1312
+ }
1313
+ /**
1314
+ * C-05 OutputPass invocation (§8.4 step "output"): `u_exposure` =
1315
+ * `output.exposure × blackboard["prd03.exposure"]` (upstream defaults to 1
1316
+ * until lane 03 publishes it — Q-03-1).
1317
+ */
1318
+ executeOutputPass(frameHooks, _items, hdrTarget, explicitRenderTarget) {
1319
+ if (!hdrTarget)
1320
+ return;
1321
+ const o = this.outputOptions;
1322
+ const upstream = frameHooks.blackboardValue(PRD03_EXPOSURE);
1323
+ const appliedExposure = (o.exposure ?? 1) * (typeof upstream === "number" && Number.isFinite(upstream) ? upstream : 1);
1324
+ const format = probeHdrTargetFormat(this.device);
1325
+ const targetFormat = format === "rgba8" ? "rgba8" : "rgba16f";
1326
+ const coverage = o.backgroundCoverage === true;
1327
+ this.device.setRenderTarget(explicitRenderTarget ?? null);
1328
+ rendererOutputPass(this.device).execute(hdrTarget, coverage ? hdrTarget : null, {
1329
+ toneMapping: o.toneMapping ?? DEFAULT_TONE_MAPPING,
1330
+ exposure: appliedExposure,
1331
+ dithering: o.dithering ?? DEFAULT_OUTPUT_DITHERING,
1332
+ backgroundCoverage: coverage,
1333
+ overlay: o.overlay
1334
+ }, explicitRenderTarget ?? "canvas");
1335
+ this.lastAppliedOutput = {
1336
+ toneMapping: o.toneMapping ?? DEFAULT_TONE_MAPPING,
1337
+ exposure: { applied: appliedExposure, source: upstream !== undefined ? "grade" : "output" },
1338
+ dithering: o.dithering ?? DEFAULT_OUTPUT_DITHERING,
1339
+ targetFormat,
1340
+ degraded: targetFormat === "rgba8" ? "rgba8-no-float-target" : this.hdrMsaaMrtDegraded ? "hdr-msaa-mrt-unsupported" : undefined
1341
+ };
566
1342
  }
567
1343
  /** Allocates the shared forward-color target once per distinct configuration. */
568
1344
  ensureForwardColorTarget(format, requiresDepthTexture, sampleCount) {
@@ -582,21 +1358,9 @@ export class Renderer {
582
1358
  this.forwardColorTarget = { target, key };
583
1359
  return target;
584
1360
  }
585
- /** Allocates the shared shadow depth target once, reallocating only when the size changes. */
586
- ensureShadowDepthTarget(size) {
587
- const existing = this.shadowDepthTarget;
588
- if (existing && !existing.disposed && existing.width === size && existing.height === size)
589
- return existing;
590
- existing?.dispose();
591
- const target = this.device.createRenderTarget({
592
- width: size,
593
- height: size,
594
- label: "renderer-shadow-depth-color",
595
- format: "rgba8",
596
- depth: this.device.info.capabilities?.includes("depth-textures") ? "texture" : true
597
- });
598
- this.shadowDepthTarget = target;
599
- return target;
1361
+ /** PRD 11: this device's app-bound live C-27 tier (A3D_QR_TIERS on), else undefined. */
1362
+ liveQualityTier() {
1363
+ return prd11LiveQualityTier(rendererQrFlags(this.device));
600
1364
  }
601
1365
  assertAlive() {
602
1366
  if (this.disposed || this.device.disposed) {
@@ -614,584 +1378,13 @@ export class Renderer {
614
1378
  }
615
1379
  }
616
1380
  executePostprocess(postprocess, ownedTargets, outputTarget) {
617
- const forwardTarget = ownedTargets[0];
618
- let current = forwardTarget;
619
- if (!current) {
620
- throw new RenderDeviceError("Renderer postprocess missing forward render target", "POSTPROCESS_TARGET_MISSING");
621
- }
622
- const passes = createRendererPostprocessPasses(postprocess);
623
- if (passes.length === 0) {
624
- if (outputTarget) {
625
- this.device.setRenderTarget(current);
626
- writePostProcessPixels(this.device, current, outputTarget, this.device.readPixels(0, 0, current.width, current.height));
627
- }
628
- else {
629
- this.device.presentRenderTarget?.(current);
630
- }
631
- return;
632
- }
633
- if (this.executeFusedLdrPostprocess(current, passes, outputTarget, postprocess.execution === "cpu-deterministic"))
634
- return;
635
- for (let index = 0; index < passes.length; index += 1) {
636
- const pass = passes[index];
637
- const nextPass = passes[index + 1];
638
- if (pass.name === "bloom" && isHdrRenderTarget(current)) {
639
- if (nextPass?.name !== "tone-mapping") {
640
- throw new RenderDeviceError("Renderer HDR bloom requires tone mapping immediately after the float bloom pass.", "HDR_BLOOM_TONEMAPPING_REQUIRED", {
641
- source: current.label
642
- });
643
- }
644
- const isCombinedLast = index + 1 === passes.length - 1;
645
- const target = isCombinedLast ? outputTarget : this.device.createRenderTarget({
646
- width: this.width,
647
- height: this.height,
648
- label: "renderer-postprocess-tone-mapping",
649
- format: "rgba8",
650
- depth: false
651
- });
652
- if (target)
653
- ownedTargets.push(target);
654
- this.device.setRenderTarget(current);
655
- const bloomed = bloomFloatPixels(this.device.readFloatPixels(0, 0, current.width, current.height), current.width, current.height, pass.options);
656
- const mapped = toneMapFloatPixels(bloomed.pixels, current.width, current.height, {
657
- outputColorSpace: "srgb",
658
- ...nextPass.options
659
- });
660
- writePostProcessPixels(this.device, current, target, mapped.pixels);
661
- if (target)
662
- current = target;
663
- index += 1;
664
- continue;
665
- }
666
- const isLast = index === passes.length - 1;
667
- const target = isLast ? outputTarget : this.device.createRenderTarget({
668
- width: this.width,
669
- height: this.height,
670
- label: `renderer-postprocess-${pass.name}`,
671
- format: "rgba8",
672
- depth: false
673
- });
674
- if (target)
675
- ownedTargets.push(target);
676
- if (pass.name === "tone-mapping") {
677
- new ToneMappingPass({
678
- source: current,
679
- target,
680
- outputColorSpace: "srgb",
681
- ...pass.options
682
- }).execute({ device: this.device, width: this.width, height: this.height });
683
- }
684
- else if (pass.name === "bloom") {
685
- new BloomPass({
686
- source: current,
687
- target,
688
- ...pass.options
689
- }).execute({ device: this.device, width: this.width, height: this.height });
690
- }
691
- else if (pass.name === "fxaa") {
692
- new FXAAPass({
693
- source: current,
694
- target,
695
- ...pass.options
696
- }).execute({ device: this.device, width: this.width, height: this.height });
697
- }
698
- else {
699
- this.executePixelPostprocessPass(pass, current, target, forwardTarget);
700
- }
701
- if (target)
702
- current = target;
703
- }
704
- }
705
- executeFusedLdrPostprocess(current, passes, outputTarget, forceCpuDeterministic = false) {
706
- const nativeHdrBloom = isHdrRenderTarget(current) && passes[0]?.name === "bloom" && passes[1]?.name === "tone-mapping";
707
- if (nativeHdrBloom && (forceCpuDeterministic || !this.device.presentLdrPostprocess))
708
- return false;
709
- if (!canFuseLdrPostprocess(current, passes))
710
- return false;
711
- if (!forceCpuDeterministic && !this.device.presentLdrPostprocess && passes.some((pass) => pass.name === "depth-of-field" || pass.name === "motion-blur" || pass.name === "ssao" || pass.name === "ssr" || pass.name === "taa"))
712
- return false;
713
- // A caller that supplies its own `depth` array for depth-of-field/SSAO/SSR gets a plain
714
- // depth renderbuffer, because `postprocessRequiresDepthTexture` only requests a
715
- // sampleable depth texture when the renderer has to generate the depth itself. The
716
- // backend's fused path samples `depthTextureHandle` regardless and used to throw
717
- // `WEBGL_LDR_POSTPROCESS_DEPTH_REQUIRED`, failing the whole render rather than falling
718
- // back. Declining fusion here routes those passes through the per-pass CPU path, which
719
- // consumes the caller's depth directly and is the behaviour the options already imply.
720
- if (!forceCpuDeterministic && !current.depthTexture && passes.some((pass) => pass.name === "depth-of-field" || pass.name === "ssao" || pass.name === "ssr"))
721
- return false;
722
- if (!forceCpuDeterministic && this.device.presentLdrPostprocess) {
723
- this.device.presentLdrPostprocess(current, {
724
- passes: passes.map((pass) => ({
725
- name: pass.name,
726
- options: pass.options
727
- })),
728
- ...(outputTarget ? { outputTarget } : {}),
729
- toneMappingDefaults: { outputColorSpace: "srgb" }
730
- });
731
- return true;
732
- }
733
- this.device.setRenderTarget(current);
734
- const pixels = fusedLdrPostprocessPixels(this.device.readPixels(0, 0, current.width, current.height), current.width, current.height, passes, {
735
- mutateInput: true,
736
- scratch: this.fusedLdrPostprocessScratch,
737
- toneMappingDefaults: { outputColorSpace: "srgb" }
738
- });
739
- writePostProcessPixels(this.device, current, outputTarget, pixels);
740
- return true;
1381
+ return this.host.post.executePostprocess(postprocess, ownedTargets, outputTarget);
741
1382
  }
742
1383
  async executePostprocessAsync(postprocess, ownedTargets, outputTarget) {
743
- const forwardTarget = ownedTargets[0];
744
- let current = forwardTarget;
745
- if (!current) {
746
- throw new RenderDeviceError("Renderer postprocess missing forward render target", "POSTPROCESS_TARGET_MISSING");
747
- }
748
- const passes = createRendererPostprocessPasses(postprocess);
749
- if (passes.length === 0) {
750
- if (outputTarget) {
751
- this.device.setRenderTarget(current);
752
- writePostProcessPixels(this.device, current, outputTarget, await this.readRenderTargetPixelsAsync(current));
753
- }
754
- else {
755
- this.device.presentRenderTarget?.(current);
756
- }
757
- return;
758
- }
759
- if (await this.executeFusedLdrPostprocessAsync(current, passes, outputTarget, postprocess.execution === "cpu-deterministic"))
760
- return;
761
- for (let index = 0; index < passes.length; index += 1) {
762
- const pass = passes[index];
763
- const nextPass = passes[index + 1];
764
- if (pass.name === "bloom" && isHdrRenderTarget(current)) {
765
- if (nextPass?.name !== "tone-mapping") {
766
- throw new RenderDeviceError("Renderer HDR bloom requires tone mapping immediately after the float bloom pass.", "HDR_BLOOM_TONEMAPPING_REQUIRED", {
767
- source: current.label
768
- });
769
- }
770
- const isCombinedLast = index + 1 === passes.length - 1;
771
- const target = isCombinedLast ? outputTarget : this.device.createRenderTarget({
772
- width: this.width,
773
- height: this.height,
774
- label: "renderer-postprocess-tone-mapping",
775
- format: "rgba8",
776
- depth: false
777
- });
778
- if (target)
779
- ownedTargets.push(target);
780
- const bloomed = bloomFloatPixels(await this.readRenderTargetFloatPixelsAsync(current), current.width, current.height, pass.options);
781
- const mapped = toneMapFloatPixels(bloomed.pixels, current.width, current.height, {
782
- outputColorSpace: "srgb",
783
- ...nextPass.options
784
- });
785
- writePostProcessPixels(this.device, current, target, mapped.pixels);
786
- if (target)
787
- current = target;
788
- index += 1;
789
- continue;
790
- }
791
- const isLast = index === passes.length - 1;
792
- const target = isLast ? outputTarget : this.device.createRenderTarget({
793
- width: this.width,
794
- height: this.height,
795
- label: `renderer-postprocess-${pass.name}`,
796
- format: "rgba8",
797
- depth: false
798
- });
799
- if (target)
800
- ownedTargets.push(target);
801
- if (pass.name === "tone-mapping") {
802
- const mapped = isHdrRenderTarget(current)
803
- ? toneMapFloatPixels(await this.readRenderTargetFloatPixelsAsync(current), current.width, current.height, {
804
- outputColorSpace: "srgb",
805
- ...pass.options
806
- })
807
- : toneMapPixels(await this.readRenderTargetPixelsAsync(current), current.width, current.height, {
808
- outputColorSpace: "srgb",
809
- ...pass.options
810
- });
811
- writePostProcessPixels(this.device, current, target, mapped.pixels);
812
- }
813
- else if (pass.name === "bloom") {
814
- const bloomed = bloomPixels(await this.readRenderTargetPixelsAsync(current), current.width, current.height, pass.options);
815
- writePostProcessPixels(this.device, current, target, bloomed.pixels);
816
- }
817
- else if (pass.name === "fxaa") {
818
- const smoothed = fxaaPixels(await this.readRenderTargetPixelsAsync(current), current.width, current.height, pass.options);
819
- writePostProcessPixels(this.device, current, target, smoothed.pixels);
820
- }
821
- else {
822
- await this.executePixelPostprocessPassAsync(pass, current, target, forwardTarget);
823
- }
824
- if (target)
825
- current = target;
826
- }
827
- }
828
- async executeFusedLdrPostprocessAsync(current, passes, outputTarget, forceCpuDeterministic = false) {
829
- const nativeHdrBloom = isHdrRenderTarget(current) && passes[0]?.name === "bloom" && passes[1]?.name === "tone-mapping";
830
- if (nativeHdrBloom && (forceCpuDeterministic || !this.device.presentLdrPostprocess))
831
- return false;
832
- if (!canFuseLdrPostprocess(current, passes))
833
- return false;
834
- if (!forceCpuDeterministic && !this.device.presentLdrPostprocess && passes.some((pass) => pass.name === "depth-of-field" || pass.name === "motion-blur" || pass.name === "ssao" || pass.name === "ssr" || pass.name === "taa"))
835
- return false;
836
- // A caller that supplies its own `depth` array for depth-of-field/SSAO/SSR gets a plain
837
- // depth renderbuffer, because `postprocessRequiresDepthTexture` only requests a
838
- // sampleable depth texture when the renderer has to generate the depth itself. The
839
- // backend's fused path samples `depthTextureHandle` regardless and used to throw
840
- // `WEBGL_LDR_POSTPROCESS_DEPTH_REQUIRED`, failing the whole render rather than falling
841
- // back. Declining fusion here routes those passes through the per-pass CPU path, which
842
- // consumes the caller's depth directly and is the behaviour the options already imply.
843
- if (!forceCpuDeterministic && !current.depthTexture && passes.some((pass) => pass.name === "depth-of-field" || pass.name === "ssao" || pass.name === "ssr"))
844
- return false;
845
- if (!forceCpuDeterministic && this.device.presentLdrPostprocess) {
846
- this.device.presentLdrPostprocess(current, {
847
- passes: passes.map((pass) => ({
848
- name: pass.name,
849
- options: pass.options
850
- })),
851
- ...(outputTarget ? { outputTarget } : {}),
852
- toneMappingDefaults: { outputColorSpace: "srgb" }
853
- });
854
- return true;
855
- }
856
- const pixels = fusedLdrPostprocessPixels(await this.readRenderTargetPixelsAsync(current), current.width, current.height, passes, {
857
- mutateInput: true,
858
- scratch: this.fusedLdrPostprocessScratch,
859
- toneMappingDefaults: { outputColorSpace: "srgb" }
860
- });
861
- writePostProcessPixels(this.device, current, outputTarget, pixels);
862
- return true;
863
- }
864
- executePixelPostprocessPass(pass, source, target, forwardTarget) {
865
- this.device.setRenderTarget(source);
866
- const input = this.device.readPixels(0, 0, source.width, source.height);
867
- const rendererDepth = isDepthPostprocessPass(pass.name) && !postprocessPassHasDepth(pass.options)
868
- ? this.readRendererOwnedDepthTexture(forwardTarget)
869
- : undefined;
870
- const result = pass.name === "color-grade"
871
- ? colorGradePixels(input, source.width, source.height, pass.options).pixels
872
- : pass.name === "chromatic-aberration"
873
- ? chromaticAberrationPixels(input, source.width, source.height, pass.options).pixels
874
- : pass.name === "film-grain"
875
- ? filmGrainPixels(input, source.width, source.height, pass.options).pixels
876
- : pass.name === "depth-of-field"
877
- ? depthOfFieldPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
878
- : pass.name === "volumetric-light"
879
- ? volumetricLightPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
880
- : pass.name === "motion-blur"
881
- ? motionBlurPixels(input, source.width, source.height, pass.options).pixels
882
- : pass.name === "contact-shadow"
883
- ? contactShadowPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
884
- : pass.name === "ssao"
885
- ? ssaoPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
886
- : pass.name === "ssr"
887
- ? ssrPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
888
- : pass.name === "taa"
889
- ? taaPixels(input, source.width, source.height, pass.options).pixels
890
- : pass.name === "outline"
891
- ? outlinePixels(input, source.width, source.height, pass.options).pixels
892
- : undefined;
893
- if (!result) {
894
- throw new RenderDeviceError("Renderer postprocess pass is outside the supported renderer pass catalog", "POSTPROCESS_PASS_UNKNOWN", {
895
- pass: pass.name
896
- });
897
- }
898
- writePostProcessPixels(this.device, source, target, result);
899
- }
900
- async executePixelPostprocessPassAsync(pass, source, target, forwardTarget) {
901
- const input = await this.readRenderTargetPixelsAsync(source);
902
- const rendererDepth = isDepthPostprocessPass(pass.name) && !postprocessPassHasDepth(pass.options)
903
- ? this.readRendererOwnedDepthTexture(forwardTarget)
904
- : undefined;
905
- const result = pass.name === "color-grade"
906
- ? colorGradePixels(input, source.width, source.height, pass.options).pixels
907
- : pass.name === "chromatic-aberration"
908
- ? chromaticAberrationPixels(input, source.width, source.height, pass.options).pixels
909
- : pass.name === "film-grain"
910
- ? filmGrainPixels(input, source.width, source.height, pass.options).pixels
911
- : pass.name === "depth-of-field"
912
- ? depthOfFieldPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
913
- : pass.name === "volumetric-light"
914
- ? volumetricLightPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
915
- : pass.name === "motion-blur"
916
- ? motionBlurPixels(input, source.width, source.height, pass.options).pixels
917
- : pass.name === "contact-shadow"
918
- ? contactShadowPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
919
- : pass.name === "ssao"
920
- ? ssaoPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
921
- : pass.name === "ssr"
922
- ? ssrPixels(input, source.width, source.height, withRendererDepth(pass.options, rendererDepth)).pixels
923
- : pass.name === "taa"
924
- ? taaPixels(input, source.width, source.height, pass.options).pixels
925
- : pass.name === "outline"
926
- ? outlinePixels(input, source.width, source.height, pass.options).pixels
927
- : undefined;
928
- if (!result) {
929
- throw new RenderDeviceError("Renderer postprocess pass is outside the supported renderer pass catalog", "POSTPROCESS_PASS_UNKNOWN", {
930
- pass: pass.name
931
- });
932
- }
933
- writePostProcessPixels(this.device, source, target, result);
934
- }
935
- async readRenderTargetPixelsAsync(target) {
936
- this.device.setRenderTarget(target);
937
- if (this.device.readPixelsAsync && target.colorTexture.format === "rgba8") {
938
- return this.device.readPixelsAsync(0, 0, target.width, target.height);
939
- }
940
- return this.device.readPixels(0, 0, target.width, target.height);
941
- }
942
- async readRenderTargetFloatPixelsAsync(target) {
943
- this.device.setRenderTarget(target);
944
- if (this.device.readFloatPixelsAsync && isHdrRenderTarget(target)) {
945
- return this.device.readFloatPixelsAsync(0, 0, target.width, target.height);
946
- }
947
- return this.device.readFloatPixels(0, 0, target.width, target.height);
948
- }
949
- readRendererOwnedDepthTexture(forwardTarget) {
950
- if (!forwardTarget.depthTexture) {
951
- throw new RenderDeviceError("Renderer-owned depth postprocess requires the forward target to expose a depth texture.", "POSTPROCESS_DEPTH_TARGET_MISSING", {
952
- renderTarget: forwardTarget.label
953
- });
954
- }
955
- if (!this.device.readDepthPixels) {
956
- throw new RenderDeviceError("Renderer-owned depth postprocess requires backend depth readback.", "DEPTH_READBACK_UNSUPPORTED", {
957
- backend: this.device.kind
958
- });
959
- }
960
- this.device.setRenderTarget(forwardTarget);
961
- return createDepthTextureBinding({
962
- label: forwardTarget.depthTexture.label,
963
- width: forwardTarget.width,
964
- height: forwardTarget.height,
965
- data: this.device.readDepthPixels(0, 0, forwardTarget.width, forwardTarget.height)
966
- });
1384
+ return this.host.post.executePostprocessAsync(postprocess, ownedTargets, outputTarget);
967
1385
  }
968
1386
  executeRendererShadowMap(options) {
969
- if (!options.shadowOptions || options.shadowOptions.enabled === false) {
970
- return undefined;
971
- }
972
- if (!this.device.info.capabilities?.includes("render-targets")) {
973
- throw new RenderDeviceError("Renderer-owned shadows require render targets", "SHADOW_RENDER_TARGET_UNSUPPORTED", {
974
- backend: this.device.kind
975
- });
976
- }
977
- const light = options.shadowOptions.light ?? firstShadowCastingLight(options.source, options.lights);
978
- if (light instanceof PointLight) {
979
- return this.executeRendererPointShadowMap({
980
- shadowOptions: options.shadowOptions,
981
- items: options.items,
982
- ownedTargets: options.ownedTargets,
983
- ownedShadowPasses: options.ownedShadowPasses,
984
- light
985
- });
986
- }
987
- if (light && !(light instanceof DirectionalLight) && !(light instanceof SpotLight)) {
988
- throw new RenderDeviceError("Renderer-owned shadow maps require directional, spot, or point lights.", "SHADOW_LIGHT_TYPE_UNSUPPORTED", {
989
- lightName: light.name,
990
- lightType: light.constructor.name
991
- });
992
- }
993
- if (light instanceof DirectionalLight
994
- && options.camera instanceof PerspectiveCamera
995
- && (options.shadowOptions.cascadeCount ?? 1) > 1) {
996
- return this.executeRendererCascadedShadowMap({
997
- shadowOptions: options.shadowOptions,
998
- items: options.items,
999
- ownedShadowPasses: options.ownedShadowPasses,
1000
- light,
1001
- camera: options.camera
1002
- });
1003
- }
1004
- const lightMatrix = options.shadowOptions.lightMatrix
1005
- ? toMat4(options.shadowOptions.lightMatrix, "shadow.lightMatrix")
1006
- : createRendererOwnedShadowMatrix(light, options.items, firstShadowCastingCollectedLight(options.lights));
1007
- const shadowMap = new ShadowMap({
1008
- size: options.shadowOptions.size,
1009
- bias: options.shadowOptions.bias,
1010
- filter: options.shadowOptions.filter,
1011
- pcfRadius: options.shadowOptions.pcfRadius,
1012
- pcfSamples: options.shadowOptions.pcfSamples,
1013
- pcfDistribution: options.shadowOptions.pcfDistribution,
1014
- label: options.shadowOptions.label ?? "renderer-shadow-map"
1015
- });
1016
- const shadowPass = new ShadowPass({
1017
- light,
1018
- casters: options.items,
1019
- shadowMap,
1020
- viewProjectionMatrix: lightMatrix,
1021
- shaderLibrary: this.shaderLibrary,
1022
- renderTarget: this.ensureShadowDepthTarget(shadowMap.size)
1023
- });
1024
- options.ownedShadowPasses.push(shadowPass);
1025
- const result = shadowPass.execute({ device: this.device, width: this.width, height: this.height });
1026
- if (!result.rendered) {
1027
- if (result.reason === "no-light" || result.reason === "light-disabled" || result.reason === "not-shadow-casting") {
1028
- throw new RenderDeviceError("Renderer-owned shadows require an enabled shadow-casting light.", "SHADOW_LIGHT_REQUIRED", {
1029
- reason: result.reason
1030
- });
1031
- }
1032
- return undefined;
1033
- }
1034
- return shadowPass.getForwardShadowMap({
1035
- lightMatrix,
1036
- strength: options.shadowOptions.strength,
1037
- slopeBias: options.shadowOptions.slopeBias,
1038
- texelSize: options.shadowOptions.texelSize,
1039
- bias: options.shadowOptions.bias,
1040
- filterKernel: options.shadowOptions.filterKernel
1041
- }) ?? undefined;
1042
- }
1043
- executeRendererCascadedShadowMap(options) {
1044
- const cascadeCount = options.shadowOptions.cascadeCount ?? 4;
1045
- if (!Number.isInteger(cascadeCount) || cascadeCount < 2 || cascadeCount > 4) {
1046
- throw new RenderDeviceError("Renderer cascadeCount must be an integer in [2, 4].", "SHADOW_CASCADE_CONTRACT", { cascadeCount });
1047
- }
1048
- options.camera.transform.updateWorld(undefined, true);
1049
- const position = cameraWorldPosition(options.camera);
1050
- const world = options.camera.transform.worldMatrix;
1051
- const target = [
1052
- position[0] - (world[8] ?? 0),
1053
- position[1] - (world[9] ?? 0),
1054
- position[2] - (world[10] ?? 1)
1055
- ];
1056
- const cascades = new CascadedShadowMaps({
1057
- cascadeCount,
1058
- near: options.camera.near,
1059
- far: options.camera.far,
1060
- lambda: options.shadowOptions.cascadeLambda ?? 0.6,
1061
- size: options.shadowOptions.size,
1062
- bias: options.shadowOptions.bias,
1063
- filter: options.shadowOptions.filter,
1064
- pcfRadius: options.shadowOptions.pcfRadius,
1065
- pcfSamples: options.shadowOptions.pcfSamples,
1066
- label: options.shadowOptions.label ?? "renderer-csm"
1067
- });
1068
- const fits = cascades.computeStableCameraFits({
1069
- camera: {
1070
- position,
1071
- target,
1072
- fovYRadians: options.camera.fovYRadians,
1073
- aspect: options.camera.aspect
1074
- },
1075
- lightDirection: options.light.getDirection(),
1076
- casters: [],
1077
- receivers: [],
1078
- padding: options.shadowOptions.cascadePadding ?? 0.25,
1079
- stabilize: options.shadowOptions.stabilize !== false
1080
- });
1081
- const lightMatrices = fits.map(shadowCameraFitViewProjectionMatrix);
1082
- const cascadePass = new CascadedShadowPass({
1083
- light: options.light,
1084
- casters: options.items,
1085
- cascades,
1086
- viewProjectionMatrices: lightMatrices,
1087
- shaderLibrary: this.shaderLibrary
1088
- });
1089
- const result = cascadePass.execute({ device: this.device, width: this.width, height: this.height });
1090
- options.ownedShadowPasses.push(cascadePass);
1091
- if (!result.rendered)
1092
- return undefined;
1093
- const maps = cascadePass.getForwardShadowMaps({
1094
- lightMatrices,
1095
- strength: options.shadowOptions.strength,
1096
- slopeBias: options.shadowOptions.slopeBias,
1097
- texelSize: options.shadowOptions.texelSize,
1098
- bias: options.shadowOptions.bias,
1099
- filterKernel: options.shadowOptions.filterKernel
1100
- });
1101
- const first = maps[0];
1102
- if (!first || maps.length !== result.cascades.length)
1103
- return undefined;
1104
- return {
1105
- ...first,
1106
- cascades: result.cascades.map((cascade, index) => ({
1107
- index: cascade.index,
1108
- near: cascade.split.near,
1109
- far: cascade.split.far,
1110
- shadowMap: maps[index]
1111
- }))
1112
- };
1113
- }
1114
- executeRendererPointShadowMap(options) {
1115
- if (!this.device.writeRenderTargetPixels) {
1116
- throw new RenderDeviceError("Renderer-owned point shadows require render-target pixel upload for the point-light atlas.", "POINT_SHADOW_ATLAS_UPLOAD_UNSUPPORTED", {
1117
- backend: this.device.kind
1118
- });
1119
- }
1120
- options.light.transform.updateWorld(undefined, true);
1121
- const size = options.shadowOptions.size ?? 512;
1122
- const faceMatrices = createPointShadowFaceMatrices(options.light);
1123
- const faceRects = createPointShadowFaceRects();
1124
- const shadowMapOptions = {
1125
- size,
1126
- bias: options.shadowOptions.bias,
1127
- filter: options.shadowOptions.filter,
1128
- pcfRadius: options.shadowOptions.pcfRadius,
1129
- pcfSamples: options.shadowOptions.pcfSamples,
1130
- pcfDistribution: options.shadowOptions.pcfDistribution
1131
- };
1132
- const atlasPixels = new Uint8Array(size * 3 * size * 2 * 4);
1133
- for (let face = 0; face < 6; face += 1) {
1134
- const faceMatrix = faceMatrices.slice(face * 16, face * 16 + 16);
1135
- const shadowPass = new ShadowPass({
1136
- light: options.light,
1137
- casters: options.items,
1138
- shadowMap: new ShadowMap({ ...shadowMapOptions, label: `${options.shadowOptions.label ?? "renderer-point-shadow"}-face-${face}` }),
1139
- viewProjectionMatrix: faceMatrix,
1140
- shaderLibrary: this.shaderLibrary
1141
- });
1142
- options.ownedShadowPasses.push(shadowPass);
1143
- const result = shadowPass.execute({ device: this.device, width: this.width, height: this.height });
1144
- if (!result.rendered) {
1145
- return undefined;
1146
- }
1147
- const target = shadowPass.getRenderTarget();
1148
- if (!target) {
1149
- throw new RenderDeviceError("Renderer-owned point shadow face did not expose a render target.", "POINT_SHADOW_FACE_TARGET_MISSING", { face });
1150
- }
1151
- const facePixels = readShadowFacePixels(this.device, target);
1152
- blitPointShadowFace(atlasPixels, size * 3, size * 2, facePixels, size, faceRects, face);
1153
- }
1154
- const atlasTarget = this.device.createRenderTarget({
1155
- width: size * 3,
1156
- height: size * 2,
1157
- label: `${options.shadowOptions.label ?? "renderer-point-shadow"}-atlas`,
1158
- format: "rgba8",
1159
- depth: false
1160
- });
1161
- options.ownedTargets.push(atlasTarget);
1162
- this.device.writeRenderTargetPixels(atlasTarget, atlasPixels);
1163
- const texture = new TextureBinding({
1164
- name: "u_pointShadowMapTexture",
1165
- texture: atlasTarget.colorTexture,
1166
- sampler: new Sampler({ minFilter: "nearest", magFilter: "nearest", addressU: "clamp-to-edge", addressV: "clamp-to-edge" }),
1167
- required: true
1168
- });
1169
- return {
1170
- texture: new TextureBinding({
1171
- name: "u_shadowMapTexture",
1172
- texture: atlasTarget.colorTexture,
1173
- sampler: new Sampler({ minFilter: "nearest", magFilter: "nearest", addressU: "clamp-to-edge", addressV: "clamp-to-edge" }),
1174
- required: true
1175
- }),
1176
- lightMatrix: identityMat4(),
1177
- strength: options.shadowOptions.strength,
1178
- slopeBias: options.shadowOptions.slopeBias,
1179
- texelSize: options.shadowOptions.texelSize,
1180
- bias: options.shadowOptions.bias,
1181
- filterKernel: options.shadowOptions.filterKernel,
1182
- pointLight: {
1183
- texture,
1184
- lightPosition: [options.light.transform.worldMatrix[12], options.light.transform.worldMatrix[13], options.light.transform.worldMatrix[14]],
1185
- range: options.light.range,
1186
- faceMatrices,
1187
- faceRects,
1188
- strength: options.shadowOptions.strength,
1189
- slopeBias: options.shadowOptions.slopeBias,
1190
- texelSize: [1 / Math.max(1, size * 3), 1 / Math.max(1, size * 2)],
1191
- bias: options.shadowOptions.bias,
1192
- filterKernel: options.shadowOptions.filterKernel
1193
- }
1194
- };
1387
+ return this.host.shadows.executeRendererShadowMap(options);
1195
1388
  }
1196
1389
  }
1197
1390
  export function pickSceneRenderables(source, ray, options = {}) {
@@ -1352,28 +1545,6 @@ function inferInitialCanvasDimension(canvas, axis) {
1352
1545
  const displaySize = Math.round(cssSize * dpr);
1353
1546
  return Math.max(1, displaySize || (axis === "width" ? canvas.width : canvas.height) || 1);
1354
1547
  }
1355
- function collectEnvironmentLighting(source) {
1356
- if (source instanceof Scene || isIterable(source))
1357
- return undefined;
1358
- if (source.environmentLighting === false)
1359
- return cloneEnvironmentLighting(DISABLED_RENDERER_ENVIRONMENT_LIGHTING);
1360
- if (source.environmentLighting)
1361
- return source.environmentLighting;
1362
- return cloneEnvironmentLighting(DEFAULT_RENDERER_ENVIRONMENT_LIGHTING);
1363
- }
1364
- function collectEnvironmentBackground(source) {
1365
- if (source instanceof Scene || isIterable(source) || source.environmentBackground === false)
1366
- return undefined;
1367
- return source.environmentBackground;
1368
- }
1369
- function collectEnvironmentFog(source) {
1370
- if (source instanceof Scene || isIterable(source))
1371
- return undefined;
1372
- return source.environmentFog;
1373
- }
1374
- function collectForwardShadowMap(source) {
1375
- return source instanceof Scene || isIterable(source) ? undefined : source.shadowMap;
1376
- }
1377
1548
  function collectRenderTarget(source) {
1378
1549
  return source instanceof Scene || isIterable(source) ? undefined : source.renderTarget;
1379
1550
  }
@@ -1395,206 +1566,6 @@ function validateExplicitRenderTarget(target, width, height) {
1395
1566
  });
1396
1567
  }
1397
1568
  }
1398
- function collectRendererShadowOptions(source) {
1399
- if (source instanceof Scene || isIterable(source))
1400
- return undefined;
1401
- if (source.shadow === true)
1402
- return {};
1403
- if (!source.shadow)
1404
- return undefined;
1405
- return source.shadow;
1406
- }
1407
- function firstShadowCastingLight(source, lights) {
1408
- const explicit = lights.find((light) => light.castsShadow && light.source.visible)?.source;
1409
- if (explicit)
1410
- return explicit;
1411
- const scene = sceneFromSource(source);
1412
- return scene?.collectLights().find((light) => light.visible && light.castsShadow) ?? null;
1413
- }
1414
- function firstShadowCastingCollectedLight(lights) {
1415
- return lights.find((light) => light.castsShadow && light.source.visible);
1416
- }
1417
- function lightDirectionFromLight(light) {
1418
- if (!light)
1419
- return [0, -1, -1];
1420
- const direction = light instanceof DirectionalLight ? light.getDirection() : undefined;
1421
- return normalizeVec3([
1422
- Number(direction?.[0] ?? 0),
1423
- Number(direction?.[1] ?? -1),
1424
- Number(direction?.[2] ?? -1)
1425
- ]);
1426
- }
1427
- function createRendererOwnedShadowMatrix(light, items, collectedLight) {
1428
- if (light instanceof SpotLight) {
1429
- light.transform.updateWorld(undefined, true);
1430
- const near = 0.01;
1431
- const far = Math.max(near + 0.01, light.range);
1432
- const projectionMatrix = perspectiveMat4(light.angle * 2, 1, near, far);
1433
- return multiplyMat4(projectionMatrix, light.transform.inverseWorldMatrix);
1434
- }
1435
- return createDirectionalShadowMatrix(items, collectedLight?.direction ?? lightDirectionFromLight(light));
1436
- }
1437
- function createPointShadowFaceMatrices(light) {
1438
- light.transform.updateWorld(undefined, true);
1439
- const position = [
1440
- light.transform.worldMatrix[12],
1441
- light.transform.worldMatrix[13],
1442
- light.transform.worldMatrix[14]
1443
- ];
1444
- const projection = perspectiveMat4(Math.PI / 2, 1, 0.01, Math.max(0.02, light.range));
1445
- const faces = [
1446
- { direction: [1, 0, 0], up: [0, -1, 0] },
1447
- { direction: [-1, 0, 0], up: [0, -1, 0] },
1448
- { direction: [0, 1, 0], up: [0, 0, 1] },
1449
- { direction: [0, -1, 0], up: [0, 0, -1] },
1450
- { direction: [0, 0, 1], up: [0, -1, 0] },
1451
- { direction: [0, 0, -1], up: [0, -1, 0] }
1452
- ];
1453
- const matrices = new Float32Array(6 * 16);
1454
- for (const [index, face] of faces.entries()) {
1455
- const view = lookAtMatrix(position, addVec3(position, face.direction), face.up);
1456
- matrices.set(multiplyMat4(projection, view), index * 16);
1457
- }
1458
- return matrices;
1459
- }
1460
- function createPointShadowFaceRects() {
1461
- const rects = new Float32Array(6 * 4);
1462
- for (let face = 0; face < 6; face += 1) {
1463
- const column = face % 3;
1464
- const row = Math.floor(face / 3);
1465
- rects.set([column / 3, row / 2, 1 / 3, 1 / 2], face * 4);
1466
- }
1467
- return rects;
1468
- }
1469
- function readShadowFacePixels(device, target) {
1470
- device.setRenderTarget(target);
1471
- if (target.depthTexture && device.readDepthPixels) {
1472
- const depth = device.readDepthPixels(0, 0, target.width, target.height);
1473
- const pixels = new Uint8Array(target.width * target.height * 4);
1474
- for (let index = 0; index < depth.length; index += 1) {
1475
- const byte = Math.max(0, Math.min(255, Math.round((depth[index] ?? 1) * 255)));
1476
- const offset = index * 4;
1477
- pixels[offset] = byte;
1478
- pixels[offset + 1] = byte;
1479
- pixels[offset + 2] = byte;
1480
- pixels[offset + 3] = 255;
1481
- }
1482
- return pixels;
1483
- }
1484
- return device.readPixels(0, 0, target.width, target.height);
1485
- }
1486
- function blitPointShadowFace(atlasPixels, atlasWidth, atlasHeight, facePixels, faceSize, faceRects, face) {
1487
- const rectOffset = face * 4;
1488
- const destX = Math.round((faceRects[rectOffset] ?? 0) * atlasWidth);
1489
- const destY = Math.round((faceRects[rectOffset + 1] ?? 0) * atlasHeight);
1490
- for (let row = 0; row < faceSize; row += 1) {
1491
- const sourceOffset = row * faceSize * 4;
1492
- const targetOffset = ((destY + row) * atlasWidth + destX) * 4;
1493
- atlasPixels.set(facePixels.subarray(sourceOffset, sourceOffset + faceSize * 4), targetOffset);
1494
- }
1495
- }
1496
- function lookAtMatrix(eye, target, up) {
1497
- const forward = normalizeVec3(subtractVec3(target, eye));
1498
- const right = normalizeVec3(crossVec3(forward, up));
1499
- const correctedUp = crossVec3(right, forward);
1500
- return [
1501
- right[0], correctedUp[0], -forward[0], 0,
1502
- right[1], correctedUp[1], -forward[1], 0,
1503
- right[2], correctedUp[2], -forward[2], 0,
1504
- -dotVec3(right, eye), -dotVec3(correctedUp, eye), dotVec3(forward, eye), 1
1505
- ];
1506
- }
1507
- function createDirectionalShadowMatrix(items, lightDirection) {
1508
- const bounds = collectShadowCoverageBounds(items);
1509
- if (!bounds || bounds.isEmpty()) {
1510
- return identityMat4();
1511
- }
1512
- const basis = directionalLightBasis(lightDirection);
1513
- const points = boundsCorners(bounds).map((point) => projectPointToLightSpace(point, basis));
1514
- const lightBounds = boundsFromVec3(points);
1515
- const width = Math.max(0.01, lightBounds.max[0] - lightBounds.min[0]);
1516
- const height = Math.max(0.01, lightBounds.max[1] - lightBounds.min[1]);
1517
- const depth = Math.max(0.01, lightBounds.max[2] - lightBounds.min[2]);
1518
- const padding = Math.max(width, height, depth) * 0.08 + 0.05;
1519
- const viewMatrix = lightViewMatrix(basis);
1520
- const projectionMatrix = orthographicMat4(lightBounds.min[0] - padding, lightBounds.max[0] + padding, lightBounds.min[1] - padding, lightBounds.max[1] + padding, lightBounds.min[2] - padding, lightBounds.max[2] + padding);
1521
- return multiplyMat4(projectionMatrix, viewMatrix);
1522
- }
1523
- function directionalLightBasis(lightDirection) {
1524
- const forward = normalizeVec3(scaleVec3(normalizeVec3(lightDirection), -1));
1525
- const fallbackUp = Math.abs(forward[1]) > 0.94 ? [0, 0, 1] : [0, 1, 0];
1526
- const right = normalizeVec3(crossVec3(fallbackUp, forward));
1527
- const up = normalizeVec3(crossVec3(forward, right));
1528
- return { right, up, forward };
1529
- }
1530
- function lightViewMatrix(basis) {
1531
- return [
1532
- basis.right[0], basis.up[0], basis.forward[0], 0,
1533
- basis.right[1], basis.up[1], basis.forward[1], 0,
1534
- basis.right[2], basis.up[2], basis.forward[2], 0,
1535
- 0, 0, 0, 1
1536
- ];
1537
- }
1538
- function projectPointToLightSpace(point, basis) {
1539
- return [dotVec3(point, basis.right), dotVec3(point, basis.up), dotVec3(point, basis.forward)];
1540
- }
1541
- function boundsCorners(bounds) {
1542
- return [
1543
- [bounds.min[0], bounds.min[1], bounds.min[2]],
1544
- [bounds.max[0], bounds.min[1], bounds.min[2]],
1545
- [bounds.min[0], bounds.max[1], bounds.min[2]],
1546
- [bounds.min[0], bounds.min[1], bounds.max[2]],
1547
- [bounds.max[0], bounds.max[1], bounds.min[2]],
1548
- [bounds.max[0], bounds.min[1], bounds.max[2]],
1549
- [bounds.min[0], bounds.max[1], bounds.max[2]],
1550
- [bounds.max[0], bounds.max[1], bounds.max[2]]
1551
- ];
1552
- }
1553
- function boundsFromVec3(points) {
1554
- const min = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY];
1555
- const max = [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];
1556
- for (const point of points) {
1557
- for (let axis = 0; axis < 3; axis += 1) {
1558
- min[axis] = Math.min(min[axis], point[axis]);
1559
- max[axis] = Math.max(max[axis], point[axis]);
1560
- }
1561
- }
1562
- return { min, max };
1563
- }
1564
- function normalizeVec3(value) {
1565
- const length = Math.hypot(value[0], value[1], value[2]);
1566
- if (!Number.isFinite(length) || length <= 1e-8)
1567
- return [0, -1 / Math.SQRT2, -1 / Math.SQRT2];
1568
- return [value[0] / length, value[1] / length, value[2] / length];
1569
- }
1570
- function scaleVec3(value, amount) {
1571
- return [value[0] * amount, value[1] * amount, value[2] * amount];
1572
- }
1573
- function addVec3(left, right) {
1574
- return [left[0] + right[0], left[1] + right[1], left[2] + right[2]];
1575
- }
1576
- function subtractVec3(left, right) {
1577
- return [left[0] - right[0], left[1] - right[1], left[2] - right[2]];
1578
- }
1579
- function crossVec3(left, right) {
1580
- return [
1581
- left[1] * right[2] - left[2] * right[1],
1582
- left[2] * right[0] - left[0] * right[2],
1583
- left[0] * right[1] - left[1] * right[0]
1584
- ];
1585
- }
1586
- function dotVec3(left, right) {
1587
- return left[0] * right[0] + left[1] * right[1] + left[2] * right[2];
1588
- }
1589
- function collectPostprocess(source) {
1590
- if (source instanceof Scene || isIterable(source))
1591
- return undefined;
1592
- if (source.postprocess === true)
1593
- return {};
1594
- if (!source.postprocess)
1595
- return undefined;
1596
- return source.postprocess;
1597
- }
1598
1569
  function normalizeRendererInput(sourceOrInput, camera) {
1599
1570
  if (isRendererInput(sourceOrInput)) {
1600
1571
  return { source: sourceOrInput.source, camera: camera ?? sourceOrInput.camera };
@@ -1618,63 +1589,6 @@ function collectCameraPolicy(source) {
1618
1589
  return "auto-frame";
1619
1590
  return "identity";
1620
1591
  }
1621
- function postprocessRequiresDepthTexture(postprocess) {
1622
- return Boolean((postprocess.volumetricLight && !postprocess.volumetricLight.depth) ||
1623
- (postprocess.depthOfField && !postprocess.depthOfField.depth) ||
1624
- (postprocess.contactShadow && !postprocess.contactShadow.depth) ||
1625
- (postprocess.ssao && !postprocess.ssao.depth) ||
1626
- (postprocess.ssr && !postprocess.ssr.depth));
1627
- }
1628
- function canFuseLdrPostprocess(source, passes) {
1629
- const sourceIsHdr = isHdrRenderTarget(source);
1630
- return passes.length > 0
1631
- && (!sourceIsHdr || passes[0]?.name === "tone-mapping" || (passes[0]?.name === "bloom" && passes[1]?.name === "tone-mapping"))
1632
- && passes.every((pass) => pass.name === "bloom" || pass.name === "tone-mapping" || pass.name === "color-grade" || pass.name === "depth-of-field" || pass.name === "motion-blur" || pass.name === "ssao" || pass.name === "ssr" || pass.name === "taa" || pass.name === "outline" || pass.name === "fxaa")
1633
- && passes.every((pass, index) => {
1634
- const previousRank = index === 0 ? -1 : ldrFusionPassRank(passes[index - 1].name);
1635
- return ldrFusionPassRank(pass.name) >= previousRank;
1636
- });
1637
- }
1638
- function ldrFusionPassRank(name) {
1639
- if (name === "bloom")
1640
- return -1;
1641
- if (name === "tone-mapping")
1642
- return 0;
1643
- if (name === "color-grade")
1644
- return 1;
1645
- if (name === "depth-of-field")
1646
- return 2;
1647
- if (name === "motion-blur")
1648
- return 3;
1649
- if (name === "ssao")
1650
- return 4;
1651
- if (name === "ssr")
1652
- return 5;
1653
- if (name === "taa")
1654
- return 6;
1655
- if (name === "outline")
1656
- return 7;
1657
- if (name === "fxaa")
1658
- return 8;
1659
- return Number.POSITIVE_INFINITY;
1660
- }
1661
- function isDepthPostprocessPass(name) {
1662
- return name === "volumetric-light" || name === "depth-of-field" || name === "contact-shadow" || name === "ssao" || name === "ssr";
1663
- }
1664
- function postprocessPassHasDepth(options) {
1665
- return typeof options === "object" && options !== null && "depth" in options && Boolean(options.depth);
1666
- }
1667
- function withRendererDepth(options, depth) {
1668
- return depth && !options.depth ? { ...options, depth } : options;
1669
- }
1670
- function defaultPostprocessTargetFormat(device, postprocess) {
1671
- if (postprocess.toneMapping === false)
1672
- return "rgba8";
1673
- return device.info.capabilities?.includes("hdr-render-targets") ? "rgba16f" : "rgba8";
1674
- }
1675
- function isHdrRenderTarget(target) {
1676
- return target.colorTexture.format === "rgba16f" || target.colorTexture.format === "rgba32f";
1677
- }
1678
1592
  function collectSourceCameraPosition(source) {
1679
1593
  if (source instanceof Scene || isIterable(source))
1680
1594
  return undefined;
@@ -1691,21 +1605,28 @@ function collectSourceCameraPosition(source) {
1691
1605
  export function collectRenderItems(source, cameraViewProjection, camera) {
1692
1606
  return collectRenderItemsWithDiagnostics(source, cameraViewProjection, camera).items;
1693
1607
  }
1694
- function collectRenderItemsWithDiagnostics(source, cameraViewProjection, camera) {
1608
+ function collectRenderItemsWithDiagnostics(source, cameraViewProjection, camera, keepCulledShadowCasters = false) {
1695
1609
  const diagnostics = createRenderCollectionDiagnostics();
1610
+ // 02-S5 (A3D_QR_LIGHTING): frustum-culled items that still cast. A caster
1611
+ // outside the view (a pole behind the camera under a low sun) must reach
1612
+ // the shadow pass. Flag-off collects nothing extra.
1613
+ const culledShadowCasters = keepCulledShadowCasters ? [] : undefined;
1696
1614
  if (isIterable(source)) {
1697
1615
  const items = applyViewProjection([...source], cameraViewProjection);
1698
1616
  diagnostics.submittedObjects += items.length;
1699
1617
  diagnostics.visibleObjects += items.length;
1700
- return { items, diagnostics };
1618
+ return { items, diagnostics, culledShadowCasters: culledShadowCasters ?? [] };
1701
1619
  }
1702
1620
  if (source instanceof Scene) {
1703
- const items = collectSceneRenderItems(source, {}, cameraViewProjection, camera, diagnostics);
1704
- return { items, diagnostics };
1621
+ const items = collectSceneRenderItems(source, {}, cameraViewProjection, camera, diagnostics, culledShadowCasters);
1622
+ return { items, diagnostics, culledShadowCasters: culledShadowCasters ?? [], ...(camera ? { cullingFrustum: camera.frustum } : {}) };
1705
1623
  }
1706
1624
  const items = [];
1625
+ let cullingFrustum;
1707
1626
  if (source.scene) {
1708
- items.push(...collectSceneRenderItems(source.scene, source, cameraViewProjection, source.frustumCulling === false ? undefined : camera, diagnostics));
1627
+ if (source.frustumCulling !== false && camera)
1628
+ cullingFrustum = camera.frustum;
1629
+ items.push(...collectSceneRenderItems(source.scene, source, cameraViewProjection, source.frustumCulling === false ? undefined : camera, diagnostics, culledShadowCasters));
1709
1630
  }
1710
1631
  const explicitItems = [];
1711
1632
  if (source.collectRenderItems) {
@@ -1715,193 +1636,16 @@ function collectRenderItemsWithDiagnostics(source, cameraViewProjection, camera)
1715
1636
  explicitItems.push(...source.renderItems);
1716
1637
  }
1717
1638
  if (explicitItems.length > 0) {
1718
- const cullingFrustum = explicitCullingFrustum(source, cameraViewProjection, camera);
1719
- const visibleItems = cullExplicitRenderItems(explicitItems, cullingFrustum, diagnostics);
1639
+ const explicitFrustum = explicitCullingFrustum(source, cameraViewProjection, camera);
1640
+ cullingFrustum ??= explicitFrustum;
1641
+ const visibleItems = cullExplicitRenderItems(explicitItems, explicitFrustum, diagnostics, culledShadowCasters);
1720
1642
  const optimizedItems = applyRendererOwnedStaticBatching(source, applyRendererOwnedStaticMeshConsolidation(source, visibleItems));
1721
1643
  const projectedItems = applyViewProjection(optimizedItems, cameraViewProjection);
1722
1644
  items.push(...projectedItems);
1723
1645
  }
1724
- return { items, diagnostics };
1725
- }
1726
- function explicitCullingFrustum(source, cameraViewProjection, camera) {
1727
- // Explicit render-item sources were historically never culled, so culling
1728
- // stays opt-in: only an explicit `frustumCulling: true` turns it on.
1729
- if (source.frustumCulling !== true)
1730
- return undefined;
1731
- if (camera)
1732
- return camera.frustum;
1733
- if (!cameraViewProjection)
1734
- return undefined;
1735
- return Frustum.fromMatrix(toMathMat4(cameraViewProjection));
1736
- }
1737
- function cullExplicitRenderItems(items, frustum, diagnostics) {
1738
- if (!frustum) {
1739
- diagnostics.submittedObjects += items.length;
1740
- diagnostics.visibleObjects += items.length;
1741
- return items;
1742
- }
1743
- const visible = [];
1744
- for (const item of items) {
1745
- diagnostics.submittedObjects += 1;
1746
- if (!isFrustumCullableRenderItem(item)) {
1747
- diagnostics.visibleObjects += 1;
1748
- visible.push(item);
1749
- continue;
1750
- }
1751
- diagnostics.frustumTestedObjects += 1;
1752
- const bounds = explicitRenderItemWorldBounds(item);
1753
- if (!frustum.intersectsBox(bounds.toMathBox())) {
1754
- diagnostics.culledObjects += 1;
1755
- continue;
1756
- }
1757
- diagnostics.visibleObjects += 1;
1758
- visible.push(item);
1759
- }
1760
- return visible;
1761
- }
1762
- function isFrustumCullableRenderItem(item) {
1763
- if (item.drawRange !== undefined)
1764
- return false;
1765
- if (item.morphTargets !== undefined || item.morphWeights !== undefined)
1766
- return false;
1767
- return true;
1768
- }
1769
- function explicitRenderItemWorldBounds(item) {
1770
- const modelMatrix = toMat4(item.modelMatrix ?? identityMat4(), "modelMatrix", item.label);
1771
- if (item.skinning) {
1772
- const local = skinnedItemLocalBounds(item.geometry, item.skinning);
1773
- return boundsFromLocal(local, modelMatrix, item.instanceTransforms);
1774
- }
1775
- return boundsFromLocal(item.geometry.bounds, modelMatrix, item.instanceTransforms);
1776
- }
1777
- function boundsFromLocal(envelope, modelMatrix, instanceTransforms) {
1778
- const local = new SceneBounds3([envelope.min[0], envelope.min[1], envelope.min[2]], [envelope.max[0], envelope.max[1], envelope.max[2]]);
1779
- if (!instanceTransforms || instanceTransforms.length < 16) {
1780
- return local.transform(modelMatrix);
1781
- }
1782
- let bounds = new SceneBounds3();
1783
- for (let offset = 0; offset + 16 <= instanceTransforms.length; offset += 16) {
1784
- const instanceMatrix = toMat4(instanceTransforms.slice(offset, offset + 16), "instanceTransforms");
1785
- bounds = bounds.union(local.transform(multiplyMat4(modelMatrix, instanceMatrix)));
1786
- }
1787
- return bounds;
1646
+ return { items, diagnostics, culledShadowCasters: culledShadowCasters ?? [], ...(cullingFrustum ? { cullingFrustum } : {}) };
1788
1647
  }
1789
- const skinnedCullingBoundsCache = new WeakMap();
1790
- function skinnedItemLocalBounds(geometry, skinning) {
1791
- const cached = skinnedCullingBoundsCache.get(geometry);
1792
- if (cached && float32ArraysEqual(cached.matrices, skinning.matrices)) {
1793
- return cached.bounds;
1794
- }
1795
- const bounds = computeSkinnedGeometryBounds(geometry, skinning);
1796
- skinnedCullingBoundsCache.set(geometry, { matrices: new Float32Array(skinning.matrices), bounds });
1797
- return bounds;
1798
- }
1799
- function float32ArraysEqual(left, right) {
1800
- if (left.length !== right.length)
1801
- return false;
1802
- for (let index = 0; index < left.length; index += 1) {
1803
- if (left[index] !== right[index])
1804
- return false;
1805
- }
1806
- return true;
1807
- }
1808
- const staticBatchGeometryIds = new WeakMap();
1809
- const staticBatchMaterialIds = new WeakMap();
1810
- let nextStaticBatchResourceId = 1;
1811
- /**
1812
- * Merges shared-material static geometry, then hands the result to batching.
1813
- *
1814
- * Consolidation runs first because it reduces distinct geometries; whatever it leaves unmerged (single
1815
- * items, oversized meshes, non-indexed topology) can still be instanced by batching afterwards.
1816
- */
1817
- const staticMeshConsolidationCaches = new WeakMap();
1818
- function applyRendererOwnedStaticMeshConsolidation(source, items) {
1819
- if (!source.staticMeshConsolidation)
1820
- return items;
1821
- const mergeable = [];
1822
- const passthrough = [];
1823
- for (const item of items) {
1824
- // The same eligibility rule as batching: anything skinned, morphed, instanced, or draw-ranged is
1825
- // not static geometry and must not have a transform baked into it.
1826
- if (isStaticBatchCandidate(item)) {
1827
- mergeable.push({
1828
- geometry: item.geometry,
1829
- material: item.material,
1830
- modelMatrix: item.modelMatrix ?? identityMat4(),
1831
- ...(item.label ? { label: item.label } : {})
1832
- });
1833
- }
1834
- else {
1835
- passthrough.push(item);
1836
- }
1837
- }
1838
- if (mergeable.length === 0)
1839
- return items;
1840
- const options = source.staticMeshConsolidation === true ? {} : source.staticMeshConsolidation;
1841
- // Cached per render source: merging walks every vertex, so repeating it each frame costs far more
1842
- // than the draw calls it saves.
1843
- let cache = staticMeshConsolidationCaches.get(source);
1844
- if (!cache) {
1845
- cache = createStaticMeshConsolidationCache();
1846
- staticMeshConsolidationCaches.set(source, cache);
1847
- }
1848
- const consolidated = cache.consolidate(mergeable, {
1849
- labelPrefix: "renderer-consolidated-mesh",
1850
- ...options
1851
- });
1852
- return [...passthrough, ...consolidated.renderItems];
1853
- }
1854
- function applyRendererOwnedStaticBatching(source, items) {
1855
- if (!source.staticBatching)
1856
- return items;
1857
- const batchable = [];
1858
- const passthrough = [];
1859
- for (const item of items) {
1860
- if (isStaticBatchCandidate(item)) {
1861
- batchable.push({
1862
- geometry: item.geometry,
1863
- material: item.material,
1864
- modelMatrix: item.modelMatrix ?? identityMat4(),
1865
- batchKey: staticBatchKey(item),
1866
- label: item.label,
1867
- castShadow: item.castShadow
1868
- });
1869
- }
1870
- else {
1871
- passthrough.push(item);
1872
- }
1873
- }
1874
- if (batchable.length === 0)
1875
- return items;
1876
- const options = source.staticBatching === true ? {} : source.staticBatching;
1877
- const batched = batchStaticRenderItems(batchable, {
1878
- labelPrefix: "renderer-static-batch",
1879
- ...options
1880
- });
1881
- return [...passthrough, ...batched.renderItems];
1882
- }
1883
- function isStaticBatchCandidate(item) {
1884
- return item.material !== undefined &&
1885
- item.drawRange === undefined &&
1886
- item.skinning === undefined &&
1887
- item.morphTargets === undefined &&
1888
- item.morphWeights === undefined &&
1889
- item.instanceTransforms === undefined &&
1890
- item.instanceColors === undefined &&
1891
- item.instanceAttributes === undefined;
1892
- }
1893
- function staticBatchKey(item) {
1894
- return `${resourceId(staticBatchGeometryIds, item.geometry)}:${resourceId(staticBatchMaterialIds, item.material)}:shadow-${item.castShadow !== false ? "on" : "off"}`;
1895
- }
1896
- function resourceId(ids, resource) {
1897
- const existing = ids.get(resource);
1898
- if (existing !== undefined)
1899
- return existing;
1900
- const next = nextStaticBatchResourceId++;
1901
- ids.set(resource, next);
1902
- return next;
1903
- }
1904
- function collectSceneRenderItems(scene, source, cameraViewProjection, camera, diagnostics) {
1648
+ function collectSceneRenderItems(scene, source, cameraViewProjection, camera, diagnostics, culledShadowCasters) {
1905
1649
  scene.updateWorldTransforms();
1906
1650
  const renderables = scene.collectRenderables();
1907
1651
  if (renderables.length === 0) {
@@ -1943,14 +1687,14 @@ function collectSceneRenderItems(scene, source, cameraViewProjection, camera, di
1943
1687
  if (camera)
1944
1688
  diagnostics.frustumTestedObjects += 1;
1945
1689
  }
1946
- if (camera && !camera.frustum.intersectsBox(bounds.toMathBox())) {
1947
- if (diagnostics)
1948
- diagnostics.culledObjects += 1;
1690
+ const culled = camera !== undefined && !camera.frustum.intersectsBox(bounds.toMathBox());
1691
+ if (culled && diagnostics)
1692
+ diagnostics.culledObjects += 1;
1693
+ if (culled && !culledShadowCasters)
1949
1694
  continue;
1950
- }
1951
- if (diagnostics)
1695
+ if (!culled && diagnostics)
1952
1696
  diagnostics.visibleObjects += 1;
1953
- items.push({
1697
+ (culled ? culledShadowCasters : items).push({
1954
1698
  geometry,
1955
1699
  material,
1956
1700
  label: node.name,
@@ -1965,7 +1709,12 @@ function collectSceneRenderItems(scene, source, cameraViewProjection, camera, di
1965
1709
  }
1966
1710
  return items;
1967
1711
  }
1968
- function createRenderCollectionDiagnostics() {
1712
+ /** Travel direction of the first shadow-casting directional light (02-S5). */
1713
+ function shadowSunTravel(lights) {
1714
+ const sun = lights.find((light) => light.kind === "directional" && light.castsShadow);
1715
+ return sun ? [sun.direction[0], sun.direction[1], sun.direction[2]] : undefined;
1716
+ }
1717
+ export function createRenderCollectionDiagnostics() {
1969
1718
  return {
1970
1719
  submittedObjects: 0,
1971
1720
  visibleObjects: 0,
@@ -1973,29 +1722,6 @@ function createRenderCollectionDiagnostics() {
1973
1722
  frustumTestedObjects: 0
1974
1723
  };
1975
1724
  }
1976
- function createPostprocessDiagnostics(postprocess, ownedTargets, width, height, context = {}) {
1977
- if (!postprocess)
1978
- return undefined;
1979
- const passes = createRendererPostprocessPasses(postprocess);
1980
- const targetFormat = context.targetFormat ?? postprocess.targetFormat ?? "rgba8";
1981
- return {
1982
- postprocessPasses: passes.length,
1983
- postprocessPassNames: passes.map((pass) => pass.name),
1984
- postprocessTargetFormat: targetFormat,
1985
- postprocessRenderTargets: ownedTargets.length,
1986
- postprocessTextures: ownedTargets.reduce((total, target) => total + 1 + (target.depthTexture ? 1 : 0), 0),
1987
- postprocessTargetWidth: width,
1988
- postprocessTargetHeight: height,
1989
- postprocessPlan: createRendererPostprocessPlanDiagnostics(postprocess, {
1990
- sourceTargetFormat: targetFormat,
1991
- targetFormat,
1992
- nativeLdrPostprocess: context.nativeLdrPostprocess,
1993
- rendererDepthAvailable: context.rendererDepthAvailable,
1994
- width,
1995
- height
1996
- })
1997
- };
1998
- }
1999
1725
  const CAPTURE_NON_BLANK_LUMINANCE_THRESHOLD = 1 / 255;
2000
1726
  const CAPTURE_UNDEREXPOSED_LUMINANCE_THRESHOLD = 5 / 255;
2001
1727
  const CAPTURE_OVEREXPOSED_LUMINANCE_THRESHOLD = 250 / 255;
@@ -2255,19 +1981,6 @@ function withRendererFrameDiagnostics(diagnostics, collection, postprocess) {
2255
1981
  ...(postprocess ?? {})
2256
1982
  };
2257
1983
  }
2258
- function renderableWorldBounds(geometry, modelMatrix, instanceTransforms, morphTargets, morphWeights, skinning) {
2259
- const envelope = computeSkinnedMorphTargetWeightedBounds(geometry, skinning, morphTargets, morphWeights);
2260
- const local = new SceneBounds3([envelope.min[0], envelope.min[1], envelope.min[2]], [envelope.max[0], envelope.max[1], envelope.max[2]]);
2261
- if (!instanceTransforms) {
2262
- return local.transform(modelMatrix);
2263
- }
2264
- let bounds = new SceneBounds3();
2265
- for (let offset = 0; offset < instanceTransforms.length; offset += 16) {
2266
- const instanceMatrix = toMat4(instanceTransforms.slice(offset, offset + 16), "instanceTransforms");
2267
- bounds = bounds.union(local.transform(multiplyMat4(modelMatrix, instanceMatrix)));
2268
- }
2269
- return bounds;
2270
- }
2271
1984
  function applyViewProjection(items, cameraViewProjection) {
2272
1985
  const hasCameraViewProjection = cameraViewProjection !== undefined;
2273
1986
  const viewProjection = cameraViewProjection ?? identityMat4();
@@ -2306,30 +2019,6 @@ function createAutoFrameCamera(source, items, width, height) {
2306
2019
  function collectRenderItemBounds(items) {
2307
2020
  return collectItemBounds(items, true);
2308
2021
  }
2309
- /**
2310
- * Bounds over every render item, including those excluded from camera
2311
- * auto-framing.
2312
- *
2313
- * `includeInAutoFrame` answers "should the camera frame this?", which is a
2314
- * composition choice. It must not decide which geometry a shadow frustum covers:
2315
- * a large ground plane or backdrop is commonly excluded from auto-framing while
2316
- * still being the surface that receives shadows. Fitting the light frustum to the
2317
- * auto-frame subset shrinks it to the caster alone, so the receiver falls outside
2318
- * the shadow map and no shadow is ever visible.
2319
- */
2320
- function collectShadowCoverageBounds(items) {
2321
- return collectItemBounds(items, false);
2322
- }
2323
- function collectItemBounds(items, respectAutoFrameExclusion) {
2324
- let bounds;
2325
- for (const item of items) {
2326
- if (respectAutoFrameExclusion && item.includeInAutoFrame === false)
2327
- continue;
2328
- const itemBounds = renderableWorldBounds(item.geometry, toMat4(item.modelMatrix ?? identityMat4(), "modelMatrix", item.label), item.instanceTransforms, item.morphTargets, item.morphWeights, item.skinning);
2329
- bounds = bounds ? bounds.union(itemBounds) : itemBounds;
2330
- }
2331
- return bounds;
2332
- }
2333
2022
  function collectCameraFrameOptions(source) {
2334
2023
  if (source instanceof Scene || isIterable(source) || !source.cameraFrameOptions)
2335
2024
  return {};
@@ -2398,7 +2087,7 @@ function resolveCamera(source, camera, viewport, options = {}) {
2398
2087
  function hasExplicitAutoFrameCameraPolicy(source) {
2399
2088
  return !(source instanceof Scene) && !isIterable(source) && source.cameraPolicy === "auto-frame";
2400
2089
  }
2401
- function cameraWorldPosition(camera) {
2090
+ export function cameraWorldPosition(camera) {
2402
2091
  const matrix = camera.transform.worldMatrix;
2403
2092
  return [matrix[12] ?? 0, matrix[13] ?? 0, matrix[14] ?? 0];
2404
2093
  }
@@ -2413,9 +2102,6 @@ function maybeCameraResize(camera) {
2413
2102
  function resolveSceneCamera(source) {
2414
2103
  return sceneFromSource(source)?.collectCameras()[0];
2415
2104
  }
2416
- function sceneFromSource(source) {
2417
- return source instanceof Scene ? source : isIterable(source) ? undefined : source.scene;
2418
- }
2419
2105
  function normalMatrixFromModel(modelMatrix) {
2420
2106
  let matrix;
2421
2107
  try {
@@ -2446,17 +2132,6 @@ function transposeMat4(matrix) {
2446
2132
  matrix[3], matrix[7], matrix[11], matrix[15]
2447
2133
  ];
2448
2134
  }
2449
- function toMat4(value, field, label) {
2450
- const values = Array.from(value);
2451
- if (values.length !== 16 || !values.every(Number.isFinite)) {
2452
- throw new RenderDeviceError("Renderer matrix inputs must be finite mat4 values", "RENDERER_MATRIX_CONTRACT", {
2453
- field,
2454
- label,
2455
- scalars: values.length
2456
- });
2457
- }
2458
- return values;
2459
- }
2460
2135
  function lookupRenderResource(lookup, key) {
2461
2136
  if (isReadonlyMap(lookup)) {
2462
2137
  return lookup.get(key);
@@ -2524,33 +2199,4 @@ function normalizeDefaultLightDirection(direction) {
2524
2199
  }
2525
2200
  return [direction[0] / length, direction[1] / length, direction[2] / length];
2526
2201
  }
2527
- function cloneEnvironmentLighting(environment) {
2528
- return {
2529
- color: [...environment.color],
2530
- intensity: environment.intensity,
2531
- ...(environment.proceduralMap
2532
- ? {
2533
- proceduralMap: {
2534
- skyColor: [...environment.proceduralMap.skyColor],
2535
- horizonColor: [...environment.proceduralMap.horizonColor],
2536
- groundColor: [...environment.proceduralMap.groundColor],
2537
- specularColor: [...environment.proceduralMap.specularColor],
2538
- intensity: environment.proceduralMap.intensity,
2539
- specularIntensity: environment.proceduralMap.specularIntensity
2540
- }
2541
- }
2542
- : {}),
2543
- ...(environment.environmentMapTexture ? { environmentMapTexture: environment.environmentMapTexture } : {}),
2544
- ...(environment.environmentCubeMapTexture ? { environmentCubeMapTexture: environment.environmentCubeMapTexture } : {}),
2545
- ...(environment.environmentMapIntensity !== undefined ? { environmentMapIntensity: environment.environmentMapIntensity } : {}),
2546
- ...(environment.environmentMapSpecularIntensity !== undefined ? { environmentMapSpecularIntensity: environment.environmentMapSpecularIntensity } : {}),
2547
- ...(environment.environmentMapRotation !== undefined ? { environmentMapRotation: environment.environmentMapRotation } : {}),
2548
- ...(environment.environmentMapMipCount !== undefined ? { environmentMapMipCount: environment.environmentMapMipCount } : {}),
2549
- ...(environment.environmentMapEncoding ? { environmentMapEncoding: environment.environmentMapEncoding } : {}),
2550
- ...(environment.environmentBrdfLutTexture ? { environmentBrdfLutTexture: environment.environmentBrdfLutTexture } : {})
2551
- };
2552
- }
2553
- function isIterable(value) {
2554
- return typeof value[Symbol.iterator] === "function";
2555
- }
2556
2202
  //# sourceMappingURL=Renderer.js.map