@meimu/mutracer 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +222 -0
- package/LICENSES/FidelityFX-FSR.txt +19 -0
- package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
- package/THIRD_PARTY_NOTICES.md +18 -4
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +6260 -5580
- package/docs/api.md +45 -18
- package/docs/materials.md +4 -2
- package/docs/performance.md +7 -0
- package/docs/post-processing.md +62 -9
- package/docs/progressive-rendering.md +3 -0
- package/docs/sampling.md +4 -0
- package/docs/technical/acceleration.md +52 -0
- package/docs/technical/aovs.md +79 -0
- package/docs/technical/caustics.md +109 -0
- package/docs/technical/continuous-spectrum.md +29 -0
- package/docs/technical/display-upscale.md +82 -0
- package/docs/technical/openpbr.md +99 -0
- package/docs/technical/pbrt-import.md +168 -0
- package/docs/technical/tiling.md +74 -0
- package/docs/technical/webgl.md +53 -0
- package/docs/viewer.md +11 -1
- package/lib/Display.d.ts +19 -5
- package/lib/Display.js +10 -7
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -1
- package/lib/Engine.js +30 -2
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +20 -11
- package/lib/Render.js +32 -7
- package/lib/Render.js.map +1 -1
- package/lib/main.d.ts +3 -1
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/renderer/AovPrimitiveCache.js +39 -8
- package/lib/renderer/AovPrimitiveCache.js.map +1 -1
- package/lib/renderer/DisplayPostProcess.d.ts +8 -3
- package/lib/renderer/DisplayPostProcess.js +51 -18
- package/lib/renderer/DisplayPostProcess.js.map +1 -1
- package/lib/renderer/MaterialData.js +7 -2
- package/lib/renderer/MaterialData.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +7 -1
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +2 -2
- package/lib/renderer/TileRender.js +128 -7
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +6 -1
- package/lib/renderer/WGPUAov.js +108 -14
- package/lib/renderer/WGPUAov.js.map +1 -1
- package/lib/renderer/WGPUCanvasSurface.js +12 -1
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPURayTraceOutput.js +12 -12
- package/lib/renderer/WGPURayTracePass.d.ts +17 -4
- package/lib/renderer/WGPURayTracePass.js +194 -71
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +46 -40
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLAov.js +3 -3
- package/lib/renderer/WebGLAov.js.map +1 -1
- package/lib/renderer/WebGLFullQuadPass.d.ts +1 -1
- package/lib/renderer/WebGLFullQuadPass.js +8 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +14 -10
- package/lib/renderer/WebGLRayTracePass.js +115 -111
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +10 -3
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.js +57 -57
- package/lib/renderer/aov.d.ts +13 -1
- package/lib/renderer/aov.js +21 -2
- package/lib/renderer/aov.js.map +1 -1
- package/lib/renderer/aovDisplay.js +2 -2
- package/lib/renderer/aovDisplay.js.map +1 -1
- package/lib/renderer/binnedSahBvh.d.ts +2 -1
- package/lib/renderer/binnedSahBvh.js +24 -17
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +3 -1
- package/lib/renderer/bvhAccel.js +36 -6
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +1 -1
- package/lib/renderer/cameraUniform.js +6 -2
- package/lib/renderer/cameraUniform.js.map +1 -1
- package/lib/renderer/compactVertices.d.ts +14 -0
- package/lib/renderer/compactVertices.js +124 -0
- package/lib/renderer/compactVertices.js.map +1 -0
- package/lib/renderer/easu.d.ts +11 -0
- package/lib/renderer/easu.js +156 -0
- package/lib/renderer/easu.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +1 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -1
- package/lib/renderer/geometryUpdates.js +3 -2
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
- package/lib/renderer/glsl/aovReflectance.glsl.js +35 -35
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
- package/lib/renderer/glsl/aovTrace.frag.js +44 -36
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +8 -8
- package/lib/renderer/glsl/chunks/envMap.glsl.js +67 -67
- package/lib/renderer/glsl/chunks/intersect.glsl.js +390 -375
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +120 -120
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +562 -562
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +4 -4
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +37 -35
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +70 -74
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +107 -88
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +11 -11
- package/lib/renderer/glsl/chunks/sampling.glsl.js +77 -77
- package/lib/renderer/glsl/chunks/sobol.glsl.js +70 -70
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
- 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 +12 -6
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
- package/lib/renderer/glsl/rayTrace.frag.js +233 -170
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +10 -9
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +58 -58
- package/lib/renderer/gpuMemory.js +1 -1
- package/lib/renderer/gpuMemory.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
- package/lib/renderer/openPbrEnergyLut.js +18 -1
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/pathLimits.d.ts +5 -4
- package/lib/renderer/pathLimits.js +6 -5
- package/lib/renderer/pathLimits.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.d.ts +2 -0
- package/lib/renderer/prepareMeshBVH.js +5 -3
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/progressiveScheduler.js +1 -1
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +4 -0
- package/lib/renderer/renderPipeline.js +1 -0
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/researchTransport.d.ts +1 -1
- package/lib/renderer/researchTransport.js.map +1 -1
- package/lib/renderer/sceneAssembly.d.ts +1 -1
- package/lib/renderer/sceneAssembly.js +4 -3
- package/lib/renderer/sceneAssembly.js.map +1 -1
- package/lib/renderer/sceneChangeDetector.d.ts +1 -1
- package/lib/renderer/sceneChangeDetector.js +3 -1
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- 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/scenePreparation.d.ts +3 -2
- package/lib/renderer/scenePreparation.js +18 -2
- package/lib/renderer/scenePreparation.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/spectrum.js +2 -2
- package/lib/renderer/staticBvhPreparation.d.ts +9 -0
- package/lib/renderer/staticBvhPreparation.js +8 -2
- package/lib/renderer/staticBvhPreparation.js.map +1 -1
- package/lib/renderer/surfaceHit.d.ts +10 -0
- package/lib/renderer/surfaceHit.js +22 -0
- package/lib/renderer/surfaceHit.js.map +1 -0
- package/lib/renderer/tangentRequirements.d.ts +2 -0
- package/lib/renderer/tangentRequirements.js +7 -0
- package/lib/renderer/tangentRequirements.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +4 -0
- package/lib/renderer/textureAtlas.js +48 -2
- package/lib/renderer/textureAtlas.js.map +1 -1
- package/lib/renderer/webgl.js +4 -0
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/webglVertexAttributes.d.ts +17 -0
- package/lib/renderer/webglVertexAttributes.js +44 -0
- package/lib/renderer/webglVertexAttributes.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.js +2 -2
- package/lib/renderer/wgpuMaterialConstants.js +4 -3
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
- package/lib/renderer/wgpuSceneUniform.js +2 -2
- package/lib/renderer/wgpuSceneUniform.js.map +1 -1
- package/lib/renderer/wgpuShaderSource.d.ts +15 -0
- package/lib/renderer/wgpuShaderSource.js +1 -1
- package/lib/renderer/wgpuShaderSource.js.map +1 -1
- package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +39 -39
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovTrace.wgsl.js +31 -31
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
- package/lib/renderer/wgsl/causticLight.compute.d.ts +1 -1
- package/lib/renderer/wgsl/causticLight.compute.js +121 -119
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -1
- package/lib/renderer/wgsl/chunks/background.wgsl.js +46 -46
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +30 -30
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +550 -542
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +18 -16
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +70 -69
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +593 -593
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +118 -118
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +4 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +32 -26
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +114 -114
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +159 -137
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +8 -8
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +74 -74
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +74 -74
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +99 -97
- 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.d.ts +1 -1
- package/lib/renderer/wgsl/depthQuery.wgsl.js +11 -2
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/easu.wgsl.js +80 -0
- package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/jnlm.compute.js +74 -74
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
- package/lib/renderer/wgsl/photonMap.compute.js +89 -89
- package/lib/renderer/wgsl/proceduralSky.compute.js +61 -61
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +14 -0
- package/lib/renderer/wgsl/rayTrace.compute.js +395 -333
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Scene.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 +21 -14
- 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/package.json +5 -2
- package/lib/oidnBundledWeights.cdn.d.ts +0 -2
- package/lib/oidnBundledWeights.cdn.js +0 -5
- package/lib/oidnBundledWeights.cdn.js.map +0 -1
- package/lib/renderer/bvh.worker.d.ts +0 -1
- package/lib/renderer/bvh.worker.js +0 -16
- package/lib/renderer/bvh.worker.js.map +0 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
- package/lib/renderer/bvhWorkerBuild.js +0 -17
- package/lib/renderer/bvhWorkerBuild.js.map +0 -1
- package/lib/renderer/lightCore.d.ts +0 -12
- package/lib/renderer/lightCore.js +0 -13
- package/lib/renderer/lightCore.js.map +0 -1
- package/lib/renderer/materialCore.d.ts +0 -8
- package/lib/renderer/materialCore.js +0 -9
- package/lib/renderer/materialCore.js.map +0 -1
- package/lib/scene/PixelTexture.d.ts +0 -6
- package/lib/scene/PixelTexture.js +0 -10
- package/lib/scene/PixelTexture.js.map +0 -1
- package/lib/util/studioLighting.d.ts +0 -18
- package/lib/util/studioLighting.js +0 -36
- package/lib/util/studioLighting.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { hdrResolveWGSL } from './wgsl/compose.frag.wgsl.js';
|
|
1
|
+
import { hdrResolveWGSL, TONE_MAPPING_MODES } from './wgsl/compose.frag.wgsl.js';
|
|
2
2
|
import { oidnAuxiliaryDefine } from './wgsl/oidnAuxiliary.wgsl.js';
|
|
3
3
|
import { displayAovKind, DEFAULT_AOV_DISPLAY } from './aovDisplay.js';
|
|
4
4
|
import { WGPUAov } from './WGPUAov.js';
|
|
5
|
-
import { aovMask } from './aov.js';
|
|
5
|
+
import { aovMask, COMPACT_AOV_KINDS, DISPLAY_AOV_SAMPLE_CAP } from './aov.js';
|
|
6
6
|
import { DisplayPostProcess } from './DisplayPostProcess.js';
|
|
7
7
|
import { customDenoiseLayersMain, customDenoiseCoverageMain } from './wgsl/customDenoise.wgsl.js';
|
|
8
8
|
import { WGPUCanvasSurface } from './WGPUCanvasSurface.js';
|
|
@@ -17,6 +17,7 @@ import WGPURayTracePass from './WGPURayTracePass.js';
|
|
|
17
17
|
import { composeMain, composeDefine, compositeDenoiseOutputMain, compositeDenoiseDisplayMain, linearToSrgbDefine } from './wgsl/compose.frag.wgsl.js';
|
|
18
18
|
import halton from './halton.js';
|
|
19
19
|
import { makeTileRender, makeTileRenderWithPredict } from './TileRender.js';
|
|
20
|
+
import { WORKGROUP_SIZE } from './wgsl/rayTrace.compute.js';
|
|
20
21
|
import { WGPURayTraceOutputPass } from './WGPURayTraceOutput.js';
|
|
21
22
|
import { vec3 } from '../math.js';
|
|
22
23
|
import WGPUBloomPass from './WGPUBloomPass.js';
|
|
@@ -27,16 +28,16 @@ export const oidnAlbedoSrgbEncodeMain = /* wgsl */ `
|
|
|
27
28
|
if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
|
|
28
29
|
let index = globalId.x + globalId.y * u32(imageSize.x);
|
|
29
30
|
let raw = textureLoad(in_albedo, vec2u(globalId.xy), 0);
|
|
30
|
-
let encoded =
|
|
31
|
+
let encoded = uq(raw.rgb);
|
|
31
32
|
out_albedo[index] = vec4f(encoded, raw.a);
|
|
32
33
|
`;
|
|
33
34
|
export const oidnAlbedoSrgbDecodeMain = /* wgsl */ `
|
|
34
35
|
if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
|
|
35
36
|
let index = globalId.x + globalId.y * u32(imageSize.x);
|
|
36
37
|
let filtered = in_albedo[index];
|
|
37
|
-
let linear =
|
|
38
|
+
let linear = uo(filtered.rgb);
|
|
38
39
|
var result = linear;
|
|
39
|
-
let
|
|
40
|
+
let jN = textureLoad(in_rawAlbedo, vec2i(globalId.xy), 0).a;
|
|
40
41
|
if (preserveSurfaceTexture != 0u) {
|
|
41
42
|
|
|
42
43
|
|
|
@@ -44,27 +45,27 @@ if (preserveSurfaceTexture != 0u) {
|
|
|
44
45
|
let pixel = vec2i(globalId.xy);
|
|
45
46
|
let center = textureLoad(in_rawNormal, pixel, 0);
|
|
46
47
|
let n = normalize(center.rgb * 2.0 - 1.0 + vec3f(1e-8));
|
|
47
|
-
var
|
|
48
|
+
var oR = 0.0;
|
|
48
49
|
for (var y = -1; y <= 1; y++) {
|
|
49
50
|
for (var x = -1; x <= 1; x++) {
|
|
50
|
-
let
|
|
51
|
+
let xA = textureLoad(in_rawNormal,
|
|
51
52
|
clamp(pixel + vec2i(x, y), vec2i(0), imageSize - 1), 0);
|
|
52
|
-
let nn = normalize(
|
|
53
|
-
|
|
54
|
-
max(1.0 - dot(n, nn), abs(center.a -
|
|
53
|
+
let nn = normalize(xA.rgb * 2.0 - 1.0 + vec3f(1e-8));
|
|
54
|
+
oR = max(oR,
|
|
55
|
+
max(1.0 - dot(n, nn), abs(center.a - xA.a)));
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
let
|
|
58
|
+
let xY = smoothstep(0.02, 0.1, oR);
|
|
58
59
|
let raw = clamp(textureLoad(in_rawAlbedo, pixel, 0).rgb,
|
|
59
60
|
vec3f(0.0), vec3f(1.0));
|
|
60
|
-
result = mix(raw, linear,
|
|
61
|
+
result = mix(raw, linear, xY);
|
|
61
62
|
}
|
|
62
|
-
out_albedo[index] = vec4f(result,
|
|
63
|
+
out_albedo[index] = vec4f(result, jN);
|
|
63
64
|
`;
|
|
64
65
|
export const oidnNormalSanitizeMain = /* wgsl */ `
|
|
65
66
|
if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
|
|
66
67
|
let index = globalId.x + globalId.y * u32(imageSize.x);
|
|
67
|
-
out_normal[index] = vec4f(
|
|
68
|
+
out_normal[index] = vec4f(sW(in_normal[index].rgb), 1.0);
|
|
68
69
|
`;
|
|
69
70
|
function createTimeQuery(device) {
|
|
70
71
|
try {
|
|
@@ -231,7 +232,7 @@ function makeWGPUAccumulationTarget(canvas, device, rayTracePass, surface, scrat
|
|
|
231
232
|
}).query
|
|
232
233
|
: undefined;
|
|
233
234
|
const tileRender = makeTileRender();
|
|
234
|
-
const tileRenderWithPredict = timeQuery ? makeTileRenderWithPredict() : undefined;
|
|
235
|
+
const tileRenderWithPredict = timeQuery ? makeTileRenderWithPredict(WORKGROUP_SIZE) : undefined;
|
|
235
236
|
tileRender.setDesiredMsPerTile(maxTimePerTile);
|
|
236
237
|
tileRenderWithPredict?.setDesiredMsPerTile(maxTimePerTile);
|
|
237
238
|
function invalidateTilePrediction() {
|
|
@@ -266,9 +267,9 @@ function makeWGPUAccumulationTarget(canvas, device, rayTracePass, surface, scrat
|
|
|
266
267
|
var color = load_colorTex(uv, 0);
|
|
267
268
|
let coverage = clamp(load_coverageTex(uv, 0).a, 0.0, 1.0);
|
|
268
269
|
color = vec4f(
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
270
|
+
ka(color.r, coverage, flatBackgroundColor.a > 0.5, true),
|
|
271
|
+
ka(color.g, coverage, flatBackgroundColor.a > 0.5, true),
|
|
272
|
+
ka(color.b, coverage, flatBackgroundColor.a > 0.5, true), color.a);
|
|
272
273
|
output.color = color;
|
|
273
274
|
`
|
|
274
275
|
}));
|
|
@@ -392,11 +393,11 @@ output.color = color;
|
|
|
392
393
|
oidnNormalSanitizePass.setOutputParams({ normal: { channels: 4 } });
|
|
393
394
|
const outputPass = scratch.get('outputPass', () => new WGPUFullQuadPass('output', device, {
|
|
394
395
|
fsMain: /* wgsl */ `
|
|
395
|
-
let
|
|
396
|
+
let zU = min(
|
|
396
397
|
vec2i(uv2 * vec2f(colorTexRegion())),
|
|
397
398
|
vec2i(colorTexRegion()) - vec2i(1)
|
|
398
399
|
);
|
|
399
|
-
var color = load_colorTex(
|
|
400
|
+
var color = load_colorTex(zU, 0);
|
|
400
401
|
color = vec4(color.rgb * color.a, color.a);
|
|
401
402
|
output.color = color;
|
|
402
403
|
`,
|
|
@@ -470,7 +471,7 @@ output.color = color;
|
|
|
470
471
|
estimatedFullFrameTimeMs: traceTime * submittedTileCount,
|
|
471
472
|
tileCount: submittedTileCount
|
|
472
473
|
};
|
|
473
|
-
submittedTileRenderWithPredict.setLastTraceTime(traceTime);
|
|
474
|
+
submittedTileRenderWithPredict.setLastTraceTime(traceTime, tiles[0], tiles[1]);
|
|
474
475
|
}
|
|
475
476
|
activeTimeQuery.resultBuffer.unmap();
|
|
476
477
|
}).catch(() => {
|
|
@@ -646,10 +647,12 @@ output.color = color;
|
|
|
646
647
|
finishPresentation(encoder, displayTexture);
|
|
647
648
|
}
|
|
648
649
|
function finishPresentation(encoder, displayTexture) {
|
|
650
|
+
const presentationWidth = displayAovKind(output) ? displayTexture.width : renderWidth;
|
|
651
|
+
const presentationHeight = displayAovKind(output) ? displayTexture.height : renderHeight;
|
|
649
652
|
const activeHDRPeakMeter = hdrOutputActive
|
|
650
653
|
? (hdrPeakMeter ??= scratch.get('hdrPeak', () => new WGPUHDRPeakMeter(device)))
|
|
651
654
|
: undefined;
|
|
652
|
-
const hdrPeakReadbackSubmitted = activeHDRPeakMeter?.encode(encoder, displayTexture,
|
|
655
|
+
const hdrPeakReadbackSubmitted = activeHDRPeakMeter?.encode(encoder, displayTexture, presentationWidth, presentationHeight) ?? false;
|
|
653
656
|
if (output === 'normal' || output === 'albedo') {
|
|
654
657
|
displayTrace?.push('AOV:Raw');
|
|
655
658
|
displayTexture = getFrameInput(output);
|
|
@@ -658,14 +661,14 @@ output.color = color;
|
|
|
658
661
|
displayTrace?.push('AOV:Raw');
|
|
659
662
|
displayTexture = getFrameInput('shadowCatcher');
|
|
660
663
|
}
|
|
661
|
-
if (displayTexture.width <
|
|
662
|
-
readbackPass.setSize(
|
|
664
|
+
if (displayTexture.width < presentationWidth || displayTexture.height < presentationHeight) {
|
|
665
|
+
readbackPass.setSize(presentationWidth, presentationHeight);
|
|
663
666
|
readbackPass.createPass(encoder, { inputTex: displayTexture });
|
|
664
667
|
displayTexture = readbackPass.getOutput('color');
|
|
665
668
|
}
|
|
666
669
|
// Keep the completed denoise visible until its replacement is ready.
|
|
667
670
|
if (!(preserveDenoisedOutput && output === 'final' && !denoiseValid && presentationDenoised)) {
|
|
668
|
-
const width =
|
|
671
|
+
const width = presentationWidth, height = presentationHeight;
|
|
669
672
|
if (!presentationTexture || presentationTexture.width !== width || presentationTexture.height !== height || presentationTexture.format !== displayTexture.format) {
|
|
670
673
|
const previous = presentationTexture;
|
|
671
674
|
presentationTexture = device.createTexture({
|
|
@@ -690,6 +693,8 @@ output.color = color;
|
|
|
690
693
|
postProcessPending = false;
|
|
691
694
|
drawPostProcess(device.createCommandEncoder(), false, true);
|
|
692
695
|
}
|
|
696
|
+
const aovResolution = () => execution?.aovResolution === 'display' ? { width: canvas.width, height: canvas.height } : undefined;
|
|
697
|
+
const compactAov = () => !!aovResolution() && !!execution?.aovs?.every(kind => COMPACT_AOV_KINDS.includes(kind));
|
|
693
698
|
function trace(camera, maxSamples) {
|
|
694
699
|
applyTraceQuality();
|
|
695
700
|
// A call to draw means accumulation has been invalidated. Cancel OIDN
|
|
@@ -708,7 +713,7 @@ output.color = color;
|
|
|
708
713
|
// complete image stay valid, and only Render's restart discards them.
|
|
709
714
|
if (rayTracePass.isCompilingShader() || !rayTracePass.isPipelineReady())
|
|
710
715
|
return true;
|
|
711
|
-
if (execution?.aovs?.length && !rayTracePass.prepareAovs(execution.aovs))
|
|
716
|
+
if (execution?.aovs?.length && !rayTracePass.prepareAovs(execution.aovs, compactAov()))
|
|
712
717
|
return true;
|
|
713
718
|
const resetAccumulation = isFirstFrame;
|
|
714
719
|
if (resetAccumulation)
|
|
@@ -816,7 +821,13 @@ output.color = color;
|
|
|
816
821
|
return false;
|
|
817
822
|
}
|
|
818
823
|
if (sampleCount !== frameSampleCount && execution?.aovs?.length) {
|
|
819
|
-
|
|
824
|
+
// Display AOVs only add detail: keep the first beauty image's latency and
|
|
825
|
+
// spread their full-canvas samples over frames instead of batching them.
|
|
826
|
+
// The converging trace completes any remaining samples.
|
|
827
|
+
const display = aovResolution();
|
|
828
|
+
const aovTarget = display && sampleCount < maxSamples ? Math.min(sampleCount - 1, aov.samples + 1) : sampleCount;
|
|
829
|
+
if (aovTarget > 0)
|
|
830
|
+
rayTracePass.renderAovs(aov, camera, aovTarget, Math.min(execution.aovSamples ?? 16, display ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, display);
|
|
820
831
|
}
|
|
821
832
|
if (sampleCount !== frameSampleCount && realtime && realtimeDeferPostProcess && sampleCount < renderSampleTarget) {
|
|
822
833
|
postProcessPending = true;
|
|
@@ -892,13 +903,7 @@ output.color = color;
|
|
|
892
903
|
}
|
|
893
904
|
function setToneMappingParams(params) {
|
|
894
905
|
const newExposure = params.exposure ?? 1;
|
|
895
|
-
const newToneMappingMode =
|
|
896
|
-
agx: 0,
|
|
897
|
-
aces: 1,
|
|
898
|
-
cineon: 2,
|
|
899
|
-
reinhard: 3,
|
|
900
|
-
linear: 4
|
|
901
|
-
}[params.toneMapping ?? 'agx'] ?? 0;
|
|
906
|
+
const newToneMappingMode = TONE_MAPPING_MODES[params.toneMapping ?? 'agx'] ?? 0;
|
|
902
907
|
const newContrast = params.contrast ?? 1;
|
|
903
908
|
const newSaturation = params.saturation ?? 1;
|
|
904
909
|
const newTemperature = params.temperature ?? 0;
|
|
@@ -1333,8 +1338,8 @@ output.color = color;
|
|
|
1333
1338
|
if (settings.aovs?.length && (!Number.isInteger(settings.aovSamples ?? 16) || (settings.aovSamples ?? 16) < 1))
|
|
1334
1339
|
throw new RangeError('aovSamples must be a positive integer');
|
|
1335
1340
|
const previousMask = aovMask(execution?.aovs ?? []), nextMask = aovMask(settings.aovs ?? []);
|
|
1336
|
-
if (previousMask !== nextMask || execution?.aovSamples !== settings.aovSamples)
|
|
1337
|
-
aov.
|
|
1341
|
+
if (previousMask !== nextMask || execution?.aovSamples !== settings.aovSamples || execution?.aovResolution !== settings.aovResolution)
|
|
1342
|
+
aov.reset();
|
|
1338
1343
|
execution = { ...settings, aovs: [...(settings.aovs ?? [])] };
|
|
1339
1344
|
// Presentation may still name the previous preview's AOV. Drop that
|
|
1340
1345
|
// selection before tracing with a smaller set; Display validates and
|
|
@@ -1402,15 +1407,16 @@ output.color = color;
|
|
|
1402
1407
|
isFirstFrame = true;
|
|
1403
1408
|
sampleCount = 0;
|
|
1404
1409
|
},
|
|
1410
|
+
getAovTexture(kind) { return execution?.aovs?.includes(kind) ? aov.texture(kind) : undefined; },
|
|
1405
1411
|
getOutputTexture(kind) {
|
|
1406
1412
|
flushPostProcess();
|
|
1407
1413
|
if (kind === 'hdr')
|
|
1408
1414
|
return resolvedSamples > 0 ? getFrameInput('color') : undefined;
|
|
1409
1415
|
return displayPostProcess.output ?? presentationTexture;
|
|
1410
1416
|
},
|
|
1411
|
-
applyPostProcesses(passes, render) {
|
|
1417
|
+
applyPostProcesses(passes, render, options, crop) {
|
|
1412
1418
|
if (presentationTexture)
|
|
1413
|
-
displayPostProcess.run(presentationTexture, passes, render);
|
|
1419
|
+
displayPostProcess.run(presentationTexture, passes, render, canvas, options, crop);
|
|
1414
1420
|
},
|
|
1415
1421
|
trace,
|
|
1416
1422
|
drawPostProcess() {
|
|
@@ -1465,7 +1471,7 @@ output.color = color;
|
|
|
1465
1471
|
throw pipelineError;
|
|
1466
1472
|
if (rayTracePass.isCompilingShader() || !rayTracePass.isPipelineReady())
|
|
1467
1473
|
return false;
|
|
1468
|
-
return rayTracePass.renderAovs(aov, camera, samples, execution.aovSamples ?? 16, execution.aovs);
|
|
1474
|
+
return rayTracePass.renderAovs(aov, camera, samples, Math.min(execution.aovSamples ?? 16, aovResolution() ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, aovResolution());
|
|
1469
1475
|
},
|
|
1470
1476
|
async readAov(kind) {
|
|
1471
1477
|
if (!execution?.aovs?.includes(kind) || !aovCamera || (sampleCount < 1 && aov.samples < 1))
|
|
@@ -1481,7 +1487,7 @@ output.color = color;
|
|
|
1481
1487
|
if (pipelineError)
|
|
1482
1488
|
throw pipelineError;
|
|
1483
1489
|
if (!rayTracePass.isCompilingShader() && rayTracePass.isPipelineReady() &&
|
|
1484
|
-
rayTracePass.renderAovs(aov, aovCamera, Math.max(sampleCount, aov.samples), execution.aovSamples ?? 16, execution.aovs))
|
|
1490
|
+
rayTracePass.renderAovs(aov, aovCamera, Math.max(sampleCount, aov.samples), Math.min(execution.aovSamples ?? 16, aovResolution() ? DISPLAY_AOV_SAMPLE_CAP : Infinity), execution.aovs, aovResolution()))
|
|
1485
1491
|
break;
|
|
1486
1492
|
// Display frames stop on a hidden page, but compilation still completes.
|
|
1487
1493
|
await new Promise(resolve => setTimeout(resolve, 16));
|