@meimu/mutracer 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSES/Classroom-CC0.txt +121 -0
- package/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +13 -8
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +10407 -8353
- package/docs/api.md +200 -10
- package/docs/denoising.md +30 -15
- package/docs/materials.md +1 -1
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +32 -1
- package/docs/threejs.md +14 -5
- package/docs/updates.md +44 -2
- package/docs/viewer.md +11 -6
- package/lib/Display.d.ts +13 -2
- package/lib/Display.js +27 -6
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -0
- package/lib/Engine.js +52 -25
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +44 -9
- package/lib/Render.js +115 -17
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -1
- package/lib/RenderLoop.js +94 -13
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +6 -3
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/math/access.d.ts +4 -0
- package/lib/math/access.js +10 -0
- package/lib/math/access.js.map +1 -0
- package/lib/math/mat3.d.ts +4 -0
- package/lib/math/mat3.js +54 -0
- package/lib/math/mat3.js.map +1 -0
- package/lib/math/mat4.d.ts +19 -0
- package/lib/math/mat4.js +413 -0
- package/lib/math/mat4.js.map +1 -0
- package/lib/math/storage.d.ts +6 -0
- package/lib/math/storage.js +22 -0
- package/lib/math/storage.js.map +1 -0
- package/lib/math/types.d.ts +3 -0
- package/lib/math/types.js +2 -0
- package/lib/math/types.js.map +1 -0
- package/lib/math/vec2.d.ts +13 -0
- package/lib/math/vec2.js +52 -0
- package/lib/math/vec2.js.map +1 -0
- package/lib/math/vec3.d.ts +23 -0
- package/lib/math/vec3.js +139 -0
- package/lib/math/vec3.js.map +1 -0
- package/lib/math.d.ts +5 -17
- package/lib/math.js +5 -55
- package/lib/math.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidn.js +4 -2
- package/lib/oidn.js.map +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
- package/lib/renderer/AovPrimitiveCache.js +48 -0
- package/lib/renderer/AovPrimitiveCache.js.map +1 -0
- package/lib/renderer/Box3.d.ts +5 -0
- package/lib/renderer/Box3.js +9 -0
- package/lib/renderer/Box3.js.map +1 -0
- package/lib/renderer/GPUTraceQueue.d.ts +10 -0
- package/lib/renderer/GPUTraceQueue.js +31 -0
- package/lib/renderer/GPUTraceQueue.js.map +1 -0
- package/lib/renderer/MaterialData.d.ts +15 -0
- package/lib/renderer/MaterialData.js +61 -0
- package/lib/renderer/MaterialData.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +11 -98
- package/lib/renderer/MaterialTable.js +34 -412
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +32 -13
- package/lib/renderer/RenderingPipeline.js +1 -17
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +0 -1
- package/lib/renderer/TileRender.js +14 -1
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +39 -0
- package/lib/renderer/WGPUAov.js +239 -0
- package/lib/renderer/WGPUAov.js.map +1 -0
- package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
- package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
- package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
- package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
- package/lib/renderer/WGPUBindlessTextures.js +180 -0
- package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.js +17 -97
- package/lib/renderer/WGPUBloomPass.js.map +1 -1
- package/lib/renderer/WGPUComputePass.d.ts +1 -1
- package/lib/renderer/WGPUComputePass.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
- package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.js +10 -9
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
- package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WGPURayTraceOutput.js +26 -17
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +36 -40
- package/lib/renderer/WGPURayTracePass.js +399 -550
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
- package/lib/renderer/WGPURenderingPipeline.js +239 -60
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUShaderCache.d.ts +2 -2
- package/lib/renderer/WGPUShaderCache.js +10 -5
- package/lib/renderer/WGPUShaderCache.js.map +1 -1
- package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
- package/lib/renderer/WGPUShaderCapabilities.js +54 -0
- package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
- package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
- package/lib/renderer/WGPUSkyBaker.js +85 -0
- package/lib/renderer/WGPUSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLAov.d.ts +41 -0
- package/lib/renderer/WebGLAov.js +106 -0
- package/lib/renderer/WebGLAov.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
- package/lib/renderer/WebGLFullQuadPass.js +18 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
- package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
- package/lib/renderer/WebGLRayTracePass.js +82 -7
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +116 -8
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
- package/lib/renderer/WebGLSkyBaker.js +422 -0
- package/lib/renderer/WebGLSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLSkySource.d.ts +9 -0
- package/lib/renderer/WebGLSkySource.js +28 -0
- package/lib/renderer/WebGLSkySource.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +5 -0
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/aov.d.ts +42 -0
- package/lib/renderer/aov.js +50 -0
- package/lib/renderer/aov.js.map +1 -0
- package/lib/renderer/aovDisplay.d.ts +14 -0
- package/lib/renderer/aovDisplay.js +32 -0
- package/lib/renderer/aovDisplay.js.map +1 -0
- package/lib/renderer/aovScene.d.ts +21 -0
- package/lib/renderer/aovScene.js +139 -0
- package/lib/renderer/aovScene.js.map +1 -0
- package/lib/renderer/binnedSahBvh.js +2 -1
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +20 -10
- package/lib/renderer/bvhAccel.js +168 -58
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
- package/lib/renderer/cameraSnapshot.js +2 -1
- package/lib/renderer/cameraSnapshot.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +2 -0
- package/lib/renderer/cameraUniform.js +12 -0
- package/lib/renderer/cameraUniform.js.map +1 -0
- package/lib/renderer/committedScene.js +4 -0
- package/lib/renderer/committedScene.js.map +1 -1
- package/lib/renderer/denoiser.d.ts +3 -11
- package/lib/renderer/denoiser.js.map +1 -1
- package/lib/renderer/depthQuery.js +4 -1
- package/lib/renderer/depthQuery.js.map +1 -1
- package/lib/renderer/displacementPreparation.d.ts +11 -0
- package/lib/renderer/displacementPreparation.js +351 -0
- package/lib/renderer/displacementPreparation.js.map +1 -0
- package/lib/renderer/displacementRange.d.ts +1 -0
- package/lib/renderer/displacementRange.js +9 -0
- package/lib/renderer/displacementRange.js.map +1 -0
- package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
- package/lib/renderer/displayParityDiagnostics.js +2 -0
- package/lib/renderer/displayParityDiagnostics.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +9 -8
- package/lib/renderer/envMapCreation.js +36 -12
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/envMapDistribution.d.ts +12 -2
- package/lib/renderer/envMapDistribution.js +43 -34
- package/lib/renderer/envMapDistribution.js.map +1 -1
- package/lib/renderer/geometryBvhBounds.d.ts +4 -0
- package/lib/renderer/geometryBvhBounds.js +82 -0
- package/lib/renderer/geometryBvhBounds.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +32 -0
- package/lib/renderer/geometryUpdateState.js +2 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +17 -9
- package/lib/renderer/geometryUpdates.js +92 -33
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
- package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
- package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/aovTrace.frag.js +121 -0
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +429 -429
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +144 -144
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +801 -801
- 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.js +49 -49
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +102 -102
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
- package/lib/renderer/glsl/depthQuery.frag.js +7 -7
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +191 -191
- package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
- package/lib/renderer/lightConstants.d.ts +10 -0
- package/lib/renderer/lightConstants.js +11 -0
- package/lib/renderer/lightConstants.js.map +1 -0
- package/lib/renderer/lightCore.d.ts +12 -0
- package/lib/renderer/lightCore.js +13 -0
- package/lib/renderer/lightCore.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +20 -17
- package/lib/renderer/lightSampling.js +123 -56
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/lightsData.d.ts +21 -0
- package/lib/renderer/lightsData.js +192 -0
- package/lib/renderer/lightsData.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +3 -26
- package/lib/renderer/lightsUtil.js +3 -153
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialBufferData.d.ts +70 -0
- package/lib/renderer/materialBufferData.js +2 -0
- package/lib/renderer/materialBufferData.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +11 -0
- package/lib/renderer/materialConstants.js +11 -0
- package/lib/renderer/materialConstants.js.map +1 -1
- package/lib/renderer/materialCore.d.ts +8 -0
- package/lib/renderer/materialCore.js +9 -0
- package/lib/renderer/materialCore.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +2 -2
- package/lib/renderer/materialEmission.js +3 -3
- package/lib/renderer/materialEmission.js.map +1 -1
- package/lib/renderer/materialLayout.d.ts +2 -101
- package/lib/renderer/materialLayout.js +110 -172
- package/lib/renderer/materialLayout.js.map +1 -1
- package/lib/renderer/materialLayoutSchema.d.ts +26 -0
- package/lib/renderer/materialLayoutSchema.js +172 -0
- package/lib/renderer/materialLayoutSchema.js.map +1 -0
- package/lib/renderer/materialParams.d.ts +69 -0
- package/lib/renderer/materialParams.js +272 -0
- package/lib/renderer/materialParams.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +14 -324
- package/lib/renderer/materialTextureSlots.js +21 -8
- package/lib/renderer/materialTextureSlots.js.map +1 -1
- package/lib/renderer/materialTextures.d.ts +6 -0
- package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
- package/lib/renderer/materialTextures.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.js +6 -147
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
- package/lib/renderer/meshInstances.d.ts +4 -21
- package/lib/renderer/meshInstances.js +10 -56
- package/lib/renderer/meshInstances.js.map +1 -1
- package/lib/renderer/oidnNetwork.d.ts +2 -2
- package/lib/renderer/oidnNetwork.js +1 -1
- package/lib/renderer/oidnNetwork.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.js +850 -846
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/ownedDenoiser.d.ts +9 -0
- package/lib/renderer/ownedDenoiser.js +2 -0
- package/lib/renderer/ownedDenoiser.js.map +1 -0
- package/lib/renderer/packedMeshInstances.d.ts +23 -0
- package/lib/renderer/packedMeshInstances.js +80 -0
- package/lib/renderer/packedMeshInstances.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +12 -47
- package/lib/renderer/prepareMeshBVH.js +21 -642
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
- package/lib/renderer/proceduralEnvironmentPower.js +8 -0
- package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +1 -0
- package/lib/renderer/progressiveScheduler.js +3 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +3 -1
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/renderingLimits.d.ts +9 -0
- package/lib/renderer/renderingLimits.js +18 -0
- package/lib/renderer/renderingLimits.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +73 -0
- package/lib/renderer/sceneAssembly.js +109 -0
- package/lib/renderer/sceneAssembly.js.map +1 -0
- package/lib/renderer/sceneChangeCore.d.ts +39 -0
- package/lib/renderer/sceneChangeCore.js +307 -0
- package/lib/renderer/sceneChangeCore.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +3 -6
- package/lib/renderer/sceneChangeDetector.js +24 -150
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
- package/lib/renderer/sceneLayoutSchema.js +111 -0
- package/lib/renderer/sceneLayoutSchema.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +3 -3
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +55 -0
- package/lib/renderer/scenePreparation.js +360 -0
- package/lib/renderer/scenePreparation.js.map +1 -0
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/scratchSampling.js.map +1 -1
- package/lib/renderer/shader.d.ts +2 -0
- package/lib/renderer/shader.js +2 -0
- package/lib/renderer/shader.js.map +1 -1
- package/lib/renderer/shaderCapabilities.d.ts +23 -0
- package/lib/renderer/shaderCapabilities.js +55 -0
- package/lib/renderer/shaderCapabilities.js.map +1 -0
- package/lib/renderer/shaderCapacity.d.ts +2 -0
- package/lib/renderer/shaderCapacity.js +5 -0
- package/lib/renderer/shaderCapacity.js.map +1 -0
- package/lib/renderer/skyModel.d.ts +9 -0
- package/lib/renderer/skyModel.js +10 -0
- package/lib/renderer/skyModel.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +60 -0
- package/lib/renderer/textureAtlas.js +145 -0
- package/lib/renderer/textureAtlas.js.map +1 -0
- package/lib/renderer/textureAtlasPixels.d.ts +7 -0
- package/lib/renderer/textureAtlasPixels.js +68 -0
- package/lib/renderer/textureAtlasPixels.js.map +1 -0
- package/lib/renderer/util.d.ts +1 -1
- package/lib/renderer/util.js.map +1 -1
- package/lib/renderer/webgl.d.ts +9 -2
- package/lib/renderer/webgl.js +54 -9
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/wgpuBindless.d.ts +26 -0
- package/lib/renderer/wgpuBindless.js +95 -0
- package/lib/renderer/wgpuBindless.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
- package/lib/renderer/wgpuBindlessSource.js +51 -0
- package/lib/renderer/wgpuBindlessSource.js.map +1 -0
- package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
- package/lib/renderer/wgpuMaterialConstants.js +52 -0
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
- package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
- package/lib/renderer/wgpuSceneUniform.js +125 -0
- package/lib/renderer/wgpuSceneUniform.js.map +1 -0
- package/lib/renderer/wgpuShaderSource.d.ts +15 -0
- package/lib/renderer/wgpuShaderSource.js +31 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
- package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +742 -705
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
- 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 +84 -82
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
- 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 +2 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
- 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 +152 -148
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
- 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 +26 -13
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
- package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
- 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.js +7 -7
- package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
- package/lib/renderer/wgsl/jnlm.compute.js +315 -0
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Camera.js +7 -3
- package/lib/scene/Camera.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +5 -9
- package/lib/scene/EnvironmentLight.js +4 -14
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/EnvironmentLightState.d.ts +18 -0
- package/lib/scene/EnvironmentLightState.js +19 -0
- package/lib/scene/EnvironmentLightState.js.map +1 -0
- package/lib/scene/Geometry.d.ts +12 -6
- package/lib/scene/Geometry.js +37 -13
- package/lib/scene/Geometry.js.map +1 -1
- package/lib/scene/InstanceState.d.ts +39 -0
- package/lib/scene/InstanceState.js +77 -0
- package/lib/scene/InstanceState.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +1 -1
- package/lib/scene/InstancedMesh.js +3 -0
- package/lib/scene/InstancedMesh.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +209 -0
- package/lib/scene/MaterialState.js +231 -0
- package/lib/scene/MaterialState.js.map +1 -0
- package/lib/scene/Mesh.d.ts +4 -6
- package/lib/scene/Mesh.js +3 -11
- package/lib/scene/Mesh.js.map +1 -1
- package/lib/scene/MeshState.d.ts +20 -0
- package/lib/scene/MeshState.js +35 -0
- package/lib/scene/MeshState.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +6 -168
- package/lib/scene/OpenPBRMaterial.js +5 -223
- package/lib/scene/OpenPBRMaterial.js.map +1 -1
- package/lib/scene/PixelTexture.d.ts +6 -0
- package/lib/scene/PixelTexture.js +10 -0
- package/lib/scene/PixelTexture.js.map +1 -0
- package/lib/scene/ProceduralSky.d.ts +24 -0
- package/lib/scene/ProceduralSky.js +40 -0
- package/lib/scene/ProceduralSky.js.map +1 -0
- package/lib/scene/RectLight.d.ts +2 -13
- package/lib/scene/RectLight.js +3 -21
- package/lib/scene/RectLight.js.map +1 -1
- package/lib/scene/RectLightState.d.ts +31 -0
- package/lib/scene/RectLightState.js +26 -0
- package/lib/scene/RectLightState.js.map +1 -0
- package/lib/scene/Scene.d.ts +15 -4
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SceneNode.js +7 -6
- package/lib/scene/SceneNode.js.map +1 -1
- package/lib/scene/Texture.d.ts +10 -41
- package/lib/scene/Texture.js +4 -33
- package/lib/scene/Texture.js.map +1 -1
- package/lib/scene/TextureState.d.ts +35 -0
- package/lib/scene/TextureState.js +35 -0
- package/lib/scene/TextureState.js.map +1 -0
- package/lib/scene/attributeData.d.ts +4 -0
- package/lib/scene/attributeData.js +10 -0
- package/lib/scene/attributeData.js.map +1 -0
- package/lib/scene/lightState.d.ts +8 -0
- package/lib/scene/lightState.js +2 -0
- package/lib/scene/lightState.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +7 -12
- package/lib/scene/openPbrSchema.js +273 -28
- package/lib/scene/openPbrSchema.js.map +1 -1
- package/lib/scene/skyParameters.d.ts +20 -0
- package/lib/scene/skyParameters.js +28 -0
- package/lib/scene/skyParameters.js.map +1 -0
- package/lib/scene/textureData.d.ts +9 -0
- package/lib/scene/textureData.js +2 -0
- package/lib/scene/textureData.js.map +1 -0
- package/lib/scene/texturePixels.d.ts +6 -0
- package/lib/scene/texturePixels.js +10 -0
- package/lib/scene/texturePixels.js.map +1 -0
- package/lib/settings/display.d.ts +33 -0
- package/lib/settings/display.js +7 -0
- package/lib/settings/display.js.map +1 -1
- package/lib/settings/render.d.ts +25 -3
- package/lib/settings/render.js +3 -1
- package/lib/settings/render.js.map +1 -1
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/util/commonGeometry.js +7 -7
- package/lib/util/commonGeometry.js.map +1 -1
- package/lib/util/fromTHREE.d.ts +4 -1
- package/lib/util/fromTHREE.js +18 -5
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/util/geometry.js +42 -29
- package/lib/util/geometry.js.map +1 -1
- package/lib/util/loadRGBE.js +3 -4
- package/lib/util/loadRGBE.js.map +1 -1
- package/lib/util/studioLighting.d.ts +18 -0
- package/lib/util/studioLighting.js +36 -0
- package/lib/util/studioLighting.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +4 -0
- package/package.json +31 -5
- package/lib/renderer/texturesFromMaterials.d.ts +0 -6
- package/lib/renderer/texturesFromMaterials.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import bsdf from './chunks/openPbrBsdf.glsl.js';
|
|
2
|
+
import sampling from './chunks/sampling.glsl.js';
|
|
3
|
+
import reflectance from './aovReflectance.glsl.js';
|
|
4
|
+
import { FragmentShader, Shader } from '../shader.js';
|
|
5
|
+
import common from './chunks/common.glsl.js';
|
|
6
|
+
import core from './chunks/rayTraceCore.glsl.js';
|
|
7
|
+
import materials from './chunks/materialBuffer.glsl.js';
|
|
8
|
+
import intersect from './chunks/intersect.glsl.js';
|
|
9
|
+
import uvProjection from './chunks/uvProjection.glsl.js';
|
|
10
|
+
import random from './chunks/random.glsl.js';
|
|
11
|
+
import cameraRay from './chunks/cameraRay.glsl.js';
|
|
12
|
+
import rand from './chunks/rand.glsl.js';
|
|
13
|
+
const surface = /* glsl */ `
|
|
14
|
+
uint ke(int index) { ivec2 size = textureSize(aovScene,0); uvec4 v = texelFetch(aovScene, ivec2((index/4)%size.x, (index/4)/size.x),0); return v[index%4]; }
|
|
15
|
+
vec3 iN(int offset){return vec3(uintBitsToFloat(ke(offset)),uintBitsToFloat(ke(offset+1)),uintBitsToFloat(ke(offset+2)));}
|
|
16
|
+
mat4 ow(int offset) { mat4 m; for (int i=0;i<4;i++) for(int j=0;j<4;j++) m[i][j]=uintBitsToFloat(ke(offset+i*4+j)); return m; }
|
|
17
|
+
Ray wJ(vec2 uv) {
|
|
18
|
+
vec4 origin = viewProjectionInv*vec4(uv*2.0-1.0,-1.0,1.0);
|
|
19
|
+
vec4 target = viewProjectionInv*vec4(uv*2.0-1.0,1.0,1.0);
|
|
20
|
+
Ray ray; gC(ray, origin.xyz/origin.w, normalize(target.xyz*origin.w-origin.xyz*target.w)); return ray;
|
|
21
|
+
}
|
|
22
|
+
bool mQ(Ray wX, out SurfaceInteraction si, out OpenPbrResolvedMaterial material) {
|
|
23
|
+
Ray ray=wX; si.triangleIndex=-1;
|
|
24
|
+
for(int layer=0;layer<32;layer++) {
|
|
25
|
+
intersectScene(ray,si,false); if(!si.hit) return false;
|
|
26
|
+
dg(material,si.materialIndex,si.uv,si.uv1,si.instanceIndex,si.vertexColor);
|
|
27
|
+
if(material.materialType!=SHADOW_CATCHER && material.alpha>=0.5) return true;
|
|
28
|
+
ray.o=si.position+ray.d*(EPS*0.02);
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
export function aovTraceFragment(center) {
|
|
34
|
+
const shader = new FragmentShader({ name: center ? 'AOV center' : 'AOV accumulation',
|
|
35
|
+
outputs: center ? ['id', 'motion'] : ['geometry', 'position', 'diffuse', 'specular'],
|
|
36
|
+
outputTypes: center ? { id: 'uvec4' } : {}, defines: { DEPTH_QUERY_MODE: true },
|
|
37
|
+
includes: [core, materials, intersect, random],
|
|
38
|
+
uniforms: { viewProjectionInv: Shader.uniform('mat4'), viewInv: Shader.uniform('mat4'),
|
|
39
|
+
cameraApertureRadius: Shader.uniform('float', 0), cameraFocusDistance: Shader.uniform('float', 10),
|
|
40
|
+
viewportSize: Shader.uniform('vec2'), aovScene: Shader.uniform('usampler2D'),
|
|
41
|
+
previousId: Shader.uniform('usampler2D'), previousMotion: Shader.uniform('sampler2D'),
|
|
42
|
+
previousGeometry: Shader.uniform('sampler2D'), previousPosition: Shader.uniform('sampler2D'),
|
|
43
|
+
previousDiffuse: Shader.uniform('sampler2D'), previousSpecular: Shader.uniform('sampler2D'),
|
|
44
|
+
openPbrEnergyLut: Shader.uniform('sampler2D'), aovMask: Shader.uniform('int', 0),
|
|
45
|
+
aovSample: Shader.uniform('int', 0) },
|
|
46
|
+
main: /* glsl */ `
|
|
47
|
+
${common}
|
|
48
|
+
${rand}
|
|
49
|
+
${random.main}
|
|
50
|
+
${core.main}
|
|
51
|
+
${uvProjection}
|
|
52
|
+
${materials.main}
|
|
53
|
+
${intersect.main}
|
|
54
|
+
${cameraRay}
|
|
55
|
+
${center ? '' : sampling + bsdf + reflectance}
|
|
56
|
+
${surface}
|
|
57
|
+
void main() {
|
|
58
|
+
${center ? /* glsl */ `
|
|
59
|
+
out_id=uvec4(0xffffffffu); out_motion=vec4(0.0);
|
|
60
|
+
Ray ray=wJ((floor(gl_FragCoord.xy)+0.5)/viewportSize);
|
|
61
|
+
SurfaceInteraction si; OpenPbrResolvedMaterial material;
|
|
62
|
+
if(!mQ(ray,si,material)) return;
|
|
63
|
+
int offset=52+si.instanceIndex*24;
|
|
64
|
+
out_id=uvec4(ke(offset),ke(offset+1),ke(int(ke(16))+si.materialIndex),ke(int(ke(17))+si.triangleIndex));
|
|
65
|
+
out_motion.z=dot(si.position-iN(36),iN(40));
|
|
66
|
+
if(ke(offset+2)==0u)return;
|
|
67
|
+
vec4 qA=ow(offset+4)*vec4(si.position,1.0);
|
|
68
|
+
vec4 ps=ow(0)*qA;
|
|
69
|
+
if(ps.w<=0.0)return;
|
|
70
|
+
vec3 tX=ps.xyz/ps.w;vec2 iz=(tX.xy*0.5+0.5)*viewportSize;
|
|
71
|
+
if(any(lessThan(iz,vec2(0.0)))||any(greaterThanEqual(iz,viewportSize))||abs(tX.z)>1.0)return;
|
|
72
|
+
uvec4 identity=texelFetch(previousId,ivec2(iz),0);float qz=texelFetch(previousMotion,ivec2(iz),0).z;
|
|
73
|
+
if(any(notEqual(identity.xy,out_id.xy))||abs(qz-dot(qA.xyz-iN(44),iN(48)))>max(1e-4,abs(qz)*1e-3))return;
|
|
74
|
+
out_motion=vec4((iz-gl_FragCoord.xy)*vec2(1.0,-1.0),out_motion.z,3.0);
|
|
75
|
+
` : /* glsl */ `
|
|
76
|
+
ivec2 coord=ivec2(gl_FragCoord.xy);
|
|
77
|
+
out_geometry=aovSample==0 ? vec4(0.0) : texelFetch(previousGeometry,coord,0);
|
|
78
|
+
out_position=aovSample==0 ? vec4(0.0) : texelFetch(previousPosition,coord,0);
|
|
79
|
+
out_diffuse=aovSample==0 ? vec4(0.0) : texelFetch(previousDiffuse,coord,0);
|
|
80
|
+
out_specular=aovSample==0 ? vec4(0.0) : texelFetch(previousSpecular,coord,0);
|
|
81
|
+
rG(); aZ=uvec2(floor(gl_FragCoord.xy));
|
|
82
|
+
gW(floor(gl_FragCoord.xy),int(aQ ^ dG(uint(sequenceSeed))));
|
|
83
|
+
Ray ray=wJ((floor(gl_FragCoord.xy)+dZ(CAMERA_PIXEL))/viewportSize);
|
|
84
|
+
if(cameraApertureRadius>0.0) {
|
|
85
|
+
vec3 eye=viewInv[3].xyz, forward=-normalize(viewInv[2].xyz);
|
|
86
|
+
vec3 jN=eye+ray.d*(cameraFocusDistance/dot(ray.d,forward));
|
|
87
|
+
vec2 xU=cameraApertureRadius*kN(dZ(CAMERA_LENS));
|
|
88
|
+
vec3 origin=(viewInv*vec4(xU,0.0,1.0)).xyz;
|
|
89
|
+
gC(ray,origin,normalize(jN-origin));
|
|
90
|
+
}
|
|
91
|
+
SurfaceInteraction si; OpenPbrResolvedMaterial material;
|
|
92
|
+
if(!mQ(ray,si,material)) return;
|
|
93
|
+
float depth=max(dot(si.position-viewInv[3].xyz,-normalize(viewInv[2].xyz)),0.0);
|
|
94
|
+
bool unsupported=material.materialType!=STANDARD || material.alpha<1.0 || material.coatWeight>0.0 || material.fuzzWeight>0.0 || material.specularAnisotropy>0.0 || material.subsurfaceWeight>0.0 || dot(material.mediumScattering,material.mediumScattering)>0.0 || material.bevel>0.0 || material.thinFilmWeight>0.0 || material.transmissionDispersionScale>0.0;
|
|
95
|
+
out_geometry+=vec4(depth,material.specularRoughness,material.baseMetalness,unsupported?1.0:0.0);
|
|
96
|
+
#ifdef AOV_REFLECTANCE
|
|
97
|
+
if((aovMask&24)!=0 && !unsupported){
|
|
98
|
+
vec3 normal=si.normal,face=si.faceNormal;float cosine=-dot(normal,ray.d),fu=-dot(face,ray.d);
|
|
99
|
+
if(material.thinWalled&&(material.transmissionWeight>0.0||material.subsurfaceWeight>0.0)){
|
|
100
|
+
if(cosine<0.0){normal=-normal;cosine=-cosine;}if(fu<0.0){face=-face;fu=-fu;}
|
|
101
|
+
}
|
|
102
|
+
if(fu>=0.0&&cosine<0.0){normal=face;cosine=fu;}
|
|
103
|
+
if(cosine<0.0)normal=-normal;
|
|
104
|
+
material.inside=cosine<=0.0&&!material.thinWalled;material.relativeIor=cosine>0.0?1.0/material.specularIor:material.specularIor;
|
|
105
|
+
vec3 tangent=vec3(0.0);
|
|
106
|
+
#ifdef USE_TANGENT
|
|
107
|
+
tangent=si.tangent;
|
|
108
|
+
#endif
|
|
109
|
+
ag prepared=ds(tangent,material,-ray.d,normal);
|
|
110
|
+
vec3 diffuse,specular;aovReflectance(prepared,(aovMask&8)!=0,(aovMask&16)!=0,diffuse,specular);
|
|
111
|
+
out_diffuse+=vec4(diffuse,1.0);out_specular+=vec4(specular,1.0);
|
|
112
|
+
}
|
|
113
|
+
#endif
|
|
114
|
+
out_position+=vec4(si.position,1.0);
|
|
115
|
+
`}
|
|
116
|
+
}
|
|
117
|
+
` });
|
|
118
|
+
shader.parallelCompile = true;
|
|
119
|
+
return shader;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=aovTrace.frag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aovTrace.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/aovTrace.frag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAChD,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,cAAc,CAAC;AACpD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,+BAA+B,CAAC;AACjD,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,IAAI,MAAM,uBAAuB,CAAC;AACzC,MAAM,OAAO,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;CAmB1B,CAAC;AACF,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB;QACjF,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,CAAC;QAChF,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,EAAE,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAC,gBAAgB,EAAE,IAAI,EAAC;QAC3E,QAAQ,EAAE,CAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,MAAM,CAAC;QAC3C,QAAQ,EAAE,EAAC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACnF,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAC,EAAE,CAAC;YAChG,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5E,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YACrF,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC5F,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3F,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC;YAC/E,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC,EAAC;QACrC,IAAI,EAAE,UAAU,CAAC;EACnB,MAAM;EACN,IAAI;EACJ,MAAM,CAAC,IAAI;EACX,IAAI,CAAC,IAAI;EACT,YAAY;EACZ,SAAS,CAAC,IAAI;EACd,SAAS,CAAC,IAAI;EACd,SAAS;EACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAC,IAAI,GAAC,WAAW;EACvC,OAAO;;EAEL,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;CAiBrB,CAAC,CAAC,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCd;;CAEF,EAAC,CAAC,CAAC;IACF,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import bsdf from './chunks/openPbrBsdf.glsl.js';\nimport sampling from './chunks/sampling.glsl.js';\nimport reflectance from './aovReflectance.glsl.js';\nimport {FragmentShader, Shader} from '../shader.js';\nimport common from './chunks/common.glsl.js';\nimport core from './chunks/rayTraceCore.glsl.js';\nimport materials from './chunks/materialBuffer.glsl.js';\nimport intersect from './chunks/intersect.glsl.js';\nimport uvProjection from './chunks/uvProjection.glsl.js';\nimport random from './chunks/random.glsl.js';\nimport cameraRay from './chunks/cameraRay.glsl.js';\nimport rand from './chunks/rand.glsl.js';\nconst surface = /* glsl */ `\nuint aovWord(int index) { ivec2 size = textureSize(aovScene,0); uvec4 v = texelFetch(aovScene, ivec2((index/4)%size.x, (index/4)/size.x),0); return v[index%4]; }\nvec3 aovVector(int offset){return vec3(uintBitsToFloat(aovWord(offset)),uintBitsToFloat(aovWord(offset+1)),uintBitsToFloat(aovWord(offset+2)));}\nmat4 aovMatrix(int offset) { mat4 m; for (int i=0;i<4;i++) for(int j=0;j<4;j++) m[i][j]=uintBitsToFloat(aovWord(offset+i*4+j)); return m; }\nRay aovRay(vec2 uv) {\n vec4 origin = viewProjectionInv*vec4(uv*2.0-1.0,-1.0,1.0);\n vec4 target = viewProjectionInv*vec4(uv*2.0-1.0,1.0,1.0);\n Ray ray; initRay(ray, origin.xyz/origin.w, normalize(target.xyz*origin.w-origin.xyz*target.w)); return ray;\n}\nbool aovSurface(Ray inputRay, out SurfaceInteraction si, out OpenPbrResolvedMaterial material) {\n Ray ray=inputRay; si.triangleIndex=-1;\n for(int layer=0;layer<32;layer++) {\n intersectScene(ray,si,false); if(!si.hit) return false;\n getMaterial(material,si.materialIndex,si.uv,si.uv1,si.instanceIndex,si.vertexColor);\n if(material.materialType!=SHADOW_CATCHER && material.alpha>=0.5) return true;\n ray.o=si.position+ray.d*(EPS*0.02);\n }\n return false;\n}\n`;\nexport function aovTraceFragment(center: boolean) {\n const shader = new FragmentShader({name: center ? 'AOV center' : 'AOV accumulation',\n outputs: center ? ['id','motion'] : ['geometry','position','diffuse','specular'],\n outputTypes: center ? {id: 'uvec4'} : {}, defines: {DEPTH_QUERY_MODE: true},\n includes: [core,materials,intersect,random],\n uniforms: {viewProjectionInv: Shader.uniform('mat4'), viewInv: Shader.uniform('mat4'),\n cameraApertureRadius: Shader.uniform('float',0), cameraFocusDistance: Shader.uniform('float',10),\n viewportSize: Shader.uniform('vec2'), aovScene: Shader.uniform('usampler2D'),\n previousId: Shader.uniform('usampler2D'), previousMotion: Shader.uniform('sampler2D'),\n previousGeometry: Shader.uniform('sampler2D'), previousPosition: Shader.uniform('sampler2D'),\n previousDiffuse: Shader.uniform('sampler2D'), previousSpecular: Shader.uniform('sampler2D'),\n openPbrEnergyLut: Shader.uniform('sampler2D'), aovMask: Shader.uniform('int',0),\n aovSample: Shader.uniform('int',0)},\n main: /* glsl */ `\n${common}\n${rand}\n${random.main}\n${core.main}\n${uvProjection}\n${materials.main}\n${intersect.main}\n${cameraRay}\n${center ? '' : sampling+bsdf+reflectance}\n${surface}\nvoid main() {\n ${center ? /* glsl */ `\n out_id=uvec4(0xffffffffu); out_motion=vec4(0.0);\n Ray ray=aovRay((floor(gl_FragCoord.xy)+0.5)/viewportSize);\n SurfaceInteraction si; OpenPbrResolvedMaterial material;\n if(!aovSurface(ray,si,material)) return;\n int offset=52+si.instanceIndex*24;\n out_id=uvec4(aovWord(offset),aovWord(offset+1),aovWord(int(aovWord(16))+si.materialIndex),aovWord(int(aovWord(17))+si.triangleIndex));\n out_motion.z=dot(si.position-aovVector(36),aovVector(40));\n if(aovWord(offset+2)==0u)return;\n vec4 oldWorld=aovMatrix(offset+4)*vec4(si.position,1.0);\n vec4 oldClip=aovMatrix(0)*oldWorld;\n if(oldClip.w<=0.0)return;\n vec3 oldNdc=oldClip.xyz/oldClip.w;vec2 oldPixel=(oldNdc.xy*0.5+0.5)*viewportSize;\n if(any(lessThan(oldPixel,vec2(0.0)))||any(greaterThanEqual(oldPixel,viewportSize))||abs(oldNdc.z)>1.0)return;\n uvec4 identity=texelFetch(previousId,ivec2(oldPixel),0);float oldDepth=texelFetch(previousMotion,ivec2(oldPixel),0).z;\n if(any(notEqual(identity.xy,out_id.xy))||abs(oldDepth-dot(oldWorld.xyz-aovVector(44),aovVector(48)))>max(1e-4,abs(oldDepth)*1e-3))return;\n out_motion=vec4((oldPixel-gl_FragCoord.xy)*vec2(1.0,-1.0),out_motion.z,3.0);\n ` : /* glsl */ `\n ivec2 coord=ivec2(gl_FragCoord.xy);\n out_geometry=aovSample==0 ? vec4(0.0) : texelFetch(previousGeometry,coord,0);\n out_position=aovSample==0 ? vec4(0.0) : texelFetch(previousPosition,coord,0);\n out_diffuse=aovSample==0 ? vec4(0.0) : texelFetch(previousDiffuse,coord,0);\n out_specular=aovSample==0 ? vec4(0.0) : texelFetch(previousSpecular,coord,0);\n initRandom(); samplingPixel=uvec2(floor(gl_FragCoord.xy));\n rng_initialize(floor(gl_FragCoord.xy),int(pixelSampleIndex ^ sampleHash(uint(sequenceSeed))));\n Ray ray=aovRay((floor(gl_FragCoord.xy)+sample2D(CAMERA_PIXEL))/viewportSize);\n if(cameraApertureRadius>0.0) {\n vec3 eye=viewInv[3].xyz, forward=-normalize(viewInv[2].xyz);\n vec3 focusPoint=eye+ray.d*(cameraFocusDistance/dot(ray.d,forward));\n vec2 lens=cameraApertureRadius*sampleCircle(sample2D(CAMERA_LENS));\n vec3 origin=(viewInv*vec4(lens,0.0,1.0)).xyz;\n initRay(ray,origin,normalize(focusPoint-origin));\n }\n SurfaceInteraction si; OpenPbrResolvedMaterial material;\n if(!aovSurface(ray,si,material)) return;\n float depth=max(dot(si.position-viewInv[3].xyz,-normalize(viewInv[2].xyz)),0.0);\n bool unsupported=material.materialType!=STANDARD || material.alpha<1.0 || material.coatWeight>0.0 || material.fuzzWeight>0.0 || material.specularAnisotropy>0.0 || material.subsurfaceWeight>0.0 || dot(material.mediumScattering,material.mediumScattering)>0.0 || material.bevel>0.0 || material.thinFilmWeight>0.0 || material.transmissionDispersionScale>0.0;\n out_geometry+=vec4(depth,material.specularRoughness,material.baseMetalness,unsupported?1.0:0.0);\n #ifdef AOV_REFLECTANCE\n if((aovMask&24)!=0 && !unsupported){\n vec3 normal=si.normal,face=si.faceNormal;float cosine=-dot(normal,ray.d),faceCosine=-dot(face,ray.d);\n if(material.thinWalled&&(material.transmissionWeight>0.0||material.subsurfaceWeight>0.0)){\n if(cosine<0.0){normal=-normal;cosine=-cosine;}if(faceCosine<0.0){face=-face;faceCosine=-faceCosine;}\n }\n if(faceCosine>=0.0&&cosine<0.0){normal=face;cosine=faceCosine;}\n if(cosine<0.0)normal=-normal;\n material.inside=cosine<=0.0&&!material.thinWalled;material.relativeIor=cosine>0.0?1.0/material.specularIor:material.specularIor;\n vec3 tangent=vec3(0.0);\n#ifdef USE_TANGENT\n tangent=si.tangent;\n#endif\n OpenPbrPreparedBsdf prepared=openpbr_prepare(tangent,material,-ray.d,normal);\n vec3 diffuse,specular;aovReflectance(prepared,(aovMask&8)!=0,(aovMask&16)!=0,diffuse,specular);\n out_diffuse+=vec4(diffuse,1.0);out_specular+=vec4(specular,1.0);\n }\n #endif\n out_position+=vec4(si.position,1.0);\n `}\n}\n`});\n shader.parallelCompile = true;\n return shader;\n}\n"]}
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
4
4
|
// Shared primary-ray construction keeps beauty and catcher coverage aligned.
|
|
5
5
|
export default /* glsl */ `
|
|
6
|
-
Ray
|
|
7
|
-
vec4 origin = viewProjectionInv * vec4(
|
|
8
|
-
vec4 target = viewProjectionInv * vec4(
|
|
6
|
+
Ray fj(vec2 coord) {
|
|
7
|
+
vec4 origin = viewProjectionInv * vec4(coord * 2.0 - 1.0, -1.0, 1.0);
|
|
8
|
+
vec4 target = viewProjectionInv * vec4(coord * 2.0 - 1.0, 1.0, 1.0);
|
|
9
9
|
Ray cam;
|
|
10
|
-
|
|
10
|
+
gC(cam, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
|
|
11
11
|
|
|
12
12
|
return cam;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
vec2
|
|
15
|
+
vec2 kN(vec2 p) {
|
|
16
16
|
p = 2.0 * p - 1.0;
|
|
17
17
|
bool greater = abs(p.x) > abs(p.y);
|
|
18
18
|
float r = greater ? p.x : p.y;
|
|
@@ -20,16 +20,16 @@ float theta = greater ? 0.25 * PI * p.y / p.x : PI * (0.5 - 0.25 * p.x / p.y);
|
|
|
20
20
|
return r * vec2(cos(theta), sin(theta));
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
Ray
|
|
24
|
-
Ray cam =
|
|
23
|
+
Ray oG() {
|
|
24
|
+
Ray cam = fj(v_Texcoord + tg());
|
|
25
25
|
if (cameraApertureRadius > 0.0) {
|
|
26
26
|
|
|
27
27
|
vec3 eye = viewInv[3].xyz;
|
|
28
|
-
vec3
|
|
29
|
-
vec3
|
|
30
|
-
vec2
|
|
31
|
-
vec3 origin = vec3(viewInv * vec4(
|
|
32
|
-
|
|
28
|
+
vec3 forward = -normalize(viewInv[2].xyz);
|
|
29
|
+
vec3 jN = eye + cam.d * (cameraFocusDistance / dot(cam.d, forward));
|
|
30
|
+
vec2 sK = cameraApertureRadius * kN(dZ(CAMERA_LENS));
|
|
31
|
+
vec3 origin = vec3(viewInv * vec4(sK, 0.0, 1.0));
|
|
32
|
+
gC(cam, origin, normalize(jN - origin));
|
|
33
33
|
}
|
|
34
34
|
return cam;
|
|
35
35
|
}
|
|
@@ -11,21 +11,22 @@ export default createShaderMixin({
|
|
|
11
11
|
envMapDistribution: Shader.uniform('sampler2D'),
|
|
12
12
|
backgroundMap: Shader.uniform('sampler2D'),
|
|
13
13
|
backgroundMapTransform: Shader.uniform('vec4', [1, 0, 1, 0]),
|
|
14
|
+
backgroundMapRotation: Shader.uniform('mat3', [1, 0, 0, 0, 1, 0, 0, 0, 1]),
|
|
14
15
|
groundedBackgroundParams: Shader.uniform('vec4'),
|
|
15
16
|
groundedBackgroundCenter: Shader.uniform('vec2')
|
|
16
17
|
},
|
|
17
18
|
main: glsl `
|
|
18
|
-
vec2
|
|
19
|
-
float phi = mod(atan(-
|
|
20
|
-
float theta = acos(clamp(
|
|
19
|
+
vec2 eV(vec3 gx) {
|
|
20
|
+
float phi = mod(atan(-gx.z, -gx.x), TWOPI);
|
|
21
|
+
float theta = acos(clamp(gx.y, -1.0, 1.0));
|
|
21
22
|
return vec2(phi * 0.5 * INVPI, theta * INVPI);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
vec2
|
|
25
|
-
return
|
|
25
|
+
vec2 dm(vec3 nO) {
|
|
26
|
+
return eV(transpose(environmentRotation) * nO);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
float
|
|
29
|
+
float rE(float u, out int vOffset, out float pdf) {
|
|
29
30
|
ivec2 size = textureSize(envMap, 0);
|
|
30
31
|
|
|
31
32
|
int left = 0;
|
|
@@ -51,7 +52,7 @@ pdf = s0.y;
|
|
|
51
52
|
return (float(vOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.y);
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
float
|
|
55
|
+
float rD(float u, int vOffset, out float pdf) {
|
|
55
56
|
ivec2 size = textureSize(envMap, 0);
|
|
56
57
|
|
|
57
58
|
int left = 0;
|
|
@@ -65,123 +66,128 @@ left = mid + 1;
|
|
|
65
66
|
right = mid;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
|
-
int
|
|
69
|
+
int pO = left - 1;
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
|
|
72
|
-
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 +
|
|
73
|
-
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 +
|
|
73
|
+
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + pO, vOffset), 0).xy;
|
|
74
|
+
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + pO + 1, vOffset), 0).xy;
|
|
74
75
|
|
|
75
76
|
pdf = s0.y;
|
|
76
77
|
|
|
77
|
-
return (float(
|
|
78
|
+
return (float(pO) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
float eW(vec2 ew, float v) {
|
|
83
|
+
if (!(v > 0.0 && v < 1.0)) { return 0.0; }
|
|
84
|
+
float sinTheta = sin(min(v, 1.0 - v) * PI);
|
|
85
|
+
return ew.x * ew.y * INVPI2 / (2.0 * sinTheta);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
vec3 pI(vec2 random, out vec2 uv, out float pdf) {
|
|
90
|
+
vec2 ew;
|
|
83
91
|
int vOffset;
|
|
84
92
|
|
|
85
|
-
uv.y =
|
|
86
|
-
uv.x =
|
|
93
|
+
uv.y = rE(random.x, vOffset, ew.y);
|
|
94
|
+
uv.x = rD(random.y, vOffset, ew.x);
|
|
87
95
|
|
|
88
96
|
float phi = uv.x * TWOPI;
|
|
89
97
|
float theta = uv.y * PI;
|
|
90
|
-
float
|
|
98
|
+
float ci = cos(theta);
|
|
91
99
|
float sinTheta = sin(theta);
|
|
92
|
-
float
|
|
93
|
-
float
|
|
100
|
+
float vM = cos(phi);
|
|
101
|
+
float vX = sin(phi);
|
|
94
102
|
|
|
95
|
-
vec3 dir = vec3(-sinTheta *
|
|
103
|
+
vec3 dir = vec3(-sinTheta * vM, ci, -sinTheta * vX);
|
|
96
104
|
|
|
97
|
-
pdf =
|
|
105
|
+
pdf = eW(ew, uv.y);
|
|
98
106
|
|
|
99
107
|
return environmentRotation * dir;
|
|
100
108
|
}
|
|
101
109
|
|
|
102
|
-
float
|
|
110
|
+
float iT(vec2 uv) {
|
|
103
111
|
vec2 size = vec2(textureSize(envMap, 0));
|
|
104
112
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
uv *= size;
|
|
113
|
+
ivec2 pixel = clamp(ivec2(uv * size), ivec2(0), ivec2(size) - ivec2(1));
|
|
108
114
|
|
|
109
|
-
float
|
|
110
|
-
float
|
|
115
|
+
float ub = texelFetch(envMapDistribution, ivec2(1 + pixel.x, pixel.y), 0).y;
|
|
116
|
+
float uc = texelFetch(envMapDistribution, ivec2(0, pixel.y), 0).y;
|
|
111
117
|
|
|
112
|
-
return
|
|
118
|
+
return eW(vec2(ub, uc), uv.y);
|
|
113
119
|
}
|
|
114
120
|
|
|
115
|
-
float
|
|
116
|
-
float
|
|
117
|
-
if (
|
|
121
|
+
float dK(vec3 point, float height, float radius) {
|
|
122
|
+
float ge = length(point);
|
|
123
|
+
if (ge < 0.00001) {
|
|
118
124
|
return -radius;
|
|
119
125
|
}
|
|
120
126
|
|
|
121
|
-
float
|
|
122
|
-
float
|
|
123
|
-
float
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
} else if (
|
|
127
|
-
|
|
127
|
+
float iX = radius * point.y / ge;
|
|
128
|
+
float iL = -1.5 * height;
|
|
129
|
+
float eH;
|
|
130
|
+
if (iX >= 0.0) {
|
|
131
|
+
eH = radius;
|
|
132
|
+
} else if (iX < iL) {
|
|
133
|
+
eH = -height * ge / point.y;
|
|
128
134
|
} else {
|
|
129
|
-
float
|
|
130
|
-
-
|
|
131
|
-
|
|
135
|
+
float cL = 1.0
|
|
136
|
+
- iX * iX / (3.0 * iL * iL);
|
|
137
|
+
eH = radius * cL;
|
|
132
138
|
}
|
|
133
|
-
return
|
|
139
|
+
return ge - eH;
|
|
134
140
|
}
|
|
135
141
|
|
|
136
|
-
vec3
|
|
142
|
+
vec3 fd(vec3 origin, vec3 d) {
|
|
137
143
|
#ifdef USE_GROUNDED_BACKGROUND
|
|
138
144
|
float height = groundedBackgroundParams.x;
|
|
139
145
|
float radius = groundedBackgroundParams.y;
|
|
140
|
-
float
|
|
141
|
-
vec3
|
|
142
|
-
vec3
|
|
146
|
+
float xB = groundedBackgroundParams.z;
|
|
147
|
+
vec3 cf = normalize(d);
|
|
148
|
+
vec3 bI = origin - vec3(
|
|
143
149
|
groundedBackgroundCenter.x,
|
|
144
|
-
|
|
150
|
+
xB + height,
|
|
145
151
|
groundedBackgroundCenter.y
|
|
146
152
|
);
|
|
147
153
|
|
|
148
154
|
|
|
149
155
|
|
|
150
|
-
float
|
|
151
|
-
float
|
|
152
|
-
- dot(
|
|
153
|
-
if (
|
|
154
|
-
float
|
|
156
|
+
float eT = dot(bI, cf);
|
|
157
|
+
float br = eT * eT
|
|
158
|
+
- dot(bI, bI) + radius * radius;
|
|
159
|
+
if (br > 0.0) {
|
|
160
|
+
float cM = -eT + sqrt(br);
|
|
155
161
|
if (
|
|
156
|
-
|
|
157
|
-
&&
|
|
162
|
+
cM > 0.0
|
|
163
|
+
&& dK(bI, height, radius) <= 0.0
|
|
158
164
|
) {
|
|
159
|
-
vec3
|
|
160
|
-
if (
|
|
161
|
-
return normalize(
|
|
165
|
+
vec3 oK = bI + cf * cM;
|
|
166
|
+
if (oK.y >= 0.0) {
|
|
167
|
+
return normalize(oK);
|
|
162
168
|
}
|
|
163
169
|
|
|
164
|
-
if (
|
|
165
|
-
float
|
|
166
|
-
vec3
|
|
167
|
-
float
|
|
170
|
+
if (cf.y < -0.00001 && radius > 1.5 * height) {
|
|
171
|
+
float ir = (-height - bI.y) / cf.y;
|
|
172
|
+
vec3 oB = bI + cf * ir;
|
|
173
|
+
float pe = (2.0 / 3.0)
|
|
168
174
|
* sqrt(radius * radius - 2.25 * height * height);
|
|
169
|
-
if (
|
|
170
|
-
return normalize(
|
|
175
|
+
if (ir > 0.0 && length(oB.xz) <= pe) {
|
|
176
|
+
return normalize(oB);
|
|
171
177
|
}
|
|
172
178
|
}
|
|
173
179
|
|
|
174
|
-
float
|
|
180
|
+
float cV = 0.0;
|
|
175
181
|
for (int i = 0; i < 14; i++) {
|
|
176
|
-
float
|
|
177
|
-
vec3
|
|
178
|
-
if (
|
|
179
|
-
|
|
182
|
+
float fB = (cV + cM) * 0.5;
|
|
183
|
+
vec3 qy = bI + cf * fB;
|
|
184
|
+
if (dK(qy, height, radius) > 0.0) {
|
|
185
|
+
cM = fB;
|
|
180
186
|
} else {
|
|
181
|
-
|
|
187
|
+
cV = fB;
|
|
182
188
|
}
|
|
183
189
|
}
|
|
184
|
-
vec3 hit =
|
|
190
|
+
vec3 hit = bI + cf * ((cV + cM) * 0.5);
|
|
185
191
|
return normalize(hit);
|
|
186
192
|
}
|
|
187
193
|
}
|
|
@@ -189,15 +195,15 @@ return normalize(hit);
|
|
|
189
195
|
return d;
|
|
190
196
|
}
|
|
191
197
|
|
|
192
|
-
vec4
|
|
193
|
-
d =
|
|
198
|
+
vec4 cG(vec3 origin, vec3 d) {
|
|
199
|
+
d = fd(origin, d);
|
|
194
200
|
#ifdef USE_BACKGROUND
|
|
195
201
|
vec4 t = backgroundMapTransform;
|
|
196
202
|
d = vec3(t.x * d.x - t.y * d.z, d.y, t.y * d.x + t.x * d.z);
|
|
197
|
-
vec4
|
|
198
|
-
return vec4(
|
|
203
|
+
vec4 bc = textureLinear(backgroundMap, eV(transpose(backgroundMapRotation) * d));
|
|
204
|
+
return vec4(bc.rgb * t.z, bc.a);
|
|
199
205
|
#else
|
|
200
|
-
return textureLinear(backgroundMap,
|
|
206
|
+
return textureLinear(backgroundMap, dm(d));
|
|
201
207
|
#endif
|
|
202
208
|
}`
|
|
203
209
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envMap.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/envMap.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,sFAAsF;AACtF,uHAAuH;AAEvH,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAElE,eAAe,iBAAiB,CAAC;IAC/B,QAAQ,EAAE;QACR,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACnC,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1C,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACzD,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAChD,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACjD;IACD,IAAI,EAAE,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"envMap.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/envMap.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,sFAAsF;AACtF,uHAAuH;AAEvH,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAElE,eAAe,iBAAiB,CAAC;IAC/B,QAAQ,EAAE;QACR,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACnC,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1C,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACzD,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QACpE,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAChD,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACjD;IACD,IAAI,EAAE,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8LV;CACD,CAAC,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\n// Sample the environment map using a cumulative distribution function as described in\n// http://www.pbr-book.org/3ed-2018/Light_Transport_I_Surface_Reflection/Sampling_Light_Sources.html#InfiniteAreaLights\n\nimport { createShaderMixin, glsl, Shader } from '../../shader.js';\n\nexport default createShaderMixin({\n uniforms: {\n environmentRotation: Shader.uniform('mat3', [1,0,0, 0,1,0, 0,0,1]),\n envMap: Shader.uniform('sampler2D'),\n envMapDistribution: Shader.uniform('sampler2D'),\n backgroundMap: Shader.uniform('sampler2D'),\n backgroundMapTransform: Shader.uniform('vec4', [1,0,1,0]),\n backgroundMapRotation: Shader.uniform('mat3', [1,0,0, 0,1,0, 0,0,1]),\n groundedBackgroundParams: Shader.uniform('vec4'),\n groundedBackgroundCenter: Shader.uniform('vec2')\n },\n main: glsl`\nvec2 cartesianToEquirect(vec3 pointOnSphere) {\n float phi = mod(atan(-pointOnSphere.z, -pointOnSphere.x), TWOPI);\n float theta = acos(clamp(pointOnSphere.y, -1.0, 1.0));\n return vec2(phi * 0.5 * INVPI, theta * INVPI);\n}\n\nvec2 environmentUv(vec3 worldDirection) {\n return cartesianToEquirect(transpose(environmentRotation) * worldDirection);\n}\n\nfloat getEnvmapV(float u, out int vOffset, out float pdf) {\n ivec2 size = textureSize(envMap, 0);\n\n int left = 0;\n int right = size.y + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n int mid = (left + right) >> 1;\n float s = texelFetch(envMapDistribution, ivec2(0, mid), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n vOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n vec2 s0 = texelFetch(envMapDistribution, ivec2(0, vOffset), 0).xy;\n vec2 s1 = texelFetch(envMapDistribution, ivec2(0, vOffset + 1), 0).xy;\n\n pdf = s0.y;\n\n return (float(vOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.y);\n}\n\nfloat getEnvmapU(float u, int vOffset, out float pdf) {\n ivec2 size = textureSize(envMap, 0);\n\n int left = 0;\n int right = size.x + 1; // cdf length is the length of the env map + 1\n while (left < right) {\n int mid = (left + right) >> 1;\n float s = texelFetch(envMapDistribution, ivec2(1 + mid, vOffset), 0).x;\n if (s <= u) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n int uOffset = left - 1;\n\n // x channel is cumulative distribution of env map luminance\n // y channel is partial probability density of env map luminance\n vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + uOffset, vOffset), 0).xy;\n vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + uOffset + 1, vOffset), 0).xy;\n\n pdf = s0.y;\n\n return (float(uOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);\n}\n\n// Match the WGSL pole convention and keep the Jacobian positive in f32.\nfloat envMapSolidAnglePdf(vec2 partialPdf, float v) {\n if (!(v > 0.0 && v < 1.0)) { return 0.0; }\n float sinTheta = sin(min(v, 1.0 - v) * PI);\n return partialPdf.x * partialPdf.y * INVPI2 / (2.0 * sinTheta);\n}\n\n// Perform two binary searches to find light direction.\nvec3 sampleEnvmap(vec2 random, out vec2 uv, out float pdf) {\n vec2 partialPdf;\n int vOffset;\n\n uv.y = getEnvmapV(random.x, vOffset, partialPdf.y);\n uv.x = getEnvmapU(random.y, vOffset, partialPdf.x);\n\n float phi = uv.x * TWOPI;\n float theta = uv.y * PI;\n float cosTheta = cos(theta);\n float sinTheta = sin(theta);\n float cosPhi = cos(phi);\n float sinPhi = sin(phi);\n\n vec3 dir = vec3(-sinTheta * cosPhi, cosTheta, -sinTheta * sinPhi);\n\n pdf = envMapSolidAnglePdf(partialPdf, uv.y);\n\n return environmentRotation * dir;\n}\n\nfloat envMapPdf(vec2 uv) {\n vec2 size = vec2(textureSize(envMap, 0));\n\n ivec2 pixel = clamp(ivec2(uv * size), ivec2(0), ivec2(size) - ivec2(1));\n\n float partialX = texelFetch(envMapDistribution, ivec2(1 + pixel.x, pixel.y), 0).y;\n float partialY = texelFetch(envMapDistribution, ivec2(0, pixel.y), 0).y;\n\n return envMapSolidAnglePdf(vec2(partialX, partialY), uv.y);\n}\n\nfloat groundedSurfaceDistance(vec3 point, float height, float radius) {\n float pointLength = length(point);\n if (pointLength < 0.00001) {\n return -radius;\n }\n\n float originalY = radius * point.y / pointLength;\n float transitionY = -1.5 * height;\n float surfaceRadius;\n if (originalY >= 0.0) {\n surfaceRadius = radius;\n } else if (originalY < transitionY) {\n surfaceRadius = -height * pointLength / point.y;\n } else {\n float factor = 1.0\n - originalY * originalY / (3.0 * transitionY * transitionY);\n surfaceRadius = radius * factor;\n }\n return pointLength - surfaceRadius;\n}\n\nvec3 groundedBackgroundDirection(vec3 origin, vec3 d) {\n#ifdef USE_GROUNDED_BACKGROUND\n float height = groundedBackgroundParams.x;\n float radius = groundedBackgroundParams.y;\n float groundY = groundedBackgroundParams.z;\n vec3 rayDirection = normalize(d);\n vec3 localOrigin = origin - vec3(\n groundedBackgroundCenter.x,\n groundY + height,\n groundedBackgroundCenter.y\n );\n\n // The grounded skybox is a deformed sphere. Find the point where the ray\n // exits that surface so its texture lookup matches the rasterized geometry.\n float projectedOrigin = dot(localOrigin, rayDirection);\n float discriminant = projectedOrigin * projectedOrigin\n - dot(localOrigin, localOrigin) + radius * radius;\n if (discriminant > 0.0) {\n float farDistance = -projectedOrigin + sqrt(discriminant);\n if (\n farDistance > 0.0\n && groundedSurfaceDistance(localOrigin, height, radius) <= 0.0\n ) {\n vec3 sphereHit = localOrigin + rayDirection * farDistance;\n if (sphereHit.y >= 0.0) {\n return normalize(sphereHit);\n }\n\n if (rayDirection.y < -0.00001 && radius > 1.5 * height) {\n float groundDistance = (-height - localOrigin.y) / rayDirection.y;\n vec3 groundHit = localOrigin + rayDirection * groundDistance;\n float groundRadius = (2.0 / 3.0)\n * sqrt(radius * radius - 2.25 * height * height);\n if (groundDistance > 0.0 && length(groundHit.xz) <= groundRadius) {\n return normalize(groundHit);\n }\n }\n\n float nearDistance = 0.0;\n for (int i = 0; i < 14; i++) {\n float middleDistance = (nearDistance + farDistance) * 0.5;\n vec3 middlePoint = localOrigin + rayDirection * middleDistance;\n if (groundedSurfaceDistance(middlePoint, height, radius) > 0.0) {\n farDistance = middleDistance;\n } else {\n nearDistance = middleDistance;\n }\n }\n vec3 hit = localOrigin + rayDirection * ((nearDistance + farDistance) * 0.5);\n return normalize(hit);\n }\n }\n#endif\n return d;\n}\n\nvec4 sampleBackgroundFromRay(vec3 origin, vec3 d) {\n d = groundedBackgroundDirection(origin, d);\n#ifdef USE_BACKGROUND\n vec4 t = backgroundMapTransform;\n d = vec3(t.x * d.x - t.y * d.z, d.y, t.y * d.x + t.x * d.z);\n vec4 backgroundSample = textureLinear(backgroundMap, cartesianToEquirect(transpose(backgroundMapRotation) * d));\n return vec4(backgroundSample.rgb * t.z, backgroundSample.a);\n#else\n return textureLinear(backgroundMap, environmentUv(d));\n#endif\n}`\n});\n"]}
|