@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
|
@@ -5,13 +5,13 @@ import { glsl } from '../../shader.js';
|
|
|
5
5
|
export default glsl `
|
|
6
6
|
uvec4 s0;
|
|
7
7
|
|
|
8
|
-
void
|
|
8
|
+
void fA(vec2 p, int frame) {
|
|
9
9
|
|
|
10
10
|
s0 = uvec4(p, uint(frame), uint(p.x) + uint(p.y));
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
void
|
|
14
|
+
void zF(inout uvec4 v) {
|
|
15
15
|
v = v * 1664525u + 1013904223u;
|
|
16
16
|
v.x += v.y*v.w; v.y += v.z*v.x; v.z += v.x*v.y; v.w += v.y*v.z;
|
|
17
17
|
v = v ^ (v>>16u);
|
|
@@ -19,7 +19,7 @@ v.x += v.y*v.w; v.y += v.z*v.x; v.z += v.x*v.y; v.w += v.y*v.z;
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
float rand() {
|
|
22
|
-
|
|
22
|
+
zF(s0); return float(s0.x)/float(0xffffffffu);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
`;
|
|
@@ -10,15 +10,15 @@ export default createShaderMixin({
|
|
|
10
10
|
|
|
11
11
|
${sobol}
|
|
12
12
|
|
|
13
|
-
void
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
void sP() {
|
|
14
|
+
aJ = uvec2(v_Texcoord / pixelSize);
|
|
15
|
+
aC = uint(sampleCount);
|
|
16
|
+
samplingBounce = 0u; hashedCounter = 0u;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
vec2
|
|
19
|
+
vec2 uH() {
|
|
20
20
|
if (samplingPattern == 0 || samplingPattern == 1) {
|
|
21
|
-
return (
|
|
21
|
+
return (sample2D(CAMERA_PIXEL) - 0.5) * pixelSize;
|
|
22
22
|
}
|
|
23
23
|
return jitter;
|
|
24
24
|
}
|
|
@@ -4,26 +4,27 @@
|
|
|
4
4
|
import { createShaderMixin, glsl, Shader } from '../../shader.js';
|
|
5
5
|
import { ShadowCatcherMaterial, UnlitMaterial } from '../../../constants.js';
|
|
6
6
|
import { CONSTANT_SPOT_LIGHT } from '../../lightConstants.js';
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
export function createRayTraceCoreGlsl(fragments = {}) {
|
|
8
|
+
return createShaderMixin({
|
|
9
|
+
uniforms: {
|
|
10
|
+
lightsTex: Shader.uniform('sampler2D'),
|
|
11
|
+
iesProfileData: Shader.uniform('sampler2D'),
|
|
12
|
+
iesProfileColumns: Shader.uniform('int', 1),
|
|
13
|
+
pixelSize: Shader.uniform('vec2'),
|
|
14
|
+
jitter: Shader.uniform('vec2'),
|
|
15
|
+
sampleCount: Shader.uniform('int'),
|
|
16
|
+
envLightSelectionPmf: Shader.uniform('float', 0)
|
|
17
|
+
},
|
|
18
|
+
defines: {
|
|
19
|
+
STANDARD: 0,
|
|
20
|
+
UNLIT: UnlitMaterial,
|
|
21
|
+
SHADOW_CATCHER: ShadowCatcherMaterial,
|
|
22
|
+
SPOT_LIGHT: CONSTANT_SPOT_LIGHT
|
|
23
|
+
},
|
|
24
|
+
main: glsl `
|
|
24
25
|
|
|
25
26
|
const vec3 luminance = vec3(0.2126, 0.7152, 0.0722);
|
|
26
|
-
const int
|
|
27
|
+
const int zL = 8;
|
|
27
28
|
|
|
28
29
|
#define RAY_MAX_DISTANCE 9999.0
|
|
29
30
|
|
|
@@ -81,7 +82,7 @@ float mediumAnisotropy;
|
|
|
81
82
|
struct OpenPbrResolvedMaterial {
|
|
82
83
|
int materialType;
|
|
83
84
|
|
|
84
|
-
float specularRoughness
|
|
85
|
+
float specularRoughness;${fragments['core0'] ?? ''}
|
|
85
86
|
float baseMetalness;
|
|
86
87
|
vec3 baseColor;
|
|
87
88
|
float specularIor;
|
|
@@ -157,29 +158,31 @@ float selectionCdf;
|
|
|
157
158
|
vec3 iesReference;
|
|
158
159
|
};
|
|
159
160
|
|
|
160
|
-
void
|
|
161
|
+
void initRay(inout Ray ray, vec3 origin, vec3 direction) {
|
|
161
162
|
ray.o = origin;
|
|
162
163
|
ray.d = direction;
|
|
163
164
|
ray.tMax = RAY_MAX_DISTANCE;
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
|
|
167
|
-
ivec2
|
|
168
|
+
ivec2 uO(int i, int ki) {
|
|
168
169
|
ivec2 u;
|
|
169
|
-
u.y = i >>
|
|
170
|
-
u.x = i - (u.y <<
|
|
170
|
+
u.y = i >> ki;
|
|
171
|
+
u.x = i - (u.y << ki);
|
|
171
172
|
return u;
|
|
172
173
|
}
|
|
173
174
|
|
|
174
|
-
vec4
|
|
175
|
-
return texelFetch(s,
|
|
175
|
+
vec4 fetchData(sampler2D s, int i, int ki) {
|
|
176
|
+
return texelFetch(s, uO(i, ki), 0);
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
ivec4
|
|
179
|
-
return texelFetch(s,
|
|
179
|
+
ivec4 fetchData(highp isampler2D s, int i, int ki) {
|
|
180
|
+
return texelFetch(s, uO(i, ki), 0);
|
|
180
181
|
}
|
|
181
182
|
|
|
182
183
|
struct Path {
|
|
184
|
+
|
|
185
|
+
bool scatteringMediumEntered;
|
|
183
186
|
Ray ray;
|
|
184
187
|
vec3 li;
|
|
185
188
|
float alpha;
|
|
@@ -188,7 +191,7 @@ bool fromEye;
|
|
|
188
191
|
bool abort;
|
|
189
192
|
float scatteringPdf;
|
|
190
193
|
bool scatteringIsDelta;
|
|
191
|
-
bool isNextRefraction
|
|
194
|
+
bool isNextRefraction;${fragments['core1'] ?? ''}
|
|
192
195
|
};
|
|
193
196
|
|
|
194
197
|
struct LightSampleRec {
|
|
@@ -198,27 +201,29 @@ vec3 direction;
|
|
|
198
201
|
float dist;
|
|
199
202
|
float pdf;
|
|
200
203
|
bool isDelta;
|
|
204
|
+
int sourceType;
|
|
205
|
+
int sourceIndex;
|
|
201
206
|
};
|
|
202
207
|
|
|
203
208
|
|
|
204
|
-
Light
|
|
209
|
+
Light fetchLight(int i) {
|
|
205
210
|
int firstTexel = i * 6;
|
|
206
|
-
vec4
|
|
211
|
+
vec4 positionAndPmf = texelFetch(
|
|
207
212
|
lightsTex,
|
|
208
213
|
ivec2(firstTexel, 0),
|
|
209
214
|
0
|
|
210
215
|
);
|
|
211
|
-
vec4
|
|
216
|
+
vec4 emissionAndCdf = texelFetch(
|
|
212
217
|
lightsTex,
|
|
213
218
|
ivec2(firstTexel + 1, 0),
|
|
214
219
|
0
|
|
215
220
|
);
|
|
216
|
-
vec4
|
|
221
|
+
vec4 pG = texelFetch(
|
|
217
222
|
lightsTex,
|
|
218
223
|
ivec2(firstTexel + 2, 0),
|
|
219
224
|
0
|
|
220
225
|
);
|
|
221
|
-
vec4
|
|
226
|
+
vec4 mW = texelFetch(
|
|
222
227
|
lightsTex,
|
|
223
228
|
ivec2(firstTexel + 3, 0),
|
|
224
229
|
0
|
|
@@ -229,33 +234,33 @@ ivec2(firstTexel + 4, 0),
|
|
|
229
234
|
0
|
|
230
235
|
);
|
|
231
236
|
return Light(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
237
|
+
positionAndPmf.xyz,
|
|
238
|
+
emissionAndCdf.xyz,
|
|
239
|
+
pG.xyz,
|
|
240
|
+
mW.xyz,
|
|
236
241
|
shape.x,
|
|
237
242
|
shape.y,
|
|
238
243
|
shape.z,
|
|
239
|
-
int(
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
244
|
+
int(mW.w),
|
|
245
|
+
pG.w,
|
|
246
|
+
positionAndPmf.w,
|
|
247
|
+
emissionAndCdf.w,
|
|
243
248
|
texelFetch(lightsTex, ivec2(firstTexel + 5, 0), 0).xyz
|
|
244
249
|
);
|
|
245
250
|
}
|
|
246
251
|
|
|
247
|
-
float
|
|
248
|
-
int
|
|
252
|
+
float cI(int ec, int mC) {
|
|
253
|
+
int iR = ec + mC / 4;
|
|
249
254
|
vec4 packed = texelFetch(
|
|
250
255
|
iesProfileData,
|
|
251
|
-
ivec2(
|
|
256
|
+
ivec2(iR % iesProfileColumns, iR / iesProfileColumns),
|
|
252
257
|
0
|
|
253
258
|
);
|
|
254
|
-
return packed[
|
|
259
|
+
return packed[mC % 4];
|
|
255
260
|
}
|
|
256
261
|
|
|
257
|
-
float
|
|
258
|
-
if (
|
|
262
|
+
float lW(int ec, vec2 uv) {
|
|
263
|
+
if (ec < 0) return 1.0;
|
|
259
264
|
vec2 pixel = fract(uv) * 128.0 - 0.5;
|
|
260
265
|
ivec2 p0 = ivec2(floor(pixel));
|
|
261
266
|
vec2 f = fract(pixel);
|
|
@@ -263,26 +268,28 @@ int xa = p0.x < 0 ? 127 : p0.x;
|
|
|
263
268
|
int xb = p0.x >= 127 ? 0 : p0.x + 1;
|
|
264
269
|
int ya = p0.y < 0 ? 127 : p0.y;
|
|
265
270
|
int yb = p0.y >= 127 ? 0 : p0.y + 1;
|
|
266
|
-
float a =
|
|
267
|
-
float b =
|
|
268
|
-
float c =
|
|
269
|
-
float d =
|
|
271
|
+
float a = cI(ec, ya * 128 + xa);
|
|
272
|
+
float b = cI(ec, ya * 128 + xb);
|
|
273
|
+
float c = cI(ec, yb * 128 + xa);
|
|
274
|
+
float d = cI(ec, yb * 128 + xb);
|
|
270
275
|
return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
|
|
271
276
|
}
|
|
272
277
|
|
|
273
|
-
float
|
|
278
|
+
float evaluateSpotEmissionMultiplier(Light light, vec3 dL) {
|
|
274
279
|
vec3 axis = normalize(light.u);
|
|
275
|
-
float
|
|
276
|
-
float
|
|
277
|
-
? smoothstep(light.v.x, light.v.y,
|
|
278
|
-
: step(light.v.x,
|
|
279
|
-
if (
|
|
280
|
-
vec3
|
|
281
|
-
vec3
|
|
282
|
-
float vertical = acos(clamp(
|
|
283
|
-
float horizontal = atan(dot(
|
|
284
|
-
return
|
|
280
|
+
float cv = dot(axis, dL);
|
|
281
|
+
float xm = light.v.y > light.v.x + 1e-6
|
|
282
|
+
? smoothstep(light.v.x, light.v.y, cv)
|
|
283
|
+
: step(light.v.x, cv);
|
|
284
|
+
if (xm <= 0.0 || light.textureIndex < 0) return xm;
|
|
285
|
+
vec3 xT = light.iesReference;
|
|
286
|
+
vec3 zK = cross(axis, xT);
|
|
287
|
+
float vertical = acos(clamp(cv, -1.0, 1.0));
|
|
288
|
+
float horizontal = atan(dot(dL, zK), dot(dL, xT));
|
|
289
|
+
return xm * lW(light.textureIndex, vec2(vertical / PI, horizontal / TWOPI + 0.5));
|
|
285
290
|
}
|
|
286
291
|
`
|
|
287
|
-
});
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
export default createRayTraceCoreGlsl();
|
|
288
295
|
//# sourceMappingURL=rayTraceCore.glsl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rayTraceCore.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/rayTraceCore.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,
|
|
1
|
+
{"version":3,"file":"rayTraceCore.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/rayTraceCore.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,UAAU,sBAAsB,CAAC,YAA8C,EAAE;IAAI,OAAO,iBAAiB,CAAC;QAClH,QAAQ,EAAE;YACR,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YACtC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3C,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3C,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAClC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,aAAa;YACpB,cAAc,EAAE,qBAAqB;YACrC,UAAU,EAAE,mBAAmB;SAChC;QACD,IAAI,EAAE,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA6DgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6G1B,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGjD;KACA,CAAC,CAAC;AACH,CAAC;AACD,eAAe,sBAAsB,EAAE,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\nimport { createShaderMixin, glsl, Shader } from '../../shader.js';\nimport { ShadowCatcherMaterial, UnlitMaterial } from '../../../constants.js';\nimport { CONSTANT_SPOT_LIGHT } from '../../lightConstants.js';\n\nexport function createRayTraceCoreGlsl(fragments: Readonly<Record<string, string>> = {}) { return createShaderMixin({\n uniforms: {\n lightsTex: Shader.uniform('sampler2D'),\n iesProfileData: Shader.uniform('sampler2D'),\n iesProfileColumns: Shader.uniform('int', 1),\n pixelSize: Shader.uniform('vec2'),\n jitter: Shader.uniform('vec2'),\n sampleCount: Shader.uniform('int'),\n envLightSelectionPmf: Shader.uniform('float', 0)\n },\n defines: {\n STANDARD: 0,\n UNLIT: UnlitMaterial,\n SHADOW_CATCHER: ShadowCatcherMaterial,\n SPOT_LIGHT: CONSTANT_SPOT_LIGHT\n },\n main: glsl`\n// https://www.w3.org/WAI/GL/wiki/Relative_luminance\nconst vec3 luminance = vec3(0.2126, 0.7152, 0.0722);\nconst int bounceSamples = 8;\n\n#define RAY_MAX_DISTANCE 9999.0\n\n#define NO_UNROLL(X) (X + min(0, sampleCount))\n#define NO_UNROLLU(X) (X + uint(min(0, sampleCount)))\n\nstruct Ray {\n vec3 o;\n vec3 d;\n float tMax;\n};\n\nstruct SurfaceInteraction {\n bool hit;\n vec3 position;\n vec3 normal; // material shading normal\n#ifdef USE_COAT_NORMAL_FRAMES\n vec3 coatNormal;\n#endif\n vec3 vertexNormal; // interpolated mesh normal before normal mapping\n vec3 shadowOffset; // smooth-surface offset used by direct-light shadow rays\n \n vec2 uv;\n vec2 uv1;\n vec3 vertexColor;\n\n#ifdef USE_TANGENT\n vec3 tangent;\n#endif\n vec3 directionTangent;\n vec3 directionBitangent;\n vec3 geometryTangent;\n vec3 geometryBitangent;\n vec3 faceNormal; // normal of the triangle\n\n bool isTransparency;\n // For perfect specular or transmission surface\n // We use the albedo and normal of first diffuse or glossy surface hit instead for denoising\n // See albedo section in https://www.openimagedenoise.org/documentation.html\n bool albedoSampled;\n\n int triangleIndex;\n int instanceIndex;\n int materialIndex;\n\n int mediumType;\n vec3 mediumExtinction;\n vec3 mediumScattering;\n float mediumAnisotropy;\n};\n\n// Texture-resolved OpenPBR inputs used by the surface integrator. The storage\n// buffer keeps its compact legacy layout; getMaterial() is the compatibility\n// boundary that maps it to these canonical names.\nstruct OpenPbrResolvedMaterial {\n int materialType;\n\n float specularRoughness;${fragments['core0'] ?? ''}\n float baseMetalness;\n vec3 baseColor;\n float specularIor;\n vec3 emission;\n float transmissionWeight;\n bool thinWalled;\n float specularAnisotropy;\n float alpha;\n\n float transmissionDispersionScale;\n float dispersionAbbeNumber;\n float thinFilmThickness;\n float thinFilmIor;\n float thinFilmWeight;\n\n // Medium\n int mediumType;\n vec3 mediumExtinction;\n vec3 mediumScattering;\n float mediumAnisotropy;\n\n float baseWeight;\n float diffuseRoughness;\n float specularWeight;\n vec3 specularColor;\n float subsurfaceWeight;\n vec3 subsurfaceColor;\n vec3 transmissionColor;\n float fuzzWeight;\n vec3 fuzzColor;\n float fuzzRoughness;\n float coatWeight;\n vec3 coatColor;\n float coatRoughness;\n float coatAnisotropy;\n vec2 anisotropyDirection;\n bool anisotropyDirectionEnabled;\n float coatAnisotropyRotation;\n vec3 directionTangent;\n vec3 directionBitangent;\n vec3 geometryTangent;\n vec3 geometryBitangent;\n#ifdef USE_COAT_NORMAL_FRAMES\n vec3 coatNormal;\n bool coatNormalEnabled;\n vec3 geometricNormal;\n#endif\n float coatIor;\n float coatDarkening;\n\n float bevel;\n\n // Calculated\n float relativeIor;\n bool inside;\n float alphaX;\n float alphaY;\n};\n\n\nstruct Light {\n vec3 position;\n vec3 emission;\n vec3 u;\n vec3 v;\n float radius;\n float area;\n float type;\n int textureIndex;\n float spread;\n float selectionPmf;\n float selectionCdf;\n vec3 iesReference;\n};\n\nvoid initRay(inout Ray ray, vec3 origin, vec3 direction) {\n ray.o = origin;\n ray.d = direction;\n ray.tMax = RAY_MAX_DISTANCE;\n}\n\n// given the index from a 1D array, retrieve corresponding position from packed 2D texture\nivec2 unpackTexel(int i, int columnsLog2) {\n ivec2 u;\n u.y = i >> columnsLog2; // equivalent to (i / 2^columnsLog2)\n u.x = i - (u.y << columnsLog2); // equivalent to (i % 2^columnsLog2)\n return u;\n}\n\nvec4 fetchData(sampler2D s, int i, int columnsLog2) {\n return texelFetch(s, unpackTexel(i, columnsLog2), 0);\n}\n\nivec4 fetchData(highp isampler2D s, int i, int columnsLog2) {\n return texelFetch(s, unpackTexel(i, columnsLog2), 0);\n}\n\nstruct Path {\n // Retain deferred roulette after an SSS walk reaches its boundary.\n bool scatteringMediumEntered;\n Ray ray;\n vec3 li;\n float alpha;\n vec3 beta;\n bool fromEye;\n bool abort;\n float scatteringPdf;\n bool scatteringIsDelta;\n bool isNextRefraction;${fragments['core1'] ?? ''}\n};\n\nstruct LightSampleRec {\n vec3 normal;\n vec3 emission;\n vec3 direction;\n float dist;\n float pdf;\n bool isDelta;\n int sourceType;\n int sourceIndex;\n};\n\n\nLight fetchLight(int i) {\n int firstTexel = i * 6;\n vec4 positionAndPmf = texelFetch(\n lightsTex,\n ivec2(firstTexel, 0),\n 0\n );\n vec4 emissionAndCdf = texelFetch(\n lightsTex,\n ivec2(firstTexel + 1, 0),\n 0\n );\n vec4 tangentAndSpread = texelFetch(\n lightsTex,\n ivec2(firstTexel + 2, 0),\n 0\n );\n vec4 bitangentAndTexture = texelFetch(\n lightsTex,\n ivec2(firstTexel + 3, 0),\n 0\n );\n vec4 shape = texelFetch(\n lightsTex,\n ivec2(firstTexel + 4, 0),\n 0\n );\n return Light(\n positionAndPmf.xyz,\n emissionAndCdf.xyz,\n tangentAndSpread.xyz,\n bitangentAndTexture.xyz,\n shape.x,\n shape.y,\n shape.z,\n int(bitangentAndTexture.w),\n tangentAndSpread.w,\n positionAndPmf.w,\n emissionAndCdf.w,\n texelFetch(lightsTex, ivec2(firstTexel + 5, 0), 0).xyz\n );\n}\n\nfloat iesProfileScalar(int baseTexel, int scalarIndex) {\n int texelIndex = baseTexel + scalarIndex / 4;\n vec4 packed = texelFetch(\n iesProfileData,\n ivec2(texelIndex % iesProfileColumns, texelIndex / iesProfileColumns),\n 0\n );\n return packed[scalarIndex % 4];\n}\n\nfloat sampleIESProfile(int baseTexel, vec2 uv) {\n if (baseTexel < 0) return 1.0;\n vec2 pixel = fract(uv) * 128.0 - 0.5;\n ivec2 p0 = ivec2(floor(pixel));\n vec2 f = fract(pixel);\n int xa = p0.x < 0 ? 127 : p0.x;\n int xb = p0.x >= 127 ? 0 : p0.x + 1;\n int ya = p0.y < 0 ? 127 : p0.y;\n int yb = p0.y >= 127 ? 0 : p0.y + 1;\n float a = iesProfileScalar(baseTexel, ya * 128 + xa);\n float b = iesProfileScalar(baseTexel, ya * 128 + xb);\n float c = iesProfileScalar(baseTexel, yb * 128 + xa);\n float d = iesProfileScalar(baseTexel, yb * 128 + xb);\n return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\n\nfloat evaluateSpotEmissionMultiplier(Light light, vec3 lightToSurface) {\n vec3 axis = normalize(light.u);\n float cosTheta = dot(axis, lightToSurface);\n float cone = light.v.y > light.v.x + 1e-6\n ? smoothstep(light.v.x, light.v.y, cosTheta)\n : step(light.v.x, cosTheta);\n if (cone <= 0.0 || light.textureIndex < 0) return cone;\n vec3 xAxis = light.iesReference;\n vec3 yAxis = cross(axis, xAxis);\n float vertical = acos(clamp(cosTheta, -1.0, 1.0));\n float horizontal = atan(dot(lightToSurface, yAxis), dot(lightToSurface, xAxis));\n return cone * sampleIESProfile(light.textureIndex, vec2(vertical / PI, horizontal / TWOPI + 0.5));\n}\n`\n});\n}\nexport default createRayTraceCoreGlsl();\n"]}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import emissive from './emissiveLight.glsl.js';
|
|
1
2
|
import { glsl } from '../../shader.js';
|
|
2
3
|
export default glsl `
|
|
3
4
|
#ifdef NUM_LIGHTS
|
|
4
|
-
void
|
|
5
|
+
void eR(
|
|
5
6
|
in Light light,
|
|
6
7
|
in vec3 shadingPoint,
|
|
7
8
|
in vec2 samplePoint,
|
|
8
9
|
inout LightSampleRec result
|
|
9
10
|
) {
|
|
10
|
-
vec3
|
|
11
|
-
float
|
|
11
|
+
vec3 pH = light.position - shadingPoint;
|
|
12
|
+
float ao = length(pH);
|
|
12
13
|
if (light.radius <= 0.0) {
|
|
13
|
-
if (
|
|
14
|
+
if (ao <= 1e-6) {
|
|
14
15
|
result.direction = vec3(0.0, 0.0, 1.0);
|
|
15
16
|
result.normal = vec3(0.0, 0.0, -1.0);
|
|
16
17
|
result.dist = 0.0;
|
|
@@ -19,11 +20,11 @@ result.emission = vec3(0.0);
|
|
|
19
20
|
result.isDelta = true;
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
22
|
-
result.direction =
|
|
23
|
+
result.direction = pH / ao;
|
|
23
24
|
result.normal = -result.direction;
|
|
24
|
-
result.dist =
|
|
25
|
+
result.dist = ao;
|
|
25
26
|
result.pdf = 1.0;
|
|
26
|
-
result.emission = light.emission / max(
|
|
27
|
+
result.emission = light.emission / max(ao * ao, 1e-8);
|
|
27
28
|
result.isDelta = true;
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
@@ -31,46 +32,50 @@ float radius = max(light.radius, 1e-6);
|
|
|
31
32
|
result.isDelta = false;
|
|
32
33
|
vec3 direction;
|
|
33
34
|
|
|
34
|
-
if (
|
|
35
|
+
if (ao <= radius) {
|
|
35
36
|
float z = 1.0 - 2.0 * samplePoint.x;
|
|
36
|
-
float
|
|
37
|
+
float dw = sqrt(max(0.0, 1.0 - z * z));
|
|
37
38
|
float azimuth = TWOPI * samplePoint.y;
|
|
38
|
-
direction = vec3(
|
|
39
|
+
direction = vec3(dw * cos(azimuth), dw * sin(azimuth), z);
|
|
39
40
|
result.pdf = INV4PI;
|
|
40
41
|
}
|
|
41
42
|
else {
|
|
42
|
-
vec3 axis =
|
|
43
|
-
float
|
|
43
|
+
vec3 axis = pH / ao;
|
|
44
|
+
float pv = min(
|
|
44
45
|
1.0,
|
|
45
|
-
radius * radius / (
|
|
46
|
+
radius * radius / (ao * ao)
|
|
46
47
|
);
|
|
47
|
-
float
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
float xn = sqrt(max(0.0, 1.0 - pv));
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
float mX = pv / (1.0 + xn);
|
|
52
|
+
float oe = samplePoint.x * mX;
|
|
53
|
+
float cosine = 1.0 - oe;
|
|
54
|
+
float wk = sqrt(max(0.0, oe * (2.0 - oe)));
|
|
50
55
|
float azimuth = TWOPI * samplePoint.y;
|
|
51
56
|
vec3 tangent;
|
|
52
57
|
vec3 bitangent;
|
|
53
|
-
|
|
58
|
+
sampling_orthonormal_basis(axis, tangent, bitangent);
|
|
54
59
|
direction = axis * cosine
|
|
55
|
-
+ tangent * (
|
|
56
|
-
+ bitangent * (
|
|
57
|
-
result.pdf = 1.0 / max(TWOPI *
|
|
60
|
+
+ tangent * (wk * cos(azimuth))
|
|
61
|
+
+ bitangent * (wk * sin(azimuth));
|
|
62
|
+
result.pdf = 1.0 / max(TWOPI * mX, 1e-8);
|
|
58
63
|
}
|
|
59
64
|
|
|
60
|
-
float
|
|
61
|
-
float
|
|
62
|
-
- dot(
|
|
63
|
-
float
|
|
64
|
-
float
|
|
65
|
-
float
|
|
66
|
-
result.dist =
|
|
65
|
+
float jM = dot(direction, pH);
|
|
66
|
+
float bk = jM * jM
|
|
67
|
+
- dot(pH, pH) + radius * radius;
|
|
68
|
+
float root = sqrt(max(0.0, bk));
|
|
69
|
+
float cK = jM - root;
|
|
70
|
+
float cB = jM + root;
|
|
71
|
+
result.dist = cK > 1e-6 ? cK : cB;
|
|
67
72
|
result.direction = direction;
|
|
68
73
|
vec3 surfacePoint = shadingPoint + direction * result.dist;
|
|
69
74
|
result.normal = normalize(surfacePoint - light.position);
|
|
70
75
|
result.emission = light.emission;
|
|
71
76
|
}
|
|
72
77
|
|
|
73
|
-
void
|
|
78
|
+
void bD(
|
|
74
79
|
in Light light,
|
|
75
80
|
in vec3 surfacePoint,
|
|
76
81
|
in vec3 lowerLeft,
|
|
@@ -80,17 +85,17 @@ inout LightSampleRec result
|
|
|
80
85
|
if (light.textureIndex >= 0) {
|
|
81
86
|
float width = length(light.u);
|
|
82
87
|
float height = length(light.v);
|
|
83
|
-
vec3
|
|
88
|
+
vec3 ea = surfacePoint - lowerLeft;
|
|
84
89
|
vec2 uv = vec2(
|
|
85
|
-
dot(
|
|
86
|
-
dot(
|
|
90
|
+
dot(ea, light.u / width) / width,
|
|
91
|
+
dot(ea, light.v / height) / height
|
|
87
92
|
);
|
|
88
93
|
result.emission *= sampleMap(light.textureIndex, uv).rgb;
|
|
89
94
|
}
|
|
90
95
|
#endif
|
|
91
96
|
}
|
|
92
97
|
|
|
93
|
-
void
|
|
98
|
+
void kF(
|
|
94
99
|
in Light light,
|
|
95
100
|
in vec3 shadingPoint,
|
|
96
101
|
in vec2 samplePoint,
|
|
@@ -101,28 +106,28 @@ vec3 lowerLeft = light.position - 0.5 * (light.u + light.v);
|
|
|
101
106
|
float spread = clamp(light.spread, 0.0, 1.0);
|
|
102
107
|
|
|
103
108
|
if (spread <= 0.001) {
|
|
104
|
-
float
|
|
105
|
-
vec3 surfacePoint = shadingPoint - normal *
|
|
106
|
-
vec3
|
|
109
|
+
float gy = dot(normal, shadingPoint - light.position);
|
|
110
|
+
vec3 surfacePoint = shadingPoint - normal * gy;
|
|
111
|
+
vec3 ea = surfacePoint - lowerLeft;
|
|
107
112
|
float width = length(light.u);
|
|
108
113
|
float height = length(light.v);
|
|
109
114
|
vec2 uv = vec2(
|
|
110
|
-
dot(
|
|
111
|
-
dot(
|
|
115
|
+
dot(ea, light.u / width) / width,
|
|
116
|
+
dot(ea, light.v / height) / height
|
|
112
117
|
);
|
|
113
|
-
if (
|
|
118
|
+
if (gy <= 0.0 || any(lessThan(uv, vec2(0.0)))
|
|
114
119
|
|| any(greaterThan(uv, vec2(1.0)))) {
|
|
115
120
|
result.emission = vec3(0.0);
|
|
116
121
|
result.pdf = 0.0;
|
|
117
122
|
return;
|
|
118
123
|
}
|
|
119
124
|
result.direction = -normal;
|
|
120
|
-
result.dist =
|
|
125
|
+
result.dist = gy;
|
|
121
126
|
result.normal = normal;
|
|
122
127
|
result.emission = light.emission;
|
|
123
128
|
result.pdf = 1.0;
|
|
124
129
|
result.isDelta = true;
|
|
125
|
-
|
|
130
|
+
bD(light, surfacePoint, lowerLeft, result);
|
|
126
131
|
return;
|
|
127
132
|
}
|
|
128
133
|
|
|
@@ -130,20 +135,20 @@ vec3 surfacePoint = lowerLeft
|
|
|
130
135
|
+ light.u * samplePoint.x
|
|
131
136
|
+ light.v * samplePoint.y;
|
|
132
137
|
vec3 offset = surfacePoint - shadingPoint;
|
|
133
|
-
float
|
|
134
|
-
result.dist = sqrt(
|
|
138
|
+
float bG = dot(offset, offset);
|
|
139
|
+
result.dist = sqrt(bG);
|
|
135
140
|
result.direction = offset / result.dist;
|
|
136
141
|
result.normal = normal;
|
|
137
|
-
float
|
|
138
|
-
float
|
|
139
|
-
if (
|
|
142
|
+
float gq = dot(-result.direction, normal);
|
|
143
|
+
float qB = cos(0.5 * PI * spread);
|
|
144
|
+
if (gq <= 0.0 || gq < qB) {
|
|
140
145
|
result.emission = vec3(0.0);
|
|
141
146
|
result.pdf = 0.0;
|
|
142
147
|
return;
|
|
143
148
|
}
|
|
144
149
|
result.emission = light.emission;
|
|
145
|
-
result.pdf =
|
|
146
|
-
|
|
150
|
+
result.pdf = bG / max(light.area * gq, 1e-8);
|
|
151
|
+
bD(light, surfacePoint, lowerLeft, result);
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
void gs(
|
|
@@ -159,94 +164,103 @@ result.pdf = 1.0;
|
|
|
159
164
|
result.isDelta = true;
|
|
160
165
|
}
|
|
161
166
|
|
|
162
|
-
void
|
|
167
|
+
void kG(
|
|
163
168
|
in Light light,
|
|
164
169
|
in vec3 shadingPoint,
|
|
165
170
|
in vec2 samplePoint,
|
|
166
171
|
inout LightSampleRec result
|
|
167
172
|
) {
|
|
168
|
-
|
|
173
|
+
eR(light, shadingPoint, samplePoint, result);
|
|
169
174
|
vec3 surfacePoint = shadingPoint + result.direction * result.dist;
|
|
170
|
-
result.emission *=
|
|
175
|
+
result.emission *= evaluateSpotEmissionMultiplier(
|
|
171
176
|
light,
|
|
172
177
|
normalize(shadingPoint - surfacePoint)
|
|
173
178
|
);
|
|
174
179
|
}
|
|
175
180
|
|
|
176
|
-
void
|
|
181
|
+
void sampleAnalyticLight(
|
|
177
182
|
in Light light,
|
|
178
183
|
in vec3 shadingPoint,
|
|
179
184
|
in vec2 samplePoint,
|
|
180
185
|
inout LightSampleRec result
|
|
181
186
|
) {
|
|
182
|
-
int
|
|
187
|
+
int dU = int(light.type);
|
|
183
188
|
#ifdef HAS_RECT_LIGHTS
|
|
184
|
-
if (
|
|
185
|
-
|
|
189
|
+
if (dU == RECT_LIGHT) {
|
|
190
|
+
kF(light, shadingPoint, samplePoint, result);
|
|
186
191
|
return;
|
|
187
192
|
}
|
|
188
193
|
#endif
|
|
189
194
|
#ifdef HAS_SPHERE_LIGHTS
|
|
190
|
-
if (
|
|
191
|
-
|
|
195
|
+
if (dU == SPHERE_LIGHT) {
|
|
196
|
+
eR(light, shadingPoint, samplePoint, result);
|
|
192
197
|
return;
|
|
193
198
|
}
|
|
194
199
|
#endif
|
|
195
200
|
#ifdef HAS_SPOT_LIGHTS
|
|
196
|
-
if (
|
|
197
|
-
|
|
201
|
+
if (dU == SPOT_LIGHT) {
|
|
202
|
+
kG(light, shadingPoint, samplePoint, result);
|
|
198
203
|
return;
|
|
199
204
|
}
|
|
200
205
|
#endif
|
|
201
206
|
#ifdef HAS_DIRECTIONAL_LIGHTS
|
|
202
|
-
if (
|
|
207
|
+
if (dU == DIRECTIONAL_LIGHT) {
|
|
203
208
|
gs(light, shadingPoint, result);
|
|
204
209
|
}
|
|
205
210
|
#endif
|
|
206
211
|
}
|
|
207
212
|
#endif
|
|
208
213
|
|
|
209
|
-
void
|
|
214
|
+
void iM(in vec2 samplePoint, inout LightSampleRec result) {
|
|
210
215
|
vec2 uv;
|
|
211
|
-
result.direction =
|
|
216
|
+
result.direction = qx(samplePoint, uv, result.pdf);
|
|
212
217
|
result.emission = textureLinear(envMap, uv).rgb;
|
|
213
218
|
result.dist = INF;
|
|
214
219
|
}
|
|
215
220
|
|
|
221
|
+
#ifdef HAS_EMISSIVE_LIGHTS
|
|
222
|
+
${emissive}
|
|
223
|
+
#endif
|
|
224
|
+
|
|
216
225
|
void sampleLight(
|
|
217
226
|
in vec3 shadingPoint,
|
|
218
227
|
in vec3 randomSampleValue,
|
|
219
228
|
inout LightSampleRec result,
|
|
220
|
-
bool
|
|
229
|
+
bool uP
|
|
221
230
|
) {
|
|
231
|
+
#ifdef HAS_EMISSIVE_LIGHTS
|
|
232
|
+
pc(shadingPoint,randomSampleValue,result);return;
|
|
233
|
+
#endif
|
|
234
|
+
result.sourceType=0;result.sourceIndex=-1;
|
|
222
235
|
result.isDelta = false;
|
|
223
|
-
float
|
|
224
|
-
bool
|
|
236
|
+
float xJ = randomSampleValue.z;
|
|
237
|
+
bool lG = false;
|
|
225
238
|
#ifdef USE_ENVMAP
|
|
226
|
-
|
|
227
|
-
if (
|
|
228
|
-
|
|
239
|
+
lG = xJ < envLightSelectionPmf;
|
|
240
|
+
if (lG) {
|
|
241
|
+
iM(randomSampleValue.xy, result);
|
|
229
242
|
result.pdf *= envLightSelectionPmf;
|
|
230
243
|
}
|
|
231
244
|
#endif
|
|
232
245
|
|
|
233
246
|
#ifdef NUM_LIGHTS
|
|
234
|
-
if (!
|
|
235
|
-
int
|
|
247
|
+
if (!lG) {
|
|
248
|
+
int jG = NUM_LIGHTS - 1;
|
|
236
249
|
for (int index = 0; index < NUM_LIGHTS; index++) {
|
|
237
|
-
if (
|
|
238
|
-
|
|
250
|
+
if (xJ < fetchLight(index).selectionCdf) {
|
|
251
|
+
jG = index;
|
|
239
252
|
break;
|
|
240
253
|
}
|
|
241
254
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
255
|
+
result.sourceType=2;result.sourceIndex=jG;
|
|
256
|
+
Light sz = fetchLight(jG);
|
|
257
|
+
sampleAnalyticLight(
|
|
258
|
+
sz,
|
|
245
259
|
shadingPoint,
|
|
246
260
|
randomSampleValue.xy,
|
|
247
261
|
result
|
|
248
262
|
);
|
|
249
|
-
result.pdf *=
|
|
263
|
+
result.pdf *= sz.selectionPmf;
|
|
250
264
|
}
|
|
251
265
|
#endif
|
|
252
266
|
}
|