@meimu/mutracer 0.3.0 → 0.3.1

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 (304) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSES/FidelityFX-FSR.txt +19 -0
  3. package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
  4. package/THIRD_PARTY_NOTICES.md +18 -4
  5. package/dist/assets/bvh.worker.js +1 -1
  6. package/dist/mutracer.umd.js +6260 -5580
  7. package/docs/api.md +45 -18
  8. package/docs/materials.md +4 -2
  9. package/docs/performance.md +7 -0
  10. package/docs/post-processing.md +62 -9
  11. package/docs/progressive-rendering.md +3 -0
  12. package/docs/sampling.md +4 -0
  13. package/docs/technical/acceleration.md +52 -0
  14. package/docs/technical/aovs.md +79 -0
  15. package/docs/technical/caustics.md +109 -0
  16. package/docs/technical/continuous-spectrum.md +29 -0
  17. package/docs/technical/display-upscale.md +82 -0
  18. package/docs/technical/openpbr.md +99 -0
  19. package/docs/technical/pbrt-import.md +168 -0
  20. package/docs/technical/tiling.md +74 -0
  21. package/docs/technical/webgl.md +53 -0
  22. package/docs/viewer.md +11 -1
  23. package/lib/Display.d.ts +19 -5
  24. package/lib/Display.js +10 -7
  25. package/lib/Display.js.map +1 -1
  26. package/lib/Engine.d.ts +2 -1
  27. package/lib/Engine.js +30 -2
  28. package/lib/Engine.js.map +1 -1
  29. package/lib/Render.d.ts +20 -11
  30. package/lib/Render.js +32 -7
  31. package/lib/Render.js.map +1 -1
  32. package/lib/main.d.ts +3 -1
  33. package/lib/main.js +1 -0
  34. package/lib/main.js.map +1 -1
  35. package/lib/oidn.d.ts +1 -1
  36. package/lib/renderer/AovPrimitiveCache.js +39 -8
  37. package/lib/renderer/AovPrimitiveCache.js.map +1 -1
  38. package/lib/renderer/DisplayPostProcess.d.ts +8 -3
  39. package/lib/renderer/DisplayPostProcess.js +51 -18
  40. package/lib/renderer/DisplayPostProcess.js.map +1 -1
  41. package/lib/renderer/MaterialData.js +7 -2
  42. package/lib/renderer/MaterialData.js.map +1 -1
  43. package/lib/renderer/RenderingPipeline.d.ts +7 -1
  44. package/lib/renderer/RenderingPipeline.js.map +1 -1
  45. package/lib/renderer/TileRender.d.ts +2 -2
  46. package/lib/renderer/TileRender.js +128 -7
  47. package/lib/renderer/TileRender.js.map +1 -1
  48. package/lib/renderer/WGPUAov.d.ts +6 -1
  49. package/lib/renderer/WGPUAov.js +108 -14
  50. package/lib/renderer/WGPUAov.js.map +1 -1
  51. package/lib/renderer/WGPUCanvasSurface.js +12 -1
  52. package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
  53. package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
  54. package/lib/renderer/WGPUFullQuadPass.js +3 -3
  55. package/lib/renderer/WGPURayTraceOutput.js +12 -12
  56. package/lib/renderer/WGPURayTracePass.d.ts +17 -4
  57. package/lib/renderer/WGPURayTracePass.js +194 -71
  58. package/lib/renderer/WGPURayTracePass.js.map +1 -1
  59. package/lib/renderer/WGPURenderingPipeline.js +46 -40
  60. package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
  61. package/lib/renderer/WebGLAov.js +3 -3
  62. package/lib/renderer/WebGLAov.js.map +1 -1
  63. package/lib/renderer/WebGLFullQuadPass.d.ts +1 -1
  64. package/lib/renderer/WebGLFullQuadPass.js +8 -2
  65. package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
  66. package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
  67. package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
  68. package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
  69. package/lib/renderer/WebGLRayTracePass.d.ts +14 -10
  70. package/lib/renderer/WebGLRayTracePass.js +115 -111
  71. package/lib/renderer/WebGLRayTracePass.js.map +1 -1
  72. package/lib/renderer/WebGLRenderingPipeline.js +10 -3
  73. package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
  74. package/lib/renderer/WebGLSkyBaker.js +57 -57
  75. package/lib/renderer/aov.d.ts +13 -1
  76. package/lib/renderer/aov.js +21 -2
  77. package/lib/renderer/aov.js.map +1 -1
  78. package/lib/renderer/aovDisplay.js +2 -2
  79. package/lib/renderer/aovDisplay.js.map +1 -1
  80. package/lib/renderer/binnedSahBvh.d.ts +2 -1
  81. package/lib/renderer/binnedSahBvh.js +24 -17
  82. package/lib/renderer/binnedSahBvh.js.map +1 -1
  83. package/lib/renderer/bvhAccel.d.ts +3 -1
  84. package/lib/renderer/bvhAccel.js +36 -6
  85. package/lib/renderer/bvhAccel.js.map +1 -1
  86. package/lib/renderer/cameraUniform.d.ts +1 -1
  87. package/lib/renderer/cameraUniform.js +6 -2
  88. package/lib/renderer/cameraUniform.js.map +1 -1
  89. package/lib/renderer/compactVertices.d.ts +14 -0
  90. package/lib/renderer/compactVertices.js +124 -0
  91. package/lib/renderer/compactVertices.js.map +1 -0
  92. package/lib/renderer/easu.d.ts +11 -0
  93. package/lib/renderer/easu.js +156 -0
  94. package/lib/renderer/easu.js.map +1 -0
  95. package/lib/renderer/geometryUpdateState.d.ts +1 -0
  96. package/lib/renderer/geometryUpdateState.js.map +1 -1
  97. package/lib/renderer/geometryUpdates.js +3 -2
  98. package/lib/renderer/geometryUpdates.js.map +1 -1
  99. package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
  100. package/lib/renderer/glsl/aovReflectance.glsl.js +35 -35
  101. package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
  102. package/lib/renderer/glsl/aovTrace.frag.js +44 -36
  103. package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
  104. package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
  105. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
  106. package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
  107. package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
  108. package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
  109. package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
  110. package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +8 -8
  111. package/lib/renderer/glsl/chunks/envMap.glsl.js +67 -67
  112. package/lib/renderer/glsl/chunks/intersect.glsl.js +390 -375
  113. package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
  114. package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +120 -120
  115. package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +562 -562
  116. package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
  117. package/lib/renderer/glsl/chunks/random.glsl.js +4 -4
  118. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +37 -35
  119. package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
  120. package/lib/renderer/glsl/chunks/sampleLight.glsl.js +70 -74
  121. package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
  122. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -1
  123. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +107 -88
  124. package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
  125. package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +11 -11
  126. package/lib/renderer/glsl/chunks/sampling.glsl.js +77 -77
  127. package/lib/renderer/glsl/chunks/sobol.glsl.js +70 -70
  128. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
  129. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
  130. package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
  131. package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
  132. package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
  133. package/lib/renderer/glsl/depthQuery.frag.js +12 -6
  134. package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
  135. package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
  136. package/lib/renderer/glsl/rayTrace.frag.js +233 -170
  137. package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
  138. package/lib/renderer/glsl/shadowCatcher.frag.js +10 -9
  139. package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
  140. package/lib/renderer/glsl/webglPipeline.frag.js +58 -58
  141. package/lib/renderer/gpuMemory.js +1 -1
  142. package/lib/renderer/gpuMemory.js.map +1 -1
  143. package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
  144. package/lib/renderer/openPbrEnergyLut.js +18 -1
  145. package/lib/renderer/openPbrEnergyLut.js.map +1 -1
  146. package/lib/renderer/pathLimits.d.ts +5 -4
  147. package/lib/renderer/pathLimits.js +6 -5
  148. package/lib/renderer/pathLimits.js.map +1 -1
  149. package/lib/renderer/prepareMeshBVH.d.ts +2 -0
  150. package/lib/renderer/prepareMeshBVH.js +5 -3
  151. package/lib/renderer/prepareMeshBVH.js.map +1 -1
  152. package/lib/renderer/progressiveScheduler.js +1 -1
  153. package/lib/renderer/progressiveScheduler.js.map +1 -1
  154. package/lib/renderer/renderPipeline.d.ts +4 -0
  155. package/lib/renderer/renderPipeline.js +1 -0
  156. package/lib/renderer/renderPipeline.js.map +1 -1
  157. package/lib/renderer/researchTransport.d.ts +1 -1
  158. package/lib/renderer/researchTransport.js.map +1 -1
  159. package/lib/renderer/sceneAssembly.d.ts +1 -1
  160. package/lib/renderer/sceneAssembly.js +4 -3
  161. package/lib/renderer/sceneAssembly.js.map +1 -1
  162. package/lib/renderer/sceneChangeDetector.d.ts +1 -1
  163. package/lib/renderer/sceneChangeDetector.js +3 -1
  164. package/lib/renderer/sceneChangeDetector.js.map +1 -1
  165. package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
  166. package/lib/renderer/sceneLayoutSchema.js +2 -2
  167. package/lib/renderer/sceneLayoutSchema.js.map +1 -1
  168. package/lib/renderer/scenePreparation.d.ts +3 -2
  169. package/lib/renderer/scenePreparation.js +18 -2
  170. package/lib/renderer/scenePreparation.js.map +1 -1
  171. package/lib/renderer/scratchSampling.js +6 -6
  172. package/lib/renderer/spectrum.js +2 -2
  173. package/lib/renderer/staticBvhPreparation.d.ts +9 -0
  174. package/lib/renderer/staticBvhPreparation.js +8 -2
  175. package/lib/renderer/staticBvhPreparation.js.map +1 -1
  176. package/lib/renderer/surfaceHit.d.ts +10 -0
  177. package/lib/renderer/surfaceHit.js +22 -0
  178. package/lib/renderer/surfaceHit.js.map +1 -0
  179. package/lib/renderer/tangentRequirements.d.ts +2 -0
  180. package/lib/renderer/tangentRequirements.js +7 -0
  181. package/lib/renderer/tangentRequirements.js.map +1 -0
  182. package/lib/renderer/textureAtlas.d.ts +4 -0
  183. package/lib/renderer/textureAtlas.js +48 -2
  184. package/lib/renderer/textureAtlas.js.map +1 -1
  185. package/lib/renderer/webgl.js +4 -0
  186. package/lib/renderer/webgl.js.map +1 -1
  187. package/lib/renderer/webglVertexAttributes.d.ts +17 -0
  188. package/lib/renderer/webglVertexAttributes.js +44 -0
  189. package/lib/renderer/webglVertexAttributes.js.map +1 -0
  190. package/lib/renderer/wgpuBindlessSource.js +2 -2
  191. package/lib/renderer/wgpuMaterialConstants.js +4 -3
  192. package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
  193. package/lib/renderer/wgpuSceneUniform.js +2 -2
  194. package/lib/renderer/wgpuSceneUniform.js.map +1 -1
  195. package/lib/renderer/wgpuShaderSource.d.ts +15 -0
  196. package/lib/renderer/wgpuShaderSource.js +1 -1
  197. package/lib/renderer/wgpuShaderSource.js.map +1 -1
  198. package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
  199. package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
  200. package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
  201. package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
  202. package/lib/renderer/wgsl/aovReflectance.wgsl.js +39 -39
  203. package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
  204. package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
  205. package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
  206. package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
  207. package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
  208. package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
  209. package/lib/renderer/wgsl/aovTrace.wgsl.js +31 -31
  210. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
  211. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
  212. package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
  213. package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
  214. package/lib/renderer/wgsl/causticLight.compute.d.ts +1 -1
  215. package/lib/renderer/wgsl/causticLight.compute.js +121 -119
  216. package/lib/renderer/wgsl/causticLight.compute.js.map +1 -1
  217. package/lib/renderer/wgsl/chunks/background.wgsl.js +46 -46
  218. package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +4 -4
  219. package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +3 -3
  220. package/lib/renderer/wgsl/chunks/caustics.wgsl.js +3 -3
  221. package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
  222. package/lib/renderer/wgsl/chunks/envMap.wgsl.js +30 -30
  223. package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
  224. package/lib/renderer/wgsl/chunks/intersect.wgsl.js +550 -542
  225. package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
  226. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
  227. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +18 -16
  228. package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
  229. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
  230. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +70 -69
  231. package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
  232. package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +593 -593
  233. package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +118 -118
  234. package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
  235. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +4 -1
  236. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +32 -26
  237. package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
  238. package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +114 -114
  239. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
  240. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +159 -137
  241. package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
  242. package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +8 -8
  243. package/lib/renderer/wgsl/chunks/sampling.wgsl.js +74 -74
  244. package/lib/renderer/wgsl/chunks/sobol.wgsl.js +74 -74
  245. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
  246. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
  247. package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
  248. package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
  249. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
  250. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
  251. package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
  252. package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
  253. package/lib/renderer/wgsl/compose.frag.wgsl.js +99 -97
  254. package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
  255. package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
  256. package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
  257. package/lib/renderer/wgsl/depthQuery.wgsl.js +11 -2
  258. package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
  259. package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
  260. package/lib/renderer/wgsl/easu.wgsl.js +80 -0
  261. package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
  262. package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
  263. package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
  264. package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
  265. package/lib/renderer/wgsl/jnlm.compute.js +74 -74
  266. package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
  267. package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
  268. package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
  269. package/lib/renderer/wgsl/photonMap.compute.js +89 -89
  270. package/lib/renderer/wgsl/proceduralSky.compute.js +61 -61
  271. package/lib/renderer/wgsl/rayTrace.compute.d.ts +14 -0
  272. package/lib/renderer/wgsl/rayTrace.compute.js +395 -333
  273. package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
  274. package/lib/scene/Scene.js.map +1 -1
  275. package/lib/settings/render.d.ts +11 -0
  276. package/lib/settings/render.js +1 -0
  277. package/lib/settings/render.js.map +1 -1
  278. package/lib/util/fromTHREE.js +21 -14
  279. package/lib/util/fromTHREE.js.map +1 -1
  280. package/lib/version.d.ts +1 -1
  281. package/lib/version.js +1 -1
  282. package/lib/version.js.map +1 -1
  283. package/package.json +5 -2
  284. package/lib/oidnBundledWeights.cdn.d.ts +0 -2
  285. package/lib/oidnBundledWeights.cdn.js +0 -5
  286. package/lib/oidnBundledWeights.cdn.js.map +0 -1
  287. package/lib/renderer/bvh.worker.d.ts +0 -1
  288. package/lib/renderer/bvh.worker.js +0 -16
  289. package/lib/renderer/bvh.worker.js.map +0 -1
  290. package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
  291. package/lib/renderer/bvhWorkerBuild.js +0 -17
  292. package/lib/renderer/bvhWorkerBuild.js.map +0 -1
  293. package/lib/renderer/lightCore.d.ts +0 -12
  294. package/lib/renderer/lightCore.js +0 -13
  295. package/lib/renderer/lightCore.js.map +0 -1
  296. package/lib/renderer/materialCore.d.ts +0 -8
  297. package/lib/renderer/materialCore.js +0 -9
  298. package/lib/renderer/materialCore.js.map +0 -1
  299. package/lib/scene/PixelTexture.d.ts +0 -6
  300. package/lib/scene/PixelTexture.js +0 -10
  301. package/lib/scene/PixelTexture.js.map +0 -1
  302. package/lib/util/studioLighting.d.ts +0 -18
  303. package/lib/util/studioLighting.js +0 -36
  304. package/lib/util/studioLighting.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { hdrResolveWGSL } from './wgsl/compose.frag.wgsl.js';
1
+ import { hdrResolveWGSL, TONE_MAPPING_MODES } from './wgsl/compose.frag.wgsl.js';
2
2
  import { oidnAuxiliaryDefine } from './wgsl/oidnAuxiliary.wgsl.js';
3
3
  import { displayAovKind, DEFAULT_AOV_DISPLAY } from './aovDisplay.js';
4
4
  import { WGPUAov } from './WGPUAov.js';
5
- import { aovMask } from './aov.js';
5
+ import { aovMask, COMPACT_AOV_KINDS, DISPLAY_AOV_SAMPLE_CAP } from './aov.js';
6
6
  import { DisplayPostProcess } from './DisplayPostProcess.js';
7
7
  import { customDenoiseLayersMain, customDenoiseCoverageMain } from './wgsl/customDenoise.wgsl.js';
8
8
  import { WGPUCanvasSurface } from './WGPUCanvasSurface.js';
@@ -17,6 +17,7 @@ import WGPURayTracePass from './WGPURayTracePass.js';
17
17
  import { composeMain, composeDefine, compositeDenoiseOutputMain, compositeDenoiseDisplayMain, linearToSrgbDefine } from './wgsl/compose.frag.wgsl.js';
18
18
  import halton from './halton.js';
19
19
  import { makeTileRender, makeTileRenderWithPredict } from './TileRender.js';
20
+ import { WORKGROUP_SIZE } from './wgsl/rayTrace.compute.js';
20
21
  import { WGPURayTraceOutputPass } from './WGPURayTraceOutput.js';
21
22
  import { vec3 } from '../math.js';
22
23
  import WGPUBloomPass from './WGPUBloomPass.js';
@@ -27,16 +28,16 @@ export const oidnAlbedoSrgbEncodeMain = /* wgsl */ `
27
28
  if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
28
29
  let index = globalId.x + globalId.y * u32(imageSize.x);
29
30
  let raw = textureLoad(in_albedo, vec2u(globalId.xy), 0);
30
- let encoded = sQ(raw.rgb);
31
+ let encoded = uq(raw.rgb);
31
32
  out_albedo[index] = vec4f(encoded, raw.a);
32
33
  `;
33
34
  export const oidnAlbedoSrgbDecodeMain = /* wgsl */ `
34
35
  if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
35
36
  let index = globalId.x + globalId.y * u32(imageSize.x);
36
37
  let filtered = in_albedo[index];
37
- let linear = sP(filtered.rgb);
38
+ let linear = uo(filtered.rgb);
38
39
  var result = linear;
39
- let jj = textureLoad(in_rawAlbedo, vec2i(globalId.xy), 0).a;
40
+ let jN = textureLoad(in_rawAlbedo, vec2i(globalId.xy), 0).a;
40
41
  if (preserveSurfaceTexture != 0u) {
41
42
 
42
43
 
@@ -44,27 +45,27 @@ if (preserveSurfaceTexture != 0u) {
44
45
  let pixel = vec2i(globalId.xy);
45
46
  let center = textureLoad(in_rawNormal, pixel, 0);
46
47
  let n = normalize(center.rgb * 2.0 - 1.0 + vec3f(1e-8));
47
- var nS = 0.0;
48
+ var oR = 0.0;
48
49
  for (var y = -1; y <= 1; y++) {
49
50
  for (var x = -1; x <= 1; x++) {
50
- let vI = textureLoad(in_rawNormal,
51
+ let xA = textureLoad(in_rawNormal,
51
52
  clamp(pixel + vec2i(x, y), vec2i(0), imageSize - 1), 0);
52
- let nn = normalize(vI.rgb * 2.0 - 1.0 + vec3f(1e-8));
53
- nS = max(nS,
54
- max(1.0 - dot(n, nn), abs(center.a - vI.a)));
53
+ let nn = normalize(xA.rgb * 2.0 - 1.0 + vec3f(1e-8));
54
+ oR = max(oR,
55
+ max(1.0 - dot(n, nn), abs(center.a - xA.a)));
55
56
  }
56
57
  }
57
- let wc = smoothstep(0.02, 0.1, nS);
58
+ let xY = smoothstep(0.02, 0.1, oR);
58
59
  let raw = clamp(textureLoad(in_rawAlbedo, pixel, 0).rgb,
59
60
  vec3f(0.0), vec3f(1.0));
60
- result = mix(raw, linear, wc);
61
+ result = mix(raw, linear, xY);
61
62
  }
62
- out_albedo[index] = vec4f(result, jj);
63
+ out_albedo[index] = vec4f(result, jN);
63
64
  `;
64
65
  export const oidnNormalSanitizeMain = /* wgsl */ `
65
66
  if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
66
67
  let index = globalId.x + globalId.y * u32(imageSize.x);
67
- out_normal[index] = vec4f(rG(in_normal[index].rgb), 1.0);
68
+ out_normal[index] = vec4f(sW(in_normal[index].rgb), 1.0);
68
69
  `;
69
70
  function createTimeQuery(device) {
70
71
  try {
@@ -231,7 +232,7 @@ function makeWGPUAccumulationTarget(canvas, device, rayTracePass, surface, scrat
231
232
  }).query
232
233
  : undefined;
233
234
  const tileRender = makeTileRender();
234
- const tileRenderWithPredict = timeQuery ? makeTileRenderWithPredict() : undefined;
235
+ const tileRenderWithPredict = timeQuery ? makeTileRenderWithPredict(WORKGROUP_SIZE) : undefined;
235
236
  tileRender.setDesiredMsPerTile(maxTimePerTile);
236
237
  tileRenderWithPredict?.setDesiredMsPerTile(maxTimePerTile);
237
238
  function invalidateTilePrediction() {
@@ -266,9 +267,9 @@ function makeWGPUAccumulationTarget(canvas, device, rayTracePass, surface, scrat
266
267
  var color = load_colorTex(uv, 0);
267
268
  let coverage = clamp(load_coverageTex(uv, 0).a, 0.0, 1.0);
268
269
  color = vec4f(
269
- jx(color.r, coverage, flatBackgroundColor.a > 0.5, true),
270
- jx(color.g, coverage, flatBackgroundColor.a > 0.5, true),
271
- jx(color.b, coverage, flatBackgroundColor.a > 0.5, true), color.a);
270
+ ka(color.r, coverage, flatBackgroundColor.a > 0.5, true),
271
+ ka(color.g, coverage, flatBackgroundColor.a > 0.5, true),
272
+ ka(color.b, coverage, flatBackgroundColor.a > 0.5, true), color.a);
272
273
  output.color = color;
273
274
  `
274
275
  }));
@@ -392,11 +393,11 @@ output.color = color;
392
393
  oidnNormalSanitizePass.setOutputParams({ normal: { channels: 4 } });
393
394
  const outputPass = scratch.get('outputPass', () => new WGPUFullQuadPass('output', device, {
394
395
  fsMain: /* wgsl */ `
395
- let xW = min(
396
+ let zU = min(
396
397
  vec2i(uv2 * vec2f(colorTexRegion())),
397
398
  vec2i(colorTexRegion()) - vec2i(1)
398
399
  );
399
- var color = load_colorTex(xW, 0);
400
+ var color = load_colorTex(zU, 0);
400
401
  color = vec4(color.rgb * color.a, color.a);
401
402
  output.color = color;
402
403
  `,
@@ -470,7 +471,7 @@ output.color = color;
470
471
  estimatedFullFrameTimeMs: traceTime * submittedTileCount,
471
472
  tileCount: submittedTileCount
472
473
  };
473
- submittedTileRenderWithPredict.setLastTraceTime(traceTime);
474
+ submittedTileRenderWithPredict.setLastTraceTime(traceTime, tiles[0], tiles[1]);
474
475
  }
475
476
  activeTimeQuery.resultBuffer.unmap();
476
477
  }).catch(() => {
@@ -646,10 +647,12 @@ output.color = color;
646
647
  finishPresentation(encoder, displayTexture);
647
648
  }
648
649
  function finishPresentation(encoder, displayTexture) {
650
+ const presentationWidth = displayAovKind(output) ? displayTexture.width : renderWidth;
651
+ const presentationHeight = displayAovKind(output) ? displayTexture.height : renderHeight;
649
652
  const activeHDRPeakMeter = hdrOutputActive
650
653
  ? (hdrPeakMeter ??= scratch.get('hdrPeak', () => new WGPUHDRPeakMeter(device)))
651
654
  : undefined;
652
- const hdrPeakReadbackSubmitted = activeHDRPeakMeter?.encode(encoder, displayTexture, renderWidth, renderHeight) ?? false;
655
+ const hdrPeakReadbackSubmitted = activeHDRPeakMeter?.encode(encoder, displayTexture, presentationWidth, presentationHeight) ?? false;
653
656
  if (output === 'normal' || output === 'albedo') {
654
657
  displayTrace?.push('AOV:Raw');
655
658
  displayTexture = getFrameInput(output);
@@ -658,14 +661,14 @@ output.color = color;
658
661
  displayTrace?.push('AOV:Raw');
659
662
  displayTexture = getFrameInput('shadowCatcher');
660
663
  }
661
- if (displayTexture.width < renderWidth || displayTexture.height < renderHeight) {
662
- readbackPass.setSize(renderWidth, renderHeight);
664
+ if (displayTexture.width < presentationWidth || displayTexture.height < presentationHeight) {
665
+ readbackPass.setSize(presentationWidth, presentationHeight);
663
666
  readbackPass.createPass(encoder, { inputTex: displayTexture });
664
667
  displayTexture = readbackPass.getOutput('color');
665
668
  }
666
669
  // Keep the completed denoise visible until its replacement is ready.
667
670
  if (!(preserveDenoisedOutput && output === 'final' && !denoiseValid && presentationDenoised)) {
668
- const width = renderWidth, height = renderHeight;
671
+ const width = presentationWidth, height = presentationHeight;
669
672
  if (!presentationTexture || presentationTexture.width !== width || presentationTexture.height !== height || presentationTexture.format !== displayTexture.format) {
670
673
  const previous = presentationTexture;
671
674
  presentationTexture = device.createTexture({
@@ -690,6 +693,8 @@ output.color = color;
690
693
  postProcessPending = false;
691
694
  drawPostProcess(device.createCommandEncoder(), false, true);
692
695
  }
696
+ const aovResolution = () => execution?.aovResolution === 'display' ? { width: canvas.width, height: canvas.height } : undefined;
697
+ const compactAov = () => !!aovResolution() && !!execution?.aovs?.every(kind => COMPACT_AOV_KINDS.includes(kind));
693
698
  function trace(camera, maxSamples) {
694
699
  applyTraceQuality();
695
700
  // A call to draw means accumulation has been invalidated. Cancel OIDN
@@ -708,7 +713,7 @@ output.color = color;
708
713
  // complete image stay valid, and only Render's restart discards them.
709
714
  if (rayTracePass.isCompilingShader() || !rayTracePass.isPipelineReady())
710
715
  return true;
711
- if (execution?.aovs?.length && !rayTracePass.prepareAovs(execution.aovs))
716
+ if (execution?.aovs?.length && !rayTracePass.prepareAovs(execution.aovs, compactAov()))
712
717
  return true;
713
718
  const resetAccumulation = isFirstFrame;
714
719
  if (resetAccumulation)
@@ -816,7 +821,13 @@ output.color = color;
816
821
  return false;
817
822
  }
818
823
  if (sampleCount !== frameSampleCount && execution?.aovs?.length) {
819
- rayTracePass.renderAovs(aov, camera, sampleCount, execution.aovSamples ?? 16, execution.aovs);
824
+ // Display AOVs only add detail: keep the first beauty image's latency and
825
+ // spread their full-canvas samples over frames instead of batching them.
826
+ // The converging trace completes any remaining samples.
827
+ const display = aovResolution();
828
+ const aovTarget = display && sampleCount < maxSamples ? Math.min(sampleCount - 1, aov.samples + 1) : sampleCount;
829
+ if (aovTarget > 0)
830
+ rayTracePass.renderAovs(aov, camera, aovTarget, Math.min(execution.aovSamples ?? 16, display ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, display);
820
831
  }
821
832
  if (sampleCount !== frameSampleCount && realtime && realtimeDeferPostProcess && sampleCount < renderSampleTarget) {
822
833
  postProcessPending = true;
@@ -892,13 +903,7 @@ output.color = color;
892
903
  }
893
904
  function setToneMappingParams(params) {
894
905
  const newExposure = params.exposure ?? 1;
895
- const newToneMappingMode = {
896
- agx: 0,
897
- aces: 1,
898
- cineon: 2,
899
- reinhard: 3,
900
- linear: 4
901
- }[params.toneMapping ?? 'agx'] ?? 0;
906
+ const newToneMappingMode = TONE_MAPPING_MODES[params.toneMapping ?? 'agx'] ?? 0;
902
907
  const newContrast = params.contrast ?? 1;
903
908
  const newSaturation = params.saturation ?? 1;
904
909
  const newTemperature = params.temperature ?? 0;
@@ -1333,8 +1338,8 @@ output.color = color;
1333
1338
  if (settings.aovs?.length && (!Number.isInteger(settings.aovSamples ?? 16) || (settings.aovSamples ?? 16) < 1))
1334
1339
  throw new RangeError('aovSamples must be a positive integer');
1335
1340
  const previousMask = aovMask(execution?.aovs ?? []), nextMask = aovMask(settings.aovs ?? []);
1336
- if (previousMask !== nextMask || execution?.aovSamples !== settings.aovSamples)
1337
- aov.samples = 0;
1341
+ if (previousMask !== nextMask || execution?.aovSamples !== settings.aovSamples || execution?.aovResolution !== settings.aovResolution)
1342
+ aov.reset();
1338
1343
  execution = { ...settings, aovs: [...(settings.aovs ?? [])] };
1339
1344
  // Presentation may still name the previous preview's AOV. Drop that
1340
1345
  // selection before tracing with a smaller set; Display validates and
@@ -1402,15 +1407,16 @@ output.color = color;
1402
1407
  isFirstFrame = true;
1403
1408
  sampleCount = 0;
1404
1409
  },
1410
+ getAovTexture(kind) { return execution?.aovs?.includes(kind) ? aov.texture(kind) : undefined; },
1405
1411
  getOutputTexture(kind) {
1406
1412
  flushPostProcess();
1407
1413
  if (kind === 'hdr')
1408
1414
  return resolvedSamples > 0 ? getFrameInput('color') : undefined;
1409
1415
  return displayPostProcess.output ?? presentationTexture;
1410
1416
  },
1411
- applyPostProcesses(passes, render) {
1417
+ applyPostProcesses(passes, render, options, crop) {
1412
1418
  if (presentationTexture)
1413
- displayPostProcess.run(presentationTexture, passes, render);
1419
+ displayPostProcess.run(presentationTexture, passes, render, canvas, options, crop);
1414
1420
  },
1415
1421
  trace,
1416
1422
  drawPostProcess() {
@@ -1465,7 +1471,7 @@ output.color = color;
1465
1471
  throw pipelineError;
1466
1472
  if (rayTracePass.isCompilingShader() || !rayTracePass.isPipelineReady())
1467
1473
  return false;
1468
- return rayTracePass.renderAovs(aov, camera, samples, execution.aovSamples ?? 16, execution.aovs);
1474
+ return rayTracePass.renderAovs(aov, camera, samples, Math.min(execution.aovSamples ?? 16, aovResolution() ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, aovResolution());
1469
1475
  },
1470
1476
  async readAov(kind) {
1471
1477
  if (!execution?.aovs?.includes(kind) || !aovCamera || (sampleCount < 1 && aov.samples < 1))
@@ -1481,7 +1487,7 @@ output.color = color;
1481
1487
  if (pipelineError)
1482
1488
  throw pipelineError;
1483
1489
  if (!rayTracePass.isCompilingShader() && rayTracePass.isPipelineReady() &&
1484
- rayTracePass.renderAovs(aov, aovCamera, Math.max(sampleCount, aov.samples), execution.aovSamples ?? 16, execution.aovs))
1490
+ rayTracePass.renderAovs(aov, aovCamera, Math.max(sampleCount, aov.samples), Math.min(execution.aovSamples ?? 16, aovResolution() ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, aovResolution()))
1485
1491
  break;
1486
1492
  // Display frames stop on a hidden page, but compilation still completes.
1487
1493
  await new Promise(resolve => setTimeout(resolve, 16));