@meimu/mutracer 0.1.4 → 0.2.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/LICENSES/Classroom-CC0.txt +121 -0
- package/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +13 -8
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +10421 -8363
- package/docs/api.md +202 -11
- package/docs/denoising.md +30 -15
- package/docs/materials.md +18 -27
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +32 -1
- package/docs/threejs.md +19 -10
- package/docs/updates.md +44 -2
- package/docs/viewer.md +41 -3
- package/lib/Display.d.ts +13 -2
- package/lib/Display.js +27 -6
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -0
- package/lib/Engine.js +52 -25
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +44 -9
- package/lib/Render.js +115 -17
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -1
- package/lib/RenderLoop.js +94 -13
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +6 -3
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/math/access.d.ts +4 -0
- package/lib/math/access.js +10 -0
- package/lib/math/access.js.map +1 -0
- package/lib/math/mat3.d.ts +4 -0
- package/lib/math/mat3.js +54 -0
- package/lib/math/mat3.js.map +1 -0
- package/lib/math/mat4.d.ts +19 -0
- package/lib/math/mat4.js +413 -0
- package/lib/math/mat4.js.map +1 -0
- package/lib/math/storage.d.ts +6 -0
- package/lib/math/storage.js +22 -0
- package/lib/math/storage.js.map +1 -0
- package/lib/math/types.d.ts +3 -0
- package/lib/math/types.js +2 -0
- package/lib/math/types.js.map +1 -0
- package/lib/math/vec2.d.ts +13 -0
- package/lib/math/vec2.js +52 -0
- package/lib/math/vec2.js.map +1 -0
- package/lib/math/vec3.d.ts +23 -0
- package/lib/math/vec3.js +139 -0
- package/lib/math/vec3.js.map +1 -0
- package/lib/math.d.ts +5 -17
- package/lib/math.js +5 -55
- package/lib/math.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidn.js +4 -2
- package/lib/oidn.js.map +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
- package/lib/renderer/AovPrimitiveCache.js +48 -0
- package/lib/renderer/AovPrimitiveCache.js.map +1 -0
- package/lib/renderer/Box3.d.ts +5 -0
- package/lib/renderer/Box3.js +9 -0
- package/lib/renderer/Box3.js.map +1 -0
- package/lib/renderer/GPUTraceQueue.d.ts +10 -0
- package/lib/renderer/GPUTraceQueue.js +31 -0
- package/lib/renderer/GPUTraceQueue.js.map +1 -0
- package/lib/renderer/MaterialData.d.ts +15 -0
- package/lib/renderer/MaterialData.js +61 -0
- package/lib/renderer/MaterialData.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +11 -98
- package/lib/renderer/MaterialTable.js +34 -412
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +32 -13
- package/lib/renderer/RenderingPipeline.js +1 -17
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +0 -1
- package/lib/renderer/TileRender.js +14 -1
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +39 -0
- package/lib/renderer/WGPUAov.js +239 -0
- package/lib/renderer/WGPUAov.js.map +1 -0
- package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
- package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
- package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
- package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
- package/lib/renderer/WGPUBindlessTextures.js +180 -0
- package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.js +17 -97
- package/lib/renderer/WGPUBloomPass.js.map +1 -1
- package/lib/renderer/WGPUComputePass.d.ts +1 -1
- package/lib/renderer/WGPUComputePass.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
- package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.js +10 -9
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
- package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WGPURayTraceOutput.js +26 -17
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +36 -40
- package/lib/renderer/WGPURayTracePass.js +399 -548
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
- package/lib/renderer/WGPURenderingPipeline.js +239 -60
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUShaderCache.d.ts +2 -2
- package/lib/renderer/WGPUShaderCache.js +10 -5
- package/lib/renderer/WGPUShaderCache.js.map +1 -1
- package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
- package/lib/renderer/WGPUShaderCapabilities.js +54 -0
- package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
- package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
- package/lib/renderer/WGPUSkyBaker.js +85 -0
- package/lib/renderer/WGPUSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLAov.d.ts +41 -0
- package/lib/renderer/WebGLAov.js +106 -0
- package/lib/renderer/WebGLAov.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
- package/lib/renderer/WebGLFullQuadPass.js +18 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
- package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
- package/lib/renderer/WebGLRayTracePass.js +83 -7
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +116 -8
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
- package/lib/renderer/WebGLSkyBaker.js +422 -0
- package/lib/renderer/WebGLSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLSkySource.d.ts +9 -0
- package/lib/renderer/WebGLSkySource.js +28 -0
- package/lib/renderer/WebGLSkySource.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +5 -0
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/aov.d.ts +42 -0
- package/lib/renderer/aov.js +50 -0
- package/lib/renderer/aov.js.map +1 -0
- package/lib/renderer/aovDisplay.d.ts +14 -0
- package/lib/renderer/aovDisplay.js +32 -0
- package/lib/renderer/aovDisplay.js.map +1 -0
- package/lib/renderer/aovScene.d.ts +21 -0
- package/lib/renderer/aovScene.js +139 -0
- package/lib/renderer/aovScene.js.map +1 -0
- package/lib/renderer/binnedSahBvh.js +2 -1
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +20 -10
- package/lib/renderer/bvhAccel.js +168 -58
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
- package/lib/renderer/cameraSnapshot.js +2 -1
- package/lib/renderer/cameraSnapshot.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +2 -0
- package/lib/renderer/cameraUniform.js +12 -0
- package/lib/renderer/cameraUniform.js.map +1 -0
- package/lib/renderer/committedScene.js +4 -0
- package/lib/renderer/committedScene.js.map +1 -1
- package/lib/renderer/denoiser.d.ts +3 -11
- package/lib/renderer/denoiser.js.map +1 -1
- package/lib/renderer/depthQuery.js +4 -1
- package/lib/renderer/depthQuery.js.map +1 -1
- package/lib/renderer/displacementPreparation.d.ts +11 -0
- package/lib/renderer/displacementPreparation.js +351 -0
- package/lib/renderer/displacementPreparation.js.map +1 -0
- package/lib/renderer/displacementRange.d.ts +1 -0
- package/lib/renderer/displacementRange.js +9 -0
- package/lib/renderer/displacementRange.js.map +1 -0
- package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
- package/lib/renderer/displayParityDiagnostics.js +2 -0
- package/lib/renderer/displayParityDiagnostics.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +9 -8
- package/lib/renderer/envMapCreation.js +36 -12
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/envMapDistribution.d.ts +12 -2
- package/lib/renderer/envMapDistribution.js +43 -34
- package/lib/renderer/envMapDistribution.js.map +1 -1
- package/lib/renderer/geometryBvhBounds.d.ts +4 -0
- package/lib/renderer/geometryBvhBounds.js +82 -0
- package/lib/renderer/geometryBvhBounds.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +32 -0
- package/lib/renderer/geometryUpdateState.js +2 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +17 -9
- package/lib/renderer/geometryUpdates.js +92 -33
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
- package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
- package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/aovTrace.frag.js +121 -0
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +437 -435
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
- 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.js +51 -51
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +108 -108
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
- 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 +12 -12
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
- package/lib/renderer/glsl/depthQuery.frag.js +7 -7
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +191 -191
- package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
- package/lib/renderer/lightConstants.d.ts +10 -0
- package/lib/renderer/lightConstants.js +11 -0
- package/lib/renderer/lightConstants.js.map +1 -0
- package/lib/renderer/lightCore.d.ts +12 -0
- package/lib/renderer/lightCore.js +13 -0
- package/lib/renderer/lightCore.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +20 -17
- package/lib/renderer/lightSampling.js +123 -56
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/lightsData.d.ts +21 -0
- package/lib/renderer/lightsData.js +192 -0
- package/lib/renderer/lightsData.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +3 -26
- package/lib/renderer/lightsUtil.js +3 -153
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialBufferData.d.ts +70 -0
- package/lib/renderer/materialBufferData.js +2 -0
- package/lib/renderer/materialBufferData.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +11 -0
- package/lib/renderer/materialConstants.js +11 -0
- package/lib/renderer/materialConstants.js.map +1 -1
- package/lib/renderer/materialCore.d.ts +8 -0
- package/lib/renderer/materialCore.js +9 -0
- package/lib/renderer/materialCore.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +2 -2
- package/lib/renderer/materialEmission.js +3 -3
- package/lib/renderer/materialEmission.js.map +1 -1
- package/lib/renderer/materialLayout.d.ts +2 -101
- package/lib/renderer/materialLayout.js +110 -172
- package/lib/renderer/materialLayout.js.map +1 -1
- package/lib/renderer/materialLayoutSchema.d.ts +26 -0
- package/lib/renderer/materialLayoutSchema.js +172 -0
- package/lib/renderer/materialLayoutSchema.js.map +1 -0
- package/lib/renderer/materialParams.d.ts +69 -0
- package/lib/renderer/materialParams.js +272 -0
- package/lib/renderer/materialParams.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +14 -324
- package/lib/renderer/materialTextureSlots.js +21 -8
- package/lib/renderer/materialTextureSlots.js.map +1 -1
- package/lib/renderer/materialTextures.d.ts +6 -0
- package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
- package/lib/renderer/materialTextures.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.js +6 -147
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
- package/lib/renderer/meshInstances.d.ts +4 -21
- package/lib/renderer/meshInstances.js +10 -56
- package/lib/renderer/meshInstances.js.map +1 -1
- package/lib/renderer/oidnNetwork.d.ts +2 -2
- package/lib/renderer/oidnNetwork.js +1 -1
- package/lib/renderer/oidnNetwork.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.js +850 -846
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/ownedDenoiser.d.ts +9 -0
- package/lib/renderer/ownedDenoiser.js +2 -0
- package/lib/renderer/ownedDenoiser.js.map +1 -0
- package/lib/renderer/packedMeshInstances.d.ts +23 -0
- package/lib/renderer/packedMeshInstances.js +80 -0
- package/lib/renderer/packedMeshInstances.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +12 -47
- package/lib/renderer/prepareMeshBVH.js +21 -642
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
- package/lib/renderer/proceduralEnvironmentPower.js +8 -0
- package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +1 -0
- package/lib/renderer/progressiveScheduler.js +3 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +3 -1
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/renderingLimits.d.ts +9 -0
- package/lib/renderer/renderingLimits.js +18 -0
- package/lib/renderer/renderingLimits.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +73 -0
- package/lib/renderer/sceneAssembly.js +109 -0
- package/lib/renderer/sceneAssembly.js.map +1 -0
- package/lib/renderer/sceneChangeCore.d.ts +39 -0
- package/lib/renderer/sceneChangeCore.js +307 -0
- package/lib/renderer/sceneChangeCore.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +3 -6
- package/lib/renderer/sceneChangeDetector.js +24 -150
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
- package/lib/renderer/sceneLayoutSchema.js +111 -0
- package/lib/renderer/sceneLayoutSchema.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +3 -3
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +55 -0
- package/lib/renderer/scenePreparation.js +360 -0
- package/lib/renderer/scenePreparation.js.map +1 -0
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/scratchSampling.js.map +1 -1
- package/lib/renderer/shader.d.ts +2 -0
- package/lib/renderer/shader.js +2 -0
- package/lib/renderer/shader.js.map +1 -1
- package/lib/renderer/shaderCapabilities.d.ts +23 -0
- package/lib/renderer/shaderCapabilities.js +55 -0
- package/lib/renderer/shaderCapabilities.js.map +1 -0
- package/lib/renderer/shaderCapacity.d.ts +2 -0
- package/lib/renderer/shaderCapacity.js +5 -0
- package/lib/renderer/shaderCapacity.js.map +1 -0
- package/lib/renderer/skyModel.d.ts +9 -0
- package/lib/renderer/skyModel.js +10 -0
- package/lib/renderer/skyModel.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +60 -0
- package/lib/renderer/textureAtlas.js +145 -0
- package/lib/renderer/textureAtlas.js.map +1 -0
- package/lib/renderer/textureAtlasPixels.d.ts +7 -0
- package/lib/renderer/textureAtlasPixels.js +68 -0
- package/lib/renderer/textureAtlasPixels.js.map +1 -0
- package/lib/renderer/util.d.ts +1 -1
- package/lib/renderer/util.js.map +1 -1
- package/lib/renderer/webgl.d.ts +9 -2
- package/lib/renderer/webgl.js +54 -9
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/wgpuBindless.d.ts +26 -0
- package/lib/renderer/wgpuBindless.js +95 -0
- package/lib/renderer/wgpuBindless.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
- package/lib/renderer/wgpuBindlessSource.js +51 -0
- package/lib/renderer/wgpuBindlessSource.js.map +1 -0
- package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
- package/lib/renderer/wgpuMaterialConstants.js +52 -0
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
- package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
- package/lib/renderer/wgpuSceneUniform.js +125 -0
- package/lib/renderer/wgpuSceneUniform.js.map +1 -0
- package/lib/renderer/wgpuShaderSource.d.ts +15 -0
- package/lib/renderer/wgpuShaderSource.js +31 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
- package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +743 -706
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +86 -83
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
- 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 +42 -32
- 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 +152 -148
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
- 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 +26 -13
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
- package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
- package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
- package/lib/renderer/wgsl/jnlm.compute.js +315 -0
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Camera.js +7 -3
- package/lib/scene/Camera.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +5 -9
- package/lib/scene/EnvironmentLight.js +4 -14
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/EnvironmentLightState.d.ts +18 -0
- package/lib/scene/EnvironmentLightState.js +19 -0
- package/lib/scene/EnvironmentLightState.js.map +1 -0
- package/lib/scene/Geometry.d.ts +12 -6
- package/lib/scene/Geometry.js +37 -13
- package/lib/scene/Geometry.js.map +1 -1
- package/lib/scene/InstanceState.d.ts +39 -0
- package/lib/scene/InstanceState.js +77 -0
- package/lib/scene/InstanceState.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +1 -1
- package/lib/scene/InstancedMesh.js +3 -0
- package/lib/scene/InstancedMesh.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +209 -0
- package/lib/scene/MaterialState.js +231 -0
- package/lib/scene/MaterialState.js.map +1 -0
- package/lib/scene/Mesh.d.ts +4 -6
- package/lib/scene/Mesh.js +3 -11
- package/lib/scene/Mesh.js.map +1 -1
- package/lib/scene/MeshState.d.ts +20 -0
- package/lib/scene/MeshState.js +35 -0
- package/lib/scene/MeshState.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +7 -169
- package/lib/scene/OpenPBRMaterial.js +5 -223
- package/lib/scene/OpenPBRMaterial.js.map +1 -1
- package/lib/scene/PixelTexture.d.ts +6 -0
- package/lib/scene/PixelTexture.js +10 -0
- package/lib/scene/PixelTexture.js.map +1 -0
- package/lib/scene/ProceduralSky.d.ts +24 -0
- package/lib/scene/ProceduralSky.js +40 -0
- package/lib/scene/ProceduralSky.js.map +1 -0
- package/lib/scene/RectLight.d.ts +2 -13
- package/lib/scene/RectLight.js +3 -21
- package/lib/scene/RectLight.js.map +1 -1
- package/lib/scene/RectLightState.d.ts +31 -0
- package/lib/scene/RectLightState.js +26 -0
- package/lib/scene/RectLightState.js.map +1 -0
- package/lib/scene/Scene.d.ts +15 -4
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SceneNode.js +7 -6
- package/lib/scene/SceneNode.js.map +1 -1
- package/lib/scene/Texture.d.ts +10 -41
- package/lib/scene/Texture.js +4 -33
- package/lib/scene/Texture.js.map +1 -1
- package/lib/scene/TextureState.d.ts +35 -0
- package/lib/scene/TextureState.js +35 -0
- package/lib/scene/TextureState.js.map +1 -0
- package/lib/scene/attributeData.d.ts +4 -0
- package/lib/scene/attributeData.js +10 -0
- package/lib/scene/attributeData.js.map +1 -0
- package/lib/scene/lightState.d.ts +8 -0
- package/lib/scene/lightState.js +2 -0
- package/lib/scene/lightState.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +7 -12
- package/lib/scene/openPbrSchema.js +273 -28
- package/lib/scene/openPbrSchema.js.map +1 -1
- package/lib/scene/skyParameters.d.ts +20 -0
- package/lib/scene/skyParameters.js +28 -0
- package/lib/scene/skyParameters.js.map +1 -0
- package/lib/scene/textureData.d.ts +9 -0
- package/lib/scene/textureData.js +2 -0
- package/lib/scene/textureData.js.map +1 -0
- package/lib/scene/texturePixels.d.ts +6 -0
- package/lib/scene/texturePixels.js +10 -0
- package/lib/scene/texturePixels.js.map +1 -0
- package/lib/settings/display.d.ts +33 -0
- package/lib/settings/display.js +7 -0
- package/lib/settings/display.js.map +1 -1
- package/lib/settings/render.d.ts +25 -3
- package/lib/settings/render.js +3 -1
- package/lib/settings/render.js.map +1 -1
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/util/commonGeometry.js +7 -7
- package/lib/util/commonGeometry.js.map +1 -1
- package/lib/util/fromTHREE.d.ts +4 -1
- package/lib/util/fromTHREE.js +18 -5
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/util/geometry.js +42 -29
- package/lib/util/geometry.js.map +1 -1
- package/lib/util/loadRGBE.js +3 -4
- package/lib/util/loadRGBE.js.map +1 -1
- package/lib/util/studioLighting.d.ts +18 -0
- package/lib/util/studioLighting.js +36 -0
- package/lib/util/studioLighting.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +4 -0
- package/package.json +31 -5
- package/lib/renderer/texturesFromMaterials.d.ts +0 -6
- package/lib/renderer/texturesFromMaterials.js.map +0 -1
package/lib/Render.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { aovMask } from './renderer/aov.js';
|
|
2
|
+
import { displayAovKind } from './renderer/aovDisplay.js';
|
|
1
3
|
import { Events } from './util/events.js';
|
|
2
4
|
import { cameraSnapshot } from './renderer/cameraSnapshot.js';
|
|
3
5
|
import { collectTraceSettings, imageSettingsKey } from './settings/render.js';
|
|
@@ -11,7 +13,7 @@ function validateDenoiserOptions(options) {
|
|
|
11
13
|
throw new Error('Denoiser type must be jnlm, oidn or custom.');
|
|
12
14
|
const allowed = options.type === 'jnlm'
|
|
13
15
|
? ['type', 'schedule', ...Object.keys(DEFAULT_JNLM_OPTIONS)]
|
|
14
|
-
: options.type === 'custom' ? ['type', 'schedule', 'denoiser']
|
|
16
|
+
: options.type === 'custom' ? ['type', 'schedule', 'denoiser', 'aovs']
|
|
15
17
|
: ['type', 'schedule', 'model', 'weightsBaseUrl', 'weightsUrl', 'aux', 'hdr', 'hdrTransfer', 'auxiliaryModelUrls', 'engine', 'precision', 'dynamicTile', 'maxTileSize', 'signal'];
|
|
16
18
|
for (const key of Object.keys(options))
|
|
17
19
|
if (!allowed.includes(key))
|
|
@@ -21,6 +23,7 @@ function validateDenoiserOptions(options) {
|
|
|
21
23
|
if (options.type === 'jnlm')
|
|
22
24
|
createJNLMDenoiser(options);
|
|
23
25
|
else if (options.type === 'custom') {
|
|
26
|
+
aovMask(options.aovs ?? []);
|
|
24
27
|
if (!options.denoiser || typeof options.denoiser !== 'object' || typeof options.denoiser.denoise !== 'function' || (options.denoiser.prepare !== undefined && typeof options.denoiser.prepare !== 'function'))
|
|
25
28
|
throw new Error('Custom denoiser must implement denoise and optional prepare.');
|
|
26
29
|
}
|
|
@@ -63,6 +66,8 @@ function validateDenoiserOptions(options) {
|
|
|
63
66
|
function isURL(value) { return (typeof value === 'string' && value.length > 0) || value instanceof URL; }
|
|
64
67
|
// Snapshot nested values too, so application edits cannot silently change a cache key.
|
|
65
68
|
function snapshotDenoiserOptions(options) {
|
|
69
|
+
if (options.type === 'custom')
|
|
70
|
+
return Object.freeze({ ...options, aovs: Object.freeze([...(options.aovs ?? [])]) });
|
|
66
71
|
if (options.type !== 'oidn')
|
|
67
72
|
return Object.freeze({ ...options });
|
|
68
73
|
const next = { ...options };
|
|
@@ -94,6 +99,8 @@ function denoiserKey(options) {
|
|
|
94
99
|
}
|
|
95
100
|
/** One independently configured image and its accumulation, owned by an engine. */
|
|
96
101
|
export default class Render {
|
|
102
|
+
/** Enabled surface outputs. Default []; readPixels rejects outputs not enabled here. */ aovs = [];
|
|
103
|
+
/** Independent AOV sample cap. Default 16. */ aovSamples = 16;
|
|
97
104
|
/** Maximum complete samples. Default 2048. */ maxSamples = 2048;
|
|
98
105
|
/**
|
|
99
106
|
* Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).
|
|
@@ -112,7 +119,10 @@ export default class Render {
|
|
|
112
119
|
/** Minimum transmissive path alpha. Default 1. Changing it restarts this render. */ transmissiveOutputAlphaMin = 1;
|
|
113
120
|
/** Execution budget in milliseconds. Default 21. */ timeBudgetMs = 21;
|
|
114
121
|
/** Maximum tiles per frame. Default Infinity. */ maxTiles = Infinity;
|
|
115
|
-
/**
|
|
122
|
+
/** Let one refine submit several samples within timeBudgetMs; WebGPU requires GPU timestamps. Default false. */ batchSamples = false;
|
|
123
|
+
/** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */
|
|
124
|
+
get allowMultipleSamplesPerFrame() { return this.batchSamples; }
|
|
125
|
+
set allowMultipleSamplesPerFrame(value) { this.batchSamples = value; }
|
|
116
126
|
/** Adaptive resolution controller, or false. Default false. */ adaptiveResolution = false;
|
|
117
127
|
_resolutionScale = 1;
|
|
118
128
|
/** Canvas-relative scale. Default 1; cannot be assigned on a fixed-size render. */
|
|
@@ -156,6 +166,7 @@ export default class Render {
|
|
|
156
166
|
if (current === null && next === null)
|
|
157
167
|
return this._denoiserReady;
|
|
158
168
|
if (next && current && denoiserKey(next) === denoiserKey(current)
|
|
169
|
+
&& (next.type !== 'custom' || current.type === 'custom' && aovMask(next.aovs ?? []) === aovMask(current.aovs ?? []))
|
|
159
170
|
&& next.schedule === current.schedule && (next.type !== 'oidn' ||
|
|
160
171
|
(current.type === 'oidn' && next.signal === current.signal)))
|
|
161
172
|
return this._denoiserReady;
|
|
@@ -168,6 +179,7 @@ export default class Render {
|
|
|
168
179
|
_status = 'preparing';
|
|
169
180
|
_disposed = false;
|
|
170
181
|
_busy = false;
|
|
182
|
+
_refineOptions;
|
|
171
183
|
_offlineCamera = false;
|
|
172
184
|
_input = { scene: -1, camera: -1, settings: '' };
|
|
173
185
|
_adaptiveScale = 1;
|
|
@@ -205,8 +217,10 @@ export default class Render {
|
|
|
205
217
|
throw new Error('Provide positive integer width and height, or resolutionScale, exclusively.');
|
|
206
218
|
this._fixed = { width: options.width, height: options.height };
|
|
207
219
|
}
|
|
208
|
-
const { width: _width, height: _height, resolutionScale, fallback, denoiser, ...settings } = options;
|
|
220
|
+
const { width: _width, height: _height, resolutionScale, fallback, denoiser, allowMultipleSamplesPerFrame, ...settings } = options;
|
|
209
221
|
Object.assign(this, settings);
|
|
222
|
+
if (settings.batchSamples === undefined && allowMultipleSamplesPerFrame !== undefined)
|
|
223
|
+
this.batchSamples = allowMultipleSamplesPerFrame;
|
|
210
224
|
if (resolutionScale !== undefined)
|
|
211
225
|
this.resolutionScale = resolutionScale;
|
|
212
226
|
this._adaptiveScale = this._resolutionScale;
|
|
@@ -219,9 +233,9 @@ export default class Render {
|
|
|
219
233
|
}
|
|
220
234
|
/** Actual target width; before allocation uses the requested dimensions. */ get width() { return this._target?.getMemory().width || this._size().width; }
|
|
221
235
|
/** Actual target height; before allocation uses the requested dimensions. */ get height() { return this._target?.getMemory().height || this._size().height; }
|
|
222
|
-
/** Complete samples since the last restart; stale engine inputs report 0. Default 0. */
|
|
236
|
+
/** Complete beauty samples since the last restart; stale engine inputs report 0. Default 0. */
|
|
223
237
|
get samples() { return this._current ? this._target?.getTotalSamplesRendered() ?? 0 : 0; }
|
|
224
|
-
/** Whether complete samples reached maxSamples. Default false. */ get converged() { return this.samples >= this.maxSamples; }
|
|
238
|
+
/** Whether complete beauty samples reached maxSamples. Default false. */ get converged() { return this.samples >= this.maxSamples; }
|
|
225
239
|
/** Current execution state. Default preparing. */ get status() {
|
|
226
240
|
if (!this._current && this._status !== 'error')
|
|
227
241
|
return this._engine._ready ? 'converging' : 'preparing';
|
|
@@ -232,7 +246,63 @@ export default class Render {
|
|
|
232
246
|
/** @internal */ get _presentable() { return this._complete && (!this._denoisePending || this._denoisedSamples > 0 || (this._schedule() === 'converged' && this.maxSamples > 1)); }
|
|
233
247
|
/** @internal */ get _output() { if (this._disposed)
|
|
234
248
|
throw new Error('Render is disposed.'); return this._target; }
|
|
249
|
+
/** Latest WebGPU full beauty sample estimate in milliseconds. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */
|
|
250
|
+
get gpuSampleTimeMs() { return !this._busy && this._current ? this._target?.getRealtimeSampleTime?.() : undefined; }
|
|
251
|
+
/** 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. */
|
|
252
|
+
whenReadyToRefine() {
|
|
253
|
+
if (this._disposed)
|
|
254
|
+
throw new Error('Render is disposed.');
|
|
255
|
+
return this._target?.whenTraceAvailable?.() ?? Promise.resolve();
|
|
256
|
+
}
|
|
257
|
+
/** Complete surface-output samples since restart; stale inputs report 0. Independent of beauty samples. Default 0. */
|
|
258
|
+
get aovSamplesRendered() { return this._current ? this._target?.getAovSamples?.() ?? 0 : 0; }
|
|
259
|
+
/** @internal */
|
|
260
|
+
_completeFor(channel) {
|
|
261
|
+
const kind = displayAovKind(channel);
|
|
262
|
+
return kind && this.aovs.includes(kind) && this._target?.aovReady
|
|
263
|
+
? this._current && this._target.aovReady(kind) : this._complete;
|
|
264
|
+
}
|
|
265
|
+
/** @internal */
|
|
266
|
+
_restartAovs() {
|
|
267
|
+
this._target?.activate();
|
|
268
|
+
this._target?.restartAovs?.();
|
|
269
|
+
this._status = 'converging';
|
|
270
|
+
}
|
|
271
|
+
_refineAov(kind) {
|
|
272
|
+
if (this._engine._initializationError)
|
|
273
|
+
throw this._engine._initializationError;
|
|
274
|
+
if (!this.aovs.includes(kind))
|
|
275
|
+
throw new Error(`AOV ${kind} is not enabled`);
|
|
276
|
+
if (!this._engine._ready) {
|
|
277
|
+
const generation = this._engine._deviceGeneration;
|
|
278
|
+
void this._engine.init().catch(error => {
|
|
279
|
+
if (this._disposed || generation !== this._engine._deviceGeneration)
|
|
280
|
+
return;
|
|
281
|
+
this._status = 'error';
|
|
282
|
+
this._engine._notifyError(error);
|
|
283
|
+
});
|
|
284
|
+
return this._status = 'preparing';
|
|
285
|
+
}
|
|
286
|
+
const started = performance.now();
|
|
287
|
+
const target = this._synchronize();
|
|
288
|
+
if (!target)
|
|
289
|
+
return this._status = 'preparing';
|
|
290
|
+
const before = target.getAovSamples?.() ?? 0;
|
|
291
|
+
const limit = kind === 'id' || kind === 'motion' ? 1 : Math.min(this.maxSamples, this.aovSamples);
|
|
292
|
+
if (!target.refineAovs?.(this._engine._inputs.value, Math.min(limit, (target.getAovSamples?.() ?? 0) + 1)))
|
|
293
|
+
return this._status = 'compiling';
|
|
294
|
+
if ((target.getAovSamples?.() ?? 0) > before) {
|
|
295
|
+
this._frameTime = Math.max(.001, performance.now() - started);
|
|
296
|
+
this._frameStart = started;
|
|
297
|
+
this._frameScale = this._adaptiveScale;
|
|
298
|
+
this._adaptResolution(true);
|
|
299
|
+
}
|
|
300
|
+
return this._status = (target.getAovSamples?.() ?? 0) >= limit ? 'finished' : 'converging';
|
|
301
|
+
}
|
|
235
302
|
_validate() {
|
|
303
|
+
aovMask(this.aovs);
|
|
304
|
+
if (!Number.isInteger(this.aovSamples) || this.aovSamples < 1)
|
|
305
|
+
throw new Error('aovSamples must be a positive integer.');
|
|
236
306
|
if (!Number.isFinite(this.maxSamples) || this.maxSamples < 1)
|
|
237
307
|
throw new Error('maxSamples must be positive.');
|
|
238
308
|
if (this.dispersionWavelengths !== 1 && this.dispersionWavelengths !== 3)
|
|
@@ -248,7 +318,11 @@ export default class Render {
|
|
|
248
318
|
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)) };
|
|
249
319
|
}
|
|
250
320
|
_settings(sampleCap = this.maxSamples) {
|
|
251
|
-
|
|
321
|
+
const settings = collectTraceSettings(this, sampleCap);
|
|
322
|
+
settings.batchSamples = this._refineOptions?.batchSamples ?? settings.batchSamples;
|
|
323
|
+
if (this._denoiserOptions?.type === 'custom')
|
|
324
|
+
settings.aovs = [...new Set([...this.aovs, ...(this._denoiserOptions.aovs ?? [])])];
|
|
325
|
+
return settings;
|
|
252
326
|
}
|
|
253
327
|
_synchronize(sampleCap = this.maxSamples, offline = false) {
|
|
254
328
|
this._validate();
|
|
@@ -264,6 +338,8 @@ export default class Render {
|
|
|
264
338
|
const inputs = this._engine._inputs;
|
|
265
339
|
target.configure(settings);
|
|
266
340
|
target.activate();
|
|
341
|
+
target.setRealtimeBatchBudget?.(this._refineOptions?.targetBatchTimeMs ?? Infinity);
|
|
342
|
+
target.setRealtimeDeferPostProcess?.(!!this._refineOptions?.deferResolve);
|
|
267
343
|
if ((!offline && this._offlineCamera) || inputs.scene !== this._input.scene || inputs.camera !== this._input.camera || key !== this._input.settings) {
|
|
268
344
|
if (!offline)
|
|
269
345
|
this._offlineCamera = false;
|
|
@@ -294,8 +370,8 @@ export default class Render {
|
|
|
294
370
|
this._sampleStart = undefined;
|
|
295
371
|
return compiling;
|
|
296
372
|
}
|
|
297
|
-
_adaptResolution() {
|
|
298
|
-
if (!this._busy && this.adaptiveResolution && this._frameTime > 0 && this.samples > 0) {
|
|
373
|
+
_adaptResolution(surfaceOnly = false) {
|
|
374
|
+
if (!this._busy && this.adaptiveResolution && this._frameTime > 0 && (surfaceOnly ? this.aovSamplesRendered > 0 : this.samples > 0)) {
|
|
299
375
|
const { targetFrameMs, minScale } = this.adaptiveResolution;
|
|
300
376
|
const start = this._frameStart, time = this._frameTime, scale = this._frameScale, maxScale = this._resolutionScale;
|
|
301
377
|
const { width, height } = this._engine.display.canvas;
|
|
@@ -328,21 +404,26 @@ export default class Render {
|
|
|
328
404
|
this._adaptiveFrames.clear();
|
|
329
405
|
this._adaptiveFastFrames = 0;
|
|
330
406
|
}
|
|
331
|
-
/** Accumulates within this frame's budget. Rejects calls during converge or after disposal. */
|
|
332
|
-
refine() {
|
|
407
|
+
/** 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. */
|
|
408
|
+
refine(channel, options) {
|
|
333
409
|
if (this._busy)
|
|
334
410
|
throw new Error('Cannot refine a render while converge is running.');
|
|
335
411
|
if (this._disposed)
|
|
336
412
|
throw new Error('Render is disposed.');
|
|
337
413
|
this._engine._setRenderError();
|
|
414
|
+
const previous = this._refineOptions;
|
|
415
|
+
this._refineOptions = options;
|
|
338
416
|
try {
|
|
339
|
-
|
|
417
|
+
if (options?.targetBatchTimeMs !== undefined && (!Number.isFinite(options.targetBatchTimeMs) || options.targetBatchTimeMs <= 0))
|
|
418
|
+
throw new RangeError('targetBatchTimeMs must be positive and finite.');
|
|
419
|
+
return channel === undefined ? this._refine() : this._refineAov(channel);
|
|
340
420
|
}
|
|
341
421
|
catch (error) {
|
|
342
422
|
this._engine._setRenderError(this._engine._notifyError(error));
|
|
343
423
|
return this._status = 'error';
|
|
344
424
|
}
|
|
345
425
|
finally {
|
|
426
|
+
this._refineOptions = previous;
|
|
346
427
|
this._engine._reportShaderProgress();
|
|
347
428
|
}
|
|
348
429
|
}
|
|
@@ -374,6 +455,9 @@ export default class Render {
|
|
|
374
455
|
if (this._trace(target, limit))
|
|
375
456
|
return this._status = 'compiling';
|
|
376
457
|
}
|
|
458
|
+
else if (target.refineAovs && !target.refineAovs(this._engine._inputs.value)) {
|
|
459
|
+
return this._status = 'compiling';
|
|
460
|
+
}
|
|
377
461
|
this._maybeDenoise(false, limit);
|
|
378
462
|
if (this._denoisePending)
|
|
379
463
|
return this._status = this.converged ? 'denoising' : 'converging';
|
|
@@ -406,8 +490,13 @@ export default class Render {
|
|
|
406
490
|
return this.maxSamples;
|
|
407
491
|
if (this._denoisedSamples === 0)
|
|
408
492
|
return 1;
|
|
409
|
-
|
|
493
|
+
const sinceUpdate = performance.now() - this._lastDenoiseTime;
|
|
494
|
+
if (sinceUpdate >= 10000)
|
|
410
495
|
return Math.min(this.maxSamples, this.samples + 1);
|
|
496
|
+
// Batched sampling doubles the count within a few frames. Without a floor,
|
|
497
|
+
// most filtering would go to images replaced almost at once.
|
|
498
|
+
if (sinceUpdate < 500)
|
|
499
|
+
return this.maxSamples;
|
|
411
500
|
return Math.min(this.maxSamples, Math.max(4, this._denoisedSamples * 2));
|
|
412
501
|
}
|
|
413
502
|
/** Reloads a filter dropped by device recovery; failures report through engine errors. */
|
|
@@ -446,7 +535,7 @@ export default class Render {
|
|
|
446
535
|
if (revision !== this._filterRevision || this._disposed)
|
|
447
536
|
return;
|
|
448
537
|
if (options.type === 'custom') {
|
|
449
|
-
this._filter = { kind: 'custom', denoiser: options.denoiser };
|
|
538
|
+
this._filter = { kind: 'custom', denoiser: options.denoiser, aovs: options.aovs };
|
|
450
539
|
return;
|
|
451
540
|
}
|
|
452
541
|
const { loadOIDNNetwork } = await loadOIDN();
|
|
@@ -547,12 +636,21 @@ export default class Render {
|
|
|
547
636
|
}
|
|
548
637
|
});
|
|
549
638
|
}
|
|
550
|
-
/** Reads native RGBA float32, top row first. Default hdr. 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. */
|
|
551
639
|
async readPixels(kind = 'hdr') {
|
|
552
640
|
if (this._disposed)
|
|
553
641
|
throw new Error('Render is disposed.');
|
|
554
642
|
const target = this._target;
|
|
555
|
-
if (
|
|
643
|
+
if (['depth', 'position', 'roughness', 'diffuseAlbedo', 'specularAlbedo', 'id', 'motion'].includes(kind)) {
|
|
644
|
+
const aov = kind;
|
|
645
|
+
aovMask(this.aovs);
|
|
646
|
+
if (!this.aovs.includes(aov))
|
|
647
|
+
throw new Error(`AOV ${aov} is not enabled`);
|
|
648
|
+
if (!target?.readAov)
|
|
649
|
+
throw new Error('AOV output is not ready');
|
|
650
|
+
target.activate();
|
|
651
|
+
return target.readAov(aov);
|
|
652
|
+
}
|
|
653
|
+
if (!target || this.samples === 0)
|
|
556
654
|
return { width: 0, height: 0, data: new Float32Array(0) };
|
|
557
655
|
if (kind === 'denoised' && this._denoisedSamples === 0) {
|
|
558
656
|
if (!this._warnedDenoisedReadback) {
|
|
@@ -566,7 +664,7 @@ export default class Render {
|
|
|
566
664
|
}
|
|
567
665
|
/** 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. */
|
|
568
666
|
getOutputTexture(kind) {
|
|
569
|
-
if (!this._complete || this.
|
|
667
|
+
if (this._engine.backend !== 'webgpu' || (kind === 'hdr' ? !this._complete : !this._current || !this._target?.presentationComplete || (!this._complete && !this._target.getAovSamples?.())))
|
|
570
668
|
return;
|
|
571
669
|
return this._target?.getOutputTexture?.(kind);
|
|
572
670
|
}
|
|
@@ -650,7 +748,7 @@ export default class Render {
|
|
|
650
748
|
this._cancelDenoise();
|
|
651
749
|
target.activate();
|
|
652
750
|
target.restartSamples();
|
|
653
|
-
target.configure({ ...this._settings(cap),
|
|
751
|
+
target.configure({ ...this._settings(cap), batchSamples: true });
|
|
654
752
|
let batch = options.targetBatchTimeMs && this._engine.device ? 1 : Math.min(batchLimit, cap);
|
|
655
753
|
let previous = -1, lastPreview = performance.now();
|
|
656
754
|
const started = performance.now();
|