@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,198 @@
|
|
|
1
|
+
export default /*wgsl*/ `
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
fn aQ(view: vec3f, alpha: vec2f, samplePoint: vec2f) -> vec3f {
|
|
7
|
+
let qY = vec3f(alpha, 1.0);
|
|
8
|
+
let ge = normalize(qY * view);
|
|
9
|
+
let tU = min(ge.z, 1.0);
|
|
10
|
+
let qD = 1.0 + tU;
|
|
11
|
+
let qT = (1.0 - samplePoint.y) * qD;
|
|
12
|
+
let rE = samplePoint.y * qD;
|
|
13
|
+
let st = qT + (1.0 - tU);
|
|
14
|
+
let fi = sqrt(max(0.0, st * rE));
|
|
15
|
+
let br = TWOPI * samplePoint.x;
|
|
16
|
+
let lt = vec3f(
|
|
17
|
+
ge.x + fi * cos(br),
|
|
18
|
+
ge.y + fi * sin(br),
|
|
19
|
+
qT
|
|
20
|
+
);
|
|
21
|
+
return normalize(qY * lt);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
fn gE(oa: vec3f, alpha: vec2f) -> f32 {
|
|
25
|
+
let hm = vec3f(
|
|
26
|
+
oa.x / alpha.x,
|
|
27
|
+
oa.y / alpha.y,
|
|
28
|
+
oa.z
|
|
29
|
+
);
|
|
30
|
+
let ap = dot(hm, hm);
|
|
31
|
+
return 1.0 / (
|
|
32
|
+
PI * alpha.x * alpha.y * ap * ap
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fn bk(direction: vec3f, alpha: vec2f) -> f32 {
|
|
37
|
+
let eE = abs(direction.z);
|
|
38
|
+
if (eE <= 1e-8) {
|
|
39
|
+
return 0.0;
|
|
40
|
+
}
|
|
41
|
+
let hZ = alpha * direction.xy;
|
|
42
|
+
let lu = dot(hZ, hZ)
|
|
43
|
+
/ (eE * eE);
|
|
44
|
+
return 2.0 / (1.0 + sqrt(1.0 + lu));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fn aE(au: f32) -> f32 {
|
|
48
|
+
let dg = clamp(1.0 - au, 0.0, 1.0);
|
|
49
|
+
return pow(dg, 5.0);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fn ct(L: f32, cJ: f32) -> f32 {
|
|
53
|
+
let iu = clamp(abs(L), 0.0, 1.0);
|
|
54
|
+
let kc = cJ * cJ
|
|
55
|
+
* max(0.0, 1.0 - iu * iu);
|
|
56
|
+
if (kc >= 1.0) {
|
|
57
|
+
return 1.0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let lH = sqrt(max(0.0, 1.0 - kc));
|
|
61
|
+
let ba = (iu - cJ * lH)
|
|
62
|
+
/ max(iu + cJ * lH, 1e-8);
|
|
63
|
+
let pr = (cJ * iu - lH)
|
|
64
|
+
/ max(cJ * iu + lH, 1e-8);
|
|
65
|
+
return 0.5 * (
|
|
66
|
+
ba * ba + pr * pr
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
fn gc(samplePoint: vec2f) -> vec2f {
|
|
71
|
+
let offset = 2.0 * samplePoint - vec2f(1.0);
|
|
72
|
+
if (offset.x == 0.0 && offset.y == 0.0) {
|
|
73
|
+
return vec2f(0.0);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
var radius: f32;
|
|
77
|
+
var angle: f32;
|
|
78
|
+
if (abs(offset.x) > abs(offset.y)) {
|
|
79
|
+
radius = offset.x;
|
|
80
|
+
angle = 0.25 * PI * (offset.y / offset.x);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
radius = offset.y;
|
|
84
|
+
angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);
|
|
85
|
+
}
|
|
86
|
+
return radius * vec2f(cos(angle), sin(angle));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
fn bi(samplePoint: vec2f) -> vec3f {
|
|
90
|
+
let kv = gc(samplePoint);
|
|
91
|
+
return vec3f(
|
|
92
|
+
kv,
|
|
93
|
+
sqrt(max(0.0, 1.0 - dot(kv, kv)))
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
fn aF(pe: f32, nA: f32) -> f32 {
|
|
98
|
+
let scale = max(pe, nA);
|
|
99
|
+
if (scale <= 0.0) {
|
|
100
|
+
return 0.0;
|
|
101
|
+
}
|
|
102
|
+
let normalized = vec2f(pe, nA) / scale;
|
|
103
|
+
let oD = normalized * normalized;
|
|
104
|
+
return oD.x / (oD.x + oD.y);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fn aK(
|
|
108
|
+
normal: vec3f,
|
|
109
|
+
tangent: ptr<function, vec3f>,
|
|
110
|
+
bitangent: ptr<function, vec3f>
|
|
111
|
+
) {
|
|
112
|
+
let ig = select(-1.0, 1.0, normal.z >= 0.0);
|
|
113
|
+
let dW = -1.0 / (ig + normal.z);
|
|
114
|
+
let xy = normal.x * normal.y * dW;
|
|
115
|
+
*tangent = vec3f(
|
|
116
|
+
1.0 + ig * normal.x * normal.x * dW,
|
|
117
|
+
ig * xy,
|
|
118
|
+
-ig * normal.x
|
|
119
|
+
);
|
|
120
|
+
*bitangent = vec3f(
|
|
121
|
+
xy,
|
|
122
|
+
ig + normal.y * normal.y * dW,
|
|
123
|
+
-normal.y
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
fn ai(rgb: vec3f, wavelength: f32) -> vec3f {
|
|
128
|
+
if (wavelength == 0.0) {
|
|
129
|
+
return rgb;
|
|
130
|
+
}
|
|
131
|
+
if (wavelength > 600.0) {
|
|
132
|
+
return vec3f(rgb.r, 0.0, 0.0);
|
|
133
|
+
}
|
|
134
|
+
if (wavelength > 500.0) {
|
|
135
|
+
return vec3f(0.0, rgb.g, 0.0);
|
|
136
|
+
}
|
|
137
|
+
return vec3f(0.0, 0.0, rgb.b);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
fn eK(
|
|
141
|
+
wavelength: f32,
|
|
142
|
+
ha: f32,
|
|
143
|
+
hk: f32,
|
|
144
|
+
qg: f32
|
|
145
|
+
) -> f32 {
|
|
146
|
+
if (wavelength == 0.0 || hk <= 0.0) {
|
|
147
|
+
return ha;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let FRAUNHOFER_C = 656.3;
|
|
151
|
+
let FRAUNHOFER_D = 587.6;
|
|
152
|
+
let FRAUNHOFER_F = 486.1;
|
|
153
|
+
let jI = 1.0 / (
|
|
154
|
+
1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
|
|
155
|
+
- 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
|
|
156
|
+
);
|
|
157
|
+
let mQ = max(qg / hk, 1e-6);
|
|
158
|
+
let qE = (ha - 1.0) * jI / mQ;
|
|
159
|
+
let sY = ha
|
|
160
|
+
- qE / (FRAUNHOFER_D * FRAUNHOFER_D);
|
|
161
|
+
return sY + qE / (wavelength * wavelength);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
fn fl(
|
|
165
|
+
gt: vec3f,
|
|
166
|
+
anisotropy: f32,
|
|
167
|
+
samplePoint: vec2f
|
|
168
|
+
) -> vec3f {
|
|
169
|
+
var au: f32;
|
|
170
|
+
if (abs(anisotropy) < 0.001) {
|
|
171
|
+
au = 1.0 - 2.0 * samplePoint.y;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
let iU = (1.0 - anisotropy * anisotropy)
|
|
175
|
+
/ (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
|
|
176
|
+
au = (
|
|
177
|
+
iU * iU - 1.0 - anisotropy * anisotropy
|
|
178
|
+
) / (2.0 * anisotropy);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
let tR = sqrt(max(0.0, 1.0 - au * au));
|
|
182
|
+
let br = TWOPI * samplePoint.x;
|
|
183
|
+
var tangent: vec3f;
|
|
184
|
+
var bitangent: vec3f;
|
|
185
|
+
aK(gt, &tangent, &bitangent);
|
|
186
|
+
return tangent * (tR * cos(br))
|
|
187
|
+
+ bitangent * (tR * sin(br))
|
|
188
|
+
+ gt * au;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
fn bD(au: f32, anisotropy: f32) -> f32 {
|
|
192
|
+
let ap = 1.0 + anisotropy * anisotropy
|
|
193
|
+
+ 2.0 * anisotropy * au;
|
|
194
|
+
return INV4PI * (1.0 - anisotropy * anisotropy)
|
|
195
|
+
/ (ap * sqrt(ap));
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
//# sourceMappingURL=sampling.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/sampling.wgsl.ts"],"names":[],"mappings":"AAAA,eAAe,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoMvB,CAAC","sourcesContent":["export default /*wgsl*/ `\n// The GGX distribution and spherical-cap VNDF sampler are adapted from\n// adobe/openpbr-bsdf, Copyright 2026 Adobe, Apache-2.0. Other routines are\n// project implementations of their stated analytic distributions.\n\nfn sampling_ggx_visible_normal(view: vec3f, alpha: vec2f, samplePoint: vec2f) -> vec3f {\n let stretch = vec3f(alpha, 1.0);\n let sphericalView = normalize(stretch * view);\n let viewZ = min(sphericalView.z, 1.0);\n let capSpan = 1.0 + viewZ;\n let normalZ = (1.0 - samplePoint.y) * capSpan;\n let oneMinusZ = samplePoint.y * capSpan;\n let onePlusZ = normalZ + (1.0 - viewZ);\n let radial = sqrt(max(0.0, onePlusZ * oneMinusZ));\n let azimuth = TWOPI * samplePoint.x;\n let sphericalNormal = vec3f(\n sphericalView.x + radial * cos(azimuth),\n sphericalView.y + radial * sin(azimuth),\n normalZ\n );\n return normalize(stretch * sphericalNormal);\n}\n\nfn sampling_ggx_ndf(halfway: vec3f, alpha: vec2f) -> f32 {\n let ellipsoidNormal = vec3f(\n halfway.x / alpha.x,\n halfway.y / alpha.y,\n halfway.z\n );\n let denominator = dot(ellipsoidNormal, ellipsoidNormal);\n return 1.0 / (\n PI * alpha.x * alpha.y * denominator * denominator\n );\n}\n\nfn sampling_ggx_smith_g1(direction: vec3f, alpha: vec2f) -> f32 {\n let normalComponent = abs(direction.z);\n if (normalComponent <= 1e-8) {\n return 0.0;\n }\n let roughDirection = alpha * direction.xy;\n let tanThetaSquared = dot(roughDirection, roughDirection)\n / (normalComponent * normalComponent);\n return 2.0 / (1.0 + sqrt(1.0 + tanThetaSquared));\n}\n\nfn sampling_schlick_fifth_power(cosine: f32) -> f32 {\n let complement = clamp(1.0 - cosine, 0.0, 1.0);\n return pow(complement, 5.0);\n}\n\nfn sampling_dielectric_fresnel(incidentCosine: f32, etaIOverEtaT: f32) -> f32 {\n let cosineI = clamp(abs(incidentCosine), 0.0, 1.0);\n let sineTSquared = etaIOverEtaT * etaIOverEtaT\n * max(0.0, 1.0 - cosineI * cosineI);\n if (sineTSquared >= 1.0) {\n return 1.0;\n }\n\n let cosineT = sqrt(max(0.0, 1.0 - sineTSquared));\n let perpendicular = (cosineI - etaIOverEtaT * cosineT)\n / max(cosineI + etaIOverEtaT * cosineT, 1e-8);\n let parallel = (etaIOverEtaT * cosineI - cosineT)\n / max(etaIOverEtaT * cosineI + cosineT, 1e-8);\n return 0.5 * (\n perpendicular * perpendicular + parallel * parallel\n );\n}\n\nfn sampling_concentric_disk(samplePoint: vec2f) -> vec2f {\n let offset = 2.0 * samplePoint - vec2f(1.0);\n if (offset.x == 0.0 && offset.y == 0.0) {\n return vec2f(0.0);\n }\n\n var radius: f32;\n var angle: f32;\n if (abs(offset.x) > abs(offset.y)) {\n radius = offset.x;\n angle = 0.25 * PI * (offset.y / offset.x);\n }\n else {\n radius = offset.y;\n angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);\n }\n return radius * vec2f(cos(angle), sin(angle));\n}\n\nfn sampling_cosine_hemisphere(samplePoint: vec2f) -> vec3f {\n let diskPoint = sampling_concentric_disk(samplePoint);\n return vec3f(\n diskPoint,\n sqrt(max(0.0, 1.0 - dot(diskPoint, diskPoint)))\n );\n}\n\nfn sampling_power_heuristic(firstPdf: f32, secondPdf: f32) -> f32 {\n let scale = max(firstPdf, secondPdf);\n if (scale <= 0.0) {\n return 0.0;\n }\n let normalized = vec2f(firstPdf, secondPdf) / scale;\n let squared = normalized * normalized;\n return squared.x / (squared.x + squared.y);\n}\n\nfn sampling_orthonormal_basis(\n normal: vec3f,\n tangent: ptr<function, vec3f>,\n bitangent: ptr<function, vec3f>\n) {\n let signZ = select(-1.0, 1.0, normal.z >= 0.0);\n let factor = -1.0 / (signZ + normal.z);\n let xy = normal.x * normal.y * factor;\n *tangent = vec3f(\n 1.0 + signZ * normal.x * normal.x * factor,\n signZ * xy,\n -signZ * normal.x\n );\n *bitangent = vec3f(\n xy,\n signZ + normal.y * normal.y * factor,\n -normal.y\n );\n}\n\nfn sampling_spectral_rgb_filter(rgb: vec3f, wavelength: f32) -> vec3f {\n if (wavelength == 0.0) {\n return rgb;\n }\n if (wavelength > 600.0) {\n return vec3f(rgb.r, 0.0, 0.0);\n }\n if (wavelength > 500.0) {\n return vec3f(0.0, rgb.g, 0.0);\n }\n return vec3f(0.0, 0.0, rgb.b);\n}\n\nfn sampling_cauchy_ior(\n wavelength: f32,\n referenceIor: f32,\n dispersionScale: f32,\n abbeNumber: f32\n) -> f32 {\n if (wavelength == 0.0 || dispersionScale <= 0.0) {\n return referenceIor;\n }\n\n let FRAUNHOFER_C = 656.3;\n let FRAUNHOFER_D = 587.6;\n let FRAUNHOFER_F = 486.1;\n let inverseDifference = 1.0 / (\n 1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)\n - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)\n );\n let effectiveAbbe = max(abbeNumber / dispersionScale, 1e-6);\n let cauchyB = (referenceIor - 1.0) * inverseDifference / effectiveAbbe;\n let cauchyA = referenceIor\n - cauchyB / (FRAUNHOFER_D * FRAUNHOFER_D);\n return cauchyA + cauchyB / (wavelength * wavelength);\n}\n\nfn sampling_henyey_greenstein(\n forwardDirection: vec3f,\n anisotropy: f32,\n samplePoint: vec2f\n) -> vec3f {\n var cosine: f32;\n if (abs(anisotropy) < 0.001) {\n cosine = 1.0 - 2.0 * samplePoint.y;\n }\n else {\n let ratio = (1.0 - anisotropy * anisotropy)\n / (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);\n cosine = (\n ratio * ratio - 1.0 - anisotropy * anisotropy\n ) / (2.0 * anisotropy);\n }\n\n let sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n let azimuth = TWOPI * samplePoint.x;\n var tangent: vec3f;\n var bitangent: vec3f;\n sampling_orthonormal_basis(forwardDirection, &tangent, &bitangent);\n return tangent * (sine * cos(azimuth))\n + bitangent * (sine * sin(azimuth))\n + forwardDirection * cosine;\n}\n\nfn sampling_henyey_greenstein_phase(cosine: f32, anisotropy: f32) -> f32 {\n let denominator = 1.0 + anisotropy * anisotropy\n + 2.0 * anisotropy * cosine;\n return INV4PI * (1.0 - anisotropy * anisotropy)\n / (denominator * sqrt(denominator));\n}\n`;\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-pixel auxiliary accumulation: the shadow-catcher mask, its premultiplied
|
|
3
|
+
* primary background contribution, and luminance moments for the built-in
|
|
4
|
+
* denoiser's variance estimate.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SHADOW_CATCHER_ACCUMULATION_BYTES = 48;
|
|
7
|
+
declare const _default: "\nstruct ShadowCatcherAccumulation {\n // Primary catcher coverage, background alpha, background hits, shadow opacity.\n mask: vec4f,\n background: vec4f,\n // Sum of the denoising guide value and of its square (x, y).\n moments: vec4f,\n}\n";
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-pixel auxiliary accumulation: the shadow-catcher mask, its premultiplied
|
|
3
|
+
* primary background contribution, and luminance moments for the built-in
|
|
4
|
+
* denoiser's variance estimate.
|
|
5
|
+
*/
|
|
6
|
+
export const SHADOW_CATCHER_ACCUMULATION_BYTES = 48;
|
|
7
|
+
export default /* wgsl */ `
|
|
8
|
+
struct ShadowCatcherAccumulation {
|
|
9
|
+
|
|
10
|
+
mask: vec4f,
|
|
11
|
+
background: vec4f,
|
|
12
|
+
|
|
13
|
+
moments: vec4f,
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
//# sourceMappingURL=shadowCatcherAccumulation.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shadowCatcherAccumulation.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAEpD,eAAe,UAAU,CAAC;;;;;;;;CAQzB,CAAC","sourcesContent":["/**\n * Per-pixel auxiliary accumulation: the shadow-catcher mask, its premultiplied\n * primary background contribution, and luminance moments for the built-in\n * denoiser's variance estimate.\n */\nexport const SHADOW_CATCHER_ACCUMULATION_BYTES = 48;\n\nexport default /* wgsl */ `\nstruct ShadowCatcherAccumulation {\n // Primary catcher coverage, background alpha, background hits, shadow opacity.\n mask: vec4f,\n background: vec4f,\n // Sum of the denoising guide value and of its square (x, y).\n moments: vec4f,\n}\n`;\n"]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { zSobolPackedPermutations, sobolD1Steps } from '../../sampling.js';
|
|
2
|
+
export default /* wgsl */ `
|
|
3
|
+
const CAMERA_PIXEL = 0u;
|
|
4
|
+
const CAMERA_LENS = 1u;
|
|
5
|
+
const CAMERA_WAVELENGTH = 2u;
|
|
6
|
+
const CAMERA_BEVEL_BASE = 3u;
|
|
7
|
+
const LIGHT_SELECT = 0u;
|
|
8
|
+
const LIGHT_POSITION = 1u;
|
|
9
|
+
const BSDF_LOBE = 2u;
|
|
10
|
+
const BSDF_DIRECTION = 3u;
|
|
11
|
+
const MEDIUM_CHANNEL = 4u;
|
|
12
|
+
const MEDIUM_DISTANCE = 5u;
|
|
13
|
+
const PHASE_DIRECTION = 6u;
|
|
14
|
+
const RUSSIAN_ROULETTE = 7u;
|
|
15
|
+
const BOUNCE_STRIDE = 64u;
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
var<private> bc: vec2u;
|
|
20
|
+
var<private> bd: u32;
|
|
21
|
+
var<private> cE: u32 = 0u;
|
|
22
|
+
var<private> em: u32 = 0u;
|
|
23
|
+
fn eg(ki: u32) -> u32 {
|
|
24
|
+
var x = ki;
|
|
25
|
+
x ^= x >> 16u; x *= 0x7feb352du;
|
|
26
|
+
x ^= x >> 15u; x *= 0x846ca68bu;
|
|
27
|
+
return x ^ (x >> 16u);
|
|
28
|
+
}
|
|
29
|
+
fn aq(a: u32, b: u32) -> u32 {
|
|
30
|
+
return eg(a ^ eg(b + 0x9e3779b9u));
|
|
31
|
+
}
|
|
32
|
+
fn iA(ki: u32, ie: u32) -> u32 {
|
|
33
|
+
var x = ki + ie;
|
|
34
|
+
x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
|
|
35
|
+
x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
|
|
36
|
+
return x;
|
|
37
|
+
}
|
|
38
|
+
fn sv(x: u32, ie: u32) -> u32 {
|
|
39
|
+
return reverseBits(iA(reverseBits(x), ie));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fn qX(ki: u32) -> u32 {
|
|
43
|
+
var r = reverseBits(ki);
|
|
44
|
+
${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
|
|
45
|
+
return r;
|
|
46
|
+
}
|
|
47
|
+
fn vC(index: u32, ie: u32) -> vec2f {
|
|
48
|
+
let i = sv(index, aq(ie, 0u));
|
|
49
|
+
let x = reverseBits(iA(i, aq(ie, 1u)));
|
|
50
|
+
let y = sv(qX(i), aq(ie, 2u));
|
|
51
|
+
return vec2f(f32(x >> 8u), f32(y >> 8u)) * (1.0 / 16777216.0);
|
|
52
|
+
}
|
|
53
|
+
fn tj(p: vec2u) -> u32 {
|
|
54
|
+
var v = p & vec2u(255u);
|
|
55
|
+
v = (v | (v << vec2u(4u))) & vec2u(0x0f0fu);
|
|
56
|
+
v = (v | (v << vec2u(2u))) & vec2u(0x3333u);
|
|
57
|
+
v = (v | (v << vec2u(1u))) & vec2u(0x5555u);
|
|
58
|
+
return v.x | (v.y << 1u);
|
|
59
|
+
}
|
|
60
|
+
${zSobolPackedPermutations.map((v, i) => `const Z_PERM_${i} = ${v}u;`).join("\n")}
|
|
61
|
+
fn kk(tm: u32) -> u32 {
|
|
62
|
+
let group = tm >> 2u;
|
|
63
|
+
var word = Z_PERM_5;
|
|
64
|
+
${[0, 1, 2, 3, 4].map(i => `word = select(word, Z_PERM_${i}, group == ${i}u);`).join("\n ")}
|
|
65
|
+
return (word >> ((tm & 3u) * 8u)) & 255u;
|
|
66
|
+
}
|
|
67
|
+
fn pK(kB: u32, dim: u32, logSPP: u32) -> u32 {
|
|
68
|
+
let odd = logSPP & 1u;
|
|
69
|
+
let tZ = 8u + ((logSPP + 1u) >> 1u);
|
|
70
|
+
var result = 0u;
|
|
71
|
+
for (var digit = i32(tZ) - 1; digit >= i32(odd); digit--) {
|
|
72
|
+
let shift = 2u*u32(digit) - odd;
|
|
73
|
+
|
|
74
|
+
var sd = 0u;
|
|
75
|
+
if (shift < 30u) { sd = kB >> (shift + 2u); }
|
|
76
|
+
let tm = (eg(sd ^ (0x55555555u * dim)) >> 24u) % 24u;
|
|
77
|
+
let d = (kB >> shift) & 3u;
|
|
78
|
+
result |= ((kk(tm) >> (2u*d)) & 3u) << shift;
|
|
79
|
+
}
|
|
80
|
+
if (odd != 0u) {
|
|
81
|
+
result |= (kB & 1u) ^ (eg((kB >> 1u) ^ (0x55555555u * dim)) & 1u);
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
fn cv(slot: u32) -> u32 {
|
|
89
|
+
return CAMERA_BEVEL_BASE + u32(BEVEL_SAMPLES) + cE * BOUNCE_STRIDE + slot;
|
|
90
|
+
}
|
|
91
|
+
fn qR(candidate: u32, slot: u32) -> u32 {
|
|
92
|
+
if (candidate == 0u) {
|
|
93
|
+
if (slot == 2u) { return cv(8u); }
|
|
94
|
+
return cv(slot);
|
|
95
|
+
}
|
|
96
|
+
return cv(9u + (candidate - 1u) * 3u + slot);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
var<private> hh: vec4u;
|
|
101
|
+
var<private> hi: u32;
|
|
102
|
+
var<private> fv: bool = false;
|
|
103
|
+
var<private> df: bool = false;
|
|
104
|
+
var<private> dE: u32;
|
|
105
|
+
var<private> gp: u32;
|
|
106
|
+
var<private> eN: vec2f;
|
|
107
|
+
fn dw(dim: u32) {
|
|
108
|
+
|
|
109
|
+
let jU = bc.x + bc.y * u32(rtUniform.outputSize.x);
|
|
110
|
+
let key = vec4u(dim, bd, jU, rtUniform.sequenceSeed);
|
|
111
|
+
if (fv && all(hh == key) && hi == rtUniform.zSobolLogSPP) { return; }
|
|
112
|
+
hh = key; hi = rtUniform.zSobolLogSPP;
|
|
113
|
+
fv = true; df = false;
|
|
114
|
+
var ie = aq(aq(jU, dim), rtUniform.sequenceSeed);
|
|
115
|
+
var index = bd;
|
|
116
|
+
if (SAMPLING_PATTERN == 1) {
|
|
117
|
+
var logSPP = rtUniform.zSobolLogSPP;
|
|
118
|
+
if (index == 0u) { logSPP = 0u; }
|
|
119
|
+
else { index -= 1u; }
|
|
120
|
+
|
|
121
|
+
var iV = index >> logSPP;
|
|
122
|
+
let mask = (1u << logSPP) - 1u;
|
|
123
|
+
let kB = (tj(bc) << logSPP) | (index & mask);
|
|
124
|
+
index = pK(kB, dim, logSPP);
|
|
125
|
+
let tile = bc >> vec2u(8u);
|
|
126
|
+
ie = aq(aq(dim, rtUniform.sequenceSeed), aq(tile.x, tile.y));
|
|
127
|
+
|
|
128
|
+
if (bd != 0u) { iV += 1u; }
|
|
129
|
+
ie = aq(ie, iV);
|
|
130
|
+
}
|
|
131
|
+
dE = sv(index, aq(ie, 0u));
|
|
132
|
+
gp = ie;
|
|
133
|
+
let x = reverseBits(iA(dE, aq(ie, 1u)));
|
|
134
|
+
eN.x = f32(x >> 8u) * (1.0 / 16777216.0);
|
|
135
|
+
}
|
|
136
|
+
fn kG(dim: u32) -> vec2f {
|
|
137
|
+
dw(dim);
|
|
138
|
+
if (!df) {
|
|
139
|
+
let y = sv(qX(dE), aq(gp, 2u));
|
|
140
|
+
eN.y = f32(y >> 8u) * (1.0 / 16777216.0);
|
|
141
|
+
df = true;
|
|
142
|
+
}
|
|
143
|
+
return EPS + (1.0 - 2.0*EPS) * eN;
|
|
144
|
+
}
|
|
145
|
+
fn dz(dim: u32) -> f32 {
|
|
146
|
+
if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
147
|
+
dw(dim);
|
|
148
|
+
return EPS + (1.0 - 2.0*EPS) * eN.x;
|
|
149
|
+
}
|
|
150
|
+
fn fk(dim: u32) -> vec2f {
|
|
151
|
+
if (SAMPLING_PATTERN == 2) {
|
|
152
|
+
let x = dz(dim); let y = dz(dim);
|
|
153
|
+
return vec2f(x,y);
|
|
154
|
+
}
|
|
155
|
+
return kG(dim);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
fn eo(slot: u32) -> f32 {
|
|
159
|
+
let dim = aq(aq(cE, slot), em) | 0x80000000u;
|
|
160
|
+
em += 1u;
|
|
161
|
+
if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
162
|
+
|
|
163
|
+
let jU = bc.x + bc.y * u32(rtUniform.outputSize.x);
|
|
164
|
+
let ie = aq(aq(jU, dim), rtUniform.sequenceSeed);
|
|
165
|
+
let i = sv(bd, aq(ie, 0u));
|
|
166
|
+
let x = reverseBits(iA(i, aq(ie, 1u)));
|
|
167
|
+
return EPS + (1.0 - 2.0*EPS) * (f32(x >> 8u) * (1.0 / 16777216.0));
|
|
168
|
+
}
|
|
169
|
+
`;
|
|
170
|
+
//# sourceMappingURL=sobol.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sobol.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/sobol.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,eAAe,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CtB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;EAgBtG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAI5E,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGzF,CAAC","sourcesContent":["import { zSobolPackedPermutations, sobolD1Steps } from '../../sampling.js';\nexport default /* wgsl */ `\nconst CAMERA_PIXEL = 0u;\nconst CAMERA_LENS = 1u;\nconst CAMERA_WAVELENGTH = 2u;\nconst CAMERA_BEVEL_BASE = 3u;\nconst LIGHT_SELECT = 0u;\nconst LIGHT_POSITION = 1u;\nconst BSDF_LOBE = 2u;\nconst BSDF_DIRECTION = 3u;\nconst MEDIUM_CHANNEL = 4u;\nconst MEDIUM_DISTANCE = 5u;\nconst PHASE_DIRECTION = 6u;\nconst RUSSIAN_ROULETTE = 7u;\nconst BOUNCE_STRIDE = 64u;\n\n// Burley 2020, Practical Hash-based Owen Scrambling, JCGT 9(4).\n// ZSobol digit walk adapted from pbrt-v4 samplers.h (Apache-2.0).\nvar<private> samplingPixel: vec2u;\nvar<private> pixelSampleIndex: u32;\nvar<private> samplingBounce: u32 = 0u;\nvar<private> hashedCounter: u32 = 0u;\nfn sampleHash(valueIn: u32) -> u32 {\n var x = valueIn;\n x ^= x >> 16u; x *= 0x7feb352du;\n x ^= x >> 15u; x *= 0x846ca68bu;\n return x ^ (x >> 16u);\n}\nfn sampleSeed(a: u32, b: u32) -> u32 {\n return sampleHash(a ^ sampleHash(b + 0x9e3779b9u));\n}\nfn lkPermute(valueIn: u32, seed: u32) -> u32 {\n var x = valueIn + seed;\n x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;\n x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;\n return x;\n}\nfn owen(x: u32, seed: u32) -> u32 {\n return reverseBits(lkPermute(reverseBits(x), seed));\n}\n// Parallel XOR butterfly equals v ^= v >> 1 for all 32 direction bits.\nfn sobolD1(valueIn: u32) -> u32 {\n var r = reverseBits(valueIn);\n ${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join(\"\\n \")}\n return r;\n}\nfn sobol2D(index: u32, seed: u32) -> vec2f {\n let i = owen(index, sampleSeed(seed, 0u));\n let x = reverseBits(lkPermute(i, sampleSeed(seed, 1u)));\n let y = owen(sobolD1(i), sampleSeed(seed, 2u));\n return vec2f(f32(x >> 8u), f32(y >> 8u)) * (1.0 / 16777216.0);\n}\nfn morton2(p: vec2u) -> u32 {\n var v = p & vec2u(255u);\n v = (v | (v << vec2u(4u))) & vec2u(0x0f0fu);\n v = (v | (v << vec2u(2u))) & vec2u(0x3333u);\n v = (v | (v << vec2u(1u))) & vec2u(0x5555u);\n return v.x | (v.y << 1u);\n}\n${zSobolPackedPermutations.map((v,i) => `const Z_PERM_${i} = ${v}u;`).join(\"\\n\")}\nfn zSobolPermutation(perm: u32) -> u32 {\n let group = perm >> 2u;\n var word = Z_PERM_5;\n ${[0,1,2,3,4].map(i => `word = select(word, Z_PERM_${i}, group == ${i}u);`).join(\"\\n \")}\n return (word >> ((perm & 3u) * 8u)) & 255u;\n}\nfn zSobolIndex(morton: u32, dim: u32, logSPP: u32) -> u32 {\n let odd = logSPP & 1u;\n let digits = 8u + ((logSPP + 1u) >> 1u);\n var result = 0u;\n for (var digit = i32(digits) - 1; digit >= i32(odd); digit--) {\n let shift = 2u*u32(digit) - odd;\n // A shift by 32 is undefined on GLSL and masks to zero on some GPUs.\n var higher = 0u;\n if (shift < 30u) { higher = morton >> (shift + 2u); }\n let perm = (sampleHash(higher ^ (0x55555555u * dim)) >> 24u) % 24u;\n let d = (morton >> shift) & 3u;\n result |= ((zSobolPermutation(perm) >> (2u*d)) & 3u) << shift;\n }\n if (odd != 0u) {\n result |= (morton & 1u) ^ (sampleHash((morton >> 1u) ^ (0x55555555u * dim)) & 1u);\n }\n return result;\n}\n// IDs count 2D domains, not scalar components. Bevel IDs follow camera IDs.\n// Bounce: light selector/position, lobe/direction, medium channel/distance,\n// phase direction, RR. Further candidate IDs are addressed, never consumed.\nfn bounceDim(slot: u32) -> u32 {\n return CAMERA_BEVEL_BASE + u32(BEVEL_SAMPLES) + samplingBounce * BOUNCE_STRIDE + slot;\n}\nfn lightDim(candidate: u32, slot: u32) -> u32 {\n if (candidate == 0u) {\n if (slot == 2u) { return bounceDim(8u); }\n return bounceDim(slot);\n }\n return bounceDim(9u + (candidate - 1u) * 3u + slot);\n}\n// Last-domain cache shares the index shuffle and x between scalar/pair reads.\n// Its keys also cover test shaders that change pixel/index within an invocation.\nvar<private> cachedSampleKey: vec4u;\nvar<private> cachedSampleLog: u32;\nvar<private> cachedSampleValid: bool = false;\nvar<private> cachedSampleYValid: bool = false;\nvar<private> cachedSampleIndex: u32;\nvar<private> cachedSampleSeed: u32;\nvar<private> cachedSample: vec2f;\nfn prepareStructuredSample(dim: u32) {\n\n let pixelID = samplingPixel.x + samplingPixel.y * u32(rtUniform.outputSize.x);\n let key = vec4u(dim, pixelSampleIndex, pixelID, rtUniform.sequenceSeed);\n if (cachedSampleValid && all(cachedSampleKey == key) && cachedSampleLog == rtUniform.zSobolLogSPP) { return; }\n cachedSampleKey = key; cachedSampleLog = rtUniform.zSobolLogSPP;\n cachedSampleValid = true; cachedSampleYValid = false;\n var seed = sampleSeed(sampleSeed(pixelID, dim), rtUniform.sequenceSeed);\n var index = pixelSampleIndex;\n if (SAMPLING_PATTERN == 1) {\n var logSPP = rtUniform.zSobolLogSPP;\n if (index == 0u) { logSPP = 0u; }\n else { index -= 1u; }\n // Independent sample blocks after the cap avoid repeated samples indefinitely.\n var sequenceBlock = index >> logSPP;\n let mask = (1u << logSPP) - 1u;\n let morton = (morton2(samplingPixel) << logSPP) | (index & mask);\n index = zSobolIndex(morton, dim, logSPP);\n let tile = samplingPixel >> vec2u(8u);\n seed = sampleSeed(sampleSeed(dim, rtUniform.sequenceSeed), sampleSeed(tile.x, tile.y));\n // First and remaining streams must differ even at a two-sample budget.\n if (pixelSampleIndex != 0u) { sequenceBlock += 1u; }\n seed = sampleSeed(seed, sequenceBlock);\n }\n cachedSampleIndex = owen(index, sampleSeed(seed, 0u));\n cachedSampleSeed = seed;\n let x = reverseBits(lkPermute(cachedSampleIndex, sampleSeed(seed, 1u)));\n cachedSample.x = f32(x >> 8u) * (1.0 / 16777216.0);\n}\nfn structuredSample(dim: u32) -> vec2f {\n prepareStructuredSample(dim);\n if (!cachedSampleYValid) {\n let y = owen(sobolD1(cachedSampleIndex), sampleSeed(cachedSampleSeed, 2u));\n cachedSample.y = f32(y >> 8u) * (1.0 / 16777216.0);\n cachedSampleYValid = true;\n }\n return EPS + (1.0 - 2.0*EPS) * cachedSample;\n}\nfn sample1D(dim: u32) -> f32 {\n if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }\n prepareStructuredSample(dim);\n return EPS + (1.0 - 2.0*EPS) * cachedSample.x;\n}\nfn sample2D(dim: u32) -> vec2f {\n if (SAMPLING_PATTERN == 2) {\n let x = sample1D(dim); let y = sample1D(dim);\n return vec2f(x,y);\n }\n return structuredSample(dim);\n}\n// Variable traversal counts cannot move any of the structured dimensions.\nfn hashedSample(slot: u32) -> f32 {\n let dim = sampleSeed(sampleSeed(samplingBounce, slot), hashedCounter) | 0x80000000u;\n hashedCounter += 1u;\n if (SAMPLING_PATTERN == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }\n // Variable-count traversal has no spatial ZSobol ordering to preserve.\n let pixelID = samplingPixel.x + samplingPixel.y * u32(rtUniform.outputSize.x);\n let seed = sampleSeed(sampleSeed(pixelID, dim), rtUniform.sequenceSeed);\n let i = owen(pixelSampleIndex, sampleSeed(seed, 0u));\n let x = reverseBits(lkPermute(i, sampleSeed(seed, 1u)));\n return EPS + (1.0 - 2.0*EPS) * (f32(x >> 8u) * (1.0 / 16777216.0));\n}\n`;\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { uvProjectionConstants } from '../../MaterialTable.js';
|
|
2
|
+
export default /* wgsl */ `
|
|
3
|
+
|
|
4
|
+
fn sphericalProjection(pos: vec3f) -> vec2f {
|
|
5
|
+
let n = normalize(pos);
|
|
6
|
+
let theta = atan2(n.x, n.z) / (2.0 * PI) + 0.5;
|
|
7
|
+
let phi = acos(n.y) / PI;
|
|
8
|
+
return vec2f(theta, 1.0 - phi);
|
|
9
|
+
}
|
|
10
|
+
fn iL(pos: vec3f, normal: vec3f) -> vec2f {
|
|
11
|
+
let dm = abs(normal);
|
|
12
|
+
var uv = vec2f(0.0);
|
|
13
|
+
if (dm.x > dm.y && dm.x > dm.z) {
|
|
14
|
+
uv = pos.yz;
|
|
15
|
+
} else if (dm.y > dm.x && dm.y > dm.z) {
|
|
16
|
+
uv = pos.xz;
|
|
17
|
+
} else {
|
|
18
|
+
uv = pos.xy;
|
|
19
|
+
}
|
|
20
|
+
return uv;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
fn hA(pos: vec3f, normal: vec3f) -> vec2f {
|
|
27
|
+
let theta = atan2(pos.z, pos.x) / (2.0 * PI) + 0.5;
|
|
28
|
+
return vec2f(theta, pos.y);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
fn gz(fh: i32, pos: vec3f, normal: vec3f) -> vec2f {
|
|
32
|
+
if (fh == ${uvProjectionConstants.triplanar}) {
|
|
33
|
+
return iL(pos, normal);
|
|
34
|
+
} else if (fh == ${uvProjectionConstants.spherical}) {
|
|
35
|
+
return sphericalProjection(pos);
|
|
36
|
+
} else if (fh == ${uvProjectionConstants.cylindrical}) {
|
|
37
|
+
return hA(pos, normal);
|
|
38
|
+
}
|
|
39
|
+
return vec2f(0.0);
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
//# sourceMappingURL=uvProjection.wgsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uvProjection.wgsl.js","sourceRoot":"","sources":["../../../../src/renderer/wgsl/chunks/uvProjection.wgsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAe,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA8BA,qBAAqB,CAAC,SAAS;;mBAExB,qBAAqB,CAAC,SAAS;;mBAE/B,qBAAqB,CAAC,WAAW;;;;;CAKjE,CAAC","sourcesContent":["import { uvProjectionConstants } from '../../MaterialTable.js';\n\nexport default /* wgsl */ `\n\nfn sphericalProjection(pos: vec3f) -> vec2f {\n let n = normalize(pos);\n let theta = atan2(n.x, n.z) / (2.0 * PI) + 0.5;\n let phi = acos(n.y) / PI;\n return vec2f(theta, 1.0 - phi);\n}\nfn triplanarProjection(pos: vec3f, normal: vec3f) -> vec2f {\n let absNormal = abs(normal);\n var uv = vec2f(0.0);\n if (absNormal.x > absNormal.y && absNormal.x > absNormal.z) {\n uv = pos.yz;\n } else if (absNormal.y > absNormal.x && absNormal.y > absNormal.z) {\n uv = pos.xz;\n } else {\n uv = pos.xy;\n }\n return uv;\n}\n\n\n\n\nfn cylindricalProjection(pos: vec3f, normal: vec3f) -> vec2f {\n let theta = atan2(pos.z, pos.x) / (2.0 * PI) + 0.5;\n return vec2f(theta, pos.y);\n}\n\nfn projectUV(projectionType: i32, pos: vec3f, normal: vec3f) -> vec2f {\n if (projectionType == ${uvProjectionConstants.triplanar}) {\n return triplanarProjection(pos, normal);\n } else if (projectionType == ${uvProjectionConstants.spherical}) {\n return sphericalProjection(pos);\n } else if (projectionType == ${uvProjectionConstants.cylindrical}) {\n return cylindricalProjection(pos, normal);\n }\n return vec2f(0.0);\n}\n`;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const linearToSrgbDefine = "\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";
|
|
2
|
+
export declare const composeDefine = "\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\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\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";
|
|
3
|
+
export declare const composeMain = "\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";
|
|
4
|
+
export declare const compositeDenoiseOutputMain = "\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";
|
|
5
|
+
export declare const compositeDenoiseDisplayMain = "\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";
|