@meimu/mutracer 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/GLSL-PathTracer-MIT.txt +21 -0
- package/LICENSES/GlMatrix-MIT.txt +19 -0
- package/LICENSES/KinoBloom-MIT.txt +21 -0
- package/LICENSES/OIDNWeb-MIT.txt +21 -0
- package/LICENSES/Octicons-MIT.txt +21 -0
- package/LICENSES/RayTracingRenderer-MIT.txt +21 -0
- package/LICENSES/TinyBVH-MIT.txt +21 -0
- package/LICENSES/WebGPUUtils-MIT.txt +21 -0
- package/LICENSES/ZetaRay-MIT.txt +21 -0
- package/README.md +240 -2
- package/THIRD_PARTY_NOTICES.md +160 -0
- package/dist/assets/bvh.worker.js +1 -0
- package/dist/mutracer.umd.js +14360 -0
- package/docs/api.md +394 -0
- package/docs/bvh.md +141 -0
- package/docs/denoising.md +301 -0
- package/docs/getting-started.md +308 -0
- package/docs/materials.md +281 -0
- package/docs/performance.md +85 -0
- package/docs/post-processing.md +87 -0
- package/docs/progressive-rendering.md +160 -0
- package/docs/sampling.md +40 -0
- package/docs/threejs.md +274 -0
- package/docs/todo.md +61 -0
- package/docs/updates.md +208 -0
- package/lib/Display.d.ts +72 -0
- package/lib/Display.js +123 -0
- package/lib/Display.js.map +1 -0
- package/lib/Engine.d.ts +161 -0
- package/lib/Engine.js +681 -0
- package/lib/Engine.js.map +1 -0
- package/lib/Render.d.ts +265 -0
- package/lib/Render.js +742 -0
- package/lib/Render.js.map +1 -0
- package/lib/RenderLoop.d.ts +79 -0
- package/lib/RenderLoop.js +236 -0
- package/lib/RenderLoop.js.map +1 -0
- package/lib/Sync.d.ts +19 -0
- package/lib/Sync.js +19 -0
- package/lib/Sync.js.map +1 -0
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -0
- package/lib/main.d.ts +56 -0
- package/lib/main.js +43 -0
- package/lib/main.js.map +1 -0
- package/lib/math.d.ts +23 -0
- package/lib/math.js +56 -0
- package/lib/math.js.map +1 -0
- package/lib/oidn.d.ts +45 -0
- package/lib/oidn.js +42 -0
- package/lib/oidn.js.map +1 -0
- package/lib/oidnBundledWeights.cdn.d.ts +2 -0
- package/lib/oidnBundledWeights.cdn.js +5 -0
- package/lib/oidnBundledWeights.cdn.js.map +1 -0
- package/lib/oidnBundledWeights.d.ts +2 -0
- package/lib/oidnBundledWeights.js +4 -0
- package/lib/oidnBundledWeights.js.map +1 -0
- package/lib/renderer/DisplayPostProcess.d.ts +14 -0
- package/lib/renderer/DisplayPostProcess.js +41 -0
- package/lib/renderer/DisplayPostProcess.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +119 -0
- package/lib/renderer/MaterialTable.js +550 -0
- package/lib/renderer/MaterialTable.js.map +1 -0
- package/lib/renderer/OfflineAdaptiveSampling.d.ts +47 -0
- package/lib/renderer/OfflineAdaptiveSampling.js +36 -0
- package/lib/renderer/OfflineAdaptiveSampling.js.map +1 -0
- package/lib/renderer/RenderingPipeline.d.ts +232 -0
- package/lib/renderer/RenderingPipeline.js +18 -0
- package/lib/renderer/RenderingPipeline.js.map +1 -0
- package/lib/renderer/ScratchPool.d.ts +13 -0
- package/lib/renderer/ScratchPool.js +21 -0
- package/lib/renderer/ScratchPool.js.map +1 -0
- package/lib/renderer/TileRender.d.ts +44 -0
- package/lib/renderer/TileRender.js +283 -0
- package/lib/renderer/TileRender.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.d.ts +17 -0
- package/lib/renderer/WGPUBloomPass.js +243 -0
- package/lib/renderer/WGPUBloomPass.js.map +1 -0
- package/lib/renderer/WGPUCanvasSurface.d.ts +21 -0
- package/lib/renderer/WGPUCanvasSurface.js +48 -0
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -0
- package/lib/renderer/WGPUComputePass.d.ts +73 -0
- package/lib/renderer/WGPUComputePass.js +317 -0
- package/lib/renderer/WGPUComputePass.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.d.ts +73 -0
- package/lib/renderer/WGPUFullQuadPass.js +389 -0
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -0
- package/lib/renderer/WGPUHDRPeakMeter.d.ts +19 -0
- package/lib/renderer/WGPUHDRPeakMeter.js +112 -0
- package/lib/renderer/WGPUHDRPeakMeter.js.map +1 -0
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +61 -0
- package/lib/renderer/WGPUJNLMDenoiser.js +412 -0
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +44 -0
- package/lib/renderer/WGPURayTraceOutput.js +368 -0
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -0
- package/lib/renderer/WGPURayTracePass.d.ts +284 -0
- package/lib/renderer/WGPURayTracePass.js +2323 -0
- package/lib/renderer/WGPURayTracePass.js.map +1 -0
- package/lib/renderer/WGPURenderingPipeline.d.ts +9 -0
- package/lib/renderer/WGPURenderingPipeline.js +1448 -0
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -0
- package/lib/renderer/WGPUSceneFeatures.d.ts +3 -0
- package/lib/renderer/WGPUSceneFeatures.js +20 -0
- package/lib/renderer/WGPUSceneFeatures.js.map +1 -0
- package/lib/renderer/WGPUScratchBuffer.d.ts +9 -0
- package/lib/renderer/WGPUScratchBuffer.js +21 -0
- package/lib/renderer/WGPUScratchBuffer.js.map +1 -0
- package/lib/renderer/WGPUScratchTexture.d.ts +10 -0
- package/lib/renderer/WGPUScratchTexture.js +27 -0
- package/lib/renderer/WGPUScratchTexture.js.map +1 -0
- package/lib/renderer/WGPUShaderCache.d.ts +26 -0
- package/lib/renderer/WGPUShaderCache.js +103 -0
- package/lib/renderer/WGPUShaderCache.js.map +1 -0
- package/lib/renderer/WebGLBloomPass.d.ts +18 -0
- package/lib/renderer/WebGLBloomPass.js +113 -0
- package/lib/renderer/WebGLBloomPass.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +65 -0
- package/lib/renderer/WebGLFullQuadPass.js +208 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -0
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +32 -0
- package/lib/renderer/WebGLJNLMDenoiser.js +328 -0
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WebGLRayTraceOutputPass.d.ts +20 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js +106 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -0
- package/lib/renderer/WebGLRayTracePass.d.ts +142 -0
- package/lib/renderer/WebGLRayTracePass.js +845 -0
- package/lib/renderer/WebGLRayTracePass.js.map +1 -0
- package/lib/renderer/WebGLReadback.d.ts +4 -0
- package/lib/renderer/WebGLReadback.js +75 -0
- package/lib/renderer/WebGLReadback.js.map +1 -0
- package/lib/renderer/WebGLRenderingPipeline.d.ts +4 -0
- package/lib/renderer/WebGLRenderingPipeline.js +510 -0
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -0
- package/lib/renderer/WebGLScratchCopy.d.ts +10 -0
- package/lib/renderer/WebGLScratchCopy.js +27 -0
- package/lib/renderer/WebGLScratchCopy.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +26 -0
- package/lib/renderer/accumulationTarget.js +2 -0
- package/lib/renderer/accumulationTarget.js.map +1 -0
- package/lib/renderer/binnedSahBvh.d.ts +31 -0
- package/lib/renderer/binnedSahBvh.js +263 -0
- package/lib/renderer/binnedSahBvh.js.map +1 -0
- package/lib/renderer/bvh.worker.d.ts +1 -0
- package/lib/renderer/bvh.worker.js +16 -0
- package/lib/renderer/bvh.worker.js.map +1 -0
- package/lib/renderer/bvhAccel.d.ts +81 -0
- package/lib/renderer/bvhAccel.js +621 -0
- package/lib/renderer/bvhAccel.js.map +1 -0
- package/lib/renderer/bvhWorkerBuild.d.ts +12 -0
- package/lib/renderer/bvhWorkerBuild.js +17 -0
- package/lib/renderer/bvhWorkerBuild.js.map +1 -0
- package/lib/renderer/bvhWorkerClient.d.ts +57 -0
- package/lib/renderer/bvhWorkerClient.js +166 -0
- package/lib/renderer/bvhWorkerClient.js.map +1 -0
- package/lib/renderer/cameraLens.d.ts +5 -0
- package/lib/renderer/cameraLens.js +15 -0
- package/lib/renderer/cameraLens.js.map +1 -0
- package/lib/renderer/cameraSnapshot.d.ts +3 -0
- package/lib/renderer/cameraSnapshot.js +7 -0
- package/lib/renderer/cameraSnapshot.js.map +1 -0
- package/lib/renderer/committedScene.d.ts +13 -0
- package/lib/renderer/committedScene.js +126 -0
- package/lib/renderer/committedScene.js.map +1 -0
- package/lib/renderer/dataTextureUtil.d.ts +32 -0
- package/lib/renderer/dataTextureUtil.js +46 -0
- package/lib/renderer/dataTextureUtil.js.map +1 -0
- package/lib/renderer/denoiser.d.ts +65 -0
- package/lib/renderer/denoiser.js +2 -0
- package/lib/renderer/denoiser.js.map +1 -0
- package/lib/renderer/depthQuery.d.ts +14 -0
- package/lib/renderer/depthQuery.js +14 -0
- package/lib/renderer/depthQuery.js.map +1 -0
- package/lib/renderer/deviceRequirements.d.ts +23 -0
- package/lib/renderer/deviceRequirements.js +50 -0
- package/lib/renderer/deviceRequirements.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +10 -0
- package/lib/renderer/envMapCreation.js +96 -0
- package/lib/renderer/envMapCreation.js.map +1 -0
- package/lib/renderer/envMapDistribution.d.ts +9 -0
- package/lib/renderer/envMapDistribution.js +107 -0
- package/lib/renderer/envMapDistribution.js.map +1 -0
- package/lib/renderer/float16.d.ts +1 -0
- package/lib/renderer/float16.js +19 -0
- package/lib/renderer/float16.js.map +1 -0
- package/lib/renderer/geometryBvh.d.ts +11 -0
- package/lib/renderer/geometryBvh.js +24 -0
- package/lib/renderer/geometryBvh.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +28 -0
- package/lib/renderer/geometryUpdates.js +131 -0
- package/lib/renderer/geometryUpdates.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +37 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/common.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/common.glsl.js +17 -0
- package/lib/renderer/glsl/chunks/common.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +192 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js +1091 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +371 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +1767 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rand.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js +26 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/random.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/random.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/random.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +287 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +254 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +279 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +48 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js +194 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js +170 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +72 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/depthQuery.frag.d.ts +3 -0
- package/lib/renderer/glsl/depthQuery.frag.js +55 -0
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.d.ts +6 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +46 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -0
- package/lib/renderer/glsl/rayTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/rayTrace.frag.js +623 -0
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/shadowCatcher.frag.d.ts +3 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js +119 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -0
- package/lib/renderer/glsl/webglPipeline.frag.d.ts +4 -0
- package/lib/renderer/glsl/webglPipeline.frag.js +208 -0
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -0
- package/lib/renderer/gpuMemory.d.ts +2 -0
- package/lib/renderer/gpuMemory.js +10 -0
- package/lib/renderer/gpuMemory.js.map +1 -0
- package/lib/renderer/halton.d.ts +1 -0
- package/lib/renderer/halton.js +15 -0
- package/lib/renderer/halton.js.map +1 -0
- package/lib/renderer/jnlm.d.ts +85 -0
- package/lib/renderer/jnlm.js +87 -0
- package/lib/renderer/jnlm.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +75 -0
- package/lib/renderer/lightSampling.js +305 -0
- package/lib/renderer/lightSampling.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +26 -0
- package/lib/renderer/lightsUtil.js +154 -0
- package/lib/renderer/lightsUtil.js.map +1 -0
- package/lib/renderer/materialChanges.d.ts +13 -0
- package/lib/renderer/materialChanges.js +59 -0
- package/lib/renderer/materialChanges.js.map +1 -0
- package/lib/renderer/materialComparison.generated.d.ts +5 -0
- package/lib/renderer/materialComparison.generated.js +655 -0
- package/lib/renderer/materialComparison.generated.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +6 -0
- package/lib/renderer/materialConstants.js +3 -0
- package/lib/renderer/materialConstants.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +9 -0
- package/lib/renderer/materialEmission.js +21 -0
- package/lib/renderer/materialEmission.js.map +1 -0
- package/lib/renderer/materialIndices.d.ts +7 -0
- package/lib/renderer/materialIndices.js +34 -0
- package/lib/renderer/materialIndices.js.map +1 -0
- package/lib/renderer/materialLayout.d.ts +102 -0
- package/lib/renderer/materialLayout.js +189 -0
- package/lib/renderer/materialLayout.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +537 -0
- package/lib/renderer/materialTextureSlots.js +219 -0
- package/lib/renderer/materialTextureSlots.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.d.ts +8 -0
- package/lib/renderer/mergeMeshesToGeometry.js +236 -0
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -0
- package/lib/renderer/meshInstances.d.ts +23 -0
- package/lib/renderer/meshInstances.js +66 -0
- package/lib/renderer/meshInstances.js.map +1 -0
- package/lib/renderer/meshMembership.d.ts +10 -0
- package/lib/renderer/meshMembership.js +72 -0
- package/lib/renderer/meshMembership.js.map +1 -0
- package/lib/renderer/oidnNetwork.d.ts +20 -0
- package/lib/renderer/oidnNetwork.js +123 -0
- package/lib/renderer/oidnNetwork.js.map +1 -0
- package/lib/renderer/openPbrEnergyLut.d.ts +32 -0
- package/lib/renderer/openPbrEnergyLut.js +965 -0
- package/lib/renderer/openPbrEnergyLut.js.map +1 -0
- package/lib/renderer/pathLimits.d.ts +4 -0
- package/lib/renderer/pathLimits.js +7 -0
- package/lib/renderer/pathLimits.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +110 -0
- package/lib/renderer/prepareMeshBVH.js +857 -0
- package/lib/renderer/prepareMeshBVH.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +11 -0
- package/lib/renderer/progressiveScheduler.js +19 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -0
- package/lib/renderer/renderPipeline.d.ts +57 -0
- package/lib/renderer/renderPipeline.js +49 -0
- package/lib/renderer/renderPipeline.js.map +1 -0
- package/lib/renderer/sampling.d.ts +10 -0
- package/lib/renderer/sampling.js +28 -0
- package/lib/renderer/sampling.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +29 -0
- package/lib/renderer/sceneChangeDetector.js +232 -0
- package/lib/renderer/sceneChangeDetector.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +14 -0
- package/lib/renderer/sceneLightChanges.js +34 -0
- package/lib/renderer/sceneLightChanges.js.map +1 -0
- package/lib/renderer/scratchSampling.d.ts +3 -0
- package/lib/renderer/scratchSampling.js +39 -0
- package/lib/renderer/scratchSampling.js.map +1 -0
- package/lib/renderer/shader.d.ts +37 -0
- package/lib/renderer/shader.js +41 -0
- package/lib/renderer/shader.js.map +1 -0
- package/lib/renderer/staticBvhPreparation.d.ts +24 -0
- package/lib/renderer/staticBvhPreparation.js +116 -0
- package/lib/renderer/staticBvhPreparation.js.map +1 -0
- package/lib/renderer/textureRegion.d.ts +8 -0
- package/lib/renderer/textureRegion.js +9 -0
- package/lib/renderer/textureRegion.js.map +1 -0
- package/lib/renderer/texturesFromMaterials.d.ts +6 -0
- package/lib/renderer/texturesFromMaterials.js +37 -0
- package/lib/renderer/texturesFromMaterials.js.map +1 -0
- package/lib/renderer/util.d.ts +17 -0
- package/lib/renderer/util.js +56 -0
- package/lib/renderer/util.js.map +1 -0
- package/lib/renderer/webgl.d.ts +131 -0
- package/lib/renderer/webgl.js +586 -0
- package/lib/renderer/webgl.js.map +1 -0
- package/lib/renderer/webglShaders.d.ts +4 -0
- package/lib/renderer/webglShaders.js +41 -0
- package/lib/renderer/webglShaders.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +23 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +128 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +1441 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +85 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +7 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +315 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +1737 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +352 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +25 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js +2 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +328 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +400 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +439 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +40 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +198 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +170 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +42 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +218 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js +28 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js +34 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.d.ts +2 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +108 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +16 -0
- package/lib/renderer/wgsl/rayTrace.compute.js +927 -0
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -0
- package/lib/scene/AmbientLight.d.ts +17 -0
- package/lib/scene/AmbientLight.js +15 -0
- package/lib/scene/AmbientLight.js.map +1 -0
- package/lib/scene/Camera.d.ts +78 -0
- package/lib/scene/Camera.js +111 -0
- package/lib/scene/Camera.js.map +1 -0
- package/lib/scene/DirectionalLight.d.ts +18 -0
- package/lib/scene/DirectionalLight.js +17 -0
- package/lib/scene/DirectionalLight.js.map +1 -0
- package/lib/scene/EnvironmentLight.d.ts +14 -0
- package/lib/scene/EnvironmentLight.js +14 -0
- package/lib/scene/EnvironmentLight.js.map +1 -0
- package/lib/scene/Geometry.d.ts +87 -0
- package/lib/scene/Geometry.js +108 -0
- package/lib/scene/Geometry.js.map +1 -0
- package/lib/scene/IESProfile.d.ts +19 -0
- package/lib/scene/IESProfile.js +165 -0
- package/lib/scene/IESProfile.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +43 -0
- package/lib/scene/InstancedMesh.js +79 -0
- package/lib/scene/InstancedMesh.js.map +1 -0
- package/lib/scene/Mesh.d.ts +14 -0
- package/lib/scene/Mesh.js +17 -0
- package/lib/scene/Mesh.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +224 -0
- package/lib/scene/OpenPBRMaterial.js +240 -0
- package/lib/scene/OpenPBRMaterial.js.map +1 -0
- package/lib/scene/RectLight.d.ts +31 -0
- package/lib/scene/RectLight.js +26 -0
- package/lib/scene/RectLight.js.map +1 -0
- package/lib/scene/Scene.d.ts +55 -0
- package/lib/scene/Scene.js +2 -0
- package/lib/scene/Scene.js.map +1 -0
- package/lib/scene/SceneNode.d.ts +16 -0
- package/lib/scene/SceneNode.js +33 -0
- package/lib/scene/SceneNode.js.map +1 -0
- package/lib/scene/SphereLight.d.ts +22 -0
- package/lib/scene/SphereLight.js +20 -0
- package/lib/scene/SphereLight.js.map +1 -0
- package/lib/scene/SpotLight.d.ts +35 -0
- package/lib/scene/SpotLight.js +29 -0
- package/lib/scene/SpotLight.js.map +1 -0
- package/lib/scene/Texture.d.ts +38 -0
- package/lib/scene/Texture.js +37 -0
- package/lib/scene/Texture.js.map +1 -0
- package/lib/scene/anisotropyParameters.d.ts +1 -0
- package/lib/scene/anisotropyParameters.js +13 -0
- package/lib/scene/anisotropyParameters.js.map +1 -0
- package/lib/scene/geometryChanges.d.ts +5 -0
- package/lib/scene/geometryChanges.js +18 -0
- package/lib/scene/geometryChanges.js.map +1 -0
- package/lib/scene/materialTextureNames.d.ts +2 -0
- package/lib/scene/materialTextureNames.js +9 -0
- package/lib/scene/materialTextureNames.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +400 -0
- package/lib/scene/openPbrSchema.js +149 -0
- package/lib/scene/openPbrSchema.js.map +1 -0
- package/lib/scene/thinFilmParameters.d.ts +4 -0
- package/lib/scene/thinFilmParameters.js +12 -0
- package/lib/scene/thinFilmParameters.js.map +1 -0
- package/lib/settings/display.d.ts +118 -0
- package/lib/settings/display.js +34 -0
- package/lib/settings/display.js.map +1 -0
- package/lib/settings/engine.d.ts +37 -0
- package/lib/settings/engine.js +26 -0
- package/lib/settings/engine.js.map +1 -0
- package/lib/settings/render.d.ts +178 -0
- package/lib/settings/render.js +36 -0
- package/lib/settings/render.js.map +1 -0
- package/lib/tinybvh/LICENSE +21 -0
- package/lib/tinybvh/TinyBvhBuilder.d.ts +17 -0
- package/lib/tinybvh/TinyBvhBuilder.js +211 -0
- package/lib/tinybvh/TinyBvhBuilder.js.map +1 -0
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/types.d.ts +13 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/util/canvas.d.ts +2 -0
- package/lib/util/canvas.js +13 -0
- package/lib/util/canvas.js.map +1 -0
- package/lib/util/commonGeometry.d.ts +15 -0
- package/lib/util/commonGeometry.js +240 -0
- package/lib/util/commonGeometry.js.map +1 -0
- package/lib/util/events.d.ts +7 -0
- package/lib/util/events.js +23 -0
- package/lib/util/events.js.map +1 -0
- package/lib/util/frame.d.ts +2 -0
- package/lib/util/frame.js +10 -0
- package/lib/util/frame.js.map +1 -0
- package/lib/util/fromTHREE.d.ts +105 -0
- package/lib/util/fromTHREE.js +1111 -0
- package/lib/util/fromTHREE.js.map +1 -0
- package/lib/util/geometry.d.ts +13 -0
- package/lib/util/geometry.js +292 -0
- package/lib/util/geometry.js.map +1 -0
- package/lib/util/loadRGBE.d.ts +7 -0
- package/lib/util/loadRGBE.js +168 -0
- package/lib/util/loadRGBE.js.map +1 -0
- package/lib/util/math.d.ts +8 -0
- package/lib/util/math.js +64 -0
- package/lib/util/math.js.map +1 -0
- package/lib/util/mesh.d.ts +7 -0
- package/lib/util/mesh.js +20 -0
- package/lib/util/mesh.js.map +1 -0
- package/lib/util/threeDeformation.d.ts +20 -0
- package/lib/util/threeDeformation.js +218 -0
- package/lib/util/threeDeformation.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.js +3 -0
- package/lib/version.js.map +1 -0
- package/llms.txt +62 -0
- package/oidn/weights/LICENSE.txt +202 -0
- package/oidn/weights/README.md +43 -0
- package/oidn/weights/rt_hdr_alb_nrm.tza +0 -0
- package/oidn/weights/rt_hdr_alb_nrm_small.tza +0 -0
- package/package.json +124 -4
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
export const linearToSrgbDefine = /* wgsl */ `
|
|
2
|
+
fn fJ(color: vec3f) -> vec3f {
|
|
3
|
+
let linear = max(color, vec3f(0.0));
|
|
4
|
+
let low = linear * 12.92;
|
|
5
|
+
let high = 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055;
|
|
6
|
+
return select(high, low, linear <= vec3f(0.0031308));
|
|
7
|
+
}
|
|
8
|
+
`;
|
|
9
|
+
export const composeDefine = /* wgsl */ `
|
|
10
|
+
|
|
11
|
+
fn jL(color: vec3f) -> vec3f {
|
|
12
|
+
return clamp(color, vec3f(0.0), vec3f(1.0));
|
|
13
|
+
}
|
|
14
|
+
fn iJ(color: vec3f) -> vec3f {
|
|
15
|
+
return clamp(color / (vec3f(1.0) + color), vec3f(0.0), vec3f(1.0));
|
|
16
|
+
}
|
|
17
|
+
fn jC(jk: vec3f) -> vec3f {
|
|
18
|
+
let color = max(vec3f(0.0), jk - 0.004);
|
|
19
|
+
return pow((color * (6.2 * color + 0.5)) /
|
|
20
|
+
(color * (6.2 * color + 1.7) + 0.06), vec3f(2.2));
|
|
21
|
+
}
|
|
22
|
+
fn ox(value: vec3f) -> vec3f {
|
|
23
|
+
let kC = value * (value + 0.0245786) - 0.000090537;
|
|
24
|
+
let ap = value * (0.983729 * value + 0.4329510) + 0.238081;
|
|
25
|
+
return kC / ap;
|
|
26
|
+
}
|
|
27
|
+
fn lh(jk: vec3f) -> vec3f {
|
|
28
|
+
let pj = mat3x3f(
|
|
29
|
+
vec3f(0.59719, 0.07600, 0.02840),
|
|
30
|
+
vec3f(0.35458, 0.90834, 0.13383),
|
|
31
|
+
vec3f(0.04823, 0.01566, 0.83777)
|
|
32
|
+
);
|
|
33
|
+
let os = mat3x3f(
|
|
34
|
+
vec3f(1.60475, -0.10208, -0.00327),
|
|
35
|
+
vec3f(-0.53108, 1.10813, -0.07276),
|
|
36
|
+
vec3f(-0.07367, -0.00605, 1.07602)
|
|
37
|
+
);
|
|
38
|
+
let color = pj * (jk / 0.6);
|
|
39
|
+
return clamp(os * ox(color), vec3f(0.0), vec3f(1.0));
|
|
40
|
+
}
|
|
41
|
+
fn fP(value: vec3f) -> vec3f {
|
|
42
|
+
let mB = value * value;
|
|
43
|
+
let qy = mB * mB;
|
|
44
|
+
return 15.5 * qy * mB - 40.14 * qy * value
|
|
45
|
+
+ 31.96 * qy - 6.868 * mB * value
|
|
46
|
+
+ 0.4298 * mB + 0.1191 * value - 0.00232;
|
|
47
|
+
}
|
|
48
|
+
fn lP(jk: vec3f) -> vec3f {
|
|
49
|
+
let mD = mat3x3f(
|
|
50
|
+
vec3f(1.6605, -0.1246, -0.0182),
|
|
51
|
+
vec3f(-0.5876, 1.1329, -0.1006),
|
|
52
|
+
vec3f(-0.0728, -0.0083, 1.1187)
|
|
53
|
+
);
|
|
54
|
+
let mE = mat3x3f(
|
|
55
|
+
vec3f(0.6274, 0.0691, 0.0164),
|
|
56
|
+
vec3f(0.3293, 0.9195, 0.0880),
|
|
57
|
+
vec3f(0.0433, 0.0113, 0.8956)
|
|
58
|
+
);
|
|
59
|
+
let pl = mat3x3f(
|
|
60
|
+
vec3f(0.856627153315983, 0.137318972929847, 0.11189821299995),
|
|
61
|
+
vec3f(0.0951212405381588, 0.761241990602591, 0.0767994186031903),
|
|
62
|
+
vec3f(0.0482516061458583, 0.101439036467562, 0.811302368396859)
|
|
63
|
+
);
|
|
64
|
+
let ot = mat3x3f(
|
|
65
|
+
vec3f(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),
|
|
66
|
+
vec3f(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),
|
|
67
|
+
vec3f(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)
|
|
68
|
+
);
|
|
69
|
+
var color = pl * (mE * jk);
|
|
70
|
+
color = clamp((log2(max(color, vec3f(1e-10))) + 12.47393) / 16.5, vec3f(0.0), vec3f(1.0));
|
|
71
|
+
color = ot * fP(color);
|
|
72
|
+
color = pow(max(color, vec3f(0.0)), vec3f(2.2));
|
|
73
|
+
return clamp(mD * color, vec3f(0.0), vec3f(1.0));
|
|
74
|
+
}
|
|
75
|
+
fn cH(color: vec3f) -> vec3f {
|
|
76
|
+
let toneMappingMode = i32(toneMappingParams.x);
|
|
77
|
+
if (toneMappingMode == 1) { return lh(color); }
|
|
78
|
+
if (toneMappingMode == 2) { return jC(color); }
|
|
79
|
+
if (toneMappingMode == 3) { return iJ(color); }
|
|
80
|
+
if (toneMappingMode == 4) { return jL(color); }
|
|
81
|
+
return lP(color);
|
|
82
|
+
}
|
|
83
|
+
${linearToSrgbDefine}
|
|
84
|
+
fn gS(jk: vec3f) -> vec3f {
|
|
85
|
+
let contrast = colorGradingParams.x;
|
|
86
|
+
let saturation = colorGradingParams.y;
|
|
87
|
+
let temperature = colorGradingParams.z;
|
|
88
|
+
let tint = colorGradingParams.w;
|
|
89
|
+
let sW = vec3f(
|
|
90
|
+
1.0 + temperature * 0.16 + tint * 0.04,
|
|
91
|
+
1.0 - tint * 0.12,
|
|
92
|
+
1.0 - temperature * 0.16 + tint * 0.04
|
|
93
|
+
);
|
|
94
|
+
var color = max(jk * sW, vec3f(0.0));
|
|
95
|
+
color = max((color - 0.18) * contrast + 0.18, vec3f(0.0));
|
|
96
|
+
let luminance = dot(color, vec3f(0.2126, 0.7152, 0.0722));
|
|
97
|
+
return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));
|
|
98
|
+
}
|
|
99
|
+
`;
|
|
100
|
+
export const composeMain = /* wgsl */ `
|
|
101
|
+
|
|
102
|
+
var dY = load_colorTex(uv, 0);
|
|
103
|
+
var jf = vec4(0.0);
|
|
104
|
+
if (bloomIntensity > 0.0) {
|
|
105
|
+
jf = load_bloomTex(uv, 0) * bloomIntensity;
|
|
106
|
+
dY = vec4f(dY.rgb + jf.rgb, dY.a);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var kX = gS(dY.rgb * exposure);
|
|
110
|
+
let kj = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));
|
|
111
|
+
kX *= 1.0 - toneMappingParams.y * kj;
|
|
112
|
+
let hx = hdrOutputEnabled > 0.5;
|
|
113
|
+
if (!hx) {
|
|
114
|
+
kX = cH(kX);
|
|
115
|
+
}
|
|
116
|
+
let lX = select(
|
|
117
|
+
pow(max(kX, vec3f(0.0)), vec3f(1.0 / 2.2)),
|
|
118
|
+
fJ(kX),
|
|
119
|
+
hx
|
|
120
|
+
);
|
|
121
|
+
var nO = lX;
|
|
122
|
+
if (flatBackgroundColor.a > 0.5) {
|
|
123
|
+
let ja = clamp(
|
|
124
|
+
load_flatBackgroundMaskTex(uv, 0).a,
|
|
125
|
+
0.0,
|
|
126
|
+
1.0
|
|
127
|
+
);
|
|
128
|
+
let oO = fJ(max(flatBackgroundColor.rgb, vec3f(0.0)));
|
|
129
|
+
nO = mix(oO, lX, ja);
|
|
130
|
+
if (bloomIntensity > 0.0) {
|
|
131
|
+
var il = gS(
|
|
132
|
+
max(dY.rgb - jf.rgb, vec3f(0.0))
|
|
133
|
+
* exposure
|
|
134
|
+
);
|
|
135
|
+
il *= 1.0 - toneMappingParams.y * kj;
|
|
136
|
+
if (!hx) {
|
|
137
|
+
il = cH(il);
|
|
138
|
+
}
|
|
139
|
+
let rp = select(
|
|
140
|
+
pow(max(il, vec3f(0.0)), vec3f(1.0 / 2.2)),
|
|
141
|
+
fJ(il),
|
|
142
|
+
hx
|
|
143
|
+
);
|
|
144
|
+
nO += max(lX - rp, vec3f(0.0))
|
|
145
|
+
* (1.0 - ja);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
dY = vec4f(nO, dY.a);
|
|
149
|
+
if (bloomIntensity > 0.0) {
|
|
150
|
+
dY.a = max(dY.a, min(dot(jf.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (shadowCatcherEnabled > 0.5) {
|
|
154
|
+
let shadowCatcher = load_shadowCatcherTex(uv, 0);
|
|
155
|
+
let coverage = clamp(shadowCatcher.r, 0.0, 1.0);
|
|
156
|
+
let opacity = max(clamp(shadowCatcher.a / max(coverage, 0.000001), 0.0, 1.0) - (1.0 - shadowCatcherAlpha), 0.0);
|
|
157
|
+
if (coverage > 0.0) {
|
|
158
|
+
let foreground = load_foregroundTex(uv, 0);
|
|
159
|
+
let background = load_catcherBackgroundTex(uv, 0);
|
|
160
|
+
var bK = gS((foreground.rgb + jf.rgb) * exposure);
|
|
161
|
+
var backgroundColor = gS((background.rgb / max(background.a, 0.000001) + jf.rgb) * exposure);
|
|
162
|
+
bK *= 1.0 - toneMappingParams.y * kj;
|
|
163
|
+
backgroundColor *= 1.0 - toneMappingParams.y * kj;
|
|
164
|
+
if (!hx) {
|
|
165
|
+
bK = cH(bK);
|
|
166
|
+
backgroundColor = cH(backgroundColor);
|
|
167
|
+
}
|
|
168
|
+
bK = select(pow(max(bK, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(bK), hx);
|
|
169
|
+
backgroundColor = select(pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(backgroundColor), hx);
|
|
170
|
+
if (flatBackgroundColor.a > 0.5) {
|
|
171
|
+
var eM = gS(background.rgb / max(background.a, 0.000001) * exposure);
|
|
172
|
+
eM *= 1.0 - toneMappingParams.y * kj;
|
|
173
|
+
if (!hx) { eM = cH(eM); }
|
|
174
|
+
let lY = select(pow(max(eM, vec3f(0.0)), vec3f(1.0 / 2.2)), fJ(eM), hx);
|
|
175
|
+
let tX = select(vec3f(0.0), max(backgroundColor - lY, vec3f(0.0)), bloomIntensity > 0.0);
|
|
176
|
+
backgroundColor = fJ(max(flatBackgroundColor.rgb, vec3f(0.0))) + tX;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
let fO = coverage * opacity;
|
|
181
|
+
let lR = clamp(dot(jf.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);
|
|
182
|
+
let hr = max(foreground.a, lR * (1.0 - coverage));
|
|
183
|
+
let hg = max(background.a, lR * coverage);
|
|
184
|
+
let alpha = hr + hg * (1.0 - opacity) + fO;
|
|
185
|
+
let premultiplied = bK * hr
|
|
186
|
+
+ backgroundColor * hg * (1.0 - opacity)
|
|
187
|
+
+ shadowCatcherColor * fO;
|
|
188
|
+
dY = vec4f(premultiplied / max(alpha, 0.000001), alpha);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
output.color = dY;
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
`;
|
|
196
|
+
// Preserve the existing display composition, but give OIDN a floating-point,
|
|
197
|
+
// linear-light image. Alpha is deliberately not used as a second color layer.
|
|
198
|
+
export const compositeDenoiseOutputMain = /* wgsl */ `
|
|
199
|
+
let encoded = max(dY.rgb, vec3f(0.0));
|
|
200
|
+
let sK = select(
|
|
201
|
+
pow(encoded, vec3f(2.2)),
|
|
202
|
+
select(pow((encoded + 0.055) / 1.055, vec3f(2.4)), encoded / 12.92,
|
|
203
|
+
encoded <= vec3f(0.04045)),
|
|
204
|
+
hx
|
|
205
|
+
);
|
|
206
|
+
output.denoiseColor = vec4f(sK, dY.a);
|
|
207
|
+
`;
|
|
208
|
+
export const compositeDenoiseDisplayMain = /* wgsl */ `
|
|
209
|
+
let denoised = load_colorTex(uv, 0);
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
let alpha = select(load_composedTex(uv, 0).a, clamp(denoised.a, 0.0, 1.0), denoisedAlpha > 0.5);
|
|
214
|
+
let linear = max(denoised.rgb, vec3f(0.0));
|
|
215
|
+
let encoded = select(pow(linear, vec3f(1.0 / 2.2)), fJ(linear), hdrOutputEnabled > 0.5);
|
|
216
|
+
output.color = vec4f(select(vec3f(0.0), encoded, alpha > 0.0), alpha);
|
|
217
|
+
`;
|
|
218
|
+
//# sourceMappingURL=compose.frag.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.frag.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/compose.frag.wgsl.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;CAO5C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0EtC,kBAAkB;;;;;;;;;;;;;;;;CAgBnB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FrC,CAAC;AAEF,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;;;;;;;;;CASpD,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC;;;;;;;;;CASrD,CAAC","sourcesContent":["export const linearToSrgbDefine = /* wgsl */ `\nfn linearToSrgb(color: vec3f) -> vec3f {\n let linear = max(color, vec3f(0.0));\n let low = linear * 12.92;\n let high = 1.055 * pow(linear, vec3f(1.0 / 2.4)) - 0.055;\n return select(high, low, linear <= vec3f(0.0031308));\n}\n`;\n\nexport const composeDefine = /* wgsl */ `\n\nfn linearToneMapping(color: vec3f) -> vec3f {\n return clamp(color, vec3f(0.0), vec3f(1.0));\n}\nfn reinhardToneMapping(color: vec3f) -> vec3f {\n return clamp(color / (vec3f(1.0) + color), vec3f(0.0), vec3f(1.0));\n}\nfn cineonToneMapping(inputColor: vec3f) -> vec3f {\n let color = max(vec3f(0.0), inputColor - 0.004);\n return pow((color * (6.2 * color + 0.5)) /\n (color * (6.2 * color + 1.7) + 0.06), vec3f(2.2));\n}\nfn rrtAndOdtFit(value: vec3f) -> vec3f {\n let numerator = value * (value + 0.0245786) - 0.000090537;\n let denominator = value * (0.983729 * value + 0.4329510) + 0.238081;\n return numerator / denominator;\n}\nfn acesToneMapping(inputColor: vec3f) -> vec3f {\n let inputMatrix = mat3x3f(\n vec3f(0.59719, 0.07600, 0.02840),\n vec3f(0.35458, 0.90834, 0.13383),\n vec3f(0.04823, 0.01566, 0.83777)\n );\n let outputMatrix = mat3x3f(\n vec3f(1.60475, -0.10208, -0.00327),\n vec3f(-0.53108, 1.10813, -0.07276),\n vec3f(-0.07367, -0.00605, 1.07602)\n );\n let color = inputMatrix * (inputColor / 0.6);\n return clamp(outputMatrix * rrtAndOdtFit(color), vec3f(0.0), vec3f(1.0));\n}\nfn agxDefaultContrastApprox(value: vec3f) -> vec3f {\n let value2 = value * value;\n let value4 = value2 * value2;\n return 15.5 * value4 * value2 - 40.14 * value4 * value\n + 31.96 * value4 - 6.868 * value2 * value\n + 0.4298 * value2 + 0.1191 * value - 0.00232;\n}\nfn agxToneMapping(inputColor: vec3f) -> vec3f {\n let linearRec2020ToLinearSrgb = mat3x3f(\n vec3f(1.6605, -0.1246, -0.0182),\n vec3f(-0.5876, 1.1329, -0.1006),\n vec3f(-0.0728, -0.0083, 1.1187)\n );\n let linearSrgbToLinearRec2020 = mat3x3f(\n vec3f(0.6274, 0.0691, 0.0164),\n vec3f(0.3293, 0.9195, 0.0880),\n vec3f(0.0433, 0.0113, 0.8956)\n );\n let insetMatrix = mat3x3f(\n vec3f(0.856627153315983, 0.137318972929847, 0.11189821299995),\n vec3f(0.0951212405381588, 0.761241990602591, 0.0767994186031903),\n vec3f(0.0482516061458583, 0.101439036467562, 0.811302368396859)\n );\n let outsetMatrix = mat3x3f(\n vec3f(1.1271005818144368, -0.1413297634984383, -0.14132976349843826),\n vec3f(-0.11060664309660323, 1.157823702216272, -0.11060664309660294),\n vec3f(-0.016493938717834573, -0.016493938717834257, 1.2519364065950405)\n );\n var color = insetMatrix * (linearSrgbToLinearRec2020 * inputColor);\n color = clamp((log2(max(color, vec3f(1e-10))) + 12.47393) / 16.5, vec3f(0.0), vec3f(1.0));\n color = outsetMatrix * agxDefaultContrastApprox(color);\n color = pow(max(color, vec3f(0.0)), vec3f(2.2));\n return clamp(linearRec2020ToLinearSrgb * color, vec3f(0.0), vec3f(1.0));\n}\nfn applyToneMapping(color: vec3f) -> vec3f {\n let toneMappingMode = i32(toneMappingParams.x);\n if (toneMappingMode == 1) { return acesToneMapping(color); }\n if (toneMappingMode == 2) { return cineonToneMapping(color); }\n if (toneMappingMode == 3) { return reinhardToneMapping(color); }\n if (toneMappingMode == 4) { return linearToneMapping(color); }\n return agxToneMapping(color);\n}\n${linearToSrgbDefine}\nfn gradeColor(inputColor: vec3f) -> vec3f {\n let contrast = colorGradingParams.x;\n let saturation = colorGradingParams.y;\n let temperature = colorGradingParams.z;\n let tint = colorGradingParams.w;\n let balance = vec3f(\n 1.0 + temperature * 0.16 + tint * 0.04,\n 1.0 - tint * 0.12,\n 1.0 - temperature * 0.16 + tint * 0.04\n );\n var color = max(inputColor * balance, vec3f(0.0));\n color = max((color - 0.18) * contrast + 0.18, vec3f(0.0));\n let luminance = dot(color, vec3f(0.2126, 0.7152, 0.0722));\n return max(mix(vec3f(luminance), color, saturation), vec3f(0.0));\n}\n`;\n\nexport const composeMain = /* wgsl */ `\n\nvar finalColor = load_colorTex(uv, 0);\nvar bloomTexel = vec4(0.0);\nif (bloomIntensity > 0.0) {\n bloomTexel = load_bloomTex(uv, 0) * bloomIntensity;\n finalColor = vec4f(finalColor.rgb + bloomTexel.rgb, finalColor.a);\n}\n\nvar gradedColor = gradeColor(finalColor.rgb * exposure);\nlet vignetteEdge = smoothstep(0.2, 0.72, distance(vec2f(uv) / vec2f(colorTexRegion()), vec2f(0.5)));\ngradedColor *= 1.0 - toneMappingParams.y * vignetteEdge;\nlet hdrOutput = hdrOutputEnabled > 0.5;\nif (!hdrOutput) {\n gradedColor = applyToneMapping(gradedColor);\n}\nlet encodedDisplay = select(\n pow(max(gradedColor, vec3f(0.0)), vec3f(1.0 / 2.2)),\n linearToSrgb(gradedColor),\n hdrOutput\n);\nvar displayColor = encodedDisplay;\nif (flatBackgroundColor.a > 0.5) {\n let surfaceCoverage = clamp(\n load_flatBackgroundMaskTex(uv, 0).a,\n 0.0,\n 1.0\n );\n let flatBackgroundDisplay = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0)));\n displayColor = mix(flatBackgroundDisplay, encodedDisplay, surfaceCoverage);\n if (bloomIntensity > 0.0) {\n var unbloomedColor = gradeColor(\n max(finalColor.rgb - bloomTexel.rgb, vec3f(0.0))\n * exposure\n );\n unbloomedColor *= 1.0 - toneMappingParams.y * vignetteEdge;\n if (!hdrOutput) {\n unbloomedColor = applyToneMapping(unbloomedColor);\n }\n let encodedUnbloomed = select(\n pow(max(unbloomedColor, vec3f(0.0)), vec3f(1.0 / 2.2)),\n linearToSrgb(unbloomedColor),\n hdrOutput\n );\n displayColor += max(encodedDisplay - encodedUnbloomed, vec3f(0.0))\n * (1.0 - surfaceCoverage);\n }\n}\nfinalColor = vec4f(displayColor, finalColor.a);\nif (bloomIntensity > 0.0) {\n finalColor.a = max(finalColor.a, min(dot(bloomTexel.rgb, vec3f(0.2125, 0.7154, 0.0721)), 1.0));\n}\n\nif (shadowCatcherEnabled > 0.5) {\n let shadowCatcher = load_shadowCatcherTex(uv, 0);\n let coverage = clamp(shadowCatcher.r, 0.0, 1.0);\n let opacity = max(clamp(shadowCatcher.a / max(coverage, 0.000001), 0.0, 1.0) - (1.0 - shadowCatcherAlpha), 0.0);\n if (coverage > 0.0) {\n let foreground = load_foregroundTex(uv, 0);\n let background = load_catcherBackgroundTex(uv, 0);\n var foregroundColor = gradeColor((foreground.rgb + bloomTexel.rgb) * exposure);\n var backgroundColor = gradeColor((background.rgb / max(background.a, 0.000001) + bloomTexel.rgb) * exposure);\n foregroundColor *= 1.0 - toneMappingParams.y * vignetteEdge;\n backgroundColor *= 1.0 - toneMappingParams.y * vignetteEdge;\n if (!hdrOutput) {\n foregroundColor = applyToneMapping(foregroundColor);\n backgroundColor = applyToneMapping(backgroundColor);\n }\n foregroundColor = select(pow(max(foregroundColor, vec3f(0.0)), vec3f(1.0 / 2.2)), linearToSrgb(foregroundColor), hdrOutput);\n backgroundColor = select(pow(max(backgroundColor, vec3f(0.0)), vec3f(1.0 / 2.2)), linearToSrgb(backgroundColor), hdrOutput);\n if (flatBackgroundColor.a > 0.5) {\n var unbloomedBackground = gradeColor(background.rgb / max(background.a, 0.000001) * exposure);\n unbloomedBackground *= 1.0 - toneMappingParams.y * vignetteEdge;\n if (!hdrOutput) { unbloomedBackground = applyToneMapping(unbloomedBackground); }\n let encodedUnbloomedBackground = select(pow(max(unbloomedBackground, vec3f(0.0)), vec3f(1.0 / 2.2)), linearToSrgb(unbloomedBackground), hdrOutput);\n let bloomSpill = select(vec3f(0.0), max(backgroundColor - encodedUnbloomedBackground, vec3f(0.0)), bloomIntensity > 0.0);\n backgroundColor = linearToSrgb(max(flatBackgroundColor.rgb, vec3f(0.0))) + bloomSpill;\n }\n // Foreground and catcher are disjoint primary samples, not overlapping\n // alpha layers. Shadow only the catcher background before averaging.\n let shadowAlpha = coverage * opacity;\n let bloomAlpha = clamp(dot(bloomTexel.rgb, vec3f(0.2125, 0.7154, 0.0721)), 0.0, 1.0);\n let foregroundAlpha = max(foreground.a, bloomAlpha * (1.0 - coverage));\n let backgroundAlpha = max(background.a, bloomAlpha * coverage);\n let alpha = foregroundAlpha + backgroundAlpha * (1.0 - opacity) + shadowAlpha;\n let premultiplied = foregroundColor * foregroundAlpha\n + backgroundColor * backgroundAlpha * (1.0 - opacity)\n + shadowCatcherColor * shadowAlpha;\n finalColor = vec4f(premultiplied / max(alpha, 0.000001), alpha);\n }\n}\n\noutput.color = finalColor;\n\n// output.color = load_bloomTex(uv, 0) * bloomIntensity;\n`;\n\n// Preserve the existing display composition, but give OIDN a floating-point,\n// linear-light image. Alpha is deliberately not used as a second color layer.\nexport const compositeDenoiseOutputMain = /* wgsl */ `\nlet encoded = max(finalColor.rgb, vec3f(0.0));\nlet displayLinear = select(\n pow(encoded, vec3f(2.2)),\n select(pow((encoded + 0.055) / 1.055, vec3f(2.4)), encoded / 12.92,\n encoded <= vec3f(0.04045)),\n hdrOutput\n);\noutput.denoiseColor = vec4f(displayLinear, finalColor.a);\n`;\n\nexport const compositeDenoiseDisplayMain = /* wgsl */ `\nlet denoised = load_colorTex(uv, 0);\n// Keep the original primary coverage, including transparency. OIDN only\n// filters RGB; filtering coverage separately reintroduces silhouette seams.\n// The built-in filter weights color and coverage together and may replace it.\nlet alpha = select(load_composedTex(uv, 0).a, clamp(denoised.a, 0.0, 1.0), denoisedAlpha > 0.5);\nlet linear = max(denoised.rgb, vec3f(0.0));\nlet encoded = select(pow(linear, vec3f(1.0 / 2.2)), linearToSrgb(linear), hdrOutputEnabled > 0.5);\noutput.color = vec4f(select(vec3f(0.0), encoded, alpha > 0.0), alpha);\n`;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Apply a filtered beauty correction to HDR layers; all display composition stays in composeMain. */
|
|
2
|
+
export declare const customDenoiseLayersMain = "\nlet original = load_originalTex(uv, 0).rgb;\nlet filtered = load_filteredTex(uv, 0).rgb;\nlet foreground = load_foregroundTex(uv, 0);\nlet background = load_backgroundTex(uv, 0);\n// Keep an identity filter exact, including zero channels and coverage.\nvar filteredForeground = foreground;\nvar filteredBackground = background;\nif (any(filtered != original)) {\n let usable = abs(original) > vec3f(0.000001);\n let denominator = select(vec3f(1.0), original, usable);\n let scale = select(vec3f(1.0), filtered / denominator, usable);\n let residual = select(filtered - original, vec3f(0.0), usable);\n filteredForeground = vec4f(foreground.rgb * scale + residual, foreground.a);\n // The catcher background layer stores premultiplied radiance.\n filteredBackground = vec4f(background.rgb * scale + residual * background.a, background.a);\n}\noutput.foreground = filteredForeground;\noutput.background = filteredBackground;\n";
|
|
3
|
+
/** Custom output alpha is ignored; retain the input composition's coverage. */
|
|
4
|
+
export declare const customDenoiseCoverageMain = "\nif (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }\nlet index = globalId.x + globalId.y * u32(imageSize.x);\nout_color[index] = vec4f(in_filtered[index].rgb, in_original[index].a);\n";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Apply a filtered beauty correction to HDR layers; all display composition stays in composeMain. */
|
|
2
|
+
export const customDenoiseLayersMain = /* wgsl */ `
|
|
3
|
+
let original = load_originalTex(uv, 0).rgb;
|
|
4
|
+
let filtered = load_filteredTex(uv, 0).rgb;
|
|
5
|
+
let foreground = load_foregroundTex(uv, 0);
|
|
6
|
+
let background = load_backgroundTex(uv, 0);
|
|
7
|
+
|
|
8
|
+
var me = foreground;
|
|
9
|
+
var mc = background;
|
|
10
|
+
if (any(filtered != original)) {
|
|
11
|
+
let uj = abs(original) > vec3f(0.000001);
|
|
12
|
+
let ap = select(vec3f(1.0), original, uj);
|
|
13
|
+
let scale = select(vec3f(1.0), filtered / ap, uj);
|
|
14
|
+
let tP = select(filtered - original, vec3f(0.0), uj);
|
|
15
|
+
me = vec4f(foreground.rgb * scale + tP, foreground.a);
|
|
16
|
+
|
|
17
|
+
mc = vec4f(background.rgb * scale + tP * background.a, background.a);
|
|
18
|
+
}
|
|
19
|
+
output.foreground = me;
|
|
20
|
+
output.background = mc;
|
|
21
|
+
`;
|
|
22
|
+
/** Custom output alpha is ignored; retain the input composition's coverage. */
|
|
23
|
+
export const customDenoiseCoverageMain = /* wgsl */ `
|
|
24
|
+
if (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }
|
|
25
|
+
let index = globalId.x + globalId.y * u32(imageSize.x);
|
|
26
|
+
out_color[index] = vec4f(in_filtered[index].rgb, in_original[index].a);
|
|
27
|
+
`;
|
|
28
|
+
//# sourceMappingURL=customDenoise.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customDenoise.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/customDenoise.wgsl.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;CAmBjD,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;;;;CAInD,CAAC","sourcesContent":["/** Apply a filtered beauty correction to HDR layers; all display composition stays in composeMain. */\nexport const customDenoiseLayersMain = /* wgsl */ `\nlet original = load_originalTex(uv, 0).rgb;\nlet filtered = load_filteredTex(uv, 0).rgb;\nlet foreground = load_foregroundTex(uv, 0);\nlet background = load_backgroundTex(uv, 0);\n// Keep an identity filter exact, including zero channels and coverage.\nvar filteredForeground = foreground;\nvar filteredBackground = background;\nif (any(filtered != original)) {\n let usable = abs(original) > vec3f(0.000001);\n let denominator = select(vec3f(1.0), original, usable);\n let scale = select(vec3f(1.0), filtered / denominator, usable);\n let residual = select(filtered - original, vec3f(0.0), usable);\n filteredForeground = vec4f(foreground.rgb * scale + residual, foreground.a);\n // The catcher background layer stores premultiplied radiance.\n filteredBackground = vec4f(background.rgb * scale + residual * background.a, background.a);\n}\noutput.foreground = filteredForeground;\noutput.background = filteredBackground;\n`;\n\n/** Custom output alpha is ignored; retain the input composition's coverage. */\nexport const customDenoiseCoverageMain = /* wgsl */ `\nif (globalId.x >= u32(imageSize.x) || globalId.y >= u32(imageSize.y)) { return; }\nlet index = globalId.x + globalId.y * u32(imageSize.x);\nout_color[index] = vec4f(in_filtered[index].rgb, in_original[index].a);\n`;\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Extra entry point in the ray-tracing module; reuses its scene bindings. */
|
|
2
|
+
declare const _default: "\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(7, 7)\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * 7u;\n let offset = vec2f(id.xy) / 6.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n";
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DEPTH_SAMPLE_GRID } from '../depthQuery.js';
|
|
2
|
+
/** Extra entry point in the ray-tracing module; reuses its scene bindings. */
|
|
3
|
+
export default /* wgsl */ `
|
|
4
|
+
@group(3) @binding(4) var<uniform> depthArea: vec4f;
|
|
5
|
+
|
|
6
|
+
@compute @workgroup_size(${DEPTH_SAMPLE_GRID}, ${DEPTH_SAMPLE_GRID})
|
|
7
|
+
fn depthQuery(@builtin(global_invocation_id) id: vec3u) {
|
|
8
|
+
let index = id.x + id.y * ${DEPTH_SAMPLE_GRID}u;
|
|
9
|
+
let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;
|
|
10
|
+
let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);
|
|
11
|
+
outColor[index] = vec4f(0.0);
|
|
12
|
+
if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }
|
|
13
|
+
var ray = hz(uv);
|
|
14
|
+
let eye = cameraUniform.viewInv[3].xyz;
|
|
15
|
+
let nV = -normalize(cameraUniform.viewInv[2].xyz);
|
|
16
|
+
var si: ad;
|
|
17
|
+
si.triangleIndex = -1;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
for (var layer = 0; layer < 32; layer++) {
|
|
22
|
+
cY(ray, &si, 0, false, false);
|
|
23
|
+
if (!si.hit) { return; }
|
|
24
|
+
var material: J;
|
|
25
|
+
eT(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
|
|
26
|
+
if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
|
|
27
|
+
outColor[index] = vec4f(max(dot(si.position - eye, nV), 0.0), 0.0, 0.0, 0.0);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
ray.o = si.position + ray.d * (EPS * 0.02);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
`;
|
|
34
|
+
//# sourceMappingURL=depthQuery.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthQuery.wgsl.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/depthQuery.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,8EAA8E;AAC9E,eAAe,UAAU,CAAC;;;2BAGC,iBAAiB,KAAK,iBAAiB;;4BAEpC,iBAAiB;8BACf,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBpD,CAAC","sourcesContent":["import { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\n\n/** Extra entry point in the ray-tracing module; reuses its scene bindings. */\nexport default /* wgsl */ `\n@group(3) @binding(4) var<uniform> depthArea: vec4f;\n\n@compute @workgroup_size(${DEPTH_SAMPLE_GRID}, ${DEPTH_SAMPLE_GRID})\nfn depthQuery(@builtin(global_invocation_id) id: vec3u) {\n let index = id.x + id.y * ${DEPTH_SAMPLE_GRID}u;\n let offset = vec2f(id.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n let uv = depthArea.xy + depthArea.zw * offset * vec2f(1.0, -1.0);\n outColor[index] = vec4f(0.0);\n if (any(uv < vec2f(0.0)) || any(uv > vec2f(1.0))) { return; }\n var ray = initCameraRay(uv);\n let eye = cameraUniform.viewInv[3].xyz;\n let forward = -normalize(cameraUniform.viewInv[2].xyz);\n var si: SurfaceInteraction;\n si.triangleIndex = -1;\n // Ignore invisible catchers and alpha-cutout holes, without stochastic DOF\n // or pixel jitter. A bounded continuation prevents coincident surfaces\n // from keeping the query alive indefinitely.\n for (var layer = 0; layer < 32; layer++) {\n intersectScene(ray, &si, 0, false, false);\n if (!si.hit) { return; }\n var material: OpenPbrResolvedMaterial;\n getMaterial(&material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n outColor[index] = vec4f(max(dot(si.position - eye, forward), 0.0), 0.0, 0.0, 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** Builds per-tile variance history and per-pixel final sample targets on GPU. */
|
|
2
|
+
export declare const offlineAdaptiveCompute = "\nstruct OfflineAdaptiveParams {\n width: u32,\n height: u32,\n tileSize: u32,\n columns: u32,\n rows: u32,\n maxSamples: u32,\n minSamples: u32,\n hasPrevious: u32,\n absoluteError: f32,\n relativeError: f32,\n confidence: f32,\n _padding: f32,\n}\n\n@group(0) @binding(0) var<uniform> params: OfflineAdaptiveParams;\n@group(0) @binding(1) var<storage, read> pilotColor: array<f32>;\n@group(0) @binding(2) var<storage, read> pilotMoments: array<f32>;\n@group(0) @binding(3) var<storage, read> previousVariance: array<f32>;\n@group(0) @binding(4) var<storage, read_write> tileMeans: array<f32>;\n@group(0) @binding(5) var<storage, read_write> tileVariances: array<f32>;\n@group(0) @binding(6) var<storage, read_write> tileTargets: array<u32>;\n@group(0) @binding(7) var targetTexture: texture_storage_2d<r32float, write>;\n\nconst LUMINANCE = vec3f(0.2126, 0.7152, 0.0722);\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) invocation: vec3u) {\n let tile = invocation.x;\n let tileCount = params.columns * params.rows;\n if (tile >= tileCount) {\n return;\n }\n\n let tileX = tile % params.columns;\n let tileY = tile / params.columns;\n let startX = tileX * params.tileSize;\n let startY = tileY * params.tileSize;\n let endX = min(startX + params.tileSize, params.width);\n let endY = min(startY + params.tileSize, params.height);\n var meanSum = 0.0;\n var maximumVariance = 0.0;\n var count = 0u;\n\n for (var y = startY; y < endY; y++) {\n for (var x = startX; x < endX; x++) {\n let pixel = y * params.width + x;\n let offset = pixel * 4u;\n let samples = pilotMoments[offset + 3u];\n if (samples <= 0.0) {\n continue;\n }\n let mean = dot(\n vec3f(\n pilotColor[offset],\n pilotColor[offset + 1u],\n pilotColor[offset + 2u]\n ),\n LUMINANCE\n ) / samples;\n let secondMoment = pilotMoments[offset] / samples;\n let biasedVariance = max(secondMoment - mean * mean, 0.0);\n var variance = biasedVariance;\n if (samples > 1.0) {\n variance = biasedVariance * samples / (samples - 1.0);\n }\n meanSum += mean;\n maximumVariance = max(maximumVariance, variance);\n count += 1u;\n }\n }\n\n let mean = meanSum / f32(max(count, 1u));\n var historyVariance = 0.0;\n if (params.hasPrevious != 0u) {\n historyVariance = previousVariance[tile];\n }\n let budgetVariance = max(maximumVariance, historyVariance);\n let tolerance = params.absoluteError + params.relativeError * abs(mean);\n let required = ceil(\n params.confidence * params.confidence * budgetVariance /\n max(tolerance * tolerance, 1e-16)\n );\n let targetSamples = u32(min(\n f32(params.maxSamples),\n max(f32(params.minSamples), required)\n ));\n\n tileMeans[tile] = mean;\n // Persist only the current pilot's raw variance. The preceding frame can\n // raise this frame's budget without poisoning every later frame.\n tileVariances[tile] = maximumVariance;\n tileTargets[tile] = targetSamples;\n\n for (var y = startY; y < endY; y++) {\n for (var x = startX; x < endX; x++) {\n textureStore(\n targetTexture,\n vec2i(i32(x), i32(y)),\n vec4f(f32(targetSamples), 0.0, 0.0, 0.0)\n );\n }\n }\n}\n";
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/** Builds per-tile variance history and per-pixel final sample targets on GPU. */
|
|
2
|
+
export const offlineAdaptiveCompute = /* wgsl */ `
|
|
3
|
+
struct OfflineAdaptiveParams {
|
|
4
|
+
width: u32,
|
|
5
|
+
height: u32,
|
|
6
|
+
tileSize: u32,
|
|
7
|
+
columns: u32,
|
|
8
|
+
rows: u32,
|
|
9
|
+
maxSamples: u32,
|
|
10
|
+
minSamples: u32,
|
|
11
|
+
hasPrevious: u32,
|
|
12
|
+
absoluteError: f32,
|
|
13
|
+
relativeError: f32,
|
|
14
|
+
confidence: f32,
|
|
15
|
+
_padding: f32,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@group(0) @binding(0) var<uniform> params: OfflineAdaptiveParams;
|
|
19
|
+
@group(0) @binding(1) var<storage, read> pilotColor: array<f32>;
|
|
20
|
+
@group(0) @binding(2) var<storage, read> pilotMoments: array<f32>;
|
|
21
|
+
@group(0) @binding(3) var<storage, read> previousVariance: array<f32>;
|
|
22
|
+
@group(0) @binding(4) var<storage, read_write> tileMeans: array<f32>;
|
|
23
|
+
@group(0) @binding(5) var<storage, read_write> tileVariances: array<f32>;
|
|
24
|
+
@group(0) @binding(6) var<storage, read_write> tileTargets: array<u32>;
|
|
25
|
+
@group(0) @binding(7) var targetTexture: texture_storage_2d<r32float, write>;
|
|
26
|
+
|
|
27
|
+
const LUMINANCE = vec3f(0.2126, 0.7152, 0.0722);
|
|
28
|
+
|
|
29
|
+
@compute @workgroup_size(64)
|
|
30
|
+
fn main(@builtin(global_invocation_id) uc: vec3u) {
|
|
31
|
+
let tile = uc.x;
|
|
32
|
+
let tileCount = params.columns * params.rows;
|
|
33
|
+
if (tile >= tileCount) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let tileX = tile % params.columns;
|
|
38
|
+
let tileY = tile / params.columns;
|
|
39
|
+
let uh = tileX * params.tileSize;
|
|
40
|
+
let ui = tileY * params.tileSize;
|
|
41
|
+
let vX = min(uh + params.tileSize, params.width);
|
|
42
|
+
let vY = min(ui + params.tileSize, params.height);
|
|
43
|
+
var mL = 0.0;
|
|
44
|
+
var iY = 0.0;
|
|
45
|
+
var count = 0u;
|
|
46
|
+
|
|
47
|
+
for (var y = ui; y < vY; y++) {
|
|
48
|
+
for (var x = uh; x < vX; x++) {
|
|
49
|
+
let fM = y * params.width + x;
|
|
50
|
+
let offset = fM * 4u;
|
|
51
|
+
let samples = pilotMoments[offset + 3u];
|
|
52
|
+
if (samples <= 0.0) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
let mean = dot(
|
|
56
|
+
vec3f(
|
|
57
|
+
pilotColor[offset],
|
|
58
|
+
pilotColor[offset + 1u],
|
|
59
|
+
pilotColor[offset + 2u]
|
|
60
|
+
),
|
|
61
|
+
LUMINANCE
|
|
62
|
+
) / samples;
|
|
63
|
+
let tv = pilotMoments[offset] / samples;
|
|
64
|
+
let oV = max(tv - mean * mean, 0.0);
|
|
65
|
+
var variance = oV;
|
|
66
|
+
if (samples > 1.0) {
|
|
67
|
+
variance = oV * samples / (samples - 1.0);
|
|
68
|
+
}
|
|
69
|
+
mL += mean;
|
|
70
|
+
iY = max(iY, variance);
|
|
71
|
+
count += 1u;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let mean = mL / f32(max(count, 1u));
|
|
76
|
+
var oK = 0.0;
|
|
77
|
+
if (params.hasPrevious != 0u) {
|
|
78
|
+
oK = previousVariance[tile];
|
|
79
|
+
}
|
|
80
|
+
let rV = max(iY, oK);
|
|
81
|
+
let sT = params.absoluteError + params.relativeError * abs(mean);
|
|
82
|
+
let required = ceil(
|
|
83
|
+
params.confidence * params.confidence * rV /
|
|
84
|
+
max(sT * sT, 1e-16)
|
|
85
|
+
);
|
|
86
|
+
let targetSamples = u32(min(
|
|
87
|
+
f32(params.maxSamples),
|
|
88
|
+
max(f32(params.minSamples), required)
|
|
89
|
+
));
|
|
90
|
+
|
|
91
|
+
tileMeans[tile] = mean;
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
tileVariances[tile] = iY;
|
|
95
|
+
tileTargets[tile] = targetSamples;
|
|
96
|
+
|
|
97
|
+
for (var y = ui; y < vY; y++) {
|
|
98
|
+
for (var x = uh; x < vX; x++) {
|
|
99
|
+
textureStore(
|
|
100
|
+
targetTexture,
|
|
101
|
+
vec2i(i32(x), i32(y)),
|
|
102
|
+
vec4f(f32(targetSamples), 0.0, 0.0, 0.0)
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
`;
|
|
108
|
+
//# sourceMappingURL=offlineAdaptive.compute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineAdaptive.compute.js","sourceRoot":"","sources":["../../../src/renderer/wgsl/offlineAdaptive.compute.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGhD,CAAC","sourcesContent":["/** Builds per-tile variance history and per-pixel final sample targets on GPU. */\nexport const offlineAdaptiveCompute = /* wgsl */ `\nstruct OfflineAdaptiveParams {\n width: u32,\n height: u32,\n tileSize: u32,\n columns: u32,\n rows: u32,\n maxSamples: u32,\n minSamples: u32,\n hasPrevious: u32,\n absoluteError: f32,\n relativeError: f32,\n confidence: f32,\n _padding: f32,\n}\n\n@group(0) @binding(0) var<uniform> params: OfflineAdaptiveParams;\n@group(0) @binding(1) var<storage, read> pilotColor: array<f32>;\n@group(0) @binding(2) var<storage, read> pilotMoments: array<f32>;\n@group(0) @binding(3) var<storage, read> previousVariance: array<f32>;\n@group(0) @binding(4) var<storage, read_write> tileMeans: array<f32>;\n@group(0) @binding(5) var<storage, read_write> tileVariances: array<f32>;\n@group(0) @binding(6) var<storage, read_write> tileTargets: array<u32>;\n@group(0) @binding(7) var targetTexture: texture_storage_2d<r32float, write>;\n\nconst LUMINANCE = vec3f(0.2126, 0.7152, 0.0722);\n\n@compute @workgroup_size(64)\nfn main(@builtin(global_invocation_id) invocation: vec3u) {\n let tile = invocation.x;\n let tileCount = params.columns * params.rows;\n if (tile >= tileCount) {\n return;\n }\n\n let tileX = tile % params.columns;\n let tileY = tile / params.columns;\n let startX = tileX * params.tileSize;\n let startY = tileY * params.tileSize;\n let endX = min(startX + params.tileSize, params.width);\n let endY = min(startY + params.tileSize, params.height);\n var meanSum = 0.0;\n var maximumVariance = 0.0;\n var count = 0u;\n\n for (var y = startY; y < endY; y++) {\n for (var x = startX; x < endX; x++) {\n let pixel = y * params.width + x;\n let offset = pixel * 4u;\n let samples = pilotMoments[offset + 3u];\n if (samples <= 0.0) {\n continue;\n }\n let mean = dot(\n vec3f(\n pilotColor[offset],\n pilotColor[offset + 1u],\n pilotColor[offset + 2u]\n ),\n LUMINANCE\n ) / samples;\n let secondMoment = pilotMoments[offset] / samples;\n let biasedVariance = max(secondMoment - mean * mean, 0.0);\n var variance = biasedVariance;\n if (samples > 1.0) {\n variance = biasedVariance * samples / (samples - 1.0);\n }\n meanSum += mean;\n maximumVariance = max(maximumVariance, variance);\n count += 1u;\n }\n }\n\n let mean = meanSum / f32(max(count, 1u));\n var historyVariance = 0.0;\n if (params.hasPrevious != 0u) {\n historyVariance = previousVariance[tile];\n }\n let budgetVariance = max(maximumVariance, historyVariance);\n let tolerance = params.absoluteError + params.relativeError * abs(mean);\n let required = ceil(\n params.confidence * params.confidence * budgetVariance /\n max(tolerance * tolerance, 1e-16)\n );\n let targetSamples = u32(min(\n f32(params.maxSamples),\n max(f32(params.minSamples), required)\n ));\n\n tileMeans[tile] = mean;\n // Persist only the current pilot's raw variance. The preceding frame can\n // raise this frame's budget without poisoning every later frame.\n tileVariances[tile] = maximumVariance;\n tileTargets[tile] = targetSamples;\n\n for (var y = startY; y < endY; y++) {\n for (var x = startX; x < endX; x++) {\n textureStore(\n targetTexture,\n vec2i(i32(x), i32(y)),\n vec4f(f32(targetSamples), 0.0, 0.0, 0.0)\n );\n }\n }\n}\n`;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const WORKGROUP_SIZE = 8;
|
|
2
|
+
export interface RayTraceShaderOptions {
|
|
3
|
+
hasDisplacement: boolean;
|
|
4
|
+
/** Include direction frames only when used, preserving the legacy shader arithmetic otherwise. */
|
|
5
|
+
hasAnisotropyDirections?: boolean;
|
|
6
|
+
/** Include independent coat normals only when a material uses that slot. */
|
|
7
|
+
hasCoatNormals?: boolean;
|
|
8
|
+
/** Split glTF BLEND primary hits deterministically instead of stochastically. */
|
|
9
|
+
hasAlpha?: boolean;
|
|
10
|
+
/** Any scene material uses alpha mask or blend. */
|
|
11
|
+
hasSceneAlpha?: boolean;
|
|
12
|
+
/** Bit mask of the BLAS layouts present in the scene (bvh2, bvh4, bvh-gpu, cwbvh). */
|
|
13
|
+
blasLayoutMask?: number;
|
|
14
|
+
}
|
|
15
|
+
/** Generates the WebGPU megakernel path tracing compute shader. */
|
|
16
|
+
export default function rayTraceCompute({ hasDisplacement, hasAnisotropyDirections, hasCoatNormals, hasAlpha, hasSceneAlpha, blasLayoutMask }: RayTraceShaderOptions): string;
|