@meimu/mutracer 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +195 -2
- package/THIRD_PARTY_NOTICES.md +160 -0
- package/dist/assets/bvh.worker.js +1 -0
- package/dist/mutracer.umd.js +14352 -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 +144 -0
- package/docs/sampling.md +40 -0
- package/docs/threejs.md +273 -0
- package/docs/todo.md +61 -0
- package/docs/updates.md +208 -0
- package/lib/Display.d.ts +72 -0
- package/lib/Display.js +121 -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 +256 -0
- package/lib/Render.js +671 -0
- package/lib/Render.js.map +1 -0
- package/lib/RenderLoop.d.ts +76 -0
- package/lib/RenderLoop.js +204 -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 +1446 -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 +121 -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 +619 -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 +923 -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 +100 -0
- package/lib/util/fromTHREE.js +1063 -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,194 @@
|
|
|
1
|
+
import { glsl } from '../../shader.js';
|
|
2
|
+
export default glsl `
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
vec3 aQ(vec3 view, vec2 alpha, vec2 samplePoint) {
|
|
8
|
+
vec3 qY = vec3(alpha, 1.0);
|
|
9
|
+
vec3 ge = normalize(qY * view);
|
|
10
|
+
float tU = min(ge.z, 1.0);
|
|
11
|
+
float qD = 1.0 + tU;
|
|
12
|
+
float qT = (1.0 - samplePoint.y) * qD;
|
|
13
|
+
float rE = samplePoint.y * qD;
|
|
14
|
+
float st = qT + (1.0 - tU);
|
|
15
|
+
float fi = sqrt(max(0.0, st * rE));
|
|
16
|
+
float br = TWOPI * samplePoint.x;
|
|
17
|
+
vec3 lt = vec3(
|
|
18
|
+
ge.x + fi * cos(br),
|
|
19
|
+
ge.y + fi * sin(br),
|
|
20
|
+
qT
|
|
21
|
+
);
|
|
22
|
+
return normalize(qY * lt);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
float gE(vec3 oa, vec2 alpha) {
|
|
26
|
+
vec3 hm = vec3(
|
|
27
|
+
oa.x / alpha.x,
|
|
28
|
+
oa.y / alpha.y,
|
|
29
|
+
oa.z
|
|
30
|
+
);
|
|
31
|
+
float ap = dot(hm, hm);
|
|
32
|
+
return 1.0 / (
|
|
33
|
+
PI * alpha.x * alpha.y * ap * ap
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
float bk(vec3 direction, vec2 alpha) {
|
|
38
|
+
float eE = abs(direction.z);
|
|
39
|
+
if (eE <= 1e-8) {
|
|
40
|
+
return 0.0;
|
|
41
|
+
}
|
|
42
|
+
vec2 hZ = alpha * direction.xy;
|
|
43
|
+
float lu = dot(hZ, hZ)
|
|
44
|
+
/ (eE * eE);
|
|
45
|
+
return 2.0 / (1.0 + sqrt(1.0 + lu));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
float aE(float au) {
|
|
49
|
+
float dg = clamp(1.0 - au, 0.0, 1.0);
|
|
50
|
+
return pow(dg, 5.0);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
float ct(float L, float cJ) {
|
|
54
|
+
float iu = clamp(abs(L), 0.0, 1.0);
|
|
55
|
+
float kc = cJ * cJ
|
|
56
|
+
* max(0.0, 1.0 - iu * iu);
|
|
57
|
+
if (kc >= 1.0) {
|
|
58
|
+
return 1.0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
float lH = sqrt(max(0.0, 1.0 - kc));
|
|
62
|
+
float ba = (iu - cJ * lH)
|
|
63
|
+
/ max(iu + cJ * lH, 1e-8);
|
|
64
|
+
float pr = (cJ * iu - lH)
|
|
65
|
+
/ max(cJ * iu + lH, 1e-8);
|
|
66
|
+
return 0.5 * (
|
|
67
|
+
ba * ba + pr * pr
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
vec2 gc(vec2 samplePoint) {
|
|
72
|
+
vec2 offset = 2.0 * samplePoint - vec2(1.0);
|
|
73
|
+
if (offset.x == 0.0 && offset.y == 0.0) {
|
|
74
|
+
return vec2(0.0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
float radius;
|
|
78
|
+
float angle;
|
|
79
|
+
if (abs(offset.x) > abs(offset.y)) {
|
|
80
|
+
radius = offset.x;
|
|
81
|
+
angle = 0.25 * PI * (offset.y / offset.x);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
radius = offset.y;
|
|
85
|
+
angle = 0.5 * PI - 0.25 * PI * (offset.x / offset.y);
|
|
86
|
+
}
|
|
87
|
+
return radius * vec2(cos(angle), sin(angle));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
vec3 bi(vec2 samplePoint) {
|
|
91
|
+
vec2 kv = gc(samplePoint);
|
|
92
|
+
return vec3(
|
|
93
|
+
kv,
|
|
94
|
+
sqrt(max(0.0, 1.0 - dot(kv, kv)))
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
float aF(float pe, float nA) {
|
|
99
|
+
float scale = max(pe, nA);
|
|
100
|
+
if (scale <= 0.0) {
|
|
101
|
+
return 0.0;
|
|
102
|
+
}
|
|
103
|
+
vec2 normalized = vec2(pe, nA) / scale;
|
|
104
|
+
vec2 oD = normalized * normalized;
|
|
105
|
+
return oD.x / (oD.x + oD.y);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
void aK(in vec3 normal, out vec3 tangent, out vec3 bitangent) {
|
|
109
|
+
float ig = normal.z >= 0.0 ? 1.0 : -1.0;
|
|
110
|
+
float dW = -1.0 / (ig + normal.z);
|
|
111
|
+
float xy = normal.x * normal.y * dW;
|
|
112
|
+
tangent = vec3(
|
|
113
|
+
1.0 + ig * normal.x * normal.x * dW,
|
|
114
|
+
ig * xy,
|
|
115
|
+
-ig * normal.x
|
|
116
|
+
);
|
|
117
|
+
bitangent = vec3(
|
|
118
|
+
xy,
|
|
119
|
+
ig + normal.y * normal.y * dW,
|
|
120
|
+
-normal.y
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
vec3 ai(vec3 rgb, float wavelength) {
|
|
125
|
+
if (wavelength == 0.0) {
|
|
126
|
+
return rgb;
|
|
127
|
+
}
|
|
128
|
+
vec3 tB = wavelength > 600.0
|
|
129
|
+
? vec3(1.0, 0.0, 0.0)
|
|
130
|
+
: wavelength > 500.0
|
|
131
|
+
? vec3(0.0, 1.0, 0.0)
|
|
132
|
+
: vec3(0.0, 0.0, 1.0);
|
|
133
|
+
return rgb * tB;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
float eK(
|
|
137
|
+
float wavelength,
|
|
138
|
+
float ha,
|
|
139
|
+
float hk,
|
|
140
|
+
float qg
|
|
141
|
+
) {
|
|
142
|
+
if (wavelength == 0.0 || hk <= 0.0) {
|
|
143
|
+
return ha;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const float FRAUNHOFER_C = 656.3;
|
|
147
|
+
const float FRAUNHOFER_D = 587.6;
|
|
148
|
+
const float FRAUNHOFER_F = 486.1;
|
|
149
|
+
float jI = 1.0 / (
|
|
150
|
+
1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)
|
|
151
|
+
- 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)
|
|
152
|
+
);
|
|
153
|
+
float mQ = max(qg / hk, 1e-6);
|
|
154
|
+
float qE = (ha - 1.0) * jI / mQ;
|
|
155
|
+
float sY = ha
|
|
156
|
+
- qE / (FRAUNHOFER_D * FRAUNHOFER_D);
|
|
157
|
+
return sY + qE / (wavelength * wavelength);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
vec3 fl(
|
|
161
|
+
vec3 gt,
|
|
162
|
+
float anisotropy,
|
|
163
|
+
vec2 samplePoint
|
|
164
|
+
) {
|
|
165
|
+
float au;
|
|
166
|
+
if (abs(anisotropy) < 0.001) {
|
|
167
|
+
au = 1.0 - 2.0 * samplePoint.y;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
float iU = (1.0 - anisotropy * anisotropy)
|
|
171
|
+
/ (1.0 + anisotropy - 2.0 * anisotropy * samplePoint.y);
|
|
172
|
+
au = (
|
|
173
|
+
iU * iU - 1.0 - anisotropy * anisotropy
|
|
174
|
+
) / (2.0 * anisotropy);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
float tR = sqrt(max(0.0, 1.0 - au * au));
|
|
178
|
+
float br = TWOPI * samplePoint.x;
|
|
179
|
+
vec3 tangent;
|
|
180
|
+
vec3 bitangent;
|
|
181
|
+
aK(gt, tangent, bitangent);
|
|
182
|
+
return tangent * (tR * cos(br))
|
|
183
|
+
+ bitangent * (tR * sin(br))
|
|
184
|
+
+ gt * au;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
float bD(float au, float anisotropy) {
|
|
188
|
+
float ap = 1.0 + anisotropy * anisotropy
|
|
189
|
+
+ 2.0 * anisotropy * au;
|
|
190
|
+
return INV4PI * (1.0 - anisotropy * anisotropy)
|
|
191
|
+
/ (ap * sqrt(ap));
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
//# sourceMappingURL=sampling.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sampling.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+LlB,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\n\nexport default glsl`\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\nvec3 sampling_ggx_visible_normal(vec3 view, vec2 alpha, vec2 samplePoint) {\n vec3 stretch = vec3(alpha, 1.0);\n vec3 sphericalView = normalize(stretch * view);\n float viewZ = min(sphericalView.z, 1.0);\n float capSpan = 1.0 + viewZ;\n float normalZ = (1.0 - samplePoint.y) * capSpan;\n float oneMinusZ = samplePoint.y * capSpan;\n float onePlusZ = normalZ + (1.0 - viewZ);\n float radial = sqrt(max(0.0, onePlusZ * oneMinusZ));\n float azimuth = TWOPI * samplePoint.x;\n vec3 sphericalNormal = vec3(\n sphericalView.x + radial * cos(azimuth),\n sphericalView.y + radial * sin(azimuth),\n normalZ\n );\n return normalize(stretch * sphericalNormal);\n}\n\nfloat sampling_ggx_ndf(vec3 halfway, vec2 alpha) {\n vec3 ellipsoidNormal = vec3(\n halfway.x / alpha.x,\n halfway.y / alpha.y,\n halfway.z\n );\n float denominator = dot(ellipsoidNormal, ellipsoidNormal);\n return 1.0 / (\n PI * alpha.x * alpha.y * denominator * denominator\n );\n}\n\nfloat sampling_ggx_smith_g1(vec3 direction, vec2 alpha) {\n float normalComponent = abs(direction.z);\n if (normalComponent <= 1e-8) {\n return 0.0;\n }\n vec2 roughDirection = alpha * direction.xy;\n float tanThetaSquared = dot(roughDirection, roughDirection)\n / (normalComponent * normalComponent);\n return 2.0 / (1.0 + sqrt(1.0 + tanThetaSquared));\n}\n\nfloat sampling_schlick_fifth_power(float cosine) {\n float complement = clamp(1.0 - cosine, 0.0, 1.0);\n return pow(complement, 5.0);\n}\n\nfloat sampling_dielectric_fresnel(float incidentCosine, float etaIOverEtaT) {\n float cosineI = clamp(abs(incidentCosine), 0.0, 1.0);\n float sineTSquared = etaIOverEtaT * etaIOverEtaT\n * max(0.0, 1.0 - cosineI * cosineI);\n if (sineTSquared >= 1.0) {\n return 1.0;\n }\n\n float cosineT = sqrt(max(0.0, 1.0 - sineTSquared));\n float perpendicular = (cosineI - etaIOverEtaT * cosineT)\n / max(cosineI + etaIOverEtaT * cosineT, 1e-8);\n float parallel = (etaIOverEtaT * cosineI - cosineT)\n / max(etaIOverEtaT * cosineI + cosineT, 1e-8);\n return 0.5 * (\n perpendicular * perpendicular + parallel * parallel\n );\n}\n\nvec2 sampling_concentric_disk(vec2 samplePoint) {\n vec2 offset = 2.0 * samplePoint - vec2(1.0);\n if (offset.x == 0.0 && offset.y == 0.0) {\n return vec2(0.0);\n }\n\n float radius;\n float angle;\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 * vec2(cos(angle), sin(angle));\n}\n\nvec3 sampling_cosine_hemisphere(vec2 samplePoint) {\n vec2 diskPoint = sampling_concentric_disk(samplePoint);\n return vec3(\n diskPoint,\n sqrt(max(0.0, 1.0 - dot(diskPoint, diskPoint)))\n );\n}\n\nfloat sampling_power_heuristic(float firstPdf, float secondPdf) {\n float scale = max(firstPdf, secondPdf);\n if (scale <= 0.0) {\n return 0.0;\n }\n vec2 normalized = vec2(firstPdf, secondPdf) / scale;\n vec2 squared = normalized * normalized;\n return squared.x / (squared.x + squared.y);\n}\n\nvoid sampling_orthonormal_basis(in vec3 normal, out vec3 tangent, out vec3 bitangent) {\n float signZ = normal.z >= 0.0 ? 1.0 : -1.0;\n float factor = -1.0 / (signZ + normal.z);\n float xy = normal.x * normal.y * factor;\n tangent = vec3(\n 1.0 + signZ * normal.x * normal.x * factor,\n signZ * xy,\n -signZ * normal.x\n );\n bitangent = vec3(\n xy,\n signZ + normal.y * normal.y * factor,\n -normal.y\n );\n}\n\nvec3 sampling_spectral_rgb_filter(vec3 rgb, float wavelength) {\n if (wavelength == 0.0) {\n return rgb;\n }\n vec3 channelMask = wavelength > 600.0\n ? vec3(1.0, 0.0, 0.0)\n : wavelength > 500.0\n ? vec3(0.0, 1.0, 0.0)\n : vec3(0.0, 0.0, 1.0);\n return rgb * channelMask;\n}\n\nfloat sampling_cauchy_ior(\n float wavelength,\n float referenceIor,\n float dispersionScale,\n float abbeNumber\n) {\n if (wavelength == 0.0 || dispersionScale <= 0.0) {\n return referenceIor;\n }\n\n const float FRAUNHOFER_C = 656.3;\n const float FRAUNHOFER_D = 587.6;\n const float FRAUNHOFER_F = 486.1;\n float inverseDifference = 1.0 / (\n 1.0 / (FRAUNHOFER_F * FRAUNHOFER_F)\n - 1.0 / (FRAUNHOFER_C * FRAUNHOFER_C)\n );\n float effectiveAbbe = max(abbeNumber / dispersionScale, 1e-6);\n float cauchyB = (referenceIor - 1.0) * inverseDifference / effectiveAbbe;\n float cauchyA = referenceIor\n - cauchyB / (FRAUNHOFER_D * FRAUNHOFER_D);\n return cauchyA + cauchyB / (wavelength * wavelength);\n}\n\nvec3 sampling_henyey_greenstein(\n vec3 forwardDirection,\n float anisotropy,\n vec2 samplePoint\n) {\n float cosine;\n if (abs(anisotropy) < 0.001) {\n cosine = 1.0 - 2.0 * samplePoint.y;\n }\n else {\n float 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 float sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n float azimuth = TWOPI * samplePoint.x;\n vec3 tangent;\n vec3 bitangent;\n sampling_orthonormal_basis(forwardDirection, tangent, bitangent);\n return tangent * (sine * cos(azimuth))\n + bitangent * (sine * sin(azimuth))\n + forwardDirection * cosine;\n}\n\nfloat sampling_henyey_greenstein_phase(float cosine, float anisotropy) {\n float 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,170 @@
|
|
|
1
|
+
import { zSobolPackedPermutations, sobolD1Steps } from '../../sampling.js';
|
|
2
|
+
export default /* glsl */ `
|
|
3
|
+
uint reverseBits(uint x) {
|
|
4
|
+
x = ((x & 0x55555555u) << 1u) | ((x >> 1u) & 0x55555555u);
|
|
5
|
+
x = ((x & 0x33333333u) << 2u) | ((x >> 2u) & 0x33333333u);
|
|
6
|
+
x = ((x & 0x0f0f0f0fu) << 4u) | ((x >> 4u) & 0x0f0f0f0fu);
|
|
7
|
+
x = ((x & 0x00ff00ffu) << 8u) | ((x >> 8u) & 0x00ff00ffu);
|
|
8
|
+
return (x << 16u) | (x >> 16u);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const uint CAMERA_PIXEL = 0u;
|
|
12
|
+
const uint CAMERA_LENS = 1u;
|
|
13
|
+
const uint CAMERA_WAVELENGTH = 2u;
|
|
14
|
+
const uint CAMERA_BEVEL_BASE = 3u;
|
|
15
|
+
const uint LIGHT_SELECT = 0u;
|
|
16
|
+
const uint LIGHT_POSITION = 1u;
|
|
17
|
+
const uint BSDF_LOBE = 2u;
|
|
18
|
+
const uint BSDF_DIRECTION = 3u;
|
|
19
|
+
const uint MEDIUM_CHANNEL = 4u;
|
|
20
|
+
const uint MEDIUM_DISTANCE = 5u;
|
|
21
|
+
const uint PHASE_DIRECTION = 6u;
|
|
22
|
+
const uint RUSSIAN_ROULETTE = 7u;
|
|
23
|
+
const uint BOUNCE_STRIDE = 64u;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
uvec2 bc;
|
|
28
|
+
uint bd;
|
|
29
|
+
uint cE = 0u;
|
|
30
|
+
uint em = 0u;
|
|
31
|
+
uint eg(uint ki) {
|
|
32
|
+
uint x = ki;
|
|
33
|
+
x ^= x >> 16u; x *= 0x7feb352du;
|
|
34
|
+
x ^= x >> 15u; x *= 0x846ca68bu;
|
|
35
|
+
return x ^ (x >> 16u);
|
|
36
|
+
}
|
|
37
|
+
uint aq(uint a, uint b) {
|
|
38
|
+
return eg(a ^ eg(b + 0x9e3779b9u));
|
|
39
|
+
}
|
|
40
|
+
uint iA(uint ki, uint ie) {
|
|
41
|
+
uint x = ki + ie;
|
|
42
|
+
x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;
|
|
43
|
+
x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;
|
|
44
|
+
return x;
|
|
45
|
+
}
|
|
46
|
+
uint sv(uint x, uint ie) {
|
|
47
|
+
return reverseBits(iA(reverseBits(x), ie));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
uint qX(uint ki) {
|
|
51
|
+
uint r = reverseBits(ki);
|
|
52
|
+
${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join("\n ")}
|
|
53
|
+
return r;
|
|
54
|
+
}
|
|
55
|
+
vec2 vC(uint index, uint ie) {
|
|
56
|
+
uint i = sv(index, aq(ie, 0u));
|
|
57
|
+
uint x = reverseBits(iA(i, aq(ie, 1u)));
|
|
58
|
+
uint y = sv(qX(i), aq(ie, 2u));
|
|
59
|
+
return vec2(float(x >> 8u), float(y >> 8u)) * (1.0 / 16777216.0);
|
|
60
|
+
}
|
|
61
|
+
uint tj(uvec2 p) {
|
|
62
|
+
uvec2 v = p & uvec2(255u);
|
|
63
|
+
v = (v | (v << uvec2(4u))) & uvec2(0x0f0fu);
|
|
64
|
+
v = (v | (v << uvec2(2u))) & uvec2(0x3333u);
|
|
65
|
+
v = (v | (v << uvec2(1u))) & uvec2(0x5555u);
|
|
66
|
+
return v.x | (v.y << 1u);
|
|
67
|
+
}
|
|
68
|
+
${zSobolPackedPermutations.map((v, i) => `const uint Z_PERM_${i} = ${v}u;`).join("\n")}
|
|
69
|
+
uint kk(uint tm) {
|
|
70
|
+
uint group = tm >> 2u;
|
|
71
|
+
uint word = Z_PERM_5;
|
|
72
|
+
${[0, 1, 2, 3, 4].map(i => `word = group == ${i}u ? Z_PERM_${i} : word;`).join("\n ")}
|
|
73
|
+
return (word >> ((tm & 3u) * 8u)) & 255u;
|
|
74
|
+
}
|
|
75
|
+
uint pK(uint kB, uint dim, uint logSPP) {
|
|
76
|
+
uint odd = logSPP & 1u;
|
|
77
|
+
uint tZ = 8u + ((logSPP + 1u) >> 1u);
|
|
78
|
+
uint result = 0u;
|
|
79
|
+
for (int digit = int(tZ) - 1; digit >= int(odd); digit--) {
|
|
80
|
+
uint shift = 2u*uint(digit) - odd;
|
|
81
|
+
|
|
82
|
+
uint sd = 0u;
|
|
83
|
+
if (shift < 30u) { sd = kB >> (shift + 2u); }
|
|
84
|
+
uint tm = (eg(sd ^ (0x55555555u * dim)) >> 24u) % 24u;
|
|
85
|
+
uint d = (kB >> shift) & 3u;
|
|
86
|
+
result |= ((kk(tm) >> (2u*d)) & 3u) << shift;
|
|
87
|
+
}
|
|
88
|
+
if (odd != 0u) {
|
|
89
|
+
result |= (kB & 1u) ^ (eg((kB >> 1u) ^ (0x55555555u * dim)) & 1u);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
uint cv(uint slot) {
|
|
97
|
+
return CAMERA_BEVEL_BASE + uint(BEVEL_SAMPLES) + cE * BOUNCE_STRIDE + slot;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
uvec4 hh;
|
|
101
|
+
uint hi;
|
|
102
|
+
bool fv = false;
|
|
103
|
+
bool df = false;
|
|
104
|
+
uint dE;
|
|
105
|
+
uint gp;
|
|
106
|
+
vec2 eN;
|
|
107
|
+
void dw(uint dim) {
|
|
108
|
+
|
|
109
|
+
uint jU = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
|
|
110
|
+
uvec4 key = uvec4(dim, bd, jU, uint(sequenceSeed));
|
|
111
|
+
if (fv && all(equal(hh, key)) && hi == uint(zSobolLogSPP)) { return; }
|
|
112
|
+
hh = key; hi = uint(zSobolLogSPP);
|
|
113
|
+
fv = true; df = false;
|
|
114
|
+
uint ie = aq(aq(jU, dim), uint(sequenceSeed));
|
|
115
|
+
uint index = bd;
|
|
116
|
+
if (samplingPattern == 1) {
|
|
117
|
+
uint logSPP = uint(zSobolLogSPP);
|
|
118
|
+
if (index == 0u) { logSPP = 0u; }
|
|
119
|
+
else { index -= 1u; }
|
|
120
|
+
|
|
121
|
+
uint iV = index >> logSPP;
|
|
122
|
+
uint mask = (1u << logSPP) - 1u;
|
|
123
|
+
uint kB = (tj(bc) << logSPP) | (index & mask);
|
|
124
|
+
index = pK(kB, dim, logSPP);
|
|
125
|
+
uvec2 tile = bc >> uvec2(8u);
|
|
126
|
+
ie = aq(aq(dim, uint(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
|
+
uint x = reverseBits(iA(dE, aq(ie, 1u)));
|
|
134
|
+
eN.x = float(x >> 8u) * (1.0 / 16777216.0);
|
|
135
|
+
}
|
|
136
|
+
vec2 kG(uint dim) {
|
|
137
|
+
dw(dim);
|
|
138
|
+
if (!df) {
|
|
139
|
+
uint y = sv(qX(dE), aq(gp, 2u));
|
|
140
|
+
eN.y = float(y >> 8u) * (1.0 / 16777216.0);
|
|
141
|
+
df = true;
|
|
142
|
+
}
|
|
143
|
+
return EPS + (1.0 - 2.0*EPS) * eN;
|
|
144
|
+
}
|
|
145
|
+
float dz(uint dim) {
|
|
146
|
+
if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
147
|
+
dw(dim);
|
|
148
|
+
return EPS + (1.0 - 2.0*EPS) * eN.x;
|
|
149
|
+
}
|
|
150
|
+
vec2 fk(uint dim) {
|
|
151
|
+
if (samplingPattern == 2) {
|
|
152
|
+
float x = dz(dim); float y = dz(dim);
|
|
153
|
+
return vec2(x,y);
|
|
154
|
+
}
|
|
155
|
+
return kG(dim);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
float eo(uint slot) {
|
|
159
|
+
uint dim = aq(aq(cE, slot), em) | 0x80000000u;
|
|
160
|
+
em += 1u;
|
|
161
|
+
if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }
|
|
162
|
+
|
|
163
|
+
uint jU = bc.x + bc.y * uint(round(1.0 / pixelSize.x));
|
|
164
|
+
uint ie = aq(aq(jU, dim), uint(sequenceSeed));
|
|
165
|
+
uint i = sv(bd, aq(ie, 0u));
|
|
166
|
+
uint x = reverseBits(iA(i, aq(ie, 1u)));
|
|
167
|
+
return EPS + (1.0 - 2.0*EPS) * (float(x >> 8u) * (1.0 / 16777216.0));
|
|
168
|
+
}
|
|
169
|
+
`;
|
|
170
|
+
//# sourceMappingURL=sobol.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sobol.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/sobol.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,eAAe,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDtB,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,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAIjF,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGnF,CAAC","sourcesContent":["import { zSobolPackedPermutations, sobolD1Steps } from '../../sampling.js';\nexport default /* glsl */ `\nuint reverseBits(uint x) {\n x = ((x & 0x55555555u) << 1u) | ((x >> 1u) & 0x55555555u);\n x = ((x & 0x33333333u) << 2u) | ((x >> 2u) & 0x33333333u);\n x = ((x & 0x0f0f0f0fu) << 4u) | ((x >> 4u) & 0x0f0f0f0fu);\n x = ((x & 0x00ff00ffu) << 8u) | ((x >> 8u) & 0x00ff00ffu);\n return (x << 16u) | (x >> 16u);\n}\n\nconst uint CAMERA_PIXEL = 0u;\nconst uint CAMERA_LENS = 1u;\nconst uint CAMERA_WAVELENGTH = 2u;\nconst uint CAMERA_BEVEL_BASE = 3u;\nconst uint LIGHT_SELECT = 0u;\nconst uint LIGHT_POSITION = 1u;\nconst uint BSDF_LOBE = 2u;\nconst uint BSDF_DIRECTION = 3u;\nconst uint MEDIUM_CHANNEL = 4u;\nconst uint MEDIUM_DISTANCE = 5u;\nconst uint PHASE_DIRECTION = 6u;\nconst uint RUSSIAN_ROULETTE = 7u;\nconst uint 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).\nuvec2 samplingPixel;\nuint pixelSampleIndex;\nuint samplingBounce = 0u;\nuint hashedCounter = 0u;\nuint sampleHash(uint valueIn) {\n uint x = valueIn;\n x ^= x >> 16u; x *= 0x7feb352du;\n x ^= x >> 15u; x *= 0x846ca68bu;\n return x ^ (x >> 16u);\n}\nuint sampleSeed(uint a, uint b) {\n return sampleHash(a ^ sampleHash(b + 0x9e3779b9u));\n}\nuint lkPermute(uint valueIn, uint seed) {\n uint x = valueIn + seed;\n x ^= x * 0x6c50b47cu; x ^= x * 0xb82f1e52u;\n x ^= x * 0xc7afe638u; x ^= x * 0x8d22f6e6u;\n return x;\n}\nuint owen(uint x, uint seed) {\n return reverseBits(lkPermute(reverseBits(x), seed));\n}\n// Parallel XOR butterfly equals v ^= v >> 1 for all 32 direction bits.\nuint sobolD1(uint valueIn) {\n uint r = reverseBits(valueIn);\n ${sobolD1Steps.map(([shift, mask]) => `r ^= (r << ${shift}u) & 0x${mask.toString(16)}u;`).join(\"\\n \")}\n return r;\n}\nvec2 sobol2D(uint index, uint seed) {\n uint i = owen(index, sampleSeed(seed, 0u));\n uint x = reverseBits(lkPermute(i, sampleSeed(seed, 1u)));\n uint y = owen(sobolD1(i), sampleSeed(seed, 2u));\n return vec2(float(x >> 8u), float(y >> 8u)) * (1.0 / 16777216.0);\n}\nuint morton2(uvec2 p) {\n uvec2 v = p & uvec2(255u);\n v = (v | (v << uvec2(4u))) & uvec2(0x0f0fu);\n v = (v | (v << uvec2(2u))) & uvec2(0x3333u);\n v = (v | (v << uvec2(1u))) & uvec2(0x5555u);\n return v.x | (v.y << 1u);\n}\n${zSobolPackedPermutations.map((v,i) => `const uint Z_PERM_${i} = ${v}u;`).join(\"\\n\")}\nuint zSobolPermutation(uint perm) {\n uint group = perm >> 2u;\n uint word = Z_PERM_5;\n ${[0,1,2,3,4].map(i => `word = group == ${i}u ? Z_PERM_${i} : word;`).join(\"\\n \")}\n return (word >> ((perm & 3u) * 8u)) & 255u;\n}\nuint zSobolIndex(uint morton, uint dim, uint logSPP) {\n uint odd = logSPP & 1u;\n uint digits = 8u + ((logSPP + 1u) >> 1u);\n uint result = 0u;\n for (int digit = int(digits) - 1; digit >= int(odd); digit--) {\n uint shift = 2u*uint(digit) - odd;\n // A shift by 32 is undefined on GLSL and masks to zero on some GPUs.\n uint higher = 0u;\n if (shift < 30u) { higher = morton >> (shift + 2u); }\n uint perm = (sampleHash(higher ^ (0x55555555u * dim)) >> 24u) % 24u;\n uint 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.\nuint bounceDim(uint slot) {\n return CAMERA_BEVEL_BASE + uint(BEVEL_SAMPLES) + samplingBounce * BOUNCE_STRIDE + slot;\n}\n// Last-domain cache shares the index shuffle and x between scalar/pair reads.\nuvec4 cachedSampleKey;\nuint cachedSampleLog;\nbool cachedSampleValid = false;\nbool cachedSampleYValid = false;\nuint cachedSampleIndex;\nuint cachedSampleSeed;\nvec2 cachedSample;\nvoid prepareStructuredSample(uint dim) {\n\n uint pixelID = samplingPixel.x + samplingPixel.y * uint(round(1.0 / pixelSize.x));\n uvec4 key = uvec4(dim, pixelSampleIndex, pixelID, uint(sequenceSeed));\n if (cachedSampleValid && all(equal(cachedSampleKey, key)) && cachedSampleLog == uint(zSobolLogSPP)) { return; }\n cachedSampleKey = key; cachedSampleLog = uint(zSobolLogSPP);\n cachedSampleValid = true; cachedSampleYValid = false;\n uint seed = sampleSeed(sampleSeed(pixelID, dim), uint(sequenceSeed));\n uint index = pixelSampleIndex;\n if (samplingPattern == 1) {\n uint logSPP = uint(zSobolLogSPP);\n if (index == 0u) { logSPP = 0u; }\n else { index -= 1u; }\n // Independent sample blocks after the cap avoid repeated samples indefinitely.\n uint sequenceBlock = index >> logSPP;\n uint mask = (1u << logSPP) - 1u;\n uint morton = (morton2(samplingPixel) << logSPP) | (index & mask);\n index = zSobolIndex(morton, dim, logSPP);\n uvec2 tile = samplingPixel >> uvec2(8u);\n seed = sampleSeed(sampleSeed(dim, uint(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 uint x = reverseBits(lkPermute(cachedSampleIndex, sampleSeed(seed, 1u)));\n cachedSample.x = float(x >> 8u) * (1.0 / 16777216.0);\n}\nvec2 structuredSample(uint dim) {\n prepareStructuredSample(dim);\n if (!cachedSampleYValid) {\n uint y = owen(sobolD1(cachedSampleIndex), sampleSeed(cachedSampleSeed, 2u));\n cachedSample.y = float(y >> 8u) * (1.0 / 16777216.0);\n cachedSampleYValid = true;\n }\n return EPS + (1.0 - 2.0*EPS) * cachedSample;\n}\nfloat sample1D(uint dim) {\n if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }\n prepareStructuredSample(dim);\n return EPS + (1.0 - 2.0*EPS) * cachedSample.x;\n}\nvec2 sample2D(uint dim) {\n if (samplingPattern == 2) {\n float x = sample1D(dim); float y = sample1D(dim);\n return vec2(x,y);\n }\n return structuredSample(dim);\n}\n// Variable traversal counts cannot move any of the structured dimensions.\nfloat hashedSample(uint slot) {\n uint dim = sampleSeed(sampleSeed(samplingBounce, slot), hashedCounter) | 0x80000000u;\n hashedCounter += 1u;\n if (samplingPattern == 2) { return EPS + (1.0 - 2.0*EPS)*rand(); }\n // Variable-count traversal has no spatial ZSobol ordering to preserve.\n uint pixelID = samplingPixel.x + samplingPixel.y * uint(round(1.0 / pixelSize.x));\n uint seed = sampleSeed(sampleSeed(pixelID, dim), uint(sequenceSeed));\n uint i = owen(pixelSampleIndex, sampleSeed(seed, 0u));\n uint x = reverseBits(lkPermute(i, sampleSeed(seed, 1u)));\n return EPS + (1.0 - 2.0*EPS) * (float(x >> 8u) * (1.0 / 16777216.0));\n}\n`;\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Portions adapted from ray-tracing-renderer@0.10.15
|
|
2
|
+
// (https://github.com/hoverinc/ray-tracing-renderer).
|
|
3
|
+
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
4
|
+
// Manually performs linear filtering if the extension OES_texture_float_linear is not supported
|
|
5
|
+
import { glsl } from '../../shader.js';
|
|
6
|
+
export default glsl `
|
|
7
|
+
vec4 textureLinear(sampler2D map, vec2 uv) {
|
|
8
|
+
#ifdef OES_texture_float_linear
|
|
9
|
+
return texture(map, uv);
|
|
10
|
+
#else
|
|
11
|
+
vec2 size = vec2(textureSize(map, 0));
|
|
12
|
+
vec2 pO = 1.0 / size;
|
|
13
|
+
|
|
14
|
+
uv = uv * size - 0.5;
|
|
15
|
+
vec2 f = fract(uv);
|
|
16
|
+
uv = floor(uv) + 0.5;
|
|
17
|
+
|
|
18
|
+
vec4 s1 = texture(map, (uv + vec2(0, 0)) * pO);
|
|
19
|
+
vec4 s2 = texture(map, (uv + vec2(1, 0)) * pO);
|
|
20
|
+
vec4 s3 = texture(map, (uv + vec2(0, 1)) * pO);
|
|
21
|
+
vec4 s4 = texture(map, (uv + vec2(1, 1)) * pO);
|
|
22
|
+
|
|
23
|
+
return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);
|
|
24
|
+
#endif
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
//# sourceMappingURL=textureLinear.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textureLinear.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/textureLinear.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,gGAAgG;AAEhG,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;CAoBlB,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\n// Manually performs linear filtering if the extension OES_texture_float_linear is not supported\n\nimport { glsl } from '../../shader.js';\n\nexport default glsl`\nvec4 textureLinear(sampler2D map, vec2 uv) {\n #ifdef OES_texture_float_linear\n return texture(map, uv);\n #else\n vec2 size = vec2(textureSize(map, 0));\n vec2 texelSize = 1.0 / size;\n\n uv = uv * size - 0.5;\n vec2 f = fract(uv);\n uv = floor(uv) + 0.5;\n\n vec4 s1 = texture(map, (uv + vec2(0, 0)) * texelSize);\n vec4 s2 = texture(map, (uv + vec2(1, 0)) * texelSize);\n vec4 s3 = texture(map, (uv + vec2(0, 1)) * texelSize);\n vec4 s4 = texture(map, (uv + vec2(1, 1)) * texelSize);\n\n return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);\n #endif\n}\n`;\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { glsl } from '../../shader.js';
|
|
2
|
+
import { uvProjectionConstants } from '../../MaterialTable.js';
|
|
3
|
+
export default glsl `
|
|
4
|
+
vec2 sphericalProjection(vec3 pos) {
|
|
5
|
+
vec3 n = normalize(pos);
|
|
6
|
+
float theta = atan(n.x, n.z) / (2.0 * PI) + 0.5;
|
|
7
|
+
float phi = acos(n.y) / PI;
|
|
8
|
+
return vec2(theta, 1.0 - phi);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
vec2 iL(vec3 pos, vec3 normal, vec2 uvScale) {
|
|
12
|
+
vec3 dm = abs(normal);
|
|
13
|
+
vec2 uv = vec2(0.0);
|
|
14
|
+
if (dm.x > dm.y && dm.x > dm.z) {
|
|
15
|
+
uv = pos.yz;
|
|
16
|
+
} else if (dm.y > dm.x && dm.y > dm.z) {
|
|
17
|
+
uv = pos.xz;
|
|
18
|
+
} else {
|
|
19
|
+
uv = pos.xy;
|
|
20
|
+
}
|
|
21
|
+
return fract(uv * uvScale);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
vec2 hA(vec3 pos, vec3 normal) {
|
|
57
|
+
float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;
|
|
58
|
+
return vec2(theta, pos.y);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
vec2 gz(int fh, vec3 pos, vec3 normal, vec2 uvScale) {
|
|
62
|
+
if (fh == ${uvProjectionConstants.triplanar + ''}) {
|
|
63
|
+
return iL(pos, normal, uvScale);
|
|
64
|
+
} else if (fh == ${uvProjectionConstants.spherical + ''}) {
|
|
65
|
+
return sphericalProjection(pos) * uvScale;
|
|
66
|
+
} else if (fh == ${uvProjectionConstants.cylindrical + ''}) {
|
|
67
|
+
return hA(pos, normal) * uvScale;
|
|
68
|
+
}
|
|
69
|
+
return vec2(0.0);
|
|
70
|
+
}
|
|
71
|
+
`;
|
|
72
|
+
//# sourceMappingURL=uvProjection.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uvProjection.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/uvProjection.glsl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAe,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2DO,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAE7B,qBAAqB,CAAC,SAAS,GAAG,EAAE;;mBAEpC,qBAAqB,CAAC,WAAW,GAAG,EAAE;;;;;CAKtE,CAAC","sourcesContent":["import { glsl } from '../../shader.js';\nimport { uvProjectionConstants } from '../../MaterialTable.js';\n\nexport default glsl`\nvec2 sphericalProjection(vec3 pos) {\n vec3 n = normalize(pos);\n float theta = atan(n.x, n.z) / (2.0 * PI) + 0.5;\n float phi = acos(n.y) / PI;\n return vec2(theta, 1.0 - phi);\n}\n\nvec2 triplanarProjection(vec3 pos, vec3 normal, vec2 uvScale) {\n vec3 absNormal = abs(normal);\n vec2 uv = vec2(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 fract(uv * uvScale);\n}\n\n// vec4 triplanarProjectionSample(\n// sampler2DArray _map, vec2 mapSize, int index,\n// vec3 pos, vec3 normal, vec2 uvScale, float blending\n// ) {\n// vec3 absNormal = abs(normal);\n// // Calculate blending power - higher expo means sharper transitions\n// float expo = (1.0 - blending) * 125.0 + blending * 3.0;\n \n// // Weight each axis by its normal component raised to expo power\n// vec3 weights = pow(absNormal, vec3(expo));\n \n// // Normalize weights so they sum to 1\n// weights = weights / (weights.x + weights.y + weights.z);\n \n// // Project UVs on each axis plane (yz, xz, xy)\n// vec2 yzPlane = pos.yz * uvScale;\n// vec2 xzPlane = pos.xz * uvScale;\n// vec2 xyPlane = pos.xy * uvScale;\n// // Wrap\n// yzPlane = fract(yzPlane);\n// xzPlane = fract(xzPlane);\n// xyPlane = fract(xyPlane);\n\n// // Sample maps\n// vec4 yz = texture(_map, vec3(yzPlane * mapSize, float(index)));\n// vec4 xz = texture(_map, vec3(xzPlane * mapSize, float(index)));\n// vec4 xy = texture(_map, vec3(xyPlane * mapSize, float(index)));\n \n// // Blend the projected coordinates using the weights\n// return weights.x * yz + weights.y * xz + weights.z * xy;\n// }\n\nvec2 cylindricalProjection(vec3 pos, vec3 normal) {\n float theta = atan(pos.z, pos.x) / (2.0 * PI) + 0.5;\n return vec2(theta, pos.y);\n}\n\nvec2 projectUV(int projectionType, vec3 pos, vec3 normal, vec2 uvScale) {\n if (projectionType == ${uvProjectionConstants.triplanar + ''}) {\n return triplanarProjection(pos, normal, uvScale);\n } else if (projectionType == ${uvProjectionConstants.spherical + ''}) {\n return sphericalProjection(pos) * uvScale;\n } else if (projectionType == ${uvProjectionConstants.cylindrical + ''}) {\n return cylindricalProjection(pos, normal) * uvScale;\n }\n return vec2(0.0);\n}\n`;\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { FragmentShader, Shader } from '../shader.js';
|
|
2
|
+
import { DEPTH_SAMPLE_GRID } from '../depthQuery.js';
|
|
3
|
+
import common from './chunks/common.glsl.js';
|
|
4
|
+
import core from './chunks/rayTraceCore.glsl.js';
|
|
5
|
+
import materials from './chunks/materialBuffer.glsl.js';
|
|
6
|
+
import intersect from './chunks/intersect.glsl.js';
|
|
7
|
+
import uvProjection from './chunks/uvProjection.glsl.js';
|
|
8
|
+
import random from './chunks/random.glsl.js';
|
|
9
|
+
import rand from './chunks/rand.glsl.js';
|
|
10
|
+
export default new FragmentShader({
|
|
11
|
+
name: 'depthQuery', outputs: ['depth'],
|
|
12
|
+
defines: { DEPTH_QUERY_MODE: true },
|
|
13
|
+
includes: [core, materials, intersect, random],
|
|
14
|
+
uniforms: {
|
|
15
|
+
depthArea: Shader.uniform('vec4'),
|
|
16
|
+
viewProjectionInv: Shader.uniform('mat4'),
|
|
17
|
+
viewInv: Shader.uniform('mat4')
|
|
18
|
+
},
|
|
19
|
+
main: /* glsl */ `
|
|
20
|
+
${common}
|
|
21
|
+
${rand}
|
|
22
|
+
${random.main}
|
|
23
|
+
${core.main}
|
|
24
|
+
${uvProjection}
|
|
25
|
+
${materials.main}
|
|
26
|
+
${intersect.main}
|
|
27
|
+
|
|
28
|
+
void main() {
|
|
29
|
+
vec2 offset = floor(gl_FragCoord.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;
|
|
30
|
+
vec2 uv = depthArea.xy + depthArea.zw * offset * vec2(1.0, -1.0);
|
|
31
|
+
out_depth = vec4(0.0);
|
|
32
|
+
if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;
|
|
33
|
+
vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);
|
|
34
|
+
vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);
|
|
35
|
+
Ray ray;
|
|
36
|
+
iw(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
|
|
37
|
+
vec3 eye = viewInv[3].xyz;
|
|
38
|
+
vec3 nV = -normalize(viewInv[2].xyz);
|
|
39
|
+
ad si;
|
|
40
|
+
si.triangleIndex = -1;
|
|
41
|
+
for (int layer = 0; layer < 32; layer++) {
|
|
42
|
+
cY(ray, si, false);
|
|
43
|
+
if (!si.hit) return;
|
|
44
|
+
J material;
|
|
45
|
+
eT(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);
|
|
46
|
+
if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {
|
|
47
|
+
out_depth.r = max(dot(si.position - eye, nV), 0.0);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
ray.o = si.position + ray.d * (EPS * 0.02);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
`
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=depthQuery.frag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthQuery.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/depthQuery.frag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,+BAA+B,CAAC;AACjD,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAEzC,eAAe,IAAI,cAAc,CAAC;IAChC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAC9C,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KAChC;IACD,IAAI,EAAE,UAAU,CAAC;EACjB,MAAM;EACN,IAAI;EACJ,MAAM,CAAC,IAAI;EACX,IAAI,CAAC,IAAI;EACT,YAAY;EACZ,SAAS,CAAC,IAAI;EACd,SAAS,CAAC,IAAI;;;yCAG2B,iBAAiB,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwB/D;CACA,CAAC,CAAC","sourcesContent":["import { FragmentShader, Shader } from '../shader.js';\nimport { DEPTH_SAMPLE_GRID } from '../depthQuery.js';\nimport common from './chunks/common.glsl.js';\nimport core from './chunks/rayTraceCore.glsl.js';\nimport materials from './chunks/materialBuffer.glsl.js';\nimport intersect from './chunks/intersect.glsl.js';\nimport uvProjection from './chunks/uvProjection.glsl.js';\nimport random from './chunks/random.glsl.js';\nimport rand from './chunks/rand.glsl.js';\n\nexport default new FragmentShader({\n name: 'depthQuery', outputs: ['depth'],\n defines: { DEPTH_QUERY_MODE: true },\n includes: [core, materials, intersect, random],\n uniforms: {\n depthArea: Shader.uniform('vec4'),\n viewProjectionInv: Shader.uniform('mat4'),\n viewInv: Shader.uniform('mat4')\n },\n main: /* glsl */ `\n${common}\n${rand}\n${random.main}\n${core.main}\n${uvProjection}\n${materials.main}\n${intersect.main}\n\nvoid main() {\n vec2 offset = floor(gl_FragCoord.xy) / ${DEPTH_SAMPLE_GRID - 1}.0 * 2.0 - 1.0;\n vec2 uv = depthArea.xy + depthArea.zw * offset * vec2(1.0, -1.0);\n out_depth = vec4(0.0);\n if (any(lessThan(uv, vec2(0.0))) || any(greaterThan(uv, vec2(1.0)))) return;\n vec4 origin = viewProjectionInv * vec4(uv * 2.0 - 1.0, -1.0, 1.0);\n vec4 target = viewProjectionInv * vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n Ray ray;\n initRay(ray, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));\n vec3 eye = viewInv[3].xyz;\n vec3 forward = -normalize(viewInv[2].xyz);\n SurfaceInteraction si;\n si.triangleIndex = -1;\n for (int layer = 0; layer < 32; layer++) {\n intersectScene(ray, si, false);\n if (!si.hit) return;\n OpenPbrResolvedMaterial material;\n getMaterial(material, si.materialIndex, si.uv, si.uv1, si.instanceIndex);\n if (material.materialType != SHADOW_CATCHER && material.alpha > 0.0) {\n out_depth.r = max(dot(si.position - eye, forward), 0.0);\n return;\n }\n ray.o = si.position + ray.d * (EPS * 0.02);\n }\n}\n`\n});\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FragmentShader } from '../shader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Normalize
|
|
4
|
+
*/
|
|
5
|
+
declare const normalizeRayTraceOutput: FragmentShader<Record<string, import("../shader.js").ShaderDefineValue>, Record<string, import("../shader.js").ShaderUniform<unknown>>>;
|
|
6
|
+
export default normalizeRayTraceOutput;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FragmentShader, glsl, Shader } from '../shader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Normalize
|
|
4
|
+
*/
|
|
5
|
+
const normalizeRayTraceOutput = new FragmentShader({
|
|
6
|
+
name: 'normalizeRayTraceOutput',
|
|
7
|
+
outputs: ['color', 'albedo', 'normal', 'shadowCatcher'],
|
|
8
|
+
uniforms: {
|
|
9
|
+
colorTex: Shader.uniform('sampler2D'),
|
|
10
|
+
albedoTex: Shader.uniform('sampler2D'),
|
|
11
|
+
normalTex: Shader.uniform('sampler2D'),
|
|
12
|
+
shadowCatcherTex: Shader.uniform('sampler2D'),
|
|
13
|
+
sampleCount: Shader.uniform('float', 1),
|
|
14
|
+
lightScale: Shader.uniform('vec2', [1, 1])
|
|
15
|
+
},
|
|
16
|
+
main: glsl `
|
|
17
|
+
void main() {
|
|
18
|
+
vec2 uv = lightScale * v_Texcoord;
|
|
19
|
+
vec4 rI = sample_albedoTex(uv);
|
|
20
|
+
float hit = rI.a;
|
|
21
|
+
vec4 rM = sample_normalTex(uv);
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
float sc = max(rM.a, 1.0);
|
|
26
|
+
vec3 albedo = rI.rgb / sc;
|
|
27
|
+
vec3 normal = rM.rgb / sc;
|
|
28
|
+
vec4 shadowCatcher= sample_shadowCatcherTex(uv) / sampleCount;
|
|
29
|
+
vec4 sk = sample_colorTex(uv);
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
vec4 light = vec4(sk.rgb / (hit > 0.0 ? hit : sampleCount), sk.a / sampleCount);
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
out_normal = dot(normal, normal) > 0.1 ? vec4(normal * 0.5 + 0.5, 1.0) : vec4(0.0);
|
|
39
|
+
out_albedo = vec4(albedo, 1.0);
|
|
40
|
+
out_shadowCatcher = shadowCatcher;
|
|
41
|
+
out_color = light;
|
|
42
|
+
}
|
|
43
|
+
`
|
|
44
|
+
});
|
|
45
|
+
export default normalizeRayTraceOutput;
|
|
46
|
+
//# sourceMappingURL=normalizeRayTraceOutput.frag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeRayTraceOutput.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/normalizeRayTraceOutput.frag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE5D;;GAEG;AACH,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAC;IACjD,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC;IAEvD,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACtC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACtC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAE7C,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3C;IAED,IAAI,EAAE,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BT;CACF,CAAC,CAAC;AAEH,eAAe,uBAAuB,CAAC","sourcesContent":["import { FragmentShader, glsl, Shader } from '../shader.js';\n\n/**\n * Normalize\n */\nconst normalizeRayTraceOutput = new FragmentShader({\n name: 'normalizeRayTraceOutput',\n outputs: ['color', 'albedo', 'normal', 'shadowCatcher'],\n\n uniforms: {\n colorTex: Shader.uniform('sampler2D'),\n albedoTex: Shader.uniform('sampler2D'),\n normalTex: Shader.uniform('sampler2D'),\n shadowCatcherTex: Shader.uniform('sampler2D'),\n\n sampleCount: Shader.uniform('float', 1),\n lightScale: Shader.uniform('vec2', [1, 1])\n },\n\n main: glsl`\nvoid main() {\n vec2 uv = lightScale * v_Texcoord;\n vec4 albedoTexel = sample_albedoTex(uv);\n float hit = albedoTexel.a;\n vec4 normalTexel = sample_normalTex(uv);\n // Spectral WebGL rendering submits three additive wavelength passes per\n // sample. Normalize auxiliary guides by their actual contribution count,\n // not the logical sample count, or they saturate before denoising.\n float guideCount = max(normalTexel.a, 1.0);\n vec3 albedo = albedoTexel.rgb / guideCount;\n vec3 normal = normalTexel.rgb / guideCount;\n vec4 shadowCatcher= sample_shadowCatcherTex(uv) / sampleCount;\n vec4 lightTexel = sample_colorTex(uv);\n // vec2 hit = sample_hitTex(uv).rg;\n // average the color by hit count.\n // So the antialised edge color will be correct when having transparent background\n // TODO In some platforms. the output of hit.r is always 0. In this case we use sampleCount instead.\n vec4 light = vec4(lightTexel.rgb / (hit > 0.0 ? hit : sampleCount), lightTexel.a / sampleCount);\n\n // Pixels whose primary rays mostly miss geometry have no normal (alpha 0),\n // as in the WebGPU output.\n out_normal = dot(normal, normal) > 0.1 ? vec4(normal * 0.5 + 0.5, 1.0) : vec4(0.0);\n out_albedo = vec4(albedo, 1.0);\n out_shadowCatcher = shadowCatcher;\n out_color = light;\n}\n `\n});\n\nexport default normalizeRayTraceOutput;\n"]}
|