@meimu/mutracer 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +222 -0
- package/LICENSES/FidelityFX-FSR.txt +19 -0
- package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
- package/README.md +3 -0
- package/THIRD_PARTY_NOTICES.md +18 -4
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +9328 -7614
- package/docs/api.md +83 -35
- package/docs/caustics.md +80 -0
- package/docs/materials.md +9 -6
- package/docs/performance.md +7 -0
- package/docs/post-processing.md +62 -9
- package/docs/progressive-rendering.md +53 -9
- package/docs/sampling.md +4 -0
- package/docs/technical/acceleration.md +52 -0
- package/docs/technical/aovs.md +79 -0
- package/docs/technical/caustics.md +109 -0
- package/docs/technical/continuous-spectrum.md +122 -0
- package/docs/technical/display-upscale.md +82 -0
- package/docs/technical/openpbr.md +99 -0
- package/docs/technical/pbrt-import.md +168 -0
- package/docs/technical/tiling.md +74 -0
- package/docs/technical/webgl.md +53 -0
- package/docs/updates.md +3 -1
- package/docs/viewer-checklist.md +65 -0
- package/docs/viewer.md +18 -6
- package/lib/Display.d.ts +19 -5
- package/lib/Display.js +10 -7
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +4 -1
- package/lib/Engine.js +77 -14
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +81 -24
- package/lib/Render.js +201 -26
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -3
- package/lib/RenderLoop.js +68 -44
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +4 -2
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/renderer/AovPrimitiveCache.js +39 -8
- package/lib/renderer/AovPrimitiveCache.js.map +1 -1
- package/lib/renderer/DisplayPostProcess.d.ts +8 -3
- package/lib/renderer/DisplayPostProcess.js +51 -18
- package/lib/renderer/DisplayPostProcess.js.map +1 -1
- package/lib/renderer/GPUTraceQueue.d.ts +2 -1
- package/lib/renderer/GPUTraceQueue.js +3 -1
- package/lib/renderer/GPUTraceQueue.js.map +1 -1
- package/lib/renderer/MaterialData.js +7 -2
- package/lib/renderer/MaterialData.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +11 -1
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +2 -2
- package/lib/renderer/TileRender.js +128 -7
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +6 -1
- package/lib/renderer/WGPUAov.js +108 -14
- package/lib/renderer/WGPUAov.js.map +1 -1
- package/lib/renderer/WGPUCanvasSurface.js +12 -1
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
- package/lib/renderer/WGPUCausticLightPass.d.ts +48 -0
- package/lib/renderer/WGPUCausticLightPass.js +217 -0
- package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPUPhotonMap.d.ts +37 -0
- package/lib/renderer/WGPUPhotonMap.js +191 -0
- package/lib/renderer/WGPUPhotonMap.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
- package/lib/renderer/WGPURayTraceOutput.js +122 -28
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +65 -21
- package/lib/renderer/WGPURayTracePass.js +730 -409
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +110 -68
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLAov.js +3 -3
- package/lib/renderer/WebGLAov.js.map +1 -1
- package/lib/renderer/WebGLFullQuadPass.d.ts +2 -1
- package/lib/renderer/WebGLFullQuadPass.js +10 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +20 -11
- package/lib/renderer/WebGLRayTracePass.js +157 -116
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +17 -14
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.js +60 -60
- package/lib/renderer/accumulationTarget.d.ts +2 -1
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/aov.d.ts +13 -1
- package/lib/renderer/aov.js +21 -2
- package/lib/renderer/aov.js.map +1 -1
- package/lib/renderer/aovDisplay.js +2 -2
- package/lib/renderer/aovDisplay.js.map +1 -1
- package/lib/renderer/binnedSahBvh.d.ts +2 -1
- package/lib/renderer/binnedSahBvh.js +24 -17
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +3 -1
- package/lib/renderer/bvhAccel.js +36 -6
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +1 -1
- package/lib/renderer/cameraUniform.js +6 -2
- package/lib/renderer/cameraUniform.js.map +1 -1
- package/lib/renderer/causticDiagnostics.d.ts +31 -0
- package/lib/renderer/causticDiagnostics.js +5 -0
- package/lib/renderer/causticDiagnostics.js.map +1 -0
- package/lib/renderer/causticEmission.d.ts +10 -0
- package/lib/renderer/causticEmission.js +40 -0
- package/lib/renderer/causticEmission.js.map +1 -0
- package/lib/renderer/causticUniform.d.ts +12 -0
- package/lib/renderer/causticUniform.js +22 -0
- package/lib/renderer/causticUniform.js.map +1 -0
- package/lib/renderer/caustics.d.ts +16 -0
- package/lib/renderer/caustics.js +93 -0
- package/lib/renderer/caustics.js.map +1 -0
- package/lib/renderer/compactVertices.d.ts +14 -0
- package/lib/renderer/compactVertices.js +124 -0
- package/lib/renderer/compactVertices.js.map +1 -0
- package/lib/renderer/easu.d.ts +11 -0
- package/lib/renderer/easu.js +156 -0
- package/lib/renderer/easu.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +1 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -1
- package/lib/renderer/geometryUpdates.js +3 -2
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
- package/lib/renderer/glsl/aovReflectance.glsl.js +53 -53
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
- package/lib/renderer/glsl/aovTrace.frag.js +45 -37
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -73
- package/lib/renderer/glsl/chunks/intersect.glsl.js +478 -465
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +156 -153
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +771 -771
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +70 -63
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +89 -75
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +160 -118
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +14 -14
- package/lib/renderer/glsl/chunks/sampling.glsl.js +88 -91
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
- package/lib/renderer/glsl/depthQuery.frag.js +13 -7
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
- package/lib/renderer/glsl/rayTrace.frag.d.ts +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +338 -252
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +27 -26
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +59 -59
- package/lib/renderer/gpuMemory.js +1 -1
- package/lib/renderer/gpuMemory.js.map +1 -1
- package/lib/renderer/lightSampling.d.ts +3 -2
- package/lib/renderer/lightSampling.js +14 -8
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
- package/lib/renderer/openPbrEnergyLut.js +18 -1
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/pathLimits.d.ts +5 -4
- package/lib/renderer/pathLimits.js +6 -5
- package/lib/renderer/pathLimits.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.d.ts +2 -0
- package/lib/renderer/prepareMeshBVH.js +5 -3
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/progressiveScheduler.js +5 -4
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +5 -0
- package/lib/renderer/renderPipeline.js +1 -0
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/researchTransport.d.ts +31 -0
- package/lib/renderer/researchTransport.js +5 -0
- package/lib/renderer/researchTransport.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +1 -1
- package/lib/renderer/sceneAssembly.js +4 -3
- package/lib/renderer/sceneAssembly.js.map +1 -1
- package/lib/renderer/sceneChangeDetector.d.ts +1 -1
- package/lib/renderer/sceneChangeDetector.js +3 -1
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +2 -0
- package/lib/renderer/sceneLayoutSchema.js +3 -3
- package/lib/renderer/sceneLayoutSchema.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +3 -2
- package/lib/renderer/scenePreparation.js +18 -2
- package/lib/renderer/scenePreparation.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/spectrum.d.ts +21 -0
- package/lib/renderer/spectrum.js +154 -0
- package/lib/renderer/spectrum.js.map +1 -0
- package/lib/renderer/staticBvhPreparation.d.ts +9 -0
- package/lib/renderer/staticBvhPreparation.js +8 -2
- package/lib/renderer/staticBvhPreparation.js.map +1 -1
- package/lib/renderer/surfaceHit.d.ts +10 -0
- package/lib/renderer/surfaceHit.js +22 -0
- package/lib/renderer/surfaceHit.js.map +1 -0
- package/lib/renderer/tangentRequirements.d.ts +2 -0
- package/lib/renderer/tangentRequirements.js +7 -0
- package/lib/renderer/tangentRequirements.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +4 -0
- package/lib/renderer/textureAtlas.js +48 -2
- package/lib/renderer/textureAtlas.js.map +1 -1
- package/lib/renderer/webgl.js +4 -0
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/webglLightSampling.d.ts +39 -0
- package/lib/renderer/webglLightSampling.js +15 -0
- package/lib/renderer/webglLightSampling.js.map +1 -0
- package/lib/renderer/webglVertexAttributes.d.ts +17 -0
- package/lib/renderer/webglVertexAttributes.js +44 -0
- package/lib/renderer/webglVertexAttributes.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.js +3 -3
- package/lib/renderer/wgpuMaterialConstants.js +4 -3
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
- package/lib/renderer/wgpuSceneUniform.js +2 -2
- package/lib/renderer/wgpuSceneUniform.js.map +1 -1
- package/lib/renderer/wgpuShaderSource.d.ts +22 -0
- package/lib/renderer/wgpuShaderSource.js +3 -1
- package/lib/renderer/wgpuShaderSource.js.map +1 -1
- package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +55 -55
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovTrace.wgsl.js +33 -33
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
- package/lib/renderer/wgsl/causticLight.compute.d.ts +6 -0
- package/lib/renderer/wgsl/causticLight.compute.js +539 -0
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +37 -37
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +634 -620
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +23 -21
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +77 -74
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +795 -795
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +45 -29
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +142 -138
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +228 -189
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +88 -92
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +100 -98
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/depthQuery.wgsl.js +12 -3
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/easu.wgsl.js +80 -0
- package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/jnlm.compute.js +74 -74
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
- package/lib/renderer/wgsl/photonMap.compute.d.ts +29 -0
- package/lib/renderer/wgsl/photonMap.compute.js +352 -0
- package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +64 -64
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +23 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +531 -543
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +2 -2
- package/lib/scene/MaterialState.js +2 -2
- package/lib/scene/MaterialState.js.map +1 -1
- package/lib/scene/Scene.js.map +1 -1
- package/lib/settings/render.d.ts +22 -0
- package/lib/settings/render.js +2 -0
- package/lib/settings/render.js.map +1 -1
- package/lib/util/fromTHREE.js +23 -16
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +2 -1
- package/package.json +7 -4
- package/lib/oidnBundledWeights.cdn.d.ts +0 -2
- package/lib/oidnBundledWeights.cdn.js +0 -5
- package/lib/oidnBundledWeights.cdn.js.map +0 -1
- package/lib/renderer/bvh.worker.d.ts +0 -1
- package/lib/renderer/bvh.worker.js +0 -16
- package/lib/renderer/bvh.worker.js.map +0 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
- package/lib/renderer/bvhWorkerBuild.js +0 -17
- package/lib/renderer/bvhWorkerBuild.js.map +0 -1
- package/lib/renderer/lightCore.d.ts +0 -12
- package/lib/renderer/lightCore.js +0 -13
- package/lib/renderer/lightCore.js.map +0 -1
- package/lib/renderer/materialCore.d.ts +0 -8
- package/lib/renderer/materialCore.js +0 -9
- package/lib/renderer/materialCore.js.map +0 -1
- package/lib/scene/PixelTexture.d.ts +0 -6
- package/lib/scene/PixelTexture.js +0 -10
- package/lib/scene/PixelTexture.js.map +0 -1
- package/lib/util/studioLighting.d.ts +0 -18
- package/lib/util/studioLighting.js +0 -36
- package/lib/util/studioLighting.js.map +0 -1
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spectralPrefixGlsl, prefixCheckpoint, prefixSave, prefixRestore, prefixRandomBindings } from './chunks/spectralPrefix.glsl.js';
|
|
2
|
+
import { researchTransport } from '../researchTransport.js';
|
|
3
|
+
import { MAX_PATH_EVENTS_WEBGL } from '../pathLimits.js';
|
|
2
4
|
import cameraRayGlsl from './chunks/cameraRay.glsl.js';
|
|
3
5
|
// Portions adapted from ray-tracing-renderer@0.10.15
|
|
4
6
|
// (https://github.com/hoverinc/ray-tracing-renderer).
|
|
5
7
|
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
6
8
|
import commonGlsl from './chunks/common.glsl.js';
|
|
7
|
-
import
|
|
9
|
+
import { createRayTraceCoreGlsl } from './chunks/rayTraceCore.glsl.js';
|
|
8
10
|
import textureLinear from './chunks/textureLinear.glsl.js';
|
|
9
|
-
import
|
|
11
|
+
import { createMaterialBufferGlsl } from './chunks/materialBuffer.glsl.js';
|
|
10
12
|
import intersect from './chunks/intersect.glsl.js';
|
|
11
13
|
import randGlsl from './chunks/rand.glsl.js';
|
|
12
14
|
import random from './chunks/random.glsl.js';
|
|
13
15
|
import envMap from './chunks/envMap.glsl.js';
|
|
14
|
-
import
|
|
16
|
+
import { createSampleMaterialGlsl } from './chunks/sampleMaterial.glsl.js';
|
|
15
17
|
import sampleLightGlsl from './chunks/sampleLight.glsl.js';
|
|
16
18
|
import { FragmentShader, glsl, Shader } from '../shader.js';
|
|
17
19
|
import openPbrBsdfGlsl from './chunks/openPbrBsdf.glsl.js';
|
|
18
20
|
import samplingGlsl from './chunks/sampling.glsl.js';
|
|
21
|
+
import { spectrumGlsl } from '../spectrum.js';
|
|
19
22
|
import { isIntelMac } from '../util.js';
|
|
20
23
|
import uvProjectionGlsl from './chunks/uvProjection.glsl.js';
|
|
21
24
|
const doubleTransmissionCheckCode = glsl `
|
|
22
25
|
#if defined(HAS_TRANSMISSION) || defined(HAS_ALPHA)
|
|
23
26
|
if (!si.isTransparency && BOUNCES < 16 && depth * 2 > BOUNCES) {
|
|
24
|
-
|
|
27
|
+
path.abort = true;
|
|
25
28
|
return;
|
|
26
29
|
}
|
|
27
30
|
#endif
|
|
@@ -32,27 +35,40 @@ return;
|
|
|
32
35
|
// So here the code are injected separately.
|
|
33
36
|
const bounceCodeOnIntelMac = glsl `
|
|
34
37
|
|
|
35
|
-
for(int
|
|
36
|
-
if (
|
|
37
|
-
return vec4(
|
|
38
|
+
for(int Aj = 0; Aj < BOUNCES; Aj++) {{
|
|
39
|
+
if (path.abort) {
|
|
40
|
+
return vec4(path.li, path.alpha);
|
|
38
41
|
}
|
|
39
|
-
bounce(
|
|
42
|
+
bounce(path, depth, si, mat, outAux);
|
|
40
43
|
}}
|
|
41
44
|
`;
|
|
42
45
|
const bounceCodeOnOther = glsl `
|
|
43
|
-
bool
|
|
44
|
-
int
|
|
45
|
-
for(int idx = 0; idx < min(BOUNCES * 3, ${
|
|
46
|
-
if (
|
|
47
|
-
|
|
46
|
+
bool isOpaque = !si.isTransparency;
|
|
47
|
+
int activeBounceLimit = min(BOUNCES, bounceLimit);
|
|
48
|
+
for(int idx = 0; idx < min(BOUNCES * 3, ${MAX_PATH_EVENTS_WEBGL}); idx++) {
|
|
49
|
+
if (isOpaque && idx > activeBounceLimit) {
|
|
50
|
+
path.abort = true;
|
|
48
51
|
}
|
|
49
|
-
if (
|
|
50
|
-
return vec4(
|
|
52
|
+
if (path.abort) {
|
|
53
|
+
return vec4(path.li, path.alpha);
|
|
51
54
|
}
|
|
52
|
-
bounce(
|
|
55
|
+
bounce(path, depth, si, mat, outAux);
|
|
53
56
|
}
|
|
54
57
|
`;
|
|
55
|
-
export default function createRayTraceFragmentShader() {
|
|
58
|
+
export default function createRayTraceFragmentShader(...options) {
|
|
59
|
+
const channelIndependentLight = options[0]?.channelIndependentLight ?? false;
|
|
60
|
+
const sharePrefix = options[0]?.shareSpectralPrefix ?? false;
|
|
61
|
+
const surfacePrefix = {
|
|
62
|
+
path: ['Path', 'path'], si: ['SurfaceInteraction', 'si'], mat: ['OpenPbrResolvedMaterial', 'mat'],
|
|
63
|
+
aux: ['RayTraceAuxiliary', 'outAux'], depth: ['int', 'depth'], event: ['int', 'idx'],
|
|
64
|
+
ignored: ['bool', 'sampleIgnored'], opaque: ['bool', 'isOpaque'], ...prefixRandomBindings
|
|
65
|
+
};
|
|
66
|
+
const research = researchTransport()?.fragment(typeof options[0] === 'object' ? [] : options);
|
|
67
|
+
const enabled = research?.enabled ?? false;
|
|
68
|
+
const fragments = research?.fragments;
|
|
69
|
+
const materialBufferGlsl = createMaterialBufferGlsl(fragments);
|
|
70
|
+
const rayTraceCore = createRayTraceCoreGlsl(fragments);
|
|
71
|
+
const sampleMaterialGlsl = createSampleMaterialGlsl(fragments, channelIndependentLight);
|
|
56
72
|
const intelMac = isIntelMac();
|
|
57
73
|
return new FragmentShader({
|
|
58
74
|
name: 'rayTraceFrag',
|
|
@@ -61,19 +77,23 @@ export default function createRayTraceFragmentShader() {
|
|
|
61
77
|
BOUNCES: 2
|
|
62
78
|
},
|
|
63
79
|
uniforms: {
|
|
80
|
+
emissiveLightData: Shader.uniform('sampler2D'), emissiveLightColumns: Shader.uniform('int'),
|
|
81
|
+
emissiveChoiceOffset: Shader.uniform('int'), emissiveChoiceCount: Shader.uniform('int'), emissivePmfOffset: Shader.uniform('int'),
|
|
82
|
+
emissiveWeightTotal: Shader.uniform('float', 0),
|
|
64
83
|
cameraApertureRadius: Shader.uniform('float', 0),
|
|
65
84
|
cameraFocusDistance: Shader.uniform('float', 10),
|
|
66
85
|
viewProjectionInv: Shader.uniform('mat4'),
|
|
86
|
+
projectionInv: Shader.uniform('mat4'),
|
|
67
87
|
viewInv: Shader.uniform('mat4'),
|
|
68
88
|
transmissiveOutputAlphaMin: Shader.uniform('float'),
|
|
69
89
|
openPbrEnergyLut: Shader.uniform('sampler2D'),
|
|
70
90
|
viewportSize: Shader.uniform('vec2'),
|
|
71
|
-
|
|
91
|
+
spectralChannel: Shader.uniform('int', 0),
|
|
72
92
|
bevelEnabled: Shader.uniform('bool', true),
|
|
73
93
|
dispersionWavelengths: Shader.uniform('int', 3),
|
|
74
94
|
bounceLimit: Shader.uniform('int', 8)
|
|
75
95
|
},
|
|
76
|
-
includes: [rayTraceCore, materialBufferGlsl, intersect, random, envMap],
|
|
96
|
+
includes: [rayTraceCore, materialBufferGlsl, intersect, random, envMap, ...(research?.mixin ? [research.mixin] : [])],
|
|
77
97
|
main: glsl `
|
|
78
98
|
${commonGlsl}
|
|
79
99
|
|
|
@@ -91,13 +111,16 @@ ${intersect.main}
|
|
|
91
111
|
${envMap.main}
|
|
92
112
|
|
|
93
113
|
${samplingGlsl}
|
|
114
|
+
${spectrumGlsl}
|
|
94
115
|
${openPbrBsdfGlsl}
|
|
95
116
|
|
|
96
|
-
float
|
|
97
|
-
float
|
|
117
|
+
float rq;
|
|
118
|
+
float pathWavelength;
|
|
119
|
+
int rp;
|
|
120
|
+
int pathChannel;
|
|
98
121
|
|
|
99
122
|
${sampleLightGlsl}
|
|
100
|
-
${sampleMaterialGlsl}
|
|
123
|
+
${research?.declarations ?? ''}${sampleMaterialGlsl}
|
|
101
124
|
|
|
102
125
|
${cameraRayGlsl}
|
|
103
126
|
struct RayTraceAuxiliary {
|
|
@@ -109,8 +132,8 @@ bool isBlank;
|
|
|
109
132
|
bool isShadowCatcher;
|
|
110
133
|
};
|
|
111
134
|
|
|
112
|
-
void bounce(inout Path
|
|
113
|
-
|
|
135
|
+
${sharePrefix ? spectralPrefixGlsl + prefixCheckpoint('spSurface', surfacePrefix) : ''}void ${sharePrefix ? 'shadeSurfaceVertex' : 'bounce'}(inout Path path, inout int depth, inout SurfaceInteraction si, inout OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux${sharePrefix ? ', out bool sampleIgnored' : ''}) {${sharePrefix ? '\n sampleIgnored = false;' : ''}
|
|
136
|
+
samplingBounce = uint(max(depth, 0));
|
|
114
137
|
|
|
115
138
|
|
|
116
139
|
|
|
@@ -119,11 +142,11 @@ ${intelMac ? doubleTransmissionCheckCode : ''}
|
|
|
119
142
|
|
|
120
143
|
bool isShadowCatcher = mat.materialType == SHADOW_CATCHER;
|
|
121
144
|
if (isShadowCatcher) {
|
|
122
|
-
if (
|
|
145
|
+
if (path.fromEye) {
|
|
123
146
|
|
|
124
147
|
|
|
125
148
|
outAux.albedo = vec3(1.0);
|
|
126
|
-
outAux.normal = dot(si.normal,
|
|
149
|
+
outAux.normal = dot(si.normal, path.ray.d) > 0.0 ? -si.normal : si.normal;
|
|
127
150
|
si.hit = false;
|
|
128
151
|
outAux.isShadowCatcher = true;
|
|
129
152
|
}
|
|
@@ -131,97 +154,97 @@ else {
|
|
|
131
154
|
|
|
132
155
|
|
|
133
156
|
#ifdef USE_ENVMAP
|
|
134
|
-
if (
|
|
157
|
+
if (path.isNextRefraction) {
|
|
135
158
|
|
|
136
159
|
|
|
137
160
|
|
|
138
|
-
vec4 bg =
|
|
139
|
-
bg.rgb =
|
|
140
|
-
float
|
|
141
|
-
:
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
161
|
+
vec4 bg = cq(path.ray.o, path.ray.d);
|
|
162
|
+
bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
|
|
163
|
+
float cP = path.scatteringIsDelta ? 1.0
|
|
164
|
+
: aG(path.scatteringPdf,
|
|
165
|
+
envMapPdf(cU(path.ray.d)) * envLightSelectionPmf);
|
|
166
|
+
path.li += cP * path.beta * bg.rgb * bg.a;
|
|
167
|
+
path.alpha = max(path.alpha, bg.a);
|
|
145
168
|
}
|
|
146
169
|
else {
|
|
147
|
-
vec2
|
|
148
|
-
vec3 emission = textureLinear(envMap,
|
|
149
|
-
emission =
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
170
|
+
vec2 xp = cU(path.ray.d);
|
|
171
|
+
vec3 emission = textureLinear(envMap, xp).rgb;
|
|
172
|
+
emission = sampling_spectral_rgb_filter(emission, pathChannel);
|
|
173
|
+
path.li += path.beta * emission *
|
|
174
|
+
aG(
|
|
175
|
+
path.scatteringPdf,
|
|
176
|
+
envMapPdf(xp) * envLightSelectionPmf
|
|
154
177
|
);
|
|
155
178
|
}
|
|
156
179
|
#else
|
|
157
|
-
vec4 bg =
|
|
158
|
-
bg.rgb =
|
|
159
|
-
|
|
180
|
+
vec4 bg = cq(path.ray.o, path.ray.d);
|
|
181
|
+
bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
|
|
182
|
+
path.li += path.beta * bg.rgb * bg.a;
|
|
160
183
|
#endif
|
|
161
|
-
|
|
184
|
+
path.abort = true;
|
|
162
185
|
return;
|
|
163
186
|
}
|
|
164
187
|
}
|
|
165
188
|
|
|
166
189
|
if (!si.hit) {
|
|
167
190
|
|
|
168
|
-
vec4 bg =
|
|
191
|
+
vec4 bg = cq(path.ray.o, path.ray.d);
|
|
169
192
|
|
|
170
193
|
|
|
171
194
|
|
|
172
|
-
bg.rgb =
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
195
|
+
bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
|
|
196
|
+
if (path.fromEye) {
|
|
197
|
+
path.li = bg.rgb * bg.a;
|
|
198
|
+
path.alpha = bg.a;
|
|
176
199
|
|
|
177
200
|
outAux.isBlank = bg.a < 0.01;
|
|
178
201
|
}
|
|
179
202
|
else {
|
|
180
|
-
Ray cam =
|
|
181
|
-
bool
|
|
203
|
+
Ray cam = cV(v_Texcoord + uH());
|
|
204
|
+
bool ou = dot(cam.d, path.ray.d) > 0.0;
|
|
182
205
|
if (transmissiveOutputAlphaMin < 1.0) {
|
|
183
|
-
if (
|
|
184
|
-
|
|
206
|
+
if (ou) {
|
|
207
|
+
path.alpha = max(path.alpha, bg.a);
|
|
185
208
|
} else {
|
|
186
|
-
|
|
209
|
+
path.alpha = 1.0;
|
|
187
210
|
}
|
|
188
211
|
}
|
|
189
212
|
#if !defined(USE_ENVMAP)
|
|
190
213
|
|
|
191
|
-
if (
|
|
192
|
-
|
|
214
|
+
if (ou) {
|
|
215
|
+
path.li += path.beta * aG(path.scatteringPdf, 1.0) * bg.rgb;
|
|
193
216
|
}
|
|
194
217
|
#endif
|
|
195
218
|
}
|
|
196
|
-
|
|
219
|
+
path.abort = true;
|
|
197
220
|
return;
|
|
198
221
|
}
|
|
199
222
|
|
|
200
|
-
bool
|
|
223
|
+
${sharePrefix ? ' sampleIgnored = false;' : ' bool sampleIgnored = false;'}
|
|
201
224
|
if ((mat.materialType == STANDARD || mat.materialType == UNLIT)) {
|
|
202
225
|
if (transmissiveOutputAlphaMin < 1.0) {
|
|
203
226
|
|
|
204
227
|
float alpha = max(1.0 - mat.transmissionWeight, 1.0 - pow(1.0 - transmissiveOutputAlphaMin, float(depth)));
|
|
205
|
-
|
|
228
|
+
path.alpha = max(alpha, path.alpha);
|
|
206
229
|
}
|
|
207
230
|
float alpha = mat.alpha;
|
|
208
231
|
if (alpha < 1.0) {
|
|
209
232
|
|
|
210
233
|
|
|
211
|
-
|
|
212
|
-
if (
|
|
213
|
-
|
|
234
|
+
path.alpha = max(path.alpha, alpha);
|
|
235
|
+
if (cm(3u) > alpha) {
|
|
236
|
+
sampleIgnored = true;
|
|
214
237
|
}
|
|
215
238
|
}
|
|
216
|
-
if (!
|
|
217
|
-
|
|
239
|
+
if (!sampleIgnored) {
|
|
240
|
+
nB(si, mat, path);
|
|
218
241
|
}
|
|
219
242
|
else {
|
|
220
|
-
|
|
243
|
+
path.ray.o = si.position + path.ray.d * EPS;
|
|
221
244
|
}
|
|
222
245
|
}
|
|
223
246
|
|
|
224
|
-
if (!si.albedoSampled && !
|
|
247
|
+
if (!si.albedoSampled && !sampleIgnored) {
|
|
225
248
|
|
|
226
249
|
if ((mat.materialType == STANDARD || mat.materialType == UNLIT) &&
|
|
227
250
|
!(mat.transmissionWeight > 0.5 ||
|
|
@@ -243,100 +266,105 @@ si.albedoSampled = true;
|
|
|
243
266
|
|
|
244
267
|
|
|
245
268
|
#ifdef USE_RR
|
|
246
|
-
|
|
269
|
+
int wj = path.scatteringMediumEntered ? RR_MAX : 2;
|
|
270
|
+
if (depth >= wj && !sampleIgnored) {
|
|
247
271
|
|
|
248
|
-
float
|
|
249
|
-
float q = max(0.0, 1.0 -
|
|
250
|
-
if (
|
|
272
|
+
float ql = max(max(path.beta.x, path.beta.y), path.beta.z);
|
|
273
|
+
float q = max(0.0, 1.0 - ql);
|
|
274
|
+
if (sample1D(aX(RUSSIAN_ROULETTE)) < q) {
|
|
251
275
|
|
|
252
276
|
|
|
253
|
-
|
|
254
|
-
|
|
277
|
+
path.alpha = 1.0;
|
|
278
|
+
path.abort = true;
|
|
255
279
|
}
|
|
256
280
|
else {
|
|
257
|
-
|
|
281
|
+
path.beta /= 1.0 - q;
|
|
258
282
|
}
|
|
259
283
|
}
|
|
260
284
|
#endif
|
|
261
285
|
|
|
262
|
-
if (
|
|
286
|
+
if (path.abort) {
|
|
263
287
|
return;
|
|
264
288
|
}
|
|
265
289
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
290
|
+
${sharePrefix ? /* glsl */ ` return;
|
|
291
|
+
}
|
|
292
|
+
void qU(inout Path path, inout int depth, inout SurfaceInteraction si, inout OpenPbrResolvedMaterial mat, bool sampleIgnored) {
|
|
293
|
+
` : ''}
|
|
294
|
+
${sharePrefix ? '' : /* glsl */ ` intersectScene(path.ray, si, true);
|
|
295
|
+
getMaterial(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
|
|
269
296
|
si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
|
|
270
|
-
|
|
297
|
+
`}
|
|
271
298
|
|
|
272
299
|
|
|
273
300
|
|
|
274
301
|
if (dispersionWavelengths == 1 && si.hit && mat.transmissionWeight > 0.001 && mat.transmissionDispersionScale > 0.001) {
|
|
275
|
-
|
|
302
|
+
pathWavelength = rq;
|
|
303
|
+
pathChannel = rp;
|
|
276
304
|
}
|
|
277
|
-
if (mat.transmissionWeight > 0.001 &&
|
|
278
|
-
mat.specularIor =
|
|
279
|
-
|
|
305
|
+
if (mat.transmissionWeight > 0.001 && pathWavelength > 0.0) {
|
|
306
|
+
mat.specularIor = sampling_cauchy_ior(
|
|
307
|
+
pathWavelength,
|
|
280
308
|
mat.specularIor,
|
|
281
309
|
mat.transmissionDispersionScale,
|
|
282
310
|
mat.dispersionAbbeNumber
|
|
283
311
|
);
|
|
284
312
|
}
|
|
285
313
|
|
|
286
|
-
if (
|
|
314
|
+
if (sampleIgnored) {
|
|
287
315
|
return;
|
|
288
316
|
}
|
|
289
317
|
|
|
290
|
-
bool
|
|
318
|
+
bool hN = cm(3u) < mat.alpha;
|
|
291
319
|
#ifdef NUM_LIGHTS
|
|
292
320
|
|
|
293
321
|
LightSampleRec lightSample;
|
|
294
322
|
for (int i = 0; i < NUM_LIGHTS; i++) {
|
|
295
323
|
|
|
296
|
-
Light light =
|
|
297
|
-
float d =
|
|
298
|
-
bool
|
|
299
|
-
if (d != INF && !(
|
|
324
|
+
Light light = fetchLight(i);
|
|
325
|
+
float d = iB(path.ray, light, lightSample);
|
|
326
|
+
bool mz = si.hit && d > distance(si.position, path.ray.o);
|
|
327
|
+
if (d != INF && !(mz && hN)) {
|
|
300
328
|
lightSample.pdf *= light.selectionPmf;
|
|
301
|
-
float
|
|
302
|
-
lightSample.emission =
|
|
303
|
-
|
|
329
|
+
float misWeight = aG(path.scatteringPdf, lightSample.pdf);
|
|
330
|
+
lightSample.emission = sampling_spectral_rgb_filter(lightSample.emission, pathChannel);
|
|
331
|
+
${enabled ? 'if (!causticHitOwned(path)) { ' : ''}path.li += misWeight * path.beta * lightSample.emission;${enabled ? ' }' : ''}
|
|
304
332
|
|
|
305
|
-
|
|
306
|
-
|
|
333
|
+
path.alpha = 1.0;
|
|
334
|
+
path.abort = true;
|
|
307
335
|
}
|
|
308
336
|
}
|
|
309
337
|
#endif
|
|
310
338
|
|
|
311
339
|
#ifdef USE_ENVMAP
|
|
312
|
-
if (!(si.hit &&
|
|
313
|
-
if (
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
vec4 bg =
|
|
317
|
-
bg.rgb =
|
|
318
|
-
float
|
|
319
|
-
:
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
340
|
+
if (!(si.hit && hN)) {
|
|
341
|
+
if (path.isNextRefraction) {
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
vec4 bg = cq(path.ray.o, path.ray.d);
|
|
345
|
+
bg.rgb = sampling_spectral_rgb_filter(bg.rgb, pathChannel);
|
|
346
|
+
float cP = path.scatteringIsDelta ? 1.0
|
|
347
|
+
: aG(path.scatteringPdf,
|
|
348
|
+
envMapPdf(cU(path.ray.d)) * envLightSelectionPmf);
|
|
349
|
+
path.li += cP * path.beta * bg.rgb * bg.a;
|
|
350
|
+
path.alpha = max(path.alpha, bg.a);
|
|
351
|
+
path.abort = true;
|
|
324
352
|
return;
|
|
325
353
|
}
|
|
326
|
-
vec2 uv =
|
|
354
|
+
vec2 uv = cU(path.ray.d);
|
|
327
355
|
vec3 emission = textureLinear(envMap, uv).rgb;
|
|
328
|
-
float
|
|
329
|
-
|
|
330
|
-
|
|
356
|
+
float misWeight = aG(
|
|
357
|
+
path.scatteringPdf,
|
|
358
|
+
envMapPdf(uv) * envLightSelectionPmf
|
|
331
359
|
);
|
|
332
|
-
emission =
|
|
333
|
-
|
|
360
|
+
emission = sampling_spectral_rgb_filter(emission, pathChannel);
|
|
361
|
+
path.li += path.beta * emission * misWeight;
|
|
334
362
|
|
|
335
363
|
|
|
336
364
|
#if !defined(USE_BACKGROUND)
|
|
337
|
-
|
|
365
|
+
path.alpha = 1.0;
|
|
338
366
|
#endif
|
|
339
|
-
|
|
367
|
+
path.abort = true;
|
|
340
368
|
return;
|
|
341
369
|
}
|
|
342
370
|
#endif
|
|
@@ -345,177 +373,210 @@ depth++;
|
|
|
345
373
|
}
|
|
346
374
|
|
|
347
375
|
|
|
348
|
-
vec2
|
|
376
|
+
vec2 lD(float radius, float xi) {
|
|
349
377
|
float x = 0.25;
|
|
350
|
-
for (int
|
|
378
|
+
for (int iteration = 0; iteration < 10; iteration++) {
|
|
351
379
|
float x2 = x * x;
|
|
352
380
|
float x3 = x2 * x;
|
|
353
|
-
float
|
|
381
|
+
float lU = 1.0 - x;
|
|
354
382
|
float value = 10.0 * x2 - 20.0 * x3 + 15.0 * x2 * x2 -
|
|
355
383
|
4.0 * x2 * x3 - xi;
|
|
356
|
-
float
|
|
357
|
-
if (abs(value) < 1e-6 ||
|
|
358
|
-
x = clamp(x - value /
|
|
384
|
+
float nL = 20.0 * x * lU * lU * lU;
|
|
385
|
+
if (abs(value) < 1e-6 || nL == 0.0) break;
|
|
386
|
+
x = clamp(x - value / nL, 0.0, 1.0);
|
|
359
387
|
}
|
|
360
|
-
float
|
|
388
|
+
float jW = x * radius;
|
|
361
389
|
return vec2(
|
|
362
|
-
|
|
363
|
-
sqrt(max(radius * radius -
|
|
390
|
+
jW,
|
|
391
|
+
sqrt(max(radius * radius - jW * jW, 0.0))
|
|
364
392
|
);
|
|
365
393
|
}
|
|
366
394
|
|
|
367
|
-
float
|
|
368
|
-
if (
|
|
369
|
-
float
|
|
370
|
-
return
|
|
395
|
+
float bevelCubicPdf(float radius, float gO) {
|
|
396
|
+
if (gO >= radius) return 0.0;
|
|
397
|
+
float falloff = radius - gO;
|
|
398
|
+
return falloff * falloff * falloff;
|
|
371
399
|
}
|
|
372
400
|
|
|
373
401
|
|
|
374
|
-
vec3
|
|
402
|
+
vec3 kB(SurfaceInteraction source, float radius) {
|
|
375
403
|
vec3 geometricNormal = source.faceNormal;
|
|
376
404
|
if (dot(geometricNormal, source.vertexNormal) < 0.0) geometricNormal = -geometricNormal;
|
|
377
405
|
vec3 tangent;
|
|
378
406
|
vec3 bitangent;
|
|
379
|
-
|
|
380
|
-
vec3
|
|
381
|
-
|
|
382
|
-
for (int
|
|
383
|
-
vec2
|
|
384
|
-
float
|
|
385
|
-
float
|
|
386
|
-
vec3
|
|
387
|
-
vec3
|
|
388
|
-
vec3
|
|
389
|
-
float
|
|
390
|
-
float
|
|
391
|
-
float
|
|
392
|
-
if (
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
else if (
|
|
396
|
-
vec3
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
407
|
+
sampling_orthonormal_basis(geometricNormal, tangent, bitangent);
|
|
408
|
+
vec3 jd = vec3(0.0);
|
|
409
|
+
|
|
410
|
+
for (int iN = 0; iN < BEVEL_SAMPLES; iN++) {
|
|
411
|
+
vec2 rh = sample2D(CAMERA_BEVEL_BASE + uint(iN));
|
|
412
|
+
float cu = rh.x;
|
|
413
|
+
float qt = rh.y;
|
|
414
|
+
vec3 dc = geometricNormal;
|
|
415
|
+
vec3 fU = tangent;
|
|
416
|
+
vec3 eo = bitangent;
|
|
417
|
+
float gw = 0.5;
|
|
418
|
+
float iH = 0.25;
|
|
419
|
+
float gV = 0.25;
|
|
420
|
+
if (cu < 0.5) {
|
|
421
|
+
cu *= 2.0;
|
|
422
|
+
}
|
|
423
|
+
else if (cu < 0.75) {
|
|
424
|
+
vec3 os = dc;
|
|
425
|
+
dc = fU;
|
|
426
|
+
fU = os;
|
|
427
|
+
gw = 0.25;
|
|
428
|
+
iH = 0.5;
|
|
429
|
+
cu = (cu - 0.5) * 4.0;
|
|
402
430
|
}
|
|
403
431
|
else {
|
|
404
|
-
vec3
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
vec2
|
|
413
|
-
float phi = TWOPI *
|
|
414
|
-
vec3
|
|
415
|
-
(cos(phi) *
|
|
432
|
+
vec3 os = dc;
|
|
433
|
+
dc = eo;
|
|
434
|
+
eo = os;
|
|
435
|
+
gw = 0.25;
|
|
436
|
+
gV = 0.5;
|
|
437
|
+
cu = (cu - 0.75) * 4.0;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
vec2 hm = lD(radius, qt);
|
|
441
|
+
float phi = TWOPI * cu;
|
|
442
|
+
vec3 sI = hm.x *
|
|
443
|
+
(cos(phi) * fU + sin(phi) * eo);
|
|
416
444
|
Ray ray;
|
|
417
|
-
|
|
445
|
+
initRay(
|
|
418
446
|
ray,
|
|
419
|
-
source.position +
|
|
420
|
-
-
|
|
447
|
+
source.position + dc * hm.y + sI,
|
|
448
|
+
-dc
|
|
421
449
|
);
|
|
422
450
|
SurfaceInteraction hit;
|
|
423
451
|
intersectSceneBevel(
|
|
424
452
|
ray,
|
|
425
453
|
hit,
|
|
426
454
|
source.instanceIndex,
|
|
427
|
-
max(2.0 *
|
|
455
|
+
max(2.0 * hm.y, EPS)
|
|
428
456
|
);
|
|
429
457
|
if (!hit.hit) continue;
|
|
430
458
|
|
|
431
|
-
float
|
|
432
|
-
float
|
|
433
|
-
float
|
|
434
|
-
float weight =
|
|
435
|
-
|
|
436
|
-
|
|
459
|
+
float lV = gw * abs(dot(dc, hit.faceNormal));
|
|
460
|
+
float oi = iH * abs(dot(fU, hit.faceNormal));
|
|
461
|
+
float kR = gV * abs(dot(eo, hit.faceNormal));
|
|
462
|
+
float weight = lV / max(
|
|
463
|
+
lV * lV + oi * oi +
|
|
464
|
+
kR * kR,
|
|
437
465
|
1e-8
|
|
438
466
|
);
|
|
439
|
-
weight *=
|
|
440
|
-
max(
|
|
441
|
-
|
|
467
|
+
weight *= bevelCubicPdf(radius, distance(hit.position, source.position)) /
|
|
468
|
+
max(bevelCubicPdf(radius, hm.x), 1e-8);
|
|
469
|
+
jd += weight * hit.vertexNormal;
|
|
442
470
|
}
|
|
443
471
|
|
|
444
|
-
if (dot(
|
|
445
|
-
vec3
|
|
446
|
-
vec3 result = source.normal +
|
|
472
|
+
if (dot(jd, jd) <= 1e-12) return source.normal;
|
|
473
|
+
vec3 kt = normalize(jd);
|
|
474
|
+
vec3 result = source.normal + kt - source.vertexNormal;
|
|
447
475
|
return dot(result, result) > 1e-12 ? normalize(result) : source.normal;
|
|
448
476
|
}
|
|
449
477
|
|
|
450
|
-
vec4
|
|
451
|
-
Path
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
478
|
+
vec4 cJ(SurfaceInteraction si, Ray ray, OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux) {
|
|
479
|
+
Path path; path.scatteringMediumEntered = false;
|
|
480
|
+
path.ray = ray;
|
|
481
|
+
path.li = vec3(0);
|
|
482
|
+
path.alpha = transmissiveOutputAlphaMin < 1.0 ? 0.0 : 1.0;
|
|
483
|
+
path.beta = vec3(1.0);
|
|
484
|
+
path.fromEye = true;${enabled ? /* glsl */ `
|
|
485
|
+
path.causticK = 0; path.causticSingleT = false;
|
|
486
|
+
path.causticReceiverPrimary = false; path.causticHasReceiver = false; path.causticMneeReceiver=false;` : ''}
|
|
487
|
+
path.scatteringPdf = 0.0;
|
|
488
|
+
path.scatteringIsDelta = false;
|
|
489
|
+
path.isNextRefraction = false;
|
|
490
|
+
path.abort = false;
|
|
461
491
|
int depth = 0;
|
|
462
|
-
${
|
|
463
|
-
return
|
|
492
|
+
${sharePrefix ? /* glsl */ ` int spSlot = qz++;
|
|
493
|
+
if (spActive && spChannel > 1 && eB[spSlot].ready) return rN(spSlot, outAux);
|
|
494
|
+
bool isOpaque = !si.isTransparency;
|
|
495
|
+
bool sampleIgnored = false, spResume = false;
|
|
496
|
+
int spEvent = 0;
|
|
497
|
+
if (spActive && spChannel > 1 && fC == spSlot) {
|
|
498
|
+
int idx = 0;
|
|
499
|
+
${prefixRestore('spSurface', surfacePrefix)}
|
|
500
|
+
spEvent = idx; spResume = true; qA(path);
|
|
501
|
+
}
|
|
502
|
+
int activeBounceLimit = min(BOUNCES, bounceLimit);
|
|
503
|
+
for (int idx = ${intelMac ? '0' : 'spEvent'}; idx < ${intelMac ? 'BOUNCES' : `min(BOUNCES * 3, ${MAX_PATH_EVENTS_WEBGL})`}; idx++) {
|
|
504
|
+
${intelMac ? ' if (idx < spEvent) continue;' : ' if (isOpaque && idx > activeBounceLimit) path.abort = true;'}
|
|
505
|
+
if (path.abort) break;
|
|
506
|
+
if (!spResume) {
|
|
507
|
+
shadeSurfaceVertex(path, depth, si, mat, outAux, sampleIgnored);
|
|
508
|
+
if (!path.abort) {
|
|
509
|
+
intersectScene(path.ray, si, true);
|
|
510
|
+
getMaterial(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
|
|
511
|
+
si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
spResume = false;
|
|
515
|
+
if (!path.abort) {
|
|
516
|
+
if (spActive && mat.transmissionWeight > 0.001 && gf(mat)) {
|
|
517
|
+
${prefixSave('spSurface', surfacePrefix)}
|
|
518
|
+
fC = spSlot; qA(path);
|
|
519
|
+
}
|
|
520
|
+
qU(path, depth, si, mat, sampleIgnored);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return spFinish(spSlot, vec4(path.li, path.alpha), outAux);` : /* glsl */ `${intelMac ? bounceCodeOnIntelMac : bounceCodeOnOther}
|
|
524
|
+
return vec4(path.li, path.alpha);`}
|
|
464
525
|
}
|
|
465
526
|
|
|
466
|
-
vec4
|
|
527
|
+
vec4 jb(SurfaceInteraction si, Ray ray, OpenPbrResolvedMaterial mat, inout RayTraceAuxiliary outAux) {
|
|
467
528
|
float coverage = clamp(mat.alpha, 0.0, 1.0);
|
|
468
529
|
if (!si.hit || (mat.materialType != STANDARD && mat.materialType != UNLIT) || coverage >= 1.0) {
|
|
469
|
-
return
|
|
530
|
+
return cJ(si, ray, mat, outAux);
|
|
470
531
|
}
|
|
471
532
|
|
|
472
533
|
|
|
473
534
|
|
|
474
535
|
|
|
475
536
|
|
|
476
|
-
Ray
|
|
477
|
-
|
|
478
|
-
SurfaceInteraction
|
|
479
|
-
|
|
480
|
-
intersectScene(
|
|
481
|
-
OpenPbrResolvedMaterial
|
|
482
|
-
|
|
483
|
-
RayTraceAuxiliary
|
|
484
|
-
if (
|
|
485
|
-
|
|
537
|
+
Ray wt = ray;
|
|
538
|
+
wt.o = si.position + ray.d * (EPS * 0.02);
|
|
539
|
+
SurfaceInteraction kq = si;
|
|
540
|
+
kq.albedoSampled = false;
|
|
541
|
+
intersectScene(wt, kq, false);
|
|
542
|
+
OpenPbrResolvedMaterial pN;
|
|
543
|
+
getMaterial(pN, kq.materialIndex, kq.uv, kq.uv1, kq.instanceIndex, kq.vertexColor);
|
|
544
|
+
RayTraceAuxiliary backAux = outAux;
|
|
545
|
+
if (kq.hit && (pN.materialType == STANDARD || pN.materialType == UNLIT)) {
|
|
546
|
+
backAux.albedo = pN.transmissionWeight > 0.5
|
|
486
547
|
? vec3(1.0)
|
|
487
|
-
:
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
548
|
+
: pN.baseColor;
|
|
549
|
+
backAux.normal = dot(
|
|
550
|
+
kq.normal,
|
|
551
|
+
kq.position - vec3(viewInv[3])
|
|
491
552
|
) > 0.0
|
|
492
|
-
? -
|
|
493
|
-
:
|
|
494
|
-
|
|
553
|
+
? -kq.normal
|
|
554
|
+
: kq.normal;
|
|
555
|
+
kq.albedoSampled = pN.transmissionWeight > 0.5;
|
|
495
556
|
}
|
|
496
|
-
vec4 back =
|
|
557
|
+
vec4 back = cJ(kq, wt, pN, backAux);
|
|
497
558
|
if (coverage <= 0.0) {
|
|
498
|
-
outAux =
|
|
559
|
+
outAux = backAux;
|
|
499
560
|
return back;
|
|
500
561
|
}
|
|
501
562
|
|
|
502
|
-
SurfaceInteraction
|
|
503
|
-
OpenPbrResolvedMaterial
|
|
504
|
-
|
|
505
|
-
RayTraceAuxiliary
|
|
506
|
-
vec4 front =
|
|
507
|
-
outAux.albedo = mix(
|
|
508
|
-
vec3
|
|
509
|
-
outAux.normal = dot(
|
|
510
|
-
? normalize(
|
|
563
|
+
SurfaceInteraction zY = si;
|
|
564
|
+
OpenPbrResolvedMaterial xq = mat;
|
|
565
|
+
xq.alpha = 1.0;
|
|
566
|
+
RayTraceAuxiliary tA = outAux;
|
|
567
|
+
vec4 front = cJ(zY, ray, xq, tA);
|
|
568
|
+
outAux.albedo = mix(backAux.albedo, tA.albedo, coverage);
|
|
569
|
+
vec3 aS = mix(backAux.normal, tA.normal, coverage);
|
|
570
|
+
outAux.normal = dot(aS, aS) > 1e-12
|
|
571
|
+
? normalize(aS)
|
|
511
572
|
: vec3(0.0);
|
|
512
|
-
outAux.isBlank =
|
|
573
|
+
outAux.isBlank = backAux.isBlank && tA.isBlank;
|
|
513
574
|
return mix(back, front, coverage);
|
|
514
575
|
}
|
|
515
576
|
|
|
516
577
|
|
|
517
578
|
|
|
518
|
-
vec4
|
|
579
|
+
vec4 hq(Ray ray, out RayTraceAuxiliary outAux) {
|
|
519
580
|
|
|
520
581
|
SurfaceInteraction si;
|
|
521
582
|
OpenPbrResolvedMaterial mat;
|
|
@@ -528,13 +589,13 @@ si.mediumScattering = vec3(0.0);
|
|
|
528
589
|
si.mediumAnisotropy = 0.0;
|
|
529
590
|
#endif
|
|
530
591
|
|
|
531
|
-
intersectScene(ray, si, false);
|
|
532
|
-
|
|
592
|
+
${sharePrefix ? ' if (spChannel == 1) {\n' : ''} intersectScene(ray, si, false);
|
|
593
|
+
getMaterial(mat, si.materialIndex, si.uv, si.uv1, si.instanceIndex, si.vertexColor);
|
|
533
594
|
si.isTransparency = mat.transmissionWeight > 0.001 || mat.subsurfaceWeight > 0.001 || mat.alpha < 0.999;
|
|
534
595
|
|
|
535
596
|
#ifdef HAS_BEVEL
|
|
536
597
|
if (bevelEnabled && mat.bevel > 0.0) {
|
|
537
|
-
si.normal =
|
|
598
|
+
si.normal = kB(si, mat.bevel);
|
|
538
599
|
}
|
|
539
600
|
#endif
|
|
540
601
|
|
|
@@ -550,33 +611,47 @@ outAux.normal = dot(si.normal, si.position - vec3(viewInv[3])) > 0.0
|
|
|
550
611
|
si.albedoSampled = mat.transmissionWeight > 0.5;
|
|
551
612
|
}
|
|
552
613
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
614
|
+
${sharePrefix ? /* glsl */ ` lY = qI(si, mat, outAux, s0, hashedCounter, samplingBounce);
|
|
615
|
+
} else {
|
|
616
|
+
si = lY.si; mat = lY.mat; outAux = lY.aux;
|
|
617
|
+
s0 = lY.rng; hashedCounter = lY.counter; samplingBounce = lY.bounce;
|
|
618
|
+
}
|
|
619
|
+
spActive = ${enabled ? 'false' : '!(mat.transmissionDispersionScale > 0.001 && mat.specularIor != 1.0)'};
|
|
620
|
+
pathChannel = spActive ? 0 : spChannel;
|
|
621
|
+
qz = 0;
|
|
622
|
+
` : ''} if (mat.transmissionDispersionScale > 0.001) {
|
|
623
|
+
mat.specularIor = sampling_cauchy_ior(
|
|
624
|
+
pathWavelength,
|
|
556
625
|
mat.specularIor,
|
|
557
626
|
mat.transmissionDispersionScale,
|
|
558
627
|
mat.dispersionAbbeNumber
|
|
559
628
|
);
|
|
560
629
|
}
|
|
561
|
-
return
|
|
630
|
+
return jb(si, ray, mat, outAux);
|
|
562
631
|
}
|
|
563
632
|
|
|
564
|
-
void main() {
|
|
633
|
+
void ${sharePrefix ? 'traceSpectralWavelength' : 'main'}(${sharePrefix ? 'int channel' : ''}) {
|
|
565
634
|
|
|
566
|
-
|
|
567
|
-
|
|
635
|
+
${fragments?.debugInit ?? ''} sP();
|
|
636
|
+
fA(v_Texcoord * viewportSize, int(uint(sampleCount) ^ cD(uint(sequenceSeed))));
|
|
568
637
|
|
|
569
638
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
if (
|
|
573
|
-
float
|
|
574
|
-
|
|
639
|
+
${sharePrefix ? ' spChannel = channel;\n' : ''} pathWavelength = 0.0;
|
|
640
|
+
pathChannel = 0;
|
|
641
|
+
if (spectralChannel > 0) {
|
|
642
|
+
float aE = sample1D(CAMERA_WAVELENGTH);
|
|
643
|
+
if (dispersionWavelengths == 1) {
|
|
644
|
+
rp = min(int(aE * 3.0), 2) + 1;
|
|
645
|
+
rq = ce(rp - 1, fract(aE * 3.0));
|
|
646
|
+
} else {
|
|
647
|
+
pathChannel = ${sharePrefix ? 'spChannel' : 'spectralChannel'};
|
|
648
|
+
pathWavelength = ce(${sharePrefix ? 'spChannel' : 'spectralChannel'} - 1, aE);
|
|
649
|
+
}
|
|
575
650
|
}
|
|
576
651
|
|
|
577
652
|
|
|
578
653
|
|
|
579
|
-
Ray cam =
|
|
654
|
+
Ray cam = pq();
|
|
580
655
|
|
|
581
656
|
RayTraceAuxiliary outAux;
|
|
582
657
|
outAux.albedo = vec3(0.0);
|
|
@@ -584,40 +659,51 @@ outAux.normal = vec3(0.0);
|
|
|
584
659
|
outAux.isBlank = false;
|
|
585
660
|
outAux.isShadowCatcher = false;
|
|
586
661
|
|
|
587
|
-
vec4
|
|
662
|
+
vec4 liAndAlpha = hq(cam, outAux);
|
|
588
663
|
|
|
589
664
|
|
|
590
665
|
|
|
591
666
|
#ifdef CLAMPING
|
|
592
667
|
float clamping = float(CLAMPING);
|
|
593
|
-
|
|
668
|
+
liAndAlpha.rgb = clamp(liAndAlpha.rgb, -clamping, clamping);
|
|
594
669
|
#endif
|
|
595
670
|
|
|
596
671
|
|
|
597
|
-
if (
|
|
672
|
+
if (pathWavelength > 0.0) {
|
|
598
673
|
|
|
599
|
-
|
|
674
|
+
liAndAlpha.rgb *= 3.0;
|
|
600
675
|
if (dispersionWavelengths != 1) {
|
|
601
676
|
|
|
602
677
|
|
|
603
|
-
|
|
678
|
+
liAndAlpha.a /= 3.0;
|
|
604
679
|
}
|
|
605
680
|
}
|
|
606
|
-
if (!(
|
|
607
|
-
|
|
681
|
+
if (!(liAndAlpha.x < INF && liAndAlpha.x > -EPS)) {
|
|
682
|
+
liAndAlpha = vec4(0, 0, 0, 1);
|
|
608
683
|
}
|
|
609
684
|
|
|
610
|
-
out_color =
|
|
685
|
+
out_color = ${research?.debugOutput || 'liAndAlpha'};
|
|
611
686
|
out_albedo = vec4(outAux.albedo, outAux.isBlank ? 0.0 : 1.0);
|
|
612
687
|
out_normal = vec4(outAux.normal, 1.0);
|
|
613
688
|
|
|
614
689
|
|
|
615
|
-
float
|
|
690
|
+
float jZ = dot(liAndAlpha.rgb, vec3(0.2126, 0.7152, 0.0722));
|
|
616
691
|
out_moments = outAux.isShadowCatcher
|
|
617
692
|
? vec4(0.0)
|
|
618
|
-
: vec4(
|
|
693
|
+
: vec4(jZ, jZ * jZ, 1.0, 0.0);
|
|
619
694
|
|
|
620
|
-
}`
|
|
695
|
+
}${sharePrefix ? /* glsl */ `
|
|
696
|
+
void main() {
|
|
697
|
+
eB[0].ready = false; eB[1].ready = false;
|
|
698
|
+
vec4 color = vec4(0.0), albedo = vec4(0.0), normal = vec4(0.0), moments = vec4(0.0);
|
|
699
|
+
|
|
700
|
+
for (int channel = 1; channel <= dispersionWavelengths; channel++) {
|
|
701
|
+
traceSpectralWavelength(channel);
|
|
702
|
+
color += out_color; albedo += out_albedo; normal += out_normal; moments += out_moments;
|
|
703
|
+
}
|
|
704
|
+
out_color = color; out_albedo = albedo; out_normal = normal; out_moments = moments;
|
|
705
|
+
}
|
|
706
|
+
` : ''}`
|
|
621
707
|
});
|
|
622
708
|
}
|
|
623
709
|
//# sourceMappingURL=rayTrace.frag.js.map
|