@meimu/mutracer 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +8949 -7915
- package/docs/api.md +42 -21
- package/docs/caustics.md +80 -0
- package/docs/materials.md +5 -4
- package/docs/progressive-rendering.md +50 -9
- package/docs/technical/continuous-spectrum.md +93 -0
- package/docs/updates.md +3 -1
- package/docs/viewer-checklist.md +65 -0
- package/docs/viewer.md +7 -5
- package/lib/Display.js +1 -1
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -0
- package/lib/Engine.js +47 -12
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +61 -13
- package/lib/Render.js +169 -19
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -3
- package/lib/RenderLoop.js +68 -44
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +1 -1
- package/lib/main.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/GPUTraceQueue.d.ts +2 -1
- package/lib/renderer/GPUTraceQueue.js +3 -1
- package/lib/renderer/GPUTraceQueue.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +4 -0
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
- package/lib/renderer/WGPUCausticLightPass.js +217 -0
- package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +18 -18
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
- package/lib/renderer/WGPUPhotonMap.js +191 -0
- package/lib/renderer/WGPUPhotonMap.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
- package/lib/renderer/WGPURayTraceOutput.js +122 -28
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +48 -17
- package/lib/renderer/WGPURayTracePass.js +538 -340
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +83 -47
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLFullQuadPass.d.ts +2 -1
- package/lib/renderer/WebGLFullQuadPass.js +4 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +6 -1
- package/lib/renderer/WebGLRayTracePass.js +43 -6
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +10 -14
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.js +60 -60
- package/lib/renderer/accumulationTarget.d.ts +2 -1
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/causticDiagnostics.d.ts +31 -0
- package/lib/renderer/causticDiagnostics.js +5 -0
- package/lib/renderer/causticDiagnostics.js.map +1 -0
- package/lib/renderer/causticEmission.d.ts +10 -0
- package/lib/renderer/causticEmission.js +40 -0
- package/lib/renderer/causticEmission.js.map +1 -0
- package/lib/renderer/causticUniform.d.ts +12 -0
- package/lib/renderer/causticUniform.js +22 -0
- package/lib/renderer/causticUniform.js.map +1 -0
- package/lib/renderer/caustics.d.ts +16 -0
- package/lib/renderer/caustics.js +93 -0
- package/lib/renderer/caustics.js.map +1 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
- package/lib/renderer/glsl/aovReflectance.glsl.js +53 -53
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
- package/lib/renderer/glsl/aovTrace.frag.js +33 -33
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -9
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -73
- package/lib/renderer/glsl/chunks/intersect.glsl.js +426 -428
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +156 -153
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +771 -771
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +68 -63
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +140 -117
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +14 -14
- package/lib/renderer/glsl/chunks/sampling.glsl.js +89 -92
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
- package/lib/renderer/glsl/depthQuery.frag.js +2 -2
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
- package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +260 -237
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +26 -26
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +59 -59
- package/lib/renderer/lightSampling.d.ts +3 -2
- package/lib/renderer/lightSampling.js +14 -8
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/progressiveScheduler.js +4 -3
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +1 -0
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/researchTransport.d.ts +31 -0
- package/lib/renderer/researchTransport.js +5 -0
- package/lib/renderer/researchTransport.js.map +1 -0
- package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
- package/lib/renderer/sceneLayoutSchema.js +2 -2
- package/lib/renderer/sceneLayoutSchema.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/spectrum.d.ts +21 -0
- package/lib/renderer/spectrum.js +154 -0
- package/lib/renderer/spectrum.js.map +1 -0
- package/lib/renderer/webglLightSampling.d.ts +39 -0
- package/lib/renderer/webglLightSampling.js +15 -0
- package/lib/renderer/webglLightSampling.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.js +3 -3
- package/lib/renderer/wgpuShaderSource.d.ts +7 -0
- package/lib/renderer/wgpuShaderSource.js +2 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -1
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +55 -55
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovResolve.wgsl.js +2 -2
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovTrace.wgsl.js +33 -33
- package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
- package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
- package/lib/renderer/wgsl/causticLight.compute.js +537 -0
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +37 -37
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +598 -592
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +14 -14
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +75 -73
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +794 -794
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +35 -25
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +142 -138
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +204 -187
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +89 -93
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/compose.frag.wgsl.js +98 -98
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +2 -2
- package/lib/renderer/wgsl/jnlm.compute.js +74 -74
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +25 -25
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
- package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
- package/lib/renderer/wgsl/photonMap.compute.js +352 -0
- package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +64 -64
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +9 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +448 -522
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +2 -2
- package/lib/scene/MaterialState.js +2 -2
- package/lib/scene/MaterialState.js.map +1 -1
- package/lib/settings/render.d.ts +11 -0
- package/lib/settings/render.js +1 -0
- package/lib/settings/render.js.map +1 -1
- package/lib/util/fromTHREE.js +2 -2
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +2 -1
- package/package.json +3 -3
package/lib/Render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Render.js","sourceRoot":"","sources":["../src/Render.ts"],"names":[],"mappings":"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","sourcesContent":["import type {AovKind} from './renderer/aov.js';\nimport {aovMask} from './renderer/aov.js';\nimport {displayAovKind} from './renderer/aovDisplay.js';\nimport type {DisplayChannel} from './renderer/RenderingPipeline.js';\nimport { Events } from './util/events.js';\nimport type Engine from './Engine.js';\nimport type Camera from './scene/Camera.js';\nimport { cameraSnapshot } from './renderer/cameraSnapshot.js';\nimport type { AlphaBlendStrategy } from './renderer/RenderingPipeline.js';\nimport { collectTraceSettings, imageSettingsKey } from './settings/render.js';\nimport type { SamplingPattern } from './renderer/sampling.js';\nimport type { RenderTarget, TraceSettings } from './renderer/renderPipeline.js';\nimport type {DenoiserHandle} from './renderer/denoiser.js';\nimport type {OwnedDenoiser} from './renderer/ownedDenoiser.js';\nimport type { OIDNModel, OIDNEngine, OIDNPrecision, OIDNHDRTransfer, OIDNDynamicTileSetting, OIDNAuxiliaryModelUrls } from './oidn.js';\nimport { DEFAULT_JNLM_OPTIONS, createJNLMDenoiser, type JNLMOptions } from './renderer/jnlm.js';\nimport type { OfflineAdaptiveSamplingOptions, OfflineVarianceHistory } from './renderer/OfflineAdaptiveSampling.js';\nimport { nextPreviewScale } from './renderer/util.js';\nimport {scheduleFrame} from './util/frame.js';\n\n/** Complete-sample notification, including the backend's measured sample time. */\nexport interface SampleEvent { samples: number; isFirstFrame: boolean; frameTimeMs: number; }\n/** State of one independent accumulation. Default preparing. */\nexport type RenderStatus = 'preparing' | 'compiling' | 'converging' | 'denoising' | 'finished' | 'error';\n/** Execution overrides for one refine call; accumulated samples are retained. */\nexport interface RefineOptions {\n /** Batch several samples in this call. Default this render's batchSamples. */ batchSamples?: boolean;\n /** Positive finite WebGPU queue budget in milliseconds; capped by timeBudgetMs, ignored on WebGL. Default timeBudgetMs. */ targetBatchTimeMs?: number;\n /** Leave the displayed image unchanged, for calls between display frames; the next presentation or pixel read updates it once with every new sample. Ignored on WebGL. Default false. */ deferResolve?: boolean;\n}\n/** When a render filters its complete samples. Default converged. */\nexport type DenoiseSchedule = 'converged' | 'progressive' | 'every-sample';\n/** Caller-owned WebGPU filter. Render/Engine never dispose it; calls on one engine are serialized. */\nexport interface Denoiser {\n /** Optional preallocation before first use or after device/dimension changes. Default undefined. The device may change after recovery; recreate device-owned resources then. */\n prepare?(input: {device: GPUDevice; width: number; height: number}): Promise<void>;\n /** Write all output RGB, then resolve after submitting GPU work. Abort on input changes, restart, replacement or disposal; aborted results are discarded even if this resolves. Buffers are borrowed until settlement; do not retain or destroy them. */\n denoise(input: DenoiseInput, context: {signal: AbortSignal; schedule: DenoiseSchedule}): Promise<void>;\n}\n/** Borrowed, tightly packed rgba32float buffers, top row first, width*height*16 bytes of image data. */\nexport interface DenoiseInput {\n /** Requested primary-surface buffers, top row first; id is rgba32uint, others rgba32float. Default undefined. Borrowed until denoise settles. */ aovs?: Readonly<Partial<Record<AovKind,GPUBuffer>>>;\n /** Engine WebGPU device; may change after device loss/recovery. */ device: GPUDevice;\n /** Actual internal width, including backend alignment. */ width: number;\n /** Actual internal height, including backend alignment. */ height: number;\n /** Read-only native resolved linear HDR ray color, before exposure, grading, tone mapping, vignette, bloom and display background/catcher composition. RGB uses native hit-count normalization (flat primary misses are averaged by samples); alpha is raw path coverage. Usage STORAGE | COPY_SRC | COPY_DST. */ color: GPUBuffer;\n /** Read-only resolved linear RGB albedo averaged over complete samples; alpha is primary-hit coverage. Same packing/usage as color. */ albedo: GPUBuffer;\n /** Read-only resolved world-space RGB normal encoded as averaged normal*.5+.5, without renormalizing; alpha 1 for a valid surface, otherwise zero RGBA. Same packing/usage as albedo. */ normal: GPUBuffer;\n /** Write linear HDR RGB here. Same packing/usage as color; alpha is ignored and original path coverage is retained. */ output: GPUBuffer;\n}\n/** Third-party WebGPU filter; ignored with one warning on WebGL. */\nexport interface CustomDenoiserOptions {\n /** Optional AOV inputs; automatically enables their passes for this render. Default []. */ aovs?: readonly AovKind[];\n /** Required implementation selector. */ type: 'custom';\n /** Required caller-owned instance, keyed by object identity; never serialized or released by Render/Engine. */ denoiser: Denoiser;\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n}\n/** Built-in joint non-local means filter on both backends. */\nexport interface JNLMDenoiserOptions extends JNLMOptions {\n /** Required implementation selector. */ type: 'jnlm';\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n}\n/** Loading and execution options shared by both OIDN network sources. */\ninterface OIDNSettings {\n /** Required implementation selector. */ type: 'oidn';\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n /** Override albedo and normal prefilter networks. Default packaged filters for cleanAuxLarge, otherwise undefined. */ auxiliaryModelUrls?: OIDNAuxiliaryModelUrls;\n /** Execution backend. Default auto (native WGSL unless WebNN is selected). */ engine?: OIDNEngine;\n /** WGSL precision. Default auto (fp16 when shader-f16 is available). */ precision?: OIDNPrecision;\n /** Adaptive tile controller. Default enabled with minTileSize 256, initialTileSize 432, targetTileTimeMs 16, adjustmentStep 16. */ dynamicTile?: OIDNDynamicTileSetting;\n /** Maximum OIDN output tile edge in pixels. Default `512`. */ maxTileSize?: number;\n /** Abort weight downloads. Default undefined; does not distinguish cached networks. */ signal?: AbortSignal;\n}\n/** OIDN configuration on WebGPU: choose a packaged model or an explicit network URL. */\nexport type OIDNDenoiserOptions = OIDNSettings & (\n | {\n /** Packaged network. Default standard. */ model?: OIDNModel;\n /** Weight directory override. Default bundled standard/small assets and CDN large weights. */ weightsBaseUrl?: string | URL;\n weightsUrl?: never; aux?: never; hdr?: never; hdrTransfer?: never;\n }\n | {\n /** Custom network file. Required in this branch; failures never fall back to CDN. */ weightsUrl: string | URL;\n /** Custom model consumes albedo and normal. Default true. */ aux?: boolean;\n /** Custom model consumes HDR color. Default true. */ hdr?: boolean;\n /** Custom model HDR encoding. Default pu. */ hdrTransfer?: OIDNHDRTransfer;\n model?: never; weightsBaseUrl?: never;\n }\n);\n/** Assign a complete configuration, or null to disable denoising. The type selector is required. */\nexport type DenoiserOptions = JNLMDenoiserOptions | OIDNDenoiserOptions | CustomDenoiserOptions;\n\n/** Optional per-render execution and image-quality settings. */\nexport interface RenderSettings {\n /** Optional surface outputs. Default []; disabled outputs allocate no AOV resources. */ aovs?: readonly AovKind[];\n /** Independent AOV sample cap, positive integer. Default 16. */ aovSamples?: number;\n /** Maximum complete samples. Default 2048. */ maxSamples?: number;\n /**\n * Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).\n * Total path events, including transmission and alpha skips, are capped at 20\n * and at three times this depth. Intel Mac WebGL uses min(depth, 3), doubled\n * for scenes with transmission or alpha, with its existing early termination.\n * Default 3.\n */ bounces?: number;\n /** Radiance clamp; 0 disables it. Default 0. */ clamping?: number;\n /** Sampling sequence. Default sobol. */ samplingPattern?: SamplingPattern;\n /** Light candidates per vertex; WebGPU only, ignored on WebGL. Default 4. */ directLightCandidates?: number;\n /** Rounded material edges. Default true. */ bevel?: boolean;\n /** Bevel neighborhood probes, clamped to 1–32. Default 8. */ bevelSamples?: number;\n /** Wavelengths per dispersion sample. Default 3; 1 selects one random wavelength. */ dispersionWavelengths?: 1 | 3;\n /** Primary-ray alpha blend strategy; WebGPU only. Default stochastic. */ alphaBlendStrategy?: AlphaBlendStrategy;\n /** Minimum transmissive path alpha, using path depth. Default 1. Changes restart this accumulation. */ transmissiveOutputAlphaMin?: number;\n /** Tile execution budget in milliseconds. Default 21. */ timeBudgetMs?: number;\n /** Maximum tiles per frame. Default Infinity. */ maxTiles?: number;\n /** Let one refine submit several samples, up to timeBudgetMs of GPU work; WebGPU requires GPU timestamps. RenderLoop also keeps batching between display frames. Default false. */ batchSamples?: boolean;\n /** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */ allowMultipleSamplesPerFrame?: boolean;\n /** Adapt scale to frame timing; minScale must not exceed resolutionScale. Default false. */ adaptiveResolution?: {targetFrameMs: number; minScale: number} | false;\n /** Single-level fallback on the same engine. Default null. */ fallback?: Render | null;\n /** Denoising configuration. Default null. */ denoiser?: DenoiserOptions | null;\n}\n/** Constructor options: fixed dimensions and canvas-relative scale are mutually exclusive. */\nexport type RenderOptions = RenderSettings & (\n | { /** Fixed width in pixels, paired with height. */ width: number; /** Fixed height in pixels, paired with width. */ height: number; resolutionScale?: never }\n | { /** Canvas-relative resolution scale. Default 1. */ resolutionScale?: number; width?: never; height?: never }\n);\n/** Deterministic offline execution options. */\nexport interface ConvergeOptions {\n /** Final complete-sample budget. Required. */ samples: number;\n /** Camera override for this output only, copied on entry. Default committed engine camera. */ camera?: Camera;\n /** Two-stage variance sampling; WebGPU only, ignored on WebGL. Default undefined. */ adaptiveSampling?: Omit<OfflineAdaptiveSamplingOptions, 'maxSamples'>;\n /** Deterministic sequence base. Default 0. */ sampleSequenceOffset?: number;\n /** Maximum samples per submission batch. Default 8. */ samplesPerBatch?: number;\n /** WebGPU target batch completion time in milliseconds. Default undefined (fixed batch size). */ targetBatchTimeMs?: number;\n /** Delay between intermediate resolved images in milliseconds. Default undefined (resolve only at the end). */ previewIntervalMs?: number;\n /** Batch progress callback. Default undefined. */ onProgress?: (progress: {stage: 'pilot' | 'final' | 'denoising'; samples: number; targetSamples: number}) => void;\n /** Cancels the task. Default undefined. */ signal?: AbortSignal;\n /** Timeout per stage in milliseconds. Default 600000. */ timeoutMs?: number;\n}\n/** Result of deterministic offline convergence. */\nexport interface ConvergeResult {\n samples: number; averageSamplesPerPixel: number; pilotSamples: number;\n varianceHistory?: OfflineVarianceHistory; adaptiveSampling: boolean;\n}\n\nlet oidnModule: Promise<typeof import('./renderer/oidnNetwork.js')> | undefined;\nconst loadOIDN = () => oidnModule ??= import('./renderer/oidnNetwork.js');\n\nfunction validateDenoiserOptions(options: DenoiserOptions) {\n if (!options || typeof options !== 'object' || (options.type !== 'jnlm' && options.type !== 'oidn' && options.type !== 'custom')) throw new Error('Denoiser type must be jnlm, oidn or custom.');\n const allowed = options.type === 'jnlm'\n ? ['type', 'schedule', ...Object.keys(DEFAULT_JNLM_OPTIONS)]\n : options.type === 'custom' ? ['type', 'schedule', 'denoiser', 'aovs']\n : ['type', 'schedule', 'model', 'weightsBaseUrl', 'weightsUrl', 'aux', 'hdr', 'hdrTransfer', 'auxiliaryModelUrls', 'engine', 'precision', 'dynamicTile', 'maxTileSize', 'signal'];\n for (const key of Object.keys(options)) if (!allowed.includes(key)) throw new Error(`Denoiser field ${key} does not belong to ${options.type}.`);\n if (options.schedule !== undefined && !['converged', 'progressive', 'every-sample'].includes(options.schedule)) throw new Error('Unknown denoise schedule.');\n if (options.type === 'jnlm') createJNLMDenoiser(options);\n else if (options.type === 'custom') {\n aovMask(options.aovs ?? []);\n if (!options.denoiser || typeof options.denoiser !== 'object' || typeof options.denoiser.denoise !== 'function' || (options.denoiser.prepare !== undefined && typeof options.denoiser.prepare !== 'function')) throw new Error('Custom denoiser must implement denoise and optional prepare.');\n } else {\n if (options.weightsUrl !== undefined) {\n if (options.model !== undefined || options.weightsBaseUrl !== undefined) throw new Error('weightsUrl is mutually exclusive with model and weightsBaseUrl.');\n } else if (options.aux !== undefined || options.hdr !== undefined || options.hdrTransfer !== undefined) throw new Error('aux, hdr and hdrTransfer require weightsUrl.');\n for (const key of ['weightsUrl', 'weightsBaseUrl'] as const) if (options[key] !== undefined && !isURL(options[key])) throw new Error(`${key} must be a nonempty string or URL.`);\n if (options.auxiliaryModelUrls !== undefined) {\n const urls = options.auxiliaryModelUrls;\n if (!urls || !isURL(urls.albedo) || !isURL(urls.normal) || Object.keys(urls).some(key => !['albedo', 'normal'].includes(key))) throw new Error('auxiliaryModelUrls requires only albedo and normal URLs.');\n }\n for (const [key, values] of [['engine', ['auto', 'wgsl', 'webnn']], ['precision', ['auto', 'fp32', 'fp16']], ['hdrTransfer', ['pu', 'log']]] as const) {\n if (options[key] !== undefined && !(values as readonly string[]).includes(options[key]!)) throw new Error(`Unknown OIDN ${key}.`);\n }\n for (const key of ['aux', 'hdr'] as const) if (options[key] !== undefined && typeof options[key] !== 'boolean') throw new Error(`${key} must be boolean.`);\n if (options.dynamicTile !== undefined && typeof options.dynamicTile !== 'boolean') {\n if (!options.dynamicTile || typeof options.dynamicTile !== 'object') throw new Error('dynamicTile must be boolean or tile settings.');\n for (const [key, value] of Object.entries(options.dynamicTile)) {\n if (!['minTileSize', 'initialTileSize', 'targetTileTimeMs', 'adjustmentStep'].includes(key) || (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || value <= 0))) throw new Error(`Invalid dynamicTile ${key}.`);\n }\n }\n if (options.model !== undefined && !['standard', 'small', 'cleanAuxLarge'].includes(options.model)) throw new Error('Unknown OIDN model.');\n if (options.maxTileSize !== undefined && (!Number.isInteger(options.maxTileSize) || options.maxTileSize < 1)) throw new Error('maxTileSize must be a positive integer.');\n }\n}\n\nfunction isURL(value: unknown): value is string | URL { return (typeof value === 'string' && value.length > 0) || value instanceof URL; }\n\n// Snapshot nested values too, so application edits cannot silently change a cache key.\nfunction snapshotDenoiserOptions(options: DenoiserOptions): Readonly<DenoiserOptions> {\n if (options.type === 'custom') return Object.freeze({...options,aovs:Object.freeze([...(options.aovs ?? [])])});\n if (options.type !== 'oidn') return Object.freeze({...options});\n const next: OIDNDenoiserOptions = {...options};\n if (options.weightsBaseUrl !== undefined) next.weightsBaseUrl = String(options.weightsBaseUrl);\n if (options.weightsUrl !== undefined) next.weightsUrl = String(options.weightsUrl);\n if (options.auxiliaryModelUrls !== undefined) next.auxiliaryModelUrls = Object.freeze({albedo: String(options.auxiliaryModelUrls.albedo), normal: String(options.auxiliaryModelUrls.normal)});\n if (typeof options.dynamicTile === 'object') next.dynamicTile = Object.freeze({...options.dynamicTile});\n return Object.freeze(next);\n}\n\nfunction denoiserKey(options: Readonly<DenoiserOptions>): string | Denoiser {\n if (options.type === 'custom') return options.denoiser;\n if (options.type === 'jnlm') return JSON.stringify({type: 'jnlm', ...Object.fromEntries(Object.entries(DEFAULT_JNLM_OPTIONS).map(([key, value]) => [key, options[key as keyof JNLMOptions] ?? value]))});\n const tile = options.dynamicTile;\n return JSON.stringify({type: 'oidn',\n ...(options.weightsUrl === undefined ? {model: options.model ?? 'standard', weightsBaseUrl: options.weightsBaseUrl?.toString()} : {weightsUrl: String(options.weightsUrl), aux: options.aux ?? true, hdr: options.hdr ?? true, hdrTransfer: options.hdrTransfer ?? 'pu'}),\n auxiliaryModelUrls: options.auxiliaryModelUrls && {albedo: String(options.auxiliaryModelUrls.albedo), normal: String(options.auxiliaryModelUrls.normal)},\n maxTileSize: options.maxTileSize, engine: options.engine ?? 'auto', precision: options.precision ?? 'auto',\n dynamicTile: tile === false ? false : {minTileSize: typeof tile === 'object' ? tile.minTileSize ?? 256 : 256,\n initialTileSize: typeof tile === 'object' ? tile.initialTileSize ?? 432 : 432,\n targetTileTimeMs: typeof tile === 'object' ? tile.targetTileTimeMs ?? 16 : 16,\n adjustmentStep: typeof tile === 'object' ? tile.adjustmentStep ?? 16 : 16}\n });\n}\n\n/** One independently configured image and its accumulation, owned by an engine. */\nexport default class Render {\n /** Enabled surface outputs. Default []; readPixels rejects outputs not enabled here. */ aovs: readonly AovKind[] = [];\n /** Independent AOV sample cap. Default 16. */ aovSamples = 16;\n /** Maximum complete samples. Default 2048. */ maxSamples = 2048;\n /**\n * Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).\n * Total path events, including transmission and alpha skips, are capped at 20\n * and at three times this depth. Intel Mac WebGL uses min(depth, 3), doubled\n * for scenes with transmission or alpha, with its existing early termination.\n * Default 3.\n */ bounces = 3;\n /** Per-sample radiance clamp; 0 disables it. Default 0. */ clamping = 0;\n /** Sampling sequence. Default sobol. */ samplingPattern: SamplingPattern = 'sobol';\n /** WebGPU light candidates per vertex; ignored on WebGL. Default 4. */ directLightCandidates = 4;\n /** Rounded material edges. Default true. */ bevel = true;\n /** Bevel probes, clamped to 1–32. Default 8. */ bevelSamples = 8;\n /** Dispersion wavelengths per sample. Default 3. */ dispersionWavelengths: 1 | 3 = 3;\n /** WebGPU primary-ray alpha policy; ignored on WebGL. Default stochastic. */ alphaBlendStrategy: AlphaBlendStrategy = 'stochastic';\n /** Minimum transmissive path alpha. Default 1. Changing it restarts this render. */ transmissiveOutputAlphaMin = 1;\n /** Execution budget in milliseconds. Default 21. */ timeBudgetMs = 21;\n /** Maximum tiles per frame. Default Infinity. */ maxTiles = Infinity;\n /** Let one refine submit several samples within timeBudgetMs; WebGPU requires GPU timestamps. Default false. */ batchSamples = false;\n /** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */\n get allowMultipleSamplesPerFrame(): boolean { return this.batchSamples; }\n set allowMultipleSamplesPerFrame(value: boolean) { this.batchSamples = value; }\n /** Adaptive resolution controller, or false. Default false. */ adaptiveResolution: {targetFrameMs: number; minScale: number} | false = false;\n private _resolutionScale = 1;\n /** Canvas-relative scale. Default 1; cannot be assigned on a fixed-size render. */\n get resolutionScale() { return this._resolutionScale; }\n set resolutionScale(value: number) {\n if (this._fixed) throw new Error('Fixed-size renders cannot use resolutionScale.');\n if (!Number.isFinite(value) || value <= 0) throw new Error('resolutionScale must be positive.');\n if (value !== this._resolutionScale) this._cancelAdaptiveFrames();\n this._resolutionScale = value;\n }\n private _fallback: Render | null = null;\n /** Single-level fallback on this engine. Default null; chains and cycles are rejected. */\n get fallback() { return this._fallback; }\n set fallback(value: Render | null) {\n if (value && (value._engine !== this._engine || value === this || value.fallback)) throw new Error('Fallback must be a render on the same engine with no fallback.');\n if (value && this._dependents.size) throw new Error('Fallback renders cannot have their own fallback.');\n this._fallback?._dependents.delete(this);\n this._fallback = value; value?._dependents.add(this);\n }\n private _dependents = new Set<Render>();\n private _denoiserOptions: Readonly<DenoiserOptions> | null = null;\n /** Frozen configuration snapshot. Default null. Change it with {@link Render.setDenoiser}. */\n get denoiser(): Readonly<DenoiserOptions> | null { return this._denoiserOptions; }\n /**\n * Replaces the denoising configuration; null disables denoising. Invalid options throw synchronously\n * before replacing any state. Resolves when the filter is ready to use (after OIDN weights load) or this\n * configuration is replaced; rejects when loading fails. An equal configuration returns the current\n * promise without reloading.\n */\n setDenoiser(options: DenoiserOptions | null): Promise<void> {\n if (options !== null) validateDenoiserOptions(options);\n const next = options ? snapshotDenoiserOptions(options) : null;\n const current = this._denoiserOptions;\n if (current === null && next === null) return this._denoiserReady;\n if (next && current && denoiserKey(next) === denoiserKey(current)\n && (next.type !== 'custom' || current.type === 'custom' && aovMask(next.aovs ?? [])===aovMask(current.aovs ?? []))\n && next.schedule === current.schedule && (next.type !== 'oidn' ||\n (current.type === 'oidn' && next.signal === current.signal))) return this._denoiserReady;\n this._denoiserOptions = next;\n return this._refreshDenoiser() ?? this._denoiserReady;\n }\n private _denoiserReady: Promise<void> = Promise.resolve();\n private _fixed?: {width: number; height: number};\n private _target?: RenderTarget;\n private _status: RenderStatus = 'preparing';\n private _disposed = false;\n private _busy = false;\n private _refineOptions?: RefineOptions;\n private _offlineCamera = false;\n private _input = {scene: -1, camera: -1, settings: ''};\n private _adaptiveScale = 1;\n private _lastScale = 1;\n private _frameTime = 0;\n private _sampleStart?: number;\n private _frameStart?: number;\n private _sampleScale = 1;\n private _frameScale = 1;\n private _adaptiveFrames = new Set<() => void>();\n private _adaptiveFastFrames = 0;\n private _events = new Events<{sample: SampleEvent}>();\n /** Owning engine. */ get engine(): Engine { return this._engine; }\n /** Whether inference is queued or running, including intermediate updates. Default false. */ get denoising(): boolean { return !!this._denoisePending; }\n /** Subscribes to every complete sample on this render; returns unsubscribe. */\n on(event: 'sample', listener: (value: SampleEvent) => void): () => void { return this._events.on(event, listener); }\n private _filter?: OwnedDenoiser | Extract<DenoiserHandle, {kind: 'custom'}>;\n private _filterKey: string | Denoiser = '';\n private _warnedWebGPUFilter = false;\n private _denoiseController?: AbortController;\n private _filterRevision = 0;\n private _filterPending?: Promise<void>;\n private _denoiseRevision = 0;\n private _denoisePending?: Promise<void>;\n private _denoisedSamples = 0;\n private _lastDenoiseTime = 0;\n private _warnedDenoisedReadback = false;\n /** @internal */ readonly _engine: Engine;\n\n constructor(engine: Engine, options: RenderOptions = {}) {\n this._engine = engine;\n if (options.denoiser != null) validateDenoiserOptions(options.denoiser);\n if ('width' in options || 'height' in options) {\n if ('resolutionScale' in options || !Number.isInteger(options.width) || !Number.isInteger(options.height) || options.width! < 1 || options.height! < 1) throw new Error('Provide positive integer width and height, or resolutionScale, exclusively.');\n this._fixed = {width: options.width!, height: options.height!};\n }\n const {width: _width, height: _height, resolutionScale, fallback, denoiser, allowMultipleSamplesPerFrame, ...settings} = options;\n Object.assign(this, settings);\n if (settings.batchSamples === undefined && allowMultipleSamplesPerFrame !== undefined) this.batchSamples = allowMultipleSamplesPerFrame;\n if (resolutionScale !== undefined) this.resolutionScale = resolutionScale;\n this._adaptiveScale = this._resolutionScale; this._lastScale = this._resolutionScale;\n this._validate(); this.fallback = fallback ?? null;\n engine._register(this);\n if (denoiser) void this.setDenoiser(denoiser).catch(error => this._engine._notifyError(error));\n }\n /** Actual target width; before allocation uses the requested dimensions. */ get width() { return this._target?.getMemory().width || this._size().width; }\n /** Actual target height; before allocation uses the requested dimensions. */ get height() { return this._target?.getMemory().height || this._size().height; }\n /** Complete beauty samples since the last restart; stale engine inputs report 0. Default 0. */\n get samples() { return this._current ? this._target?.getTotalSamplesRendered() ?? 0 : 0; }\n /** Whether complete beauty samples reached maxSamples. Default false. */ get converged() { return this.samples >= this.maxSamples; }\n /** Current execution state. Default preparing. */ get status(): RenderStatus {\n if (!this._current && this._status !== 'error') return this._engine._ready ? 'converging' : 'preparing';\n return this._status;\n }\n private get _current() { const inputs = this._engine._inputs; return inputs.scene === this._input.scene && inputs.camera === this._input.camera && !this._disposed; }\n /** @internal */ get _complete() { return this._current && !!this._target?.presentationComplete && !this._target.isFirstFrame() && this.samples > 0; }\n /** @internal */ get _presentable() { return this._complete && (!this._denoisePending || this._denoisedSamples > 0 || (this._schedule() === 'converged' && this.maxSamples > 1)); }\n /** @internal */ get _output() { if (this._disposed) throw new Error('Render is disposed.'); return this._target; }\n /** Latest WebGPU full beauty sample estimate in milliseconds. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */\n get gpuSampleTimeMs(): number | undefined { return !this._busy && this._current ? this._target?.getRealtimeSampleTime?.() : undefined; }\n /** Waits for the next release of WebGPU sampling queue capacity. Resolves immediately if no sampling is queued or on WebGL; does not submit work. Throws after disposal. */\n whenReadyToRefine(): Promise<void> {\n if (this._disposed) throw new Error('Render is disposed.');\n return this._target?.whenTraceAvailable?.() ?? Promise.resolve();\n }\n /** Complete surface-output samples since restart; stale inputs report 0. Independent of beauty samples. Default 0. */\n get aovSamplesRendered(): number { return this._current ? this._target?.getAovSamples?.() ?? 0 : 0; }\n /** @internal */\n _completeFor(channel: DisplayChannel): boolean {\n const kind = displayAovKind(channel);\n return kind && this.aovs.includes(kind) && this._target?.aovReady\n ? this._current && this._target.aovReady(kind) : this._complete;\n }\n /** @internal */\n _restartAovs(): void {\n this._target?.activate(); this._target?.restartAovs?.();\n this._status = 'converging';\n }\n private _refineAov(kind: AovKind): RenderStatus {\n if (this._engine._initializationError) throw this._engine._initializationError;\n if (!this.aovs.includes(kind)) throw new Error(`AOV ${kind} is not enabled`);\n if (!this._engine._ready) {\n const generation = this._engine._deviceGeneration;\n void this._engine.init().catch(error => {\n if (this._disposed || generation !== this._engine._deviceGeneration) return;\n this._status = 'error'; this._engine._notifyError(error);\n });\n return this._status = 'preparing';\n }\n const started = performance.now();\n const target = this._synchronize();\n if (!target) return this._status = 'preparing';\n const before = target.getAovSamples?.() ?? 0;\n const limit = kind === 'id' || kind === 'motion' ? 1 : Math.min(this.maxSamples, this.aovSamples);\n if (!target.refineAovs?.(this._engine._inputs.value!, Math.min(limit, (target.getAovSamples?.() ?? 0) + 1))) return this._status = 'compiling';\n if ((target.getAovSamples?.() ?? 0) > before) {\n this._frameTime = Math.max(.001, performance.now() - started);\n this._frameStart = started; this._frameScale = this._adaptiveScale;\n this._adaptResolution(true);\n }\n return this._status = (target.getAovSamples?.() ?? 0) >= limit ? 'finished' : 'converging';\n }\n private _validate() {\n aovMask(this.aovs);\n if (!Number.isInteger(this.aovSamples) || this.aovSamples < 1) throw new Error('aovSamples must be a positive integer.');\n if (!Number.isFinite(this.maxSamples) || this.maxSamples < 1) throw new Error('maxSamples must be positive.');\n if (this.dispersionWavelengths !== 1 && this.dispersionWavelengths !== 3) throw new Error('dispersionWavelengths must be 1 or 3.');\n const adaptive = this.adaptiveResolution;\n if (adaptive && (this._fixed || !Number.isFinite(adaptive.targetFrameMs) || adaptive.targetFrameMs <= 0 || !Number.isFinite(adaptive.minScale) || adaptive.minScale <= 0 || adaptive.minScale > this._resolutionScale)) throw new Error('adaptiveResolution requires a scale-based render with positive targetFrameMs and minScale <= resolutionScale.');\n }\n private _size() {\n if (this._fixed) return this._fixed;\n const scale = this.adaptiveResolution ? Math.min(this._adaptiveScale, this._resolutionScale) : this._resolutionScale;\n return {width: Math.max(1, Math.round(this._engine.display.canvas.width * scale)), height: Math.max(1, Math.round(this._engine.display.canvas.height * scale))};\n }\n private _settings(sampleCap = this.maxSamples): TraceSettings {\n const settings=collectTraceSettings(this,sampleCap);\n settings.batchSamples = this._refineOptions?.batchSamples ?? settings.batchSamples;\n if(this._denoiserOptions?.type==='custom') settings.aovs=[...new Set([...this.aovs,...(this._denoiserOptions.aovs ?? [])])];\n return settings;\n }\n private _synchronize(sampleCap = this.maxSamples, offline = false) {\n this._validate();\n if (this._lastScale !== this._resolutionScale) { this._adaptiveScale = this._resolutionScale; this._lastScale = this._resolutionScale; }\n const target = this._target ??= this._engine._createTarget();\n if (!target) return;\n const settings = this._settings(sampleCap), size = this._size();\n const key = imageSettingsKey(settings, size);\n const inputs = this._engine._inputs;\n target.configure(settings); target.activate();\n target.setRealtimeBatchBudget?.(this._refineOptions?.targetBatchTimeMs ?? Infinity);\n target.setRealtimeDeferPostProcess?.(!!this._refineOptions?.deferResolve);\n if ((!offline && this._offlineCamera) || inputs.scene !== this._input.scene || inputs.camera !== this._input.camera || key !== this._input.settings) {\n if (!offline) this._offlineCamera = false;\n this._cancelDenoise(); target.restartSamples();\n this._sampleStart = this._frameStart = undefined; this._frameTime = 0;\n target.setSize(size.width, size.height);\n this._input = {scene: inputs.scene, camera: inputs.camera, settings: key};\n }\n target.setOnSampleRendered((samples, isFirstFrame, frameTimeMs) => {\n // A preview's latency includes every tile, not just its last dispatch.\n this._frameTime = Math.max(frameTimeMs, this._sampleStart === undefined ? 0 : performance.now() - this._sampleStart);\n this._frameStart = this._sampleStart;\n this._frameScale = this._sampleScale;\n this._sampleStart = undefined;\n this._events.emit('sample', {samples, isFirstFrame, frameTimeMs});\n });\n return target;\n }\n private _trace(target: RenderTarget, limit: number) {\n if (this._sampleStart === undefined) { this._sampleStart = performance.now(); this._sampleScale = this._adaptiveScale; }\n const compiling = target.trace(this._engine._inputs.value!, limit);\n if (compiling) this._sampleStart = undefined;\n return compiling;\n }\n private _adaptResolution(surfaceOnly = false) {\n if (!this._busy && this.adaptiveResolution && this._frameTime > 0 && (surfaceOnly ? this.aovSamplesRendered > 0 : this.samples > 0)) {\n const {targetFrameMs, minScale} = this.adaptiveResolution;\n const start = this._frameStart, time = this._frameTime, scale = this._frameScale, maxScale = this._resolutionScale;\n const {width, height} = this._engine.display.canvas;\n this._frameTime = 0;\n // Observe the following display frame too: GPU submissions and WebGL\n // filters can return long before their work reaches the screen.\n const cancel = scheduleFrame(() => {\n this._adaptiveFrames.delete(cancel);\n const adaptive = this.adaptiveResolution, canvas = this._engine.display.canvas;\n if (this._disposed || this._busy || !adaptive || adaptive.targetFrameMs !== targetFrameMs || adaptive.minScale !== minScale ||\n this._resolutionScale !== maxScale || canvas.width !== width || canvas.height !== height) return;\n const elapsed = Math.max(time, start === undefined ? 0 : performance.now() - start);\n const next = nextPreviewScale(scale, elapsed, targetFrameMs, maxScale, this._adaptiveScale, minScale);\n if (next > this._adaptiveScale) {\n if (++this._adaptiveFastFrames < 4) return;\n this._adaptiveScale = Math.min(next, this._adaptiveScale * 1.25);\n } else this._adaptiveScale = next;\n this._adaptiveFastFrames = 0;\n });\n this._adaptiveFrames.add(cancel);\n }\n }\n private _cancelAdaptiveFrames() {\n for (const cancel of this._adaptiveFrames) cancel();\n this._adaptiveFrames.clear(); this._adaptiveFastFrames = 0;\n }\n /** Accumulates within this frame's budget. Default undefined traces beauty and requested AOVs. Pass an enabled AOV kind to refine surface outputs only, without beauty or denoising; progress is aovSamplesRendered. Options default to this render's execution settings. Rejects calls during converge or after disposal. */\n refine(channel?: AovKind, options?: RefineOptions): RenderStatus {\n if (this._busy) throw new Error('Cannot refine a render while converge is running.');\n if (this._disposed) throw new Error('Render is disposed.');\n this._engine._setRenderError();\n const previous = this._refineOptions; this._refineOptions = options;\n try {\n if (options?.targetBatchTimeMs !== undefined && (!Number.isFinite(options.targetBatchTimeMs) || options.targetBatchTimeMs <= 0)) throw new RangeError('targetBatchTimeMs must be positive and finite.');\n return channel === undefined ? this._refine() : this._refineAov(channel);\n }\n catch (error) { this._engine._setRenderError(this._engine._notifyError(error)); return this._status = 'error'; }\n finally { this._refineOptions = previous; this._engine._reportShaderProgress(); }\n }\n private _refine(): RenderStatus {\n if (this._engine._initializationError) throw this._engine._initializationError;\n this._reloadDenoiser();\n if (!this._engine._ready) {\n const generation = this._engine._deviceGeneration;\n void this._engine.init().catch(error => {\n if (this._disposed || generation !== this._engine._deviceGeneration) return;\n this._status = 'error'; this._engine._notifyError(error);\n });\n return this._status = 'preparing';\n }\n const target = this._synchronize();\n if (!target) return this._status = 'preparing';\n if (this._fallback && this.samples === 0 && !target.canCompleteSampleWithin(this.timeBudgetMs) && !this._fallback._complete) this._fallback._refineOne();\n target.activate();\n if (this._denoisePending) return this._status = this.converged ? 'denoising' : 'converging';\n target.setPreserveDenoisedOutput?.(!!this._filter && this._schedule() !== 'converged');\n const limit = this._nextSampleTarget();\n if (this.samples < limit) {\n if (this._trace(target, limit)) return this._status = 'compiling';\n } else if (target.refineAovs && !target.refineAovs(this._engine._inputs.value!)) {\n return this._status = 'compiling';\n }\n this._maybeDenoise(false, limit);\n if (this._denoisePending) return this._status = this.converged ? 'denoising' : 'converging';\n if (this._filterPending && this.converged) return this._status = 'preparing';\n this._adaptResolution();\n return this._status = this.converged ? 'finished' : 'converging';\n }\n private _refineOne() {\n if (this._busy || this._disposed || !this._engine._ready) return;\n this._reloadDenoiser(); const target = this._synchronize();\n if (!target) return;\n target.activate();\n if (this.samples < 1) this._status = this._trace(target, 1) ? 'compiling' : 'converging';\n this._maybeDenoise();\n if (!this._denoisePending) this._adaptResolution();\n }\n private _schedule() { return this._denoiserOptions?.schedule ?? 'converged'; }\n private _nextSampleTarget() {\n if (!this._filter) return this.maxSamples;\n if (this._schedule() === 'every-sample') return Math.min(this.maxSamples, this.samples + 1);\n if (this._schedule() === 'converged') return this.maxSamples;\n if (this._denoisedSamples === 0) return 1;\n const sinceUpdate = performance.now() - this._lastDenoiseTime;\n if (sinceUpdate >= 10000) return Math.min(this.maxSamples, this.samples + 1);\n // Batched sampling doubles the count within a few frames. Without a floor,\n // most filtering would go to images replaced almost at once.\n if (sinceUpdate < 500) return this.maxSamples;\n return Math.min(this.maxSamples, Math.max(4, this._denoisedSamples * 2));\n }\n /** Reloads a filter dropped by device recovery; failures report through engine errors. */\n private _reloadDenoiser() { void this._refreshDenoiser()?.catch(error => this._engine._notifyError(error)); }\n /** Starts loading the configured filter; returns its readiness when a new configuration was applied. */\n private _refreshDenoiser(): Promise<void> | undefined {\n if (this._disposed) return;\n const options = this._denoiserOptions;\n const key = options ? denoiserKey(options) : '';\n if (key === this._filterKey) return;\n this._filterKey = key; const revision = ++this._filterRevision;\n this._cancelDenoise();\n if (this._filter && this._filter.kind !== 'custom') this._engine._releaseDenoiser(this._filter);\n this._target?.invalidateDenoisedOutput();\n this._filter = undefined; this._filterPending = undefined;\n if (!options) return this._denoiserReady = Promise.resolve();\n if (options.type === 'jnlm') { this._filter = this._engine._retainDenoiser(`jnlm:${key}`, () => ({kind: 'jnlm', denoiser: createJNLMDenoiser(options)})); return this._denoiserReady = Promise.resolve(); }\n const task = (async () => {\n await this._engine.init();\n if (this._engine.backend !== 'webgpu') { if (revision === this._filterRevision && !this._warnedWebGPUFilter) { this._warnedWebGPUFilter = true; console.warn('This denoiser requires WebGPU; denoising is disabled for this render.'); } return; }\n if (revision !== this._filterRevision || this._disposed) return;\n if (options.type === 'custom') { this._filter = {kind: 'custom', denoiser: options.denoiser, aovs: options.aovs}; return; }\n const {loadOIDNNetwork} = await loadOIDN();\n const filter = await this._engine._acquireDenoiser(key as string, async () => ({kind: 'oidn', denoiser: await loadOIDNNetwork(this._engine, options)}));\n if (revision !== this._filterRevision || this._disposed) { this._engine._releaseDenoiser(filter); return; }\n this._filter = filter; this._warmDenoiser();\n })();\n this._filterPending = task;\n // Superseded or disposed loads resolve instead of reporting obsolete failures.\n return this._denoiserReady = task.catch(error => { if (revision === this._filterRevision && !this._disposed) throw error; })\n .finally(() => { if (this._filterPending === task) this._filterPending = undefined; });\n }\n private _warmDenoiser() {\n const filter = this._filter, revision = this._filterRevision;\n if (!filter || filter.kind !== 'oidn') return;\n const network = filter.denoiser;\n const filters = [network, network.auxiliaryDenoisers?.albedo, network.auxiliaryDenoisers?.normal];\n const width = this.width, height = this.height;\n const task = this._engine._enqueueDenoise(async () => {\n if (revision !== this._filterRevision || filter !== this._filter || this._disposed) return;\n await Promise.all(filters.map(network => network?.prepareForImage?.(width, height, {tileOverlap: this._schedule() === 'converged' ? undefined : 80})));\n });\n void task.catch(error => {\n if (revision === this._filterRevision && filter === this._filter && !this._disposed) this._engine._notifyError(error);\n });\n }\n\n private _cancelDenoise() { this._denoiseController?.abort(); this._denoiseController = undefined; this._denoiseRevision++; this._target?.cancelDenoise?.(); this._denoisePending = undefined; this._denoisedSamples = 0; }\n /** @internal */ _inputsChanged(resetTiming = false) { this._cancelDenoise(); if (resetTiming) this._target?.invalidateTiming?.(); }\n /** @internal */ _deviceLost(recovering: boolean) {\n this._cancelAdaptiveFrames();\n this._cancelDenoise(); this._filterRevision++;\n this._filter = undefined; this._filterPending = undefined; this._filterKey = '';\n this._target = undefined; this._input = {scene: -1, camera: -1, settings: ''};\n this._status = recovering ? 'preparing' : 'error';\n }\n /** @internal */ _displayChanged() { this._cancelDenoise(); this._target?.invalidateDenoisedOutput(); }\n private _maybeDenoise(force = false, sampleTarget = this._nextSampleTarget()) {\n const target = this._target, filter = this._filter;\n if (!target || !filter || this._denoisePending || this.samples < 1 || this._denoisedSamples === this.samples) return;\n if (!force && this._schedule() === 'converged' && !this.converged) return;\n if (!force && this._schedule() === 'progressive' && this.samples < sampleTarget) return;\n this._engine.display._configure(this);\n target.activate(); target.drawPostProcess();\n const revision = ++this._denoiseRevision, samples = this.samples, frameStart = this._frameStart;\n const controller = this._denoiseController = new AbortController();\n // One shared scratch lease across all renders; queued stale jobs do no GPU work.\n const task = this._engine._enqueueDenoise(async () => {\n if (revision !== this._denoiseRevision || this._disposed) return;\n target.activate(); this._engine.display._configure(this);\n if (revision !== this._denoiseRevision || this._disposed) return;\n target.drawPostProcess();\n if (filter.kind === 'custom') {\n await this._engine._prepareCustomDenoiser(filter.denoiser, this.width, this.height);\n if (controller.signal.aborted || revision !== this._denoiseRevision || this._disposed) return;\n }\n const complete = await target.performDenoise?.(filter, undefined, this._schedule(), controller.signal);\n if (revision !== this._denoiseRevision || this._disposed) return;\n if (complete) {\n target.activate(); target.drawPostProcess(); this._denoisedSamples = samples; this._lastDenoiseTime = performance.now();\n if (frameStart !== undefined) this._frameTime = Math.max(this._frameTime, this._lastDenoiseTime - frameStart);\n }\n });\n this._denoisePending = task;\n void task.catch(error => { if (revision === this._denoiseRevision && !this._disposed) this._engine._notifyError(error); }).finally(() => {\n if (this._denoisePending === task) {\n this._denoiseController = undefined; this._denoisePending = undefined;\n this._status = this.converged ? 'finished' : 'converging'; this._adaptResolution();\n }\n });\n }\n /** Reads native RGBA, top row first; id uses uint32, other kinds float32. Default hdr. Beauty/guide reads are empty until a beauty sample completes. AOV reads require explicit aovs enablement. Custom denoised output is resolved linear HDR ray color before display background/catcher composition; built-ins retain their native display-space output. Unavailable denoised output falls back to hdr. */\n readPixels(kind: 'id'): Promise<{width: number; height: number; data: Uint32Array}>;\n readPixels(kind?: 'hdr' | 'denoised' | 'albedo' | 'normal' | Exclude<AovKind, 'id'>): Promise<{width: number; height: number; data: Float32Array}>;\n readPixels(kind: 'hdr' | 'denoised' | 'albedo' | 'normal' | AovKind): Promise<{width: number; height: number; data: Float32Array | Uint32Array}>;\n async readPixels(kind: 'hdr' | 'denoised' | 'albedo' | 'normal' | AovKind = 'hdr'): Promise<{width: number; height: number; data: Float32Array | Uint32Array}> {\n if (this._disposed) throw new Error('Render is disposed.');\n const target = this._target;\n if (['depth', 'position', 'roughness', 'diffuseAlbedo', 'specularAlbedo', 'id', 'motion'].includes(kind)) {\n const aov = kind as AovKind;\n aovMask(this.aovs);\n if (!this.aovs.includes(aov)) throw new Error(`AOV ${aov} is not enabled`);\n if (!target?.readAov) throw new Error('AOV output is not ready');\n target.activate(); return target.readAov(aov);\n }\n if (!target || this.samples === 0) return {width: 0, height: 0, data: new Float32Array(0)};\n if (kind === 'denoised' && this._denoisedSamples === 0) {\n if (!this._warnedDenoisedReadback) { this._warnedDenoisedReadback = true; console.warn('Denoised output is not ready; reading HDR samples instead.'); }\n kind = 'hdr';\n }\n target.activate(); return target.readOutput(kind as 'hdr' | 'denoised' | 'albedo' | 'normal');\n }\n /** Borrows a read-only WebGPU texture; undefined on WebGL or before a complete sample. Kind is required. HDR is native resolved linear ray color before denoising/display composition, with DenoiseInput.color normalization and coverage. Display is the latest compose, including filters and display passes. Valid only until this render's next refine/converge, display present/setSize, restart/dispose or device loss; never retain, write or destroy it. */\n getOutputTexture(kind: 'hdr' | 'display'): GPUTexture | undefined {\n if (this._engine.backend !== 'webgpu' || (kind === 'hdr' ? !this._complete : !this._current || !this._target?.presentationComplete || (!this._complete && !this._target.getAovSamples?.()))) return;\n return this._target?.getOutputTexture?.(kind);\n }\n /** Discards only this render's accumulation and pending denoising. */\n restart() { if (this._disposed) throw new Error('Render is disposed.'); this._cancelDenoise(); this._cancelAdaptiveFrames(); this._sampleStart = this._frameStart = undefined; this._frameTime = 0; this._target?.restartSamples(); this._status = 'converging'; }\n /** Releases only this render's image resources and denoiser. */\n dispose() {\n if (this._disposed) return;\n this._disposed = true; this._events.clear(); this._filterRevision++; this._cancelDenoise(); this._cancelAdaptiveFrames();\n if (this._target) this._engine._releaseTarget(this._target);\n if (this._filter && this._filter.kind !== 'custom') this._engine._releaseDenoiser(this._filter);\n this._target = undefined; this._filter = undefined; this._engine._unregister(this);\n this._fallback?._dependents.delete(this);\n for (const dependent of this._dependents) dependent._fallback = null;\n this._dependents.clear();\n }\n /** Deterministically renders this image. Rejects on abort/timeout/input revision changes and blocks refine on this render. */\n async converge(options: ConvergeOptions): Promise<ConvergeResult> {\n if (this._busy) throw new Error('Converge is already running on this render.');\n if (this._disposed) throw new Error('Render is disposed.');\n const inputs = this._engine._inputs;\n const deviceGeneration = this._engine._deviceGeneration;\n if (!inputs.value) throw new Error('Commit engine.scene and engine.camera with engine.update() before converge.');\n const camera = cameraSnapshot(options.camera ?? inputs.value);\n const samples = Math.max(1, Math.round(options.samples));\n if (!Number.isFinite(samples)) throw new Error('samples must be finite and positive.');\n const batchLimit = Math.max(1, Math.round(options.samplesPerBatch ?? 8));\n const sequenceOffset = Math.max(0, Math.round(options.sampleSequenceOffset ?? 0));\n const timeout = Math.max(1, options.timeoutMs ?? 600000);\n const check = () => {\n if (this._disposed) throw new Error('Render is disposed.');\n if (this._engine._deviceGeneration !== deviceGeneration) throw this._engine._lostError;\n if (options.signal?.aborted) throw options.signal.reason ?? new DOMException('Convergence aborted', 'AbortError');\n const current = this._engine._inputs;\n if (current.scene !== inputs.scene || current.camera !== inputs.camera) throw new Error('Engine inputs changed during converge.');\n };\n this._busy = true;\n const abortConverge = () => this._cancelDenoise();\n options.signal?.addEventListener('abort', abortConverge, {once: true});\n let target: RenderTarget | undefined;\n const start = performance.now();\n try {\n await this._engine._awaitDevice(this._engine.init());\n check();\n while (!this._engine._ready) { check(); if (performance.now() - start > timeout) throw new Error('Timed out preparing convergence.'); await new Promise(resolve => setTimeout(resolve, 0)); }\n target = this._synchronize(samples, true);\n this._offlineCamera = !!options.camera;\n if (!target) throw new Error('The render target is not ready.');\n this._cancelDenoise(); target.restartSamples();\n this._reloadDenoiser(); await this._engine._awaitDevice(Promise.resolve(this._filterPending)); check();\n const stage = async (cap: number, name: 'pilot' | 'final', offset: number) => {\n check(); this._cancelDenoise(); target!.activate(); target!.restartSamples();\n target!.configure({...this._settings(cap), batchSamples: true});\n let batch = options.targetBatchTimeMs && this._engine.device ? 1 : Math.min(batchLimit, cap);\n let previous = -1, lastPreview = performance.now(); const started = performance.now();\n for (;;) {\n check(); if (performance.now() - started > timeout) throw new Error(`Timed out rendering the offline ${name} pass.`);\n target!.activate(); target!.setOfflineRenderOptions({samplesPerBatch: batch, deferPostProcess: true, sampleSequenceOffset: offset});\n const before = target!.getTotalSamplesRendered(), batchStarted = performance.now();\n this._status = target!.trace(camera, cap) ? 'compiling' : 'converging';\n const count = target!.getTotalSamplesRendered();\n if (count !== previous) {\n previous = count; options.onProgress?.({stage: name, samples: Math.min(count, cap), targetSamples: cap});\n if (name === 'final' && options.previewIntervalMs !== undefined && count > 0 && count < cap && performance.now() - lastPreview >= options.previewIntervalMs) { target!.drawPostProcess(); lastPreview = performance.now(); }\n }\n if (count >= cap) break;\n if (count > before && this._engine.device) await this._engine._awaitDevice(this._engine.device.queue.onSubmittedWorkDone());\n else await new Promise(resolve => setTimeout(resolve, 0));\n if (options.targetBatchTimeMs && this._engine.device && count > before) {\n const desired = Math.max(1, Math.min(batchLimit, Math.round(options.targetBatchTimeMs * (count - before) / Math.max(1, performance.now() - batchStarted))));\n batch = desired > batch ? Math.min(desired, batch * 2) : desired;\n }\n }\n await this._engine._awaitDevice(Promise.resolve(this._engine.device?.queue.onSubmittedWorkDone())); check();\n };\n let result: ConvergeResult = {samples, averageSamplesPerPixel: samples, pilotSamples: 0, adaptiveSampling: false};\n if (options.adaptiveSampling && this._engine.device) {\n const pilotSamples = Math.min(samples, Math.max(2, Math.round(options.adaptiveSampling.pilotSamples ?? 8)));\n target.activate(); target.setVarianceMoments(true); target.setAdaptiveSamplingTargets(undefined);\n await stage(pilotSamples, 'pilot', sequenceOffset);\n target.activate(); const plan = await this._engine._awaitDevice(target.prepareOfflineAdaptiveSampling({...options.adaptiveSampling, maxSamples: samples}));\n if (plan) {\n target.activate(); target.setVarianceMoments(false);\n await stage(plan.maximumTarget, 'final', sequenceOffset + pilotSamples);\n result = {samples: plan.maximumTarget, averageSamplesPerPixel: plan.averageTarget, pilotSamples, varianceHistory: plan.history, adaptiveSampling: true};\n } else { target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); await stage(samples, 'final', sequenceOffset); }\n } else { target.activate(); target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); await stage(samples, 'final', sequenceOffset); }\n if (this._filter) {\n options.onProgress?.({stage: 'denoising', samples: result.samples, targetSamples: result.samples});\n this._status = 'denoising'; this._maybeDenoise(true); await this._engine._awaitDevice(Promise.resolve(this._denoisePending)); check();\n }\n this._status = 'finished'; return result;\n } catch (error) { if (this._engine._deviceGeneration === deviceGeneration) this._status = 'error'; throw error; }\n finally {\n if (target && !this._disposed && this._engine._deviceGeneration === deviceGeneration) { target.activate(); target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); target.setOfflineRenderOptions({samplesPerBatch: 0, deferPostProcess: false, sampleSequenceOffset: 0}); }\n options.signal?.removeEventListener('abort', abortConverge);\n this._busy = false;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Render.js","sourceRoot":"","sources":["../src/Render.ts"],"names":[],"mappings":"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","sourcesContent":["import type {AovKind} from './renderer/aov.js';\nimport {aovMask} from './renderer/aov.js';\nimport {displayAovKind} from './renderer/aovDisplay.js';\nimport type {DisplayChannel} from './renderer/RenderingPipeline.js';\nimport { Events } from './util/events.js';\nimport type Engine from './Engine.js';\nimport type Camera from './scene/Camera.js';\nimport { cameraSnapshot } from './renderer/cameraSnapshot.js';\nimport type { AlphaBlendStrategy } from './renderer/RenderingPipeline.js';\nimport { collectTraceSettings, imageSettingsKey } from './settings/render.js';\nimport type { SamplingPattern } from './renderer/sampling.js';\nimport type { RenderTarget, TraceSettings } from './renderer/renderPipeline.js';\nimport type {DenoiserHandle} from './renderer/denoiser.js';\nimport type {OwnedDenoiser} from './renderer/ownedDenoiser.js';\nimport type { OIDNModel, OIDNEngine, OIDNPrecision, OIDNHDRTransfer, OIDNDynamicTileSetting, OIDNAuxiliaryModelUrls } from './oidn.js';\nimport { DEFAULT_JNLM_OPTIONS, createJNLMDenoiser, type JNLMOptions } from './renderer/jnlm.js';\nimport type { OfflineAdaptiveSamplingOptions, OfflineVarianceHistory } from './renderer/OfflineAdaptiveSampling.js';\nimport { nextPreviewScale } from './renderer/util.js';\nimport {scheduleFrame} from './util/frame.js';\n\n/** Complete-sample notification, including the backend's measured sample time. */\nexport interface SampleEvent { samples: number; isFirstFrame: boolean; frameTimeMs: number; }\n/** State of one independent accumulation. Default preparing. */\nexport type RenderStatus = 'preparing' | 'compiling' | 'converging' | 'denoising' | 'finished' | 'error';\n/** Execution overrides for one refine call; accumulated samples are retained. */\nexport interface RefineOptions {\n /** Batch several samples in this call. Default this render's batchSamples. */ batchSamples?: boolean;\n /** @deprecated Use refineUntil; this option will be removed in a later release. Positive finite WebGPU queue budget in milliseconds; capped by timeBudgetMs, ignored on WebGL. Default timeBudgetMs. */ targetBatchTimeMs?: number;\n /** @deprecated Use refineUntil; this option will be removed in a later release. Leave the displayed image unchanged, for calls between display frames; the next presentation or pixel read updates it once with every new sample. Ignored on WebGL. Default false. */ deferResolve?: boolean;\n}\n/** When a render filters its complete samples. Default converged. */\nexport type DenoiseSchedule = 'converged' | 'progressive' | 'every-sample';\n/** Caller-owned WebGPU filter. Render/Engine never dispose it; calls on one engine are serialized. */\nexport interface Denoiser {\n /** Optional preallocation before first use or after device/dimension changes. Default undefined. The device may change after recovery; recreate device-owned resources then. */\n prepare?(input: {device: GPUDevice; width: number; height: number}): Promise<void>;\n /** Write all output RGB, then resolve after submitting GPU work. Abort on input changes, restart, replacement or disposal; aborted results are discarded even if this resolves. Settle within 10 seconds of an abort, or later denoising continues without waiting. Buffers are borrowed until settlement; do not retain or destroy them. */\n denoise(input: DenoiseInput, context: {signal: AbortSignal; schedule: DenoiseSchedule}): Promise<void>;\n}\n/** Borrowed, tightly packed rgba32float buffers, top row first, width*height*16 bytes of image data. */\nexport interface DenoiseInput {\n /** Requested primary-surface buffers, top row first; id is rgba32uint, others rgba32float. Default undefined. Borrowed until denoise settles. */ aovs?: Readonly<Partial<Record<AovKind,GPUBuffer>>>;\n /** Engine WebGPU device; may change after device loss/recovery. */ device: GPUDevice;\n /** Actual internal width, including backend alignment. */ width: number;\n /** Actual internal height, including backend alignment. */ height: number;\n /** Read-only native resolved linear HDR ray color, before exposure, grading, tone mapping, vignette, bloom and display background/catcher composition. RGB uses native hit-count normalization (flat primary misses are averaged by samples); alpha is raw path coverage. Usage STORAGE | COPY_SRC | COPY_DST. */ color: GPUBuffer;\n /** Read-only resolved linear RGB albedo averaged over complete samples; alpha is primary-hit coverage. Same packing/usage as color. */ albedo: GPUBuffer;\n /** Read-only resolved world-space RGB normal encoded as averaged normal*.5+.5, without renormalizing; alpha 1 for a valid surface, otherwise zero RGBA. Same packing/usage as albedo. */ normal: GPUBuffer;\n /** Write linear HDR RGB here. Same packing/usage as color; alpha is ignored and original path coverage is retained. */ output: GPUBuffer;\n}\n/** Third-party WebGPU filter; ignored with one warning on WebGL. */\nexport interface CustomDenoiserOptions {\n /** Optional AOV inputs; automatically enables their passes for this render. Default []. */ aovs?: readonly AovKind[];\n /** Required implementation selector. */ type: 'custom';\n /** Required caller-owned instance, keyed by object identity; never serialized or released by Render/Engine. */ denoiser: Denoiser;\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n}\n/** Built-in joint non-local means filter on both backends. */\nexport interface JNLMDenoiserOptions extends JNLMOptions {\n /** Required implementation selector. */ type: 'jnlm';\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n}\n/** Loading and execution options shared by both OIDN network sources. */\ninterface OIDNSettings {\n /** Required implementation selector. */ type: 'oidn';\n /** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;\n /** Override albedo and normal prefilter networks. Default packaged filters for cleanAuxLarge, otherwise undefined. */ auxiliaryModelUrls?: OIDNAuxiliaryModelUrls;\n /** Execution backend. Default auto (native WGSL unless WebNN is selected). */ engine?: OIDNEngine;\n /** WGSL precision. Default auto (fp16 when shader-f16 is available). */ precision?: OIDNPrecision;\n /** Adaptive tile controller. Default enabled with minTileSize 256, initialTileSize 432, targetTileTimeMs 16, adjustmentStep 16. */ dynamicTile?: OIDNDynamicTileSetting;\n /** Maximum OIDN output tile edge in pixels. Default `512`. */ maxTileSize?: number;\n /** Abort weight downloads. Default undefined; does not distinguish cached networks. */ signal?: AbortSignal;\n}\n/** OIDN configuration on WebGPU: choose a packaged model or an explicit network URL. */\nexport type OIDNDenoiserOptions = OIDNSettings & (\n | {\n /** Packaged network. Default standard. */ model?: OIDNModel;\n /** Weight directory override. Default bundled standard/small assets and CDN large weights. */ weightsBaseUrl?: string | URL;\n weightsUrl?: never; aux?: never; hdr?: never; hdrTransfer?: never;\n }\n | {\n /** Custom network file. Required in this branch; failures never fall back to CDN. */ weightsUrl: string | URL;\n /** Custom model consumes albedo and normal. Default true. */ aux?: boolean;\n /** Custom model consumes HDR color. Default true. */ hdr?: boolean;\n /** Custom model HDR encoding. Default pu. */ hdrTransfer?: OIDNHDRTransfer;\n model?: never; weightsBaseUrl?: never;\n }\n);\n/** Assign a complete configuration, or null to disable denoising. The type selector is required. */\nexport type DenoiserOptions = JNLMDenoiserOptions | OIDNDenoiserOptions | CustomDenoiserOptions;\n\n/** Optional caustic estimators. All are disabled by default. Both fall back to path tracing when a smooth caster has stochastic blend coverage. */\nexport interface CausticSettings {\n /** WebGPU progressive photon mapping; ignored on WebGL. Used alone, it can reduce denoising blotches on directly visible receivers, with noisier raw output. Default `false`. */\n photonMapping?: boolean | {\n /** Emitted photons per batch; 28 bytes per photon plus up to 13 MiB of overhead. Positive finite values are rounded to at least 1 and reduced to fit device limits and a 128 MiB batch budget; other values use the default. Default pixel count / 4, at most 262144. */ photonsPerSample?: number;\n /** Positive first-batch gather radius in scene units, independent of photonsPerSample; shrinks as batches accumulate. Default 3% of the caster bounding sphere radius. */ initialRadius?: number;\n };\n /**\n * WebGPU light tracing for directly visible caustic paths; ignored on WebGL.\n * Default `false`.\n */ lightTracing?: boolean | {\n /** Emitted photons per sample, rounded to a positive integer and capped by the device dispatch limit. Default pixel count / 4. */\n photonsPerSample?: number;\n };\n}\n\n/** Optional per-render execution and image-quality settings. */\nexport interface RenderSettings {\n /** Optional surface outputs. Default []; disabled outputs allocate no AOV resources. */ aovs?: readonly AovKind[];\n /** Independent AOV sample cap, positive integer. Default 16. */ aovSamples?: number;\n /** Maximum complete samples. Default 2048. */ maxSamples?: number;\n /**\n * Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).\n * Complete caustic light-to-camera paths can be longer than this depth.\n * Total path events, including transmission and alpha skips, are capped at 20\n * and at three times this depth. Intel Mac WebGL uses min(depth, 3), doubled\n * for scenes with transmission or alpha, with its existing early termination.\n * Default 3.\n */ bounces?: number;\n /** Radiance clamp; 0 disables it. Default 0. */ clamping?: number;\n /** Sampling sequence. Default sobol. */ samplingPattern?: SamplingPattern;\n /** Caustic estimators. All are disabled by default. */ caustics?: CausticSettings;\n /** Light candidates per vertex; WebGPU only, ignored on WebGL. Default 4. */ directLightCandidates?: number;\n /** Rounded material edges. Default true. */ bevel?: boolean;\n /** Bevel neighborhood probes, clamped to 1–32. Default 8. */ bevelSamples?: number;\n /** Wavelength paths per dispersion sample, each carrying one RGB channel. Default 3; 1 selects one random channel. */ dispersionWavelengths?: 1 | 3;\n /** Primary-ray alpha blend strategy; WebGPU only. Default stochastic. */ alphaBlendStrategy?: AlphaBlendStrategy;\n /** Minimum transmissive path alpha, using path depth. Default 1. Changes restart this accumulation. */ transmissiveOutputAlphaMin?: number;\n /** Tile execution budget in milliseconds. Default 21. */ timeBudgetMs?: number;\n /** Maximum tile grid size per sample, rounded up to a rectangular grid. Fewer tiles make each tile larger; this does not cap work per frame or refine call. Default Infinity. */ maxTiles?: number;\n /** Let one refine submit several samples within an estimated timeBudgetMs; one sample or tile can exceed it. WebGPU requires GPU timestamps. RenderLoop also batches between display frames when individual tiles fit the budget. Default false. */ batchSamples?: boolean;\n /** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */ allowMultipleSamplesPerFrame?: boolean;\n /** Adapt scale to frame timing; minScale must not exceed resolutionScale. Default false. */ adaptiveResolution?: {targetFrameMs: number; minScale: number} | false;\n /** Single-level fallback on the same engine. Default null. */ fallback?: Render | null;\n /** Denoising configuration. Default null. */ denoiser?: DenoiserOptions | null;\n}\n/** Constructor options: fixed dimensions and canvas-relative scale are mutually exclusive. */\nexport type RenderOptions = RenderSettings & (\n | { /** Fixed width in pixels, paired with height. */ width: number; /** Fixed height in pixels, paired with width. */ height: number; resolutionScale?: never }\n | { /** Canvas-relative resolution scale. Default 1. */ resolutionScale?: number; width?: never; height?: never }\n);\n/** Deterministic offline execution options. */\nexport interface ConvergeOptions {\n /** Final complete-sample budget. Required. */ samples: number;\n /** Camera override for this output only, copied on entry. Default committed engine camera. */ camera?: Camera;\n /** Two-stage variance sampling; WebGPU only, ignored on WebGL. Default undefined. */ adaptiveSampling?: Omit<OfflineAdaptiveSamplingOptions, 'maxSamples'>;\n /** Deterministic sequence base. Default 0. */ sampleSequenceOffset?: number;\n /** Maximum samples per submission batch. Default 8. */ samplesPerBatch?: number;\n /** WebGPU target batch completion time in milliseconds. Default undefined (fixed batch size). */ targetBatchTimeMs?: number;\n /** Delay between intermediate resolved images in milliseconds. Default undefined (resolve only at the end). */ previewIntervalMs?: number;\n /** Batch progress callback. Default undefined. */ onProgress?: (progress: {stage: 'pilot' | 'final' | 'denoising'; samples: number; targetSamples: number}) => void;\n /** Cancels the task. Default undefined. */ signal?: AbortSignal;\n /** Timeout per stage in milliseconds. Default 600000. */ timeoutMs?: number;\n}\n/** Result of deterministic offline convergence. */\nexport interface ConvergeResult {\n samples: number; averageSamplesPerPixel: number; pilotSamples: number;\n varianceHistory?: OfflineVarianceHistory; adaptiveSampling: boolean;\n}\n\nlet oidnModule: Promise<typeof import('./renderer/oidnNetwork.js')> | undefined;\nconst loadOIDN = () => oidnModule ??= import('./renderer/oidnNetwork.js');\n\nfunction validateDenoiserOptions(options: DenoiserOptions) {\n if (!options || typeof options !== 'object' || (options.type !== 'jnlm' && options.type !== 'oidn' && options.type !== 'custom')) throw new Error('Denoiser type must be jnlm, oidn or custom.');\n const allowed = options.type === 'jnlm'\n ? ['type', 'schedule', ...Object.keys(DEFAULT_JNLM_OPTIONS)]\n : options.type === 'custom' ? ['type', 'schedule', 'denoiser', 'aovs']\n : ['type', 'schedule', 'model', 'weightsBaseUrl', 'weightsUrl', 'aux', 'hdr', 'hdrTransfer', 'auxiliaryModelUrls', 'engine', 'precision', 'dynamicTile', 'maxTileSize', 'signal'];\n for (const key of Object.keys(options)) if (!allowed.includes(key)) throw new Error(`Denoiser field ${key} does not belong to ${options.type}.`);\n if (options.schedule !== undefined && !['converged', 'progressive', 'every-sample'].includes(options.schedule)) throw new Error('Unknown denoise schedule.');\n if (options.type === 'jnlm') createJNLMDenoiser(options);\n else if (options.type === 'custom') {\n aovMask(options.aovs ?? []);\n if (!options.denoiser || typeof options.denoiser !== 'object' || typeof options.denoiser.denoise !== 'function' || (options.denoiser.prepare !== undefined && typeof options.denoiser.prepare !== 'function')) throw new Error('Custom denoiser must implement denoise and optional prepare.');\n } else {\n if (options.weightsUrl !== undefined) {\n if (options.model !== undefined || options.weightsBaseUrl !== undefined) throw new Error('weightsUrl is mutually exclusive with model and weightsBaseUrl.');\n } else if (options.aux !== undefined || options.hdr !== undefined || options.hdrTransfer !== undefined) throw new Error('aux, hdr and hdrTransfer require weightsUrl.');\n for (const key of ['weightsUrl', 'weightsBaseUrl'] as const) if (options[key] !== undefined && !isURL(options[key])) throw new Error(`${key} must be a nonempty string or URL.`);\n if (options.auxiliaryModelUrls !== undefined) {\n const urls = options.auxiliaryModelUrls;\n if (!urls || !isURL(urls.albedo) || !isURL(urls.normal) || Object.keys(urls).some(key => !['albedo', 'normal'].includes(key))) throw new Error('auxiliaryModelUrls requires only albedo and normal URLs.');\n }\n for (const [key, values] of [['engine', ['auto', 'wgsl', 'webnn']], ['precision', ['auto', 'fp32', 'fp16']], ['hdrTransfer', ['pu', 'log']]] as const) {\n if (options[key] !== undefined && !(values as readonly string[]).includes(options[key]!)) throw new Error(`Unknown OIDN ${key}.`);\n }\n for (const key of ['aux', 'hdr'] as const) if (options[key] !== undefined && typeof options[key] !== 'boolean') throw new Error(`${key} must be boolean.`);\n if (options.dynamicTile !== undefined && typeof options.dynamicTile !== 'boolean') {\n if (!options.dynamicTile || typeof options.dynamicTile !== 'object') throw new Error('dynamicTile must be boolean or tile settings.');\n for (const [key, value] of Object.entries(options.dynamicTile)) {\n if (!['minTileSize', 'initialTileSize', 'targetTileTimeMs', 'adjustmentStep'].includes(key) || (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || value <= 0))) throw new Error(`Invalid dynamicTile ${key}.`);\n }\n }\n if (options.model !== undefined && !['standard', 'small', 'cleanAuxLarge'].includes(options.model)) throw new Error('Unknown OIDN model.');\n if (options.maxTileSize !== undefined && (!Number.isInteger(options.maxTileSize) || options.maxTileSize < 1)) throw new Error('maxTileSize must be a positive integer.');\n }\n}\n\nfunction isURL(value: unknown): value is string | URL { return (typeof value === 'string' && value.length > 0) || value instanceof URL; }\n\n// Snapshot nested values too, so application edits cannot silently change a cache key.\nfunction snapshotDenoiserOptions(options: DenoiserOptions): Readonly<DenoiserOptions> {\n if (options.type === 'custom') return Object.freeze({...options,aovs:Object.freeze([...(options.aovs ?? [])])});\n if (options.type !== 'oidn') return Object.freeze({...options});\n const next: OIDNDenoiserOptions = {...options};\n if (options.weightsBaseUrl !== undefined) next.weightsBaseUrl = String(options.weightsBaseUrl);\n if (options.weightsUrl !== undefined) next.weightsUrl = String(options.weightsUrl);\n if (options.auxiliaryModelUrls !== undefined) next.auxiliaryModelUrls = Object.freeze({albedo: String(options.auxiliaryModelUrls.albedo), normal: String(options.auxiliaryModelUrls.normal)});\n if (typeof options.dynamicTile === 'object') next.dynamicTile = Object.freeze({...options.dynamicTile});\n return Object.freeze(next);\n}\n\nfunction denoiserKey(options: Readonly<DenoiserOptions>): string | Denoiser {\n if (options.type === 'custom') return options.denoiser;\n if (options.type === 'jnlm') return JSON.stringify({type: 'jnlm', ...Object.fromEntries(Object.entries(DEFAULT_JNLM_OPTIONS).map(([key, value]) => [key, options[key as keyof JNLMOptions] ?? value]))});\n const tile = options.dynamicTile;\n return JSON.stringify({type: 'oidn',\n ...(options.weightsUrl === undefined ? {model: options.model ?? 'standard', weightsBaseUrl: options.weightsBaseUrl?.toString()} : {weightsUrl: String(options.weightsUrl), aux: options.aux ?? true, hdr: options.hdr ?? true, hdrTransfer: options.hdrTransfer ?? 'pu'}),\n auxiliaryModelUrls: options.auxiliaryModelUrls && {albedo: String(options.auxiliaryModelUrls.albedo), normal: String(options.auxiliaryModelUrls.normal)},\n maxTileSize: options.maxTileSize, engine: options.engine ?? 'auto', precision: options.precision ?? 'auto',\n dynamicTile: tile === false ? false : {minTileSize: typeof tile === 'object' ? tile.minTileSize ?? 256 : 256,\n initialTileSize: typeof tile === 'object' ? tile.initialTileSize ?? 432 : 432,\n targetTileTimeMs: typeof tile === 'object' ? tile.targetTileTimeMs ?? 16 : 16,\n adjustmentStep: typeof tile === 'object' ? tile.adjustmentStep ?? 16 : 16}\n });\n}\n\n/** One independently configured image and its accumulation, owned by an engine. */\nexport default class Render {\n /** Enabled surface outputs. Default []; readPixels rejects outputs not enabled here. */ aovs: readonly AovKind[] = [];\n /** Independent AOV sample cap. Default 16. */ aovSamples = 16;\n /** Maximum complete samples. Default 2048. */ maxSamples = 2048;\n /**\n * Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).\n * Complete caustic light-to-camera paths can be longer than this depth.\n * Total path events, including transmission and alpha skips, are capped at 20\n * and at three times this depth. Intel Mac WebGL uses min(depth, 3), doubled\n * for scenes with transmission or alpha, with its existing early termination.\n * Default 3.\n */ bounces = 3;\n /** Per-sample radiance clamp; 0 disables it. Default 0. */ clamping = 0;\n /** Sampling sequence. Default sobol. */ samplingPattern: SamplingPattern = 'sobol';\n /** Caustic estimators. Default undefined (all disabled). */ caustics?: CausticSettings;\n /** WebGPU light candidates per vertex; ignored on WebGL. Default 4. */ directLightCandidates = 4;\n /** Rounded material edges. Default true. */ bevel = true;\n /** Bevel probes, clamped to 1–32. Default 8. */ bevelSamples = 8;\n /** Dispersion wavelengths per sample. Default 3. */ dispersionWavelengths: 1 | 3 = 3;\n /** WebGPU primary-ray alpha policy; ignored on WebGL. Default stochastic. */ alphaBlendStrategy: AlphaBlendStrategy = 'stochastic';\n /** Minimum transmissive path alpha. Default 1. Changing it restarts this render. */ transmissiveOutputAlphaMin = 1;\n /** Execution budget in milliseconds. Default 21. */ timeBudgetMs = 21;\n /** Maximum tile grid size per sample, rounded up to a rectangular grid. Fewer tiles make each tile larger; this does not cap work per frame or refine call. Default Infinity. */ maxTiles = Infinity;\n /** Let one refine submit several samples within an estimated timeBudgetMs; one sample or tile can exceed it. WebGPU requires GPU timestamps. Default false. */ batchSamples = false;\n /** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */\n get allowMultipleSamplesPerFrame(): boolean { return this.batchSamples; }\n set allowMultipleSamplesPerFrame(value: boolean) { this.batchSamples = value; }\n /** Adaptive resolution controller, or false. Default false. */ adaptiveResolution: {targetFrameMs: number; minScale: number} | false = false;\n private _resolutionScale = 1;\n /** Canvas-relative scale. Default 1; cannot be assigned on a fixed-size render. */\n get resolutionScale() { return this._resolutionScale; }\n set resolutionScale(value: number) {\n if (this._fixed) throw new Error('Fixed-size renders cannot use resolutionScale.');\n if (!Number.isFinite(value) || value <= 0) throw new Error('resolutionScale must be positive.');\n if (value !== this._resolutionScale) this._cancelAdaptiveFrames();\n this._resolutionScale = value;\n }\n private _fallback: Render | null = null;\n /** Single-level fallback on this engine. Default null; chains and cycles are rejected. */\n get fallback() { return this._fallback; }\n set fallback(value: Render | null) {\n if (value && (value._engine !== this._engine || value === this || value.fallback)) throw new Error('Fallback must be a render on the same engine with no fallback.');\n if (value && this._dependents.size) throw new Error('Fallback renders cannot have their own fallback.');\n this._fallback?._dependents.delete(this);\n this._fallback = value; value?._dependents.add(this);\n }\n private _dependents = new Set<Render>();\n private _denoiserOptions: Readonly<DenoiserOptions> | null = null;\n /** Frozen configuration snapshot. Default null. Change it with {@link Render.setDenoiser}. */\n get denoiser(): Readonly<DenoiserOptions> | null { return this._denoiserOptions; }\n /**\n * Replaces the denoising configuration; null disables denoising. Invalid options throw synchronously\n * before replacing any state. Resolves when the filter is ready to use (after OIDN weights load) or this\n * configuration is replaced; rejects when loading fails. An equal configuration returns the current\n * promise without reloading.\n */\n setDenoiser(options: DenoiserOptions | null): Promise<void> {\n if (options !== null) validateDenoiserOptions(options);\n const next = options ? snapshotDenoiserOptions(options) : null;\n const current = this._denoiserOptions;\n if (current === null && next === null) return this._denoiserReady;\n if (next && current && denoiserKey(next) === denoiserKey(current)\n && (next.type !== 'custom' || current.type === 'custom' && aovMask(next.aovs ?? [])===aovMask(current.aovs ?? []))\n && next.schedule === current.schedule && (next.type !== 'oidn' ||\n (current.type === 'oidn' && next.signal === current.signal))) return this._denoiserReady;\n this._denoiserOptions = next;\n return this._refreshDenoiser() ?? this._denoiserReady;\n }\n private _denoiserReady: Promise<void> = Promise.resolve();\n private _fixed?: {width: number; height: number};\n private _target?: RenderTarget;\n private _status: RenderStatus = 'preparing';\n private _disposed = false;\n private _busy = false;\n private _refineOptions?: RefineOptions;\n private _refillController?: AbortController;\n private _offlineCamera = false;\n private _input = {scene: -1, camera: -1, settings: ''};\n private _adaptiveScale = 1;\n private _lastScale = 1;\n private _frameTime = 0;\n private _sampleStart?: number;\n private _frameStart?: number;\n private _sampleScale = 1;\n private _frameScale = 1;\n private _adaptiveFrames = new Set<() => void>();\n private _adaptiveFastFrames = 0;\n private _events = new Events<{sample: SampleEvent}>();\n /** Owning engine. */ get engine(): Engine { return this._engine; }\n /** Whether inference is queued or running, including intermediate updates. Default false. */ get denoising(): boolean { return !!this._denoisePending; }\n /** Subscribes to every complete sample on this render; returns unsubscribe. */\n on(event: 'sample', listener: (value: SampleEvent) => void): () => void { return this._events.on(event, listener); }\n private _filter?: OwnedDenoiser | Extract<DenoiserHandle, {kind: 'custom'}>;\n private _filterKey: string | Denoiser = '';\n private _warnedWebGPUFilter = false;\n private _denoiseController?: AbortController;\n private _filterRevision = 0;\n private _filterPending?: Promise<void>;\n private _denoiseRevision = 0;\n private _denoisePending?: Promise<void>;\n private _denoisedSamples = 0;\n private _lastDenoiseTime = 0;\n private _warnedDenoisedReadback = false;\n /** @internal */ readonly _engine: Engine;\n\n constructor(engine: Engine, options: RenderOptions = {}) {\n this._engine = engine;\n if (options.denoiser != null) validateDenoiserOptions(options.denoiser);\n if ('width' in options || 'height' in options) {\n if ('resolutionScale' in options || !Number.isInteger(options.width) || !Number.isInteger(options.height) || options.width! < 1 || options.height! < 1) throw new Error('Provide positive integer width and height, or resolutionScale, exclusively.');\n this._fixed = {width: options.width!, height: options.height!};\n }\n const {width: _width, height: _height, resolutionScale, fallback, denoiser, allowMultipleSamplesPerFrame, ...settings} = options;\n Object.assign(this, settings);\n if (settings.batchSamples === undefined && allowMultipleSamplesPerFrame !== undefined) this.batchSamples = allowMultipleSamplesPerFrame;\n if (resolutionScale !== undefined) this.resolutionScale = resolutionScale;\n this._adaptiveScale = this._resolutionScale; this._lastScale = this._resolutionScale;\n this._validate(); this.fallback = fallback ?? null;\n engine._register(this);\n if (denoiser) void this.setDenoiser(denoiser).catch(error => this._engine._notifyError(error));\n }\n /** Output width: exact for fixed renders; otherwise the target width, or the requested width before allocation. */ get width() { return this._fixed?.width ?? (this._target?.getMemory().width || this._size().width); }\n /** Output height: exact for fixed renders; otherwise the target height, or the requested height before allocation. */ get height() { return this._fixed?.height ?? (this._target?.getMemory().height || this._size().height); }\n /** Complete beauty samples since the last restart; stale engine inputs report 0. Default 0. */\n get samples() { return this._current ? this._target?.getTotalSamplesRendered() ?? 0 : 0; }\n /** Whether complete beauty samples reached maxSamples. Default false. */ get converged() { return this.samples >= this.maxSamples; }\n /** Current execution state. Default preparing. */ get status(): RenderStatus {\n if (!this._current && this._status !== 'error') return this._engine._ready ? 'converging' : 'preparing';\n return this._status;\n }\n private get _current() { const inputs = this._engine._inputs; return inputs.scene === this._input.scene && inputs.camera === this._input.camera && !this._disposed; }\n /** @internal */ get _complete() { return this._current && !!this._target?.presentationComplete && !this._target.isFirstFrame() && this.samples > 0; }\n /** @internal */ get _presentable() { return this._complete && (!this._denoisePending || this._denoisedSamples > 0 || (this._schedule() === 'converged' && this.maxSamples > 1)); }\n /** @internal */ get _output() { if (this._disposed) throw new Error('Render is disposed.'); return this._target; }\n /** @deprecated Use refineUntil for custom frame loops; this will be removed in a later release. Latest WebGPU full beauty sample estimate in milliseconds, extrapolated from tile GPU time when tiled. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */\n get gpuSampleTimeMs(): number | undefined { return this._gpuSampleTimeMs; }\n /** @internal Latest WebGPU full beauty sample estimate in milliseconds; with tiling, extrapolated from tile GPU time. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */\n get _gpuSampleTimeMs(): number | undefined { return !this._busy && this._current ? this._target?.getRealtimeSampleTime?.() : undefined; }\n /** @internal Latest WebGPU beauty tile estimate in milliseconds, including amortized caustic work; equal to the sample estimate without tiling. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */\n get gpuTileTimeMs(): number | undefined { return !this._busy && this._current ? this._target?.getRealtimeTileTime?.() : undefined; }\n /**\n * @deprecated Use refineUntil; this will be removed in a later release. Waits for the\n * next release of WebGPU sampling queue capacity and returns true when sampling was\n * queued. Returns false immediately with no queued sampling, on WebGL, or for only\n * denoising, display or offline convergence work. Does not submit work. Throws after\n * disposal.\n */\n whenReadyToRefine(): Promise<boolean> { return this._whenReadyToRefine(); }\n /** @internal Waits for the next release of WebGPU sampling queue capacity and returns true\n * when sampling was queued. Returns false immediately with no queued sampling,\n * on WebGL, or for only denoising, display or offline convergence work.\n * Does not submit work. Throws after disposal.\n */\n _whenReadyToRefine(): Promise<boolean> {\n if (this._disposed) throw new Error('Render is disposed.');\n return !this._busy ? this._target?.whenTraceAvailable?.() ?? Promise.resolve(false) : Promise.resolve(false);\n }\n /** Complete surface-output samples since restart; stale inputs report 0. Independent of beauty samples. Default 0. */\n get aovSamplesRendered(): number { return this._current ? this._target?.getAovSamples?.() ?? 0 : 0; }\n /** @internal */\n _completeFor(channel: DisplayChannel): boolean {\n const kind = displayAovKind(channel);\n return kind && this.aovs.includes(kind) && this._target?.aovReady\n ? this._current && this._target.aovReady(kind) : this._complete;\n }\n /** @internal */\n _restartAovs(): void {\n this._target?.activate(); this._target?.restartAovs?.();\n this._status = 'converging';\n }\n private _refineAov(kind: AovKind): RenderStatus {\n if (this._engine._initializationError) throw this._engine._initializationError;\n if (!this.aovs.includes(kind)) throw new Error(`AOV ${kind} is not enabled`);\n if (!this._engine._ready) {\n const generation = this._engine._deviceGeneration;\n void this._engine.init().catch(error => {\n if (this._disposed || generation !== this._engine._deviceGeneration) return;\n this._status = 'error'; this._engine._notifyError(error);\n });\n return this._status = 'preparing';\n }\n const started = performance.now();\n const target = this._synchronize();\n if (!target) return this._status = 'preparing';\n const before = target.getAovSamples?.() ?? 0;\n const limit = kind === 'id' || kind === 'motion' ? 1 : Math.min(this.maxSamples, this.aovSamples);\n if (!target.refineAovs?.(this._targetCamera(this._engine._inputs.value!), Math.min(limit, (target.getAovSamples?.() ?? 0) + 1))) return this._status = 'compiling';\n if ((target.getAovSamples?.() ?? 0) > before) {\n this._frameTime = Math.max(.001, performance.now() - started);\n this._frameStart = started; this._frameScale = this._adaptiveScale;\n this._adaptResolution(true);\n }\n return this._status = (target.getAovSamples?.() ?? 0) >= limit ? 'finished' : 'converging';\n }\n private _validate() {\n aovMask(this.aovs);\n if (!Number.isInteger(this.aovSamples) || this.aovSamples < 1) throw new Error('aovSamples must be a positive integer.');\n if (!Number.isFinite(this.maxSamples) || this.maxSamples < 1) throw new Error('maxSamples must be positive.');\n if (this.dispersionWavelengths !== 1 && this.dispersionWavelengths !== 3) throw new Error('dispersionWavelengths must be 1 or 3.');\n const adaptive = this.adaptiveResolution;\n if (adaptive && (this._fixed || !Number.isFinite(adaptive.targetFrameMs) || adaptive.targetFrameMs <= 0 || !Number.isFinite(adaptive.minScale) || adaptive.minScale <= 0 || adaptive.minScale > this._resolutionScale)) throw new Error('adaptiveResolution requires a scale-based render with positive targetFrameMs and minScale <= resolutionScale.');\n }\n private _size() {\n if (this._fixed) return this._fixed;\n const scale = this.adaptiveResolution ? Math.min(this._adaptiveScale, this._resolutionScale) : this._resolutionScale;\n return {width: Math.max(1, Math.round(this._engine.display.canvas.width * scale)), height: Math.max(1, Math.round(this._engine.display.canvas.height * scale))};\n }\n /**\n * Backends may round targets up. A fixed render widens the view over the extra\n * pixels so the requested centered rectangle keeps its framing and square pixels.\n */\n private _targetCamera(camera: Camera) {\n const memory = this._target?.getMemory(), fixed = this._fixed;\n if (!memory || !fixed || (memory.width === fixed.width && memory.height === fixed.height)) return camera;\n const scaleX = memory.width / fixed.width, scaleY = memory.height / fixed.height;\n const widened = camera.clone();\n widened.transform = camera.transform;\n if (camera.projection === 'perspective') {\n widened.fov = Math.atan(Math.tan(camera.fov * Math.PI / 360) * scaleY) * 360 / Math.PI;\n widened.aspect = (camera.aspect ?? fixed.width / fixed.height) * scaleX / scaleY;\n // Keeps the lens focal length, and with it depth of field.\n widened.sensorHeight = camera.sensorHeight * scaleY;\n } else {\n const x = (camera.left + camera.right) / 2, y = (camera.bottom + camera.top) / 2;\n widened.left = x + (camera.left - x) * scaleX; widened.right = x + (camera.right - x) * scaleX;\n widened.bottom = y + (camera.bottom - y) * scaleY; widened.top = y + (camera.top - y) * scaleY;\n }\n return widened;\n }\n /** @internal Crops a target-sized RGBA image to a fixed render's requested rectangle. */\n _cropOutput<T extends Float32Array | Uint32Array>(image: {width: number; height: number; data: T}): {width: number; height: number; data: T} {\n const fixed = this._fixed;\n if (!fixed || !image.width || (image.width === fixed.width && image.height === fixed.height)) return image;\n const {width, height} = fixed, data = new (image.data.constructor as new (length: number) => T)(width * height * 4);\n const left = (image.width - width) >> 1, top = (image.height - height) >> 1;\n for (let y = 0; y < height; y++) {\n const start = ((y + top) * image.width + left) * 4;\n data.set(image.data.subarray(start, start + width * 4) as T, y * width * 4);\n }\n return {width, height, data};\n }\n private _settings(sampleCap = this.maxSamples): TraceSettings {\n const settings=collectTraceSettings(this,sampleCap);\n settings.batchSamples = this._refineOptions?.batchSamples ?? settings.batchSamples;\n if(this._denoiserOptions?.type==='custom') settings.aovs=[...new Set([...this.aovs,...(this._denoiserOptions.aovs ?? [])])];\n return settings;\n }\n private _synchronize(sampleCap = this.maxSamples, offline = false) {\n this._validate();\n if (this._lastScale !== this._resolutionScale) { this._adaptiveScale = this._resolutionScale; this._lastScale = this._resolutionScale; }\n const target = this._target ??= this._engine._createTarget();\n if (!target) return;\n const settings = this._settings(sampleCap), size = this._size();\n const key = imageSettingsKey(settings, size);\n const inputs = this._engine._inputs;\n target.configure(settings); target.activate();\n target.setRealtimeBatchBudget?.(this._refineOptions?.targetBatchTimeMs ?? Infinity);\n target.setRealtimeDeferPostProcess?.(!!this._refineOptions?.deferResolve);\n if ((!offline && this._offlineCamera) || inputs.scene !== this._input.scene || inputs.camera !== this._input.camera || key !== this._input.settings) {\n if (!offline) this._offlineCamera = false;\n this._cancelDenoise(); target.restartSamples();\n this._sampleStart = this._frameStart = undefined; this._frameTime = 0;\n target.setSize(size.width, size.height);\n this._input = {scene: inputs.scene, camera: inputs.camera, settings: key};\n }\n target.setOnSampleRendered((samples, isFirstFrame, frameTimeMs) => {\n // A preview's latency includes every tile, not just its last dispatch.\n this._frameTime = Math.max(frameTimeMs, this._sampleStart === undefined ? 0 : performance.now() - this._sampleStart);\n this._frameStart = this._sampleStart;\n this._frameScale = this._sampleScale;\n this._sampleStart = undefined;\n this._events.emit('sample', {samples, isFirstFrame, frameTimeMs});\n });\n return target;\n }\n private _trace(target: RenderTarget, limit: number) {\n if (this._sampleStart === undefined) { this._sampleStart = performance.now(); this._sampleScale = this._adaptiveScale; }\n const compiling = target.trace(this._targetCamera(this._engine._inputs.value!), limit);\n if (compiling) this._sampleStart = undefined;\n return compiling;\n }\n private _adaptResolution(surfaceOnly = false) {\n if (!this._busy && this.adaptiveResolution && this._frameTime > 0 && (surfaceOnly ? this.aovSamplesRendered > 0 : this.samples > 0)) {\n const {targetFrameMs, minScale} = this.adaptiveResolution;\n const start = this._frameStart, time = this._frameTime, scale = this._frameScale, maxScale = this._resolutionScale;\n const {width, height} = this._engine.display.canvas;\n this._frameTime = 0;\n // Observe the following display frame too: GPU submissions and WebGL\n // filters can return long before their work reaches the screen.\n const cancel = scheduleFrame(() => {\n this._adaptiveFrames.delete(cancel);\n const adaptive = this.adaptiveResolution, canvas = this._engine.display.canvas;\n if (this._disposed || this._busy || !adaptive || adaptive.targetFrameMs !== targetFrameMs || adaptive.minScale !== minScale ||\n this._resolutionScale !== maxScale || canvas.width !== width || canvas.height !== height) return;\n const elapsed = Math.max(time, start === undefined ? 0 : performance.now() - start);\n const next = nextPreviewScale(scale, elapsed, targetFrameMs, maxScale, this._adaptiveScale, minScale);\n if (next > this._adaptiveScale) {\n if (++this._adaptiveFastFrames < 4) return;\n this._adaptiveScale = Math.min(next, this._adaptiveScale * 1.25);\n } else this._adaptiveScale = next;\n this._adaptiveFastFrames = 0;\n });\n this._adaptiveFrames.add(cancel);\n }\n }\n private _cancelAdaptiveFrames() {\n for (const cancel of this._adaptiveFrames) cancel();\n this._adaptiveFrames.clear(); this._adaptiveFastFrames = 0;\n }\n /** Accumulates within this frame's budget. Default undefined traces beauty and requested AOVs. Pass an enabled AOV kind to refine surface outputs only, without beauty or denoising; progress is aovSamplesRendered. Options default to this render's execution settings. Rejects calls during converge or after disposal. */\n refine(channel?: AovKind, options?: RefineOptions): RenderStatus {\n if (this._busy) throw new Error('Cannot refine a render while converge is running.');\n if (this._disposed) throw new Error('Render is disposed.');\n this._engine._setRenderError();\n const previous = this._refineOptions; this._refineOptions = options;\n try {\n if (options?.targetBatchTimeMs !== undefined && (!Number.isFinite(options.targetBatchTimeMs) || options.targetBatchTimeMs <= 0)) throw new RangeError('targetBatchTimeMs must be positive and finite.');\n return channel === undefined ? this._refine() : this._refineAov(channel);\n }\n catch (error) { this._engine._setRenderError(this._engine._notifyError(error)); return this._status = 'error'; }\n finally { this._refineOptions = previous; this._engine._reportShaderProgress(); }\n }\n /**\n * Calls refine() once synchronously, then keeps sampling on WebGPU until deadline.\n * Call present() right after it; later samples appear at the next presentation.\n * Sampling continues only with batchSamples on, the final channel displayed, a\n * visible page and tiles that fit timeBudgetMs. It stops on abort or convergence.\n * Preparing, compiling, denoising and the first incomplete sample advance only\n * through the synchronous call, which is all WebGL runs. A new call ends the\n * previous one. Asynchronous errors set status to error and resolve; synchronous\n * errors follow refine().\n * @param deadline End time in performance.now() milliseconds.\n * @param options.signal Optional application cancellation; default none. An\n * already aborted signal still permits the synchronous refine().\n */\n refineUntil(deadline: number, options?: {signal?: AbortSignal}): Promise<void> {\n return this._refineToDeadline(deadline, options?.signal);\n }\n private _refineToDeadline(deadline: number, signal?: AbortSignal, options?: RefineOptions, beforeRefill?: () => void): Promise<void> {\n this._refillController?.abort();\n const controller = this._refillController = new AbortController();\n // Keep lifecycle exceptions synchronous, just like refine(). Install the\n // controller first so a synchronous sample listener can revoke this call.\n try { this.refine(undefined, options); }\n catch (error) { controller.abort(); if (this._refillController === controller) this._refillController = undefined; throw error; }\n const device = this._engine.device;\n const canContinue = (afterWait = false) => !controller.signal.aborted && !signal?.aborted &&\n !this._disposed && !this._busy && device !== undefined && device === this._engine.device &&\n (typeof document === 'undefined' || !document.hidden) && performance.now() < deadline &&\n this.batchSamples && this.status === 'converging' && !this.denoising && this.samples > 0 &&\n this.gpuTileTimeMs !== undefined && this.gpuTileTimeMs <= this.timeBudgetMs &&\n this._engine.display.channel === 'final' && (!afterWait || this._engine._isPresented(this._target));\n if (!canContinue()) {\n if (this._refillController === controller) this._refillController = undefined;\n return Promise.resolve();\n }\n return (async () => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const abort = () => controller.abort();\n const visibility = () => { if (document.hidden) abort(); };\n let stopped!: () => void;\n const cancelled = new Promise<false>(resolve => { stopped = () => resolve(false); });\n controller.signal.addEventListener('abort', stopped, {once: true});\n signal?.addEventListener('abort', abort, {once: true});\n if (typeof document !== 'undefined') document.addEventListener('visibilitychange', visibility);\n if (Number.isFinite(deadline)) timer = setTimeout(abort, Math.min(2147483647, Math.max(0, deadline - performance.now())));\n try {\n while (canContinue()) {\n if (!await Promise.race([this._whenReadyToRefine(), cancelled])) break;\n beforeRefill?.();\n if (!canContinue(true)) break;\n this.refine(undefined, {targetBatchTimeMs: 4, deferResolve: true});\n }\n } catch (error) {\n if (!controller.signal.aborted && !this._disposed) {\n this._engine._setRenderError(this._engine._notifyError(error)); this._status = 'error';\n }\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n controller.signal.removeEventListener('abort', stopped);\n if (typeof document !== 'undefined') document.removeEventListener('visibilitychange', visibility);\n if (this._refillController === controller) this._refillController = undefined;\n }\n })();\n }\n /** @internal Whether this render currently has a between-frame lease. */\n get _refilling() { return !!this._refillController && !this._refillController.signal.aborted; }\n /** @internal Preserve loop-specific synchronous overrides while using refineUntil. */\n _refineUntil(deadline: number, signal: AbortSignal, options: RefineOptions, beforeRefill: () => void): Promise<void> {\n return this._refineToDeadline(deadline, signal, options, beforeRefill);\n }\n private _refine(): RenderStatus {\n if (this._engine._initializationError) throw this._engine._initializationError;\n this._reloadDenoiser();\n if (!this._engine._ready) {\n const generation = this._engine._deviceGeneration;\n void this._engine.init().catch(error => {\n if (this._disposed || generation !== this._engine._deviceGeneration) return;\n this._status = 'error'; this._engine._notifyError(error);\n });\n return this._status = 'preparing';\n }\n const target = this._synchronize();\n if (!target) return this._status = 'preparing';\n if (this._fallback && this.samples === 0 && !target.canCompleteSampleWithin(this.timeBudgetMs) && !this._fallback._complete) this._fallback._refineOne();\n target.activate();\n if (this._denoisePending) return this._status = this.converged ? 'denoising' : 'converging';\n target.setPreserveDenoisedOutput?.(!!this._filter && this._schedule() !== 'converged');\n const limit = this._nextSampleTarget();\n if (this.samples < limit) {\n if (this._trace(target, limit)) return this._status = 'compiling';\n } else if (target.refineAovs && !target.refineAovs(this._targetCamera(this._engine._inputs.value!))) {\n return this._status = 'compiling';\n }\n this._maybeDenoise(false, limit);\n if (this._denoisePending) return this._status = this.converged ? 'denoising' : 'converging';\n if (this._filterPending && this.converged) return this._status = 'preparing';\n this._adaptResolution();\n return this._status = this.converged ? 'finished' : 'converging';\n }\n private _refineOne() {\n if (this._busy || this._disposed || !this._engine._ready) return;\n this._reloadDenoiser(); const target = this._synchronize();\n if (!target) return;\n target.activate();\n if (this.samples < 1) this._status = this._trace(target, 1) ? 'compiling' : 'converging';\n this._maybeDenoise();\n if (!this._denoisePending) this._adaptResolution();\n }\n private _schedule() { return this._denoiserOptions?.schedule ?? 'converged'; }\n private _nextSampleTarget() {\n if (!this._filter) return this.maxSamples;\n if (this._schedule() === 'every-sample') return Math.min(this.maxSamples, this.samples + 1);\n if (this._schedule() === 'converged') return this.maxSamples;\n if (this._denoisedSamples === 0) return 1;\n const sinceUpdate = performance.now() - this._lastDenoiseTime;\n if (sinceUpdate >= 10000) return Math.min(this.maxSamples, this.samples + 1);\n // Batched sampling doubles the count within a few frames. Without a floor,\n // most filtering would go to images replaced almost at once.\n if (sinceUpdate < 500) return this.maxSamples;\n return Math.min(this.maxSamples, Math.max(4, this._denoisedSamples * 2));\n }\n /** Reloads a filter dropped by device recovery; failures report through engine errors. */\n private _reloadDenoiser() { void this._refreshDenoiser()?.catch(error => this._engine._notifyError(error)); }\n /** Starts loading the configured filter; returns its readiness when a new configuration was applied. */\n private _refreshDenoiser(): Promise<void> | undefined {\n if (this._disposed) return;\n const options = this._denoiserOptions;\n const key = options ? denoiserKey(options) : '';\n if (key === this._filterKey) return;\n this._filterKey = key; const revision = ++this._filterRevision;\n this._cancelDenoise();\n if (this._filter && this._filter.kind !== 'custom') this._engine._releaseDenoiser(this._filter);\n this._target?.invalidateDenoisedOutput();\n this._filter = undefined; this._filterPending = undefined;\n if (!options) return this._denoiserReady = Promise.resolve();\n if (options.type === 'jnlm') { this._filter = this._engine._retainDenoiser(`jnlm:${key}`, () => ({kind: 'jnlm', denoiser: createJNLMDenoiser(options)})); return this._denoiserReady = Promise.resolve(); }\n const task = (async () => {\n await this._engine.init();\n if (this._engine.backend !== 'webgpu') { if (revision === this._filterRevision && !this._warnedWebGPUFilter) { this._warnedWebGPUFilter = true; console.warn('This denoiser requires WebGPU; denoising is disabled for this render.'); } return; }\n if (revision !== this._filterRevision || this._disposed) return;\n if (options.type === 'custom') { this._filter = {kind: 'custom', denoiser: options.denoiser, aovs: options.aovs}; return; }\n const {loadOIDNNetwork} = await loadOIDN();\n const filter = await this._engine._acquireDenoiser(key as string, async () => ({kind: 'oidn', denoiser: await loadOIDNNetwork(this._engine, options)}));\n if (revision !== this._filterRevision || this._disposed) { this._engine._releaseDenoiser(filter); return; }\n this._filter = filter; this._warmDenoiser();\n })();\n this._filterPending = task;\n // Superseded or disposed loads resolve instead of reporting obsolete failures.\n return this._denoiserReady = task.catch(error => { if (revision === this._filterRevision && !this._disposed) throw error; })\n .finally(() => { if (this._filterPending === task) this._filterPending = undefined; });\n }\n private _warmDenoiser() {\n const filter = this._filter, revision = this._filterRevision;\n if (!filter || filter.kind !== 'oidn') return;\n const network = filter.denoiser;\n const filters = [network, network.auxiliaryDenoisers?.albedo, network.auxiliaryDenoisers?.normal];\n const width = this.width, height = this.height;\n const task = this._engine._enqueueDenoise(async () => {\n if (revision !== this._filterRevision || filter !== this._filter || this._disposed) return;\n await Promise.all(filters.map(network => network?.prepareForImage?.(width, height, {tileOverlap: this._schedule() === 'converged' ? undefined : 80})));\n });\n void task.catch(error => {\n if (revision === this._filterRevision && filter === this._filter && !this._disposed) this._engine._notifyError(error);\n });\n }\n\n private _cancelDenoise() { this._denoiseController?.abort(); this._denoiseController = undefined; this._denoiseRevision++; this._target?.cancelDenoise?.(); this._denoisePending = undefined; this._denoisedSamples = 0; }\n /** @internal */ _inputsChanged(resetTiming = false) { this._refillController?.abort(); this._cancelDenoise(); if (resetTiming) this._target?.invalidateTiming?.(); }\n /** @internal */ _deviceLost(recovering: boolean) {\n this._refillController?.abort();\n this._cancelAdaptiveFrames();\n this._cancelDenoise(); this._filterRevision++;\n this._filter = undefined; this._filterPending = undefined; this._filterKey = '';\n this._target = undefined; this._input = {scene: -1, camera: -1, settings: ''};\n this._status = recovering ? 'preparing' : 'error';\n }\n /** @internal */ _displayChanged() { this._refillController?.abort(); this._cancelDenoise(); this._target?.invalidateDenoisedOutput(); }\n private _maybeDenoise(force = false, sampleTarget = this._nextSampleTarget()) {\n const target = this._target, filter = this._filter;\n if (!target || !filter || this._denoisePending || this.samples < 1 || this._denoisedSamples === this.samples) return;\n if (!force && this._schedule() === 'converged' && !this.converged) return;\n if (!force && this._schedule() === 'progressive' && this.samples < sampleTarget) return;\n this._engine.display._configure(this);\n target.activate(); target.drawPostProcess();\n const revision = ++this._denoiseRevision, samples = this.samples, frameStart = this._frameStart;\n const controller = this._denoiseController = new AbortController();\n // One shared scratch lease across all renders; queued stale jobs do no GPU work.\n const task = this._engine._enqueueDenoise(async () => {\n if (revision !== this._denoiseRevision || this._disposed) return;\n target.activate(); this._engine.display._configure(this);\n if (revision !== this._denoiseRevision || this._disposed) return;\n target.drawPostProcess();\n if (filter.kind === 'custom') {\n await this._engine._prepareCustomDenoiser(filter.denoiser, this.width, this.height);\n if (controller.signal.aborted || revision !== this._denoiseRevision || this._disposed) return;\n }\n const complete = await target.performDenoise?.(filter, undefined, this._schedule(), controller.signal);\n if (revision !== this._denoiseRevision || this._disposed) return;\n if (complete) {\n target.activate(); target.drawPostProcess(); this._denoisedSamples = samples; this._lastDenoiseTime = performance.now();\n if (frameStart !== undefined) this._frameTime = Math.max(this._frameTime, this._lastDenoiseTime - frameStart);\n }\n }, controller.signal);\n this._denoisePending = task;\n void task.catch(error => { if (revision === this._denoiseRevision && !this._disposed) this._engine._notifyError(error); }).finally(() => {\n if (this._denoisePending === task) {\n this._denoiseController = undefined; this._denoisePending = undefined;\n this._status = this.converged ? 'finished' : 'converging'; this._adaptResolution();\n }\n });\n }\n /** Reads native RGBA, top row first; id uses uint32, other kinds float32. Default hdr. Beauty/guide reads are empty until a beauty sample completes. AOV reads require explicit aovs enablement. Custom denoised output is resolved linear HDR ray color before display background/catcher composition; built-ins retain their native display-space output. Unavailable denoised output falls back to hdr. */\n readPixels(kind: 'id'): Promise<{width: number; height: number; data: Uint32Array}>;\n readPixels(kind?: 'hdr' | 'denoised' | 'albedo' | 'normal' | Exclude<AovKind, 'id'>): Promise<{width: number; height: number; data: Float32Array}>;\n readPixels(kind: 'hdr' | 'denoised' | 'albedo' | 'normal' | AovKind): Promise<{width: number; height: number; data: Float32Array | Uint32Array}>;\n async readPixels(kind: 'hdr' | 'denoised' | 'albedo' | 'normal' | AovKind = 'hdr'): Promise<{width: number; height: number; data: Float32Array | Uint32Array}> {\n if (this._disposed) throw new Error('Render is disposed.');\n const target = this._target;\n if (['depth', 'position', 'roughness', 'diffuseAlbedo', 'specularAlbedo', 'id', 'motion'].includes(kind)) {\n const aov = kind as AovKind;\n aovMask(this.aovs);\n if (!this.aovs.includes(aov)) throw new Error(`AOV ${aov} is not enabled`);\n if (!target?.readAov) throw new Error('AOV output is not ready');\n target.activate(); return this._cropOutput(await target.readAov(aov));\n }\n if (!target || this.samples === 0) return {width: 0, height: 0, data: new Float32Array(0)};\n if (kind === 'denoised' && this._denoisedSamples === 0) {\n if (!this._warnedDenoisedReadback) { this._warnedDenoisedReadback = true; console.warn('Denoised output is not ready; reading HDR samples instead.'); }\n kind = 'hdr';\n }\n target.activate(); return this._cropOutput(await target.readOutput(kind as 'hdr' | 'denoised' | 'albedo' | 'normal'));\n }\n /** Borrows a read-only WebGPU texture; undefined on WebGL or before a complete sample. Kind is required. HDR is native resolved linear ray color before denoising/display composition, with DenoiseInput.color normalization and coverage. Display is the latest compose, including filters and display passes. Valid only until this render's next refine/converge, display present/setSize, restart/dispose or device loss; never retain, write or destroy it. */\n getOutputTexture(kind: 'hdr' | 'display'): GPUTexture | undefined {\n if (this._engine.backend !== 'webgpu' || (kind === 'hdr' ? !this._complete : !this._current || !this._target?.presentationComplete || (!this._complete && !this._target.getAovSamples?.()))) return;\n return this._target?.getOutputTexture?.(kind);\n }\n /** Discards only this render's accumulation and pending denoising. */\n restart() { if (this._disposed) throw new Error('Render is disposed.'); this._refillController?.abort(); this._cancelDenoise(); this._cancelAdaptiveFrames(); this._sampleStart = this._frameStart = undefined; this._frameTime = 0; this._target?.restartSamples(); this._status = 'converging'; }\n /** Releases only this render's image resources and denoiser. */\n dispose() {\n if (this._disposed) return;\n this._refillController?.abort();\n this._disposed = true; this._events.clear(); this._filterRevision++; this._cancelDenoise(); this._cancelAdaptiveFrames();\n if (this._target) this._engine._releaseTarget(this._target);\n if (this._filter && this._filter.kind !== 'custom') this._engine._releaseDenoiser(this._filter);\n this._target = undefined; this._filter = undefined; this._engine._unregister(this);\n this._fallback?._dependents.delete(this);\n for (const dependent of this._dependents) dependent._fallback = null;\n this._dependents.clear();\n }\n /** Deterministically renders this image. Rejects on abort/timeout/input revision changes and blocks refine on this render. */\n async converge(options: ConvergeOptions): Promise<ConvergeResult> {\n if (this._busy) throw new Error('Converge is already running on this render.');\n if (this._disposed) throw new Error('Render is disposed.');\n const inputs = this._engine._inputs;\n const deviceGeneration = this._engine._deviceGeneration;\n if (!inputs.value) throw new Error('Commit engine.scene and engine.camera with engine.update() before converge.');\n const camera = cameraSnapshot(options.camera ?? inputs.value);\n const samples = Math.max(1, Math.round(options.samples));\n if (!Number.isFinite(samples)) throw new Error('samples must be finite and positive.');\n const batchLimit = Math.max(1, Math.round(options.samplesPerBatch ?? 8));\n const sequenceOffset = Math.max(0, Math.round(options.sampleSequenceOffset ?? 0));\n const timeout = Math.max(1, options.timeoutMs ?? 600000);\n const check = () => {\n if (this._disposed) throw new Error('Render is disposed.');\n if (this._engine._deviceGeneration !== deviceGeneration) throw this._engine._lostError;\n if (options.signal?.aborted) throw options.signal.reason ?? new DOMException('Convergence aborted', 'AbortError');\n const current = this._engine._inputs;\n if (current.scene !== inputs.scene || current.camera !== inputs.camera) throw new Error('Engine inputs changed during converge.');\n };\n this._refillController?.abort();\n this._busy = true;\n const abortConverge = () => this._cancelDenoise();\n options.signal?.addEventListener('abort', abortConverge, {once: true});\n let target: RenderTarget | undefined;\n const start = performance.now();\n try {\n await this._engine._awaitDevice(this._engine.init());\n check();\n while (!this._engine._ready) { check(); if (performance.now() - start > timeout) throw new Error('Timed out preparing convergence.'); await new Promise(resolve => setTimeout(resolve, 0)); }\n target = this._synchronize(samples, true);\n this._offlineCamera = !!options.camera;\n if (!target) throw new Error('The render target is not ready.');\n this._cancelDenoise(); target.restartSamples();\n this._reloadDenoiser(); await this._engine._awaitDevice(Promise.resolve(this._filterPending)); check();\n const stage = async (cap: number, name: 'pilot' | 'final', offset: number) => {\n check(); this._cancelDenoise(); target!.activate(); target!.restartSamples();\n target!.configure({...this._settings(cap), batchSamples: true});\n let batch = options.targetBatchTimeMs && this._engine.device ? 1 : Math.min(batchLimit, cap);\n let previous = -1, lastPreview = performance.now(); const started = performance.now();\n for (;;) {\n check(); if (performance.now() - started > timeout) throw new Error(`Timed out rendering the offline ${name} pass.`);\n target!.activate(); target!.setOfflineRenderOptions({samplesPerBatch: batch, deferPostProcess: true, sampleSequenceOffset: offset});\n const before = target!.getTotalSamplesRendered(), batchStarted = performance.now();\n this._status = target!.trace(this._targetCamera(camera), cap) ? 'compiling' : 'converging';\n const count = target!.getTotalSamplesRendered();\n if (count !== previous) {\n previous = count; options.onProgress?.({stage: name, samples: Math.min(count, cap), targetSamples: cap});\n if (name === 'final' && options.previewIntervalMs !== undefined && count > 0 && count < cap && performance.now() - lastPreview >= options.previewIntervalMs) { target!.drawPostProcess(); lastPreview = performance.now(); }\n }\n if (count >= cap) break;\n if (count > before && this._engine.device) await this._engine._awaitDevice(this._engine.device.queue.onSubmittedWorkDone());\n else await new Promise(resolve => setTimeout(resolve, 0));\n if (options.targetBatchTimeMs && this._engine.device && count > before) {\n const desired = Math.max(1, Math.min(batchLimit, Math.round(options.targetBatchTimeMs * (count - before) / Math.max(1, performance.now() - batchStarted))));\n batch = desired > batch ? Math.min(desired, batch * 2) : desired;\n }\n }\n await this._engine._awaitDevice(Promise.resolve(this._engine.device?.queue.onSubmittedWorkDone())); check();\n };\n let result: ConvergeResult = {samples, averageSamplesPerPixel: samples, pilotSamples: 0, adaptiveSampling: false};\n if (options.adaptiveSampling && this._engine.device) {\n const pilotSamples = Math.min(samples, Math.max(2, Math.round(options.adaptiveSampling.pilotSamples ?? 8)));\n target.activate(); target.setVarianceMoments(true); target.setAdaptiveSamplingTargets(undefined);\n await stage(pilotSamples, 'pilot', sequenceOffset);\n target.activate(); const plan = await this._engine._awaitDevice(target.prepareOfflineAdaptiveSampling({...options.adaptiveSampling, maxSamples: samples}));\n if (plan) {\n target.activate(); target.setVarianceMoments(false);\n await stage(plan.maximumTarget, 'final', sequenceOffset + pilotSamples);\n result = {samples: plan.maximumTarget, averageSamplesPerPixel: plan.averageTarget, pilotSamples, varianceHistory: plan.history, adaptiveSampling: true};\n } else { target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); await stage(samples, 'final', sequenceOffset); }\n } else { target.activate(); target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); await stage(samples, 'final', sequenceOffset); }\n if (this._filter) {\n options.onProgress?.({stage: 'denoising', samples: result.samples, targetSamples: result.samples});\n this._status = 'denoising'; this._maybeDenoise(true); await this._engine._awaitDevice(Promise.resolve(this._denoisePending)); check();\n }\n this._status = 'finished'; return result;\n } catch (error) { if (this._engine._deviceGeneration === deviceGeneration) this._status = 'error'; throw error; }\n finally {\n if (target && !this._disposed && this._engine._deviceGeneration === deviceGeneration) { target.activate(); target.setVarianceMoments(false); target.setAdaptiveSamplingTargets(undefined); target.setOfflineRenderOptions({samplesPerBatch: 0, deferPostProcess: false, sampleSequenceOffset: 0}); }\n options.signal?.removeEventListener('abort', abortConverge);\n this._busy = false;\n }\n }\n}\n"]}
|
package/lib/RenderLoop.d.ts
CHANGED
|
@@ -43,12 +43,14 @@ export default class RenderLoop {
|
|
|
43
43
|
private _busy;
|
|
44
44
|
private _disposed;
|
|
45
45
|
private _cancelScheduled?;
|
|
46
|
-
private
|
|
46
|
+
private _refillController?;
|
|
47
47
|
private _cancelRefillFrame?;
|
|
48
48
|
private _warnedTick;
|
|
49
49
|
/** Render whose next presentation is waiting for a complete preview frame. */
|
|
50
50
|
private _previewFrameOwner?;
|
|
51
51
|
private _presented?;
|
|
52
|
+
private _inferenceHoldStart?;
|
|
53
|
+
private _lastError?;
|
|
52
54
|
private _finishedImage?;
|
|
53
55
|
private _motion?;
|
|
54
56
|
private _unsubscribe;
|
|
@@ -59,6 +61,7 @@ export default class RenderLoop {
|
|
|
59
61
|
/** Whether an explicit integration or consecutive edits indicate motion. Default false. */ get changing(): boolean;
|
|
60
62
|
/** Complete final beauty samples; preview and AOV-only sampling are excluded. Default 0. */ get samples(): number;
|
|
61
63
|
/** Current presented/execution state. Default preparing. */ get status(): RenderLoopStatus;
|
|
64
|
+
/** Exception thrown by the latest tick, such as from a sync or scene update; status is error while set. Default undefined. */ get lastError(): Error | undefined;
|
|
62
65
|
/** Subscribes to status transitions or complete final samples; returns unsubscribe. */
|
|
63
66
|
on<K extends keyof LoopEvents>(event: K, listener: (value: LoopEvents[K]) => void): () => void;
|
|
64
67
|
/** Adds an integration on this engine. Duplicate registrations are ignored. */
|
|
@@ -69,10 +72,11 @@ export default class RenderLoop {
|
|
|
69
72
|
/** Executes one manual tick. Calls during start are ignored with one warning. */
|
|
70
73
|
tick(): RenderLoopStatus;
|
|
71
74
|
private _tick;
|
|
75
|
+
private _runTick;
|
|
72
76
|
private _cancelRefill;
|
|
73
|
-
private _scheduleRefill;
|
|
74
|
-
private _canRefill;
|
|
75
77
|
private _schedule;
|
|
78
|
+
private readonly _inputEvents;
|
|
79
|
+
private _input;
|
|
76
80
|
private _visibility;
|
|
77
81
|
private _cancelFrame;
|
|
78
82
|
/** Starts an idempotent loop; uses a 16 ms timer without rAF. Hidden pages pause automatically. */ start(): void;
|