@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
|
@@ -6,31 +6,31 @@ import { INSTANCE_VEC4_STRIDE } from '../../bvhAccel.js';
|
|
|
6
6
|
import { createShaderMixin, glsl, Shader } from '../../shader.js';
|
|
7
7
|
function getBVHTraverseCode(handleHitCode, skipTriangleCode = '', initialTMax = 'RAY_MAX_DISTANCE') {
|
|
8
8
|
const intersectTriangles = glsl `
|
|
9
|
-
ivec3 vertexOffset = ivec3(floatBitsToInt(
|
|
10
|
-
for (int k = 0; k <
|
|
9
|
+
ivec3 vertexOffset = ivec3(floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).y));
|
|
10
|
+
for (int k = 0; k < primitiveCount; k++) {
|
|
11
11
|
int triangleIndex = primitiveOffset + k;
|
|
12
12
|
${skipTriangleCode}
|
|
13
|
-
vec4 r3 =
|
|
13
|
+
vec4 r3 = dJ(triangleIndex);
|
|
14
14
|
ivec3 index = floatBitsToInt(r3.xyz) + vertexOffset;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
fP tri = fP(
|
|
16
|
+
lm(positionBuffer, index.x, vertexColumns).xyz,
|
|
17
|
+
lm(positionBuffer, index.y, vertexColumns).xyz,
|
|
18
|
+
lm(positionBuffer, index.z, vertexColumns).xyz
|
|
19
19
|
);
|
|
20
|
-
|
|
20
|
+
eK hit = ga(o, d, tri, eq, gY, tMax);
|
|
21
21
|
|
|
22
22
|
if (hit.t > 0.0) {
|
|
23
23
|
tMax = hit.t;
|
|
24
24
|
vec3 e1 = tri.p1 - tri.p0;
|
|
25
25
|
vec3 e2 = tri.p2 - tri.p0;
|
|
26
26
|
vec3 faceNormal = normalize(cross(e1, e2));
|
|
27
|
-
int
|
|
28
|
-
floatBitsToInt(
|
|
27
|
+
int kP = int(ah(
|
|
28
|
+
floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).z)
|
|
29
29
|
).x);
|
|
30
|
-
bool
|
|
31
|
-
|
|
30
|
+
bool jd = fetchMatData(
|
|
31
|
+
kP * MAT_DATA_SIZE + MAT_ROW_ALPHA
|
|
32
32
|
).z > 0.5;
|
|
33
|
-
if (!doubleSided && !
|
|
33
|
+
if (!doubleSided && !jd && dot(faceNormal, d) > 0.0) {
|
|
34
34
|
continue;
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -41,262 +41,262 @@ ${handleHitCode}
|
|
|
41
41
|
return glsl `
|
|
42
42
|
ivec2 stack[STACK_SIZE];
|
|
43
43
|
int top = -1;
|
|
44
|
-
int
|
|
44
|
+
int ud = -1;
|
|
45
45
|
float tMax = ${initialTMax};
|
|
46
46
|
|
|
47
47
|
vec3 o = ray.o;
|
|
48
48
|
vec3 d = ray.d;
|
|
49
49
|
|
|
50
|
-
bool
|
|
51
|
-
vec3
|
|
52
|
-
vec3
|
|
53
|
-
ivec3
|
|
50
|
+
bool sj = false;
|
|
51
|
+
vec3 hS;
|
|
52
|
+
vec3 aC;
|
|
53
|
+
ivec3 hK;
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
fP mk;
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
top = 0;
|
|
59
59
|
stack[0] = ivec2(0, -1);
|
|
60
60
|
|
|
61
|
-
int
|
|
62
|
-
while(top >= 0 &&
|
|
63
|
-
|
|
61
|
+
int yk = 0;
|
|
62
|
+
while(top >= 0 && yk < 5000) {
|
|
63
|
+
yk++;
|
|
64
64
|
ivec2 node = stack[top--];
|
|
65
65
|
|
|
66
|
-
int
|
|
66
|
+
int bY = node.y;
|
|
67
67
|
|
|
68
|
-
if (
|
|
69
|
-
if (
|
|
68
|
+
if (bY != ud) {
|
|
69
|
+
if (bY < 0) {
|
|
70
70
|
o = ray.o;
|
|
71
71
|
d = ray.d;
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
74
74
|
mat4 w2l = mat4(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
bF(bY * ${INSTANCE_VEC4_STRIDE} + 1),
|
|
76
|
+
bF(bY * ${INSTANCE_VEC4_STRIDE} + 2),
|
|
77
|
+
bF(bY * ${INSTANCE_VEC4_STRIDE} + 3),
|
|
78
|
+
bF(bY * ${INSTANCE_VEC4_STRIDE} + 4)
|
|
79
79
|
);
|
|
80
80
|
o = (w2l * vec4(ray.o, 1.0)).xyz;
|
|
81
81
|
d = (w2l * vec4(ray.d, 0.0)).xyz;
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
eq = maxDimension(abs(d));
|
|
84
|
+
gY = nk(d, eq);
|
|
85
|
+
ud = bY;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
int
|
|
89
|
-
uint
|
|
90
|
-
int
|
|
91
|
-
int
|
|
92
|
-
int
|
|
88
|
+
int bw = bY < 0 ? 0 : blasOffset;
|
|
89
|
+
uint fY = bY < 0 ? 0u : floatBitsToUint(bF(bY * ${INSTANCE_VEC4_STRIDE}).x);
|
|
90
|
+
int he = int(fY >> 30u);
|
|
91
|
+
int fg = int(fY & 0x3fffffffu);
|
|
92
|
+
int primitiveCount = 0;
|
|
93
93
|
int primitiveOffset = 0;
|
|
94
94
|
|
|
95
|
-
if (
|
|
96
|
-
uint
|
|
97
|
-
if ((
|
|
98
|
-
|
|
99
|
-
primitiveOffset =
|
|
95
|
+
if (he == 3) {
|
|
96
|
+
uint iw = uint(node.x);
|
|
97
|
+
if ((iw & 0x80000000u) != 0u) {
|
|
98
|
+
primitiveCount = int((iw >> 23u) & 0xffu);
|
|
99
|
+
primitiveOffset = bw + fg + int(iw & 0x007fffffu);
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
-
int i = node.x +
|
|
103
|
-
vec4
|
|
104
|
-
vec4
|
|
105
|
-
vec4
|
|
106
|
-
vec4
|
|
107
|
-
vec4
|
|
108
|
-
uint header = floatBitsToUint(
|
|
109
|
-
int
|
|
110
|
-
int
|
|
111
|
-
int
|
|
112
|
-
vec3
|
|
113
|
-
uintBitsToFloat(uint(
|
|
114
|
-
uintBitsToFloat(uint(
|
|
115
|
-
uintBitsToFloat(uint(
|
|
102
|
+
int i = node.x + bw;
|
|
103
|
+
vec4 jZ = dJ(i);
|
|
104
|
+
vec4 fU = dJ(i + 1);
|
|
105
|
+
vec4 nS = dJ(i + 2);
|
|
106
|
+
vec4 nT = dJ(i + 3);
|
|
107
|
+
vec4 nU = dJ(i + 4);
|
|
108
|
+
uint header = floatBitsToUint(jZ.w);
|
|
109
|
+
int sH = int(header << 24u) >> 24;
|
|
110
|
+
int sI = int((header >> 8u) << 24u) >> 24;
|
|
111
|
+
int sJ = int((header >> 16u) << 24u) >> 24;
|
|
112
|
+
vec3 hZ = vec3(
|
|
113
|
+
uintBitsToFloat(uint(sH + 127) << 23u),
|
|
114
|
+
uintBitsToFloat(uint(sI + 127) << 23u),
|
|
115
|
+
uintBitsToFloat(uint(sJ + 127) << 23u)
|
|
116
116
|
);
|
|
117
|
-
uint childBase = floatBitsToUint(
|
|
118
|
-
uint
|
|
117
|
+
uint childBase = floatBitsToUint(fU.x);
|
|
118
|
+
uint pM = floatBitsToUint(fU.y);
|
|
119
119
|
uint internalMask = header >> 24u;
|
|
120
|
-
uint
|
|
120
|
+
uint vU = (d.x < 0.0 ? 4u : 0u) |
|
|
121
121
|
(d.y < 0.0 ? 2u : 0u) |
|
|
122
122
|
(d.z < 0.0 ? 1u : 0u);
|
|
123
|
-
uint
|
|
124
|
-
floatBitsToUint(
|
|
125
|
-
floatBitsToUint(
|
|
126
|
-
floatBitsToUint(
|
|
127
|
-
floatBitsToUint(
|
|
128
|
-
floatBitsToUint(
|
|
129
|
-
floatBitsToUint(
|
|
123
|
+
uint gV[12] = uint[12](
|
|
124
|
+
floatBitsToUint(nS.x), floatBitsToUint(nS.y),
|
|
125
|
+
floatBitsToUint(nS.z), floatBitsToUint(nS.w),
|
|
126
|
+
floatBitsToUint(nT.x), floatBitsToUint(nT.y),
|
|
127
|
+
floatBitsToUint(nT.z), floatBitsToUint(nT.w),
|
|
128
|
+
floatBitsToUint(nU.x), floatBitsToUint(nU.y),
|
|
129
|
+
floatBitsToUint(nU.z), floatBitsToUint(nU.w)
|
|
130
130
|
);
|
|
131
131
|
|
|
132
132
|
for (int order = 7; order >= 0; order--) {
|
|
133
|
-
uint slot = uint(order) ^
|
|
134
|
-
uint
|
|
135
|
-
? floatBitsToUint(
|
|
136
|
-
: floatBitsToUint(
|
|
137
|
-
uint meta = (
|
|
133
|
+
uint slot = uint(order) ^ vU;
|
|
134
|
+
uint tT = slot >= 4u
|
|
135
|
+
? floatBitsToUint(fU.w)
|
|
136
|
+
: floatBitsToUint(fU.z);
|
|
137
|
+
uint meta = (tT >> ((slot & 3u) * 8u)) & 0xffu;
|
|
138
138
|
if (meta == 0u) continue;
|
|
139
|
-
uint
|
|
140
|
-
uint
|
|
141
|
-
vec3
|
|
142
|
-
float((
|
|
143
|
-
float((
|
|
144
|
-
float((
|
|
139
|
+
uint mI = (slot & 3u) * 8u;
|
|
140
|
+
uint lF = slot >> 2u;
|
|
141
|
+
vec3 uX = vec3(
|
|
142
|
+
float((gV[lF] >> mI) & 0xffu),
|
|
143
|
+
float((gV[2u + lF] >> mI) & 0xffu),
|
|
144
|
+
float((gV[4u + lF] >> mI) & 0xffu)
|
|
145
145
|
);
|
|
146
|
-
vec3
|
|
147
|
-
float((
|
|
148
|
-
float((
|
|
149
|
-
float((
|
|
146
|
+
vec3 uW = vec3(
|
|
147
|
+
float((gV[6u + lF] >> mI) & 0xffu),
|
|
148
|
+
float((gV[8u + lF] >> mI) & 0xffu),
|
|
149
|
+
float((gV[10u + lF] >> mI) & 0xffu)
|
|
150
150
|
);
|
|
151
|
-
vec3
|
|
152
|
-
vec3
|
|
153
|
-
if (
|
|
154
|
-
uint
|
|
155
|
-
if (
|
|
156
|
-
uint
|
|
157
|
-
uint
|
|
151
|
+
vec3 wN = jZ.xyz + uX * hZ;
|
|
152
|
+
vec3 wM = jZ.xyz + uW * hZ;
|
|
153
|
+
if (cU(o, d, wN, wM, tMax) <= 0.0) continue;
|
|
154
|
+
uint kb = meta & 0x1fu;
|
|
155
|
+
if (kb >= 24u) {
|
|
156
|
+
uint om = internalMask & ((1u << slot) - 1u);
|
|
157
|
+
uint un = childBase + rY(om);
|
|
158
158
|
stack[++top] = ivec2(
|
|
159
|
-
|
|
159
|
+
fg + int(un * 5u), bY
|
|
160
160
|
);
|
|
161
161
|
}
|
|
162
162
|
else {
|
|
163
|
-
uint triangleCount =
|
|
164
|
-
uint
|
|
165
|
-
uint
|
|
163
|
+
uint triangleCount = rY(meta >> 5u);
|
|
164
|
+
uint sV = pM + kb;
|
|
165
|
+
uint wZ = 0x80000000u |
|
|
166
166
|
(triangleCount << 23u) |
|
|
167
|
-
(
|
|
168
|
-
stack[++top] = ivec2(int(
|
|
167
|
+
(sV & 0x007fffffu);
|
|
168
|
+
stack[++top] = ivec2(int(wZ), bY);
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
else if (
|
|
174
|
-
int i = node.x +
|
|
175
|
-
vec4
|
|
176
|
-
vec4
|
|
177
|
-
vec4
|
|
178
|
-
vec4
|
|
179
|
-
|
|
180
|
-
if (
|
|
181
|
-
primitiveOffset =
|
|
173
|
+
else if (he == 2) {
|
|
174
|
+
int i = node.x + bw;
|
|
175
|
+
vec4 wP = dJ(i);
|
|
176
|
+
vec4 wQ = dJ(i + 1);
|
|
177
|
+
vec4 wR = dJ(i + 2);
|
|
178
|
+
vec4 wS = dJ(i + 3);
|
|
179
|
+
primitiveCount = int(floatBitsToUint(wR.w));
|
|
180
|
+
if (primitiveCount > 0) {
|
|
181
|
+
primitiveOffset = bw + fg + int(floatBitsToUint(wS.w));
|
|
182
182
|
}
|
|
183
183
|
else {
|
|
184
|
-
int left =
|
|
185
|
-
int right =
|
|
186
|
-
float d0 =
|
|
187
|
-
float d1 =
|
|
184
|
+
int left = fg + int(floatBitsToUint(wP.w) * 4u);
|
|
185
|
+
int right = fg + int(floatBitsToUint(wQ.w) * 4u);
|
|
186
|
+
float d0 = cU(o, d, wP.xyz, wQ.xyz, tMax);
|
|
187
|
+
float d1 = cU(o, d, wR.xyz, wS.xyz, tMax);
|
|
188
188
|
if (d0 > d1) {
|
|
189
|
-
if (d0 > 0.0) stack[++top] = ivec2(left,
|
|
190
|
-
if (d1 > 0.0) stack[++top] = ivec2(right,
|
|
189
|
+
if (d0 > 0.0) stack[++top] = ivec2(left, bY);
|
|
190
|
+
if (d1 > 0.0) stack[++top] = ivec2(right, bY);
|
|
191
191
|
}
|
|
192
192
|
else {
|
|
193
|
-
if (d1 > 0.0) stack[++top] = ivec2(right,
|
|
194
|
-
if (d0 > 0.0) stack[++top] = ivec2(left,
|
|
193
|
+
if (d1 > 0.0) stack[++top] = ivec2(right, bY);
|
|
194
|
+
if (d0 > 0.0) stack[++top] = ivec2(left, bY);
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
|
-
else if (
|
|
199
|
-
uint
|
|
200
|
-
if ((
|
|
201
|
-
|
|
202
|
-
primitiveOffset =
|
|
198
|
+
else if (he == 1) {
|
|
199
|
+
uint iw = uint(node.x);
|
|
200
|
+
if ((iw & 0x80000000u) != 0u) {
|
|
201
|
+
primitiveCount = int((iw >> 23u) & 0xffu);
|
|
202
|
+
primitiveOffset = bw + fg + int(iw & 0x007fffffu);
|
|
203
203
|
}
|
|
204
204
|
else {
|
|
205
|
-
int i = node.x +
|
|
206
|
-
vec4
|
|
207
|
-
vec4
|
|
208
|
-
vec4
|
|
209
|
-
vec4
|
|
210
|
-
vec3 nodeMin =
|
|
211
|
-
vec3
|
|
212
|
-
uint
|
|
213
|
-
floatBitsToUint(
|
|
214
|
-
floatBitsToUint(
|
|
205
|
+
int i = node.x + bw;
|
|
206
|
+
vec4 vJ = dJ(i);
|
|
207
|
+
vec4 sz = dJ(i + 1);
|
|
208
|
+
vec4 qR = dJ(i + 2);
|
|
209
|
+
vec4 oQ = dJ(i + 3);
|
|
210
|
+
vec3 nodeMin = vJ.xyz;
|
|
211
|
+
vec3 er = vec3(vJ.w, sz.x, sz.y);
|
|
212
|
+
uint mT[4] = uint[4](
|
|
213
|
+
floatBitsToUint(sz.z), floatBitsToUint(sz.w),
|
|
214
|
+
floatBitsToUint(qR.x), floatBitsToUint(qR.y)
|
|
215
215
|
);
|
|
216
|
-
vec4
|
|
217
|
-
vec4
|
|
218
|
-
vec4
|
|
219
|
-
vec4
|
|
220
|
-
vec4
|
|
221
|
-
vec4
|
|
222
|
-
vec3
|
|
223
|
-
vec3
|
|
224
|
-
vec4 tx0 = (nodeMin.x +
|
|
225
|
-
vec4 tx1 = (nodeMin.x +
|
|
226
|
-
vec4 ty0 = (nodeMin.y +
|
|
227
|
-
vec4 ty1 = (nodeMin.y +
|
|
228
|
-
vec4 tz0 = (nodeMin.z +
|
|
229
|
-
vec4 tz1 = (nodeMin.z +
|
|
230
|
-
vec4
|
|
231
|
-
vec4
|
|
232
|
-
vec4 distance = mix(
|
|
233
|
-
distance = mix(distance, vec4(-1.0), greaterThan(
|
|
234
|
-
float
|
|
216
|
+
vec4 wx = fp(floatBitsToUint(qR.z));
|
|
217
|
+
vec4 wy = fp(floatBitsToUint(qR.w));
|
|
218
|
+
vec4 wB = fp(floatBitsToUint(oQ.x));
|
|
219
|
+
vec4 wu = fp(floatBitsToUint(oQ.y));
|
|
220
|
+
vec4 wv = fp(floatBitsToUint(oQ.z));
|
|
221
|
+
vec4 ww = fp(floatBitsToUint(oQ.w));
|
|
222
|
+
vec3 gr = fo(d);
|
|
223
|
+
vec3 padding = fk(gr, o);
|
|
224
|
+
vec4 tx0 = (nodeMin.x + wx * er.x - o.x) * gr.x;
|
|
225
|
+
vec4 tx1 = (nodeMin.x + wu * er.x - o.x) * gr.x;
|
|
226
|
+
vec4 ty0 = (nodeMin.y + wy * er.y - o.y) * gr.y;
|
|
227
|
+
vec4 ty1 = (nodeMin.y + wv * er.y - o.y) * gr.y;
|
|
228
|
+
vec4 tz0 = (nodeMin.z + wB * er.z - o.z) * gr.z;
|
|
229
|
+
vec4 tz1 = (nodeMin.z + ww * er.z - o.z) * gr.z;
|
|
230
|
+
vec4 nJ = max(max((min(tx0, tx1) - vec4(padding.x)), (min(ty0, ty1) - vec4(padding.y))), (min(tz0, tz1) - vec4(padding.z)));
|
|
231
|
+
vec4 sY = min(min((max(tx0, tx1) + vec4(padding.x)), (max(ty0, ty1) + vec4(padding.y))), (max(tz0, tz1) + vec4(padding.z)));
|
|
232
|
+
vec4 distance = mix(sY, nJ, greaterThan(nJ, vec4(0.0)));
|
|
233
|
+
distance = mix(distance, vec4(-1.0), greaterThan(nJ, min(sY, vec4(tMax))));
|
|
234
|
+
float fq[4] = float[4](distance.x, distance.y, distance.z, distance.w);
|
|
235
235
|
|
|
236
236
|
|
|
237
237
|
for (int order = 0; order < 4; order++) {
|
|
238
|
-
float
|
|
239
|
-
int
|
|
238
|
+
float em = -1.0;
|
|
239
|
+
int eB = -1;
|
|
240
240
|
for (int child = 0; child < 4; child++) {
|
|
241
|
-
if (
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
if (mT[child] != 0u && fq[child] > em) {
|
|
242
|
+
em = fq[child];
|
|
243
|
+
eB = child;
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
|
-
if (
|
|
247
|
-
uint
|
|
248
|
-
int
|
|
249
|
-
if ((
|
|
250
|
-
|
|
246
|
+
if (eB >= 0 && em > 0.0) {
|
|
247
|
+
uint oy = mT[eB];
|
|
248
|
+
int ki = int(oy);
|
|
249
|
+
if ((oy & 0x80000000u) == 0u) {
|
|
250
|
+
ki += fg;
|
|
251
251
|
}
|
|
252
|
-
stack[++top] = ivec2(
|
|
253
|
-
|
|
252
|
+
stack[++top] = ivec2(ki, bY);
|
|
253
|
+
fq[eB] = -1.0;
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
else {
|
|
259
|
-
int i = node.x +
|
|
260
|
-
vec4 r1 =
|
|
261
|
-
int
|
|
259
|
+
int i = node.x + bw;
|
|
260
|
+
vec4 r1 = dJ(i);
|
|
261
|
+
int bl = floatBitsToInt(r1.w);
|
|
262
262
|
|
|
263
|
-
if (
|
|
263
|
+
if (bl >= 0) {
|
|
264
264
|
int left = node.x + 2;
|
|
265
|
-
int right =
|
|
265
|
+
int right = bl + fg;
|
|
266
266
|
|
|
267
|
-
float d0 =
|
|
268
|
-
float d1 =
|
|
267
|
+
float d0 = cU(o, d, dJ(left + bw).xyz, dJ(left + 1 + bw).xyz, tMax);
|
|
268
|
+
float d1 = cU(o, d, dJ(right + bw).xyz, dJ(right + 1 + bw).xyz, tMax);
|
|
269
269
|
if (d0 > d1) {
|
|
270
270
|
if (d0 > 0.0) {
|
|
271
|
-
stack[++top] = ivec2(left,
|
|
271
|
+
stack[++top] = ivec2(left, bY);
|
|
272
272
|
}
|
|
273
273
|
if (d1 > 0.0) {
|
|
274
|
-
stack[++top] = ivec2(right,
|
|
274
|
+
stack[++top] = ivec2(right, bY);
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
else {
|
|
278
278
|
if (d1 > 0.0) {
|
|
279
|
-
stack[++top] = ivec2(right,
|
|
279
|
+
stack[++top] = ivec2(right, bY);
|
|
280
280
|
}
|
|
281
281
|
if (d0 > 0.0) {
|
|
282
|
-
stack[++top] = ivec2(left,
|
|
282
|
+
stack[++top] = ivec2(left, bY);
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
else {
|
|
287
|
-
if (
|
|
288
|
-
for (int k = 0; k < -
|
|
289
|
-
vec4 r3 =
|
|
287
|
+
if (bY < 0) {
|
|
288
|
+
for (int k = 0; k < -bl; k++) {
|
|
289
|
+
vec4 r3 = dJ(i + 2 + k);
|
|
290
290
|
stack[++top] = ivec2(floatBitsToInt(r3.y), floatBitsToInt(r3.x));
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
293
|
else {
|
|
294
|
-
|
|
294
|
+
primitiveCount = -bl;
|
|
295
295
|
primitiveOffset = i + 2;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
|
-
if (
|
|
299
|
+
if (primitiveCount > 0) {
|
|
300
300
|
${intersectTriangles}
|
|
301
301
|
}
|
|
302
302
|
}
|
|
@@ -321,13 +321,13 @@ export default createShaderMixin({
|
|
|
321
321
|
},
|
|
322
322
|
main: glsl `
|
|
323
323
|
|
|
324
|
-
struct
|
|
324
|
+
struct fP {
|
|
325
325
|
vec3 p0;
|
|
326
326
|
vec3 p1;
|
|
327
327
|
vec3 p2;
|
|
328
328
|
};
|
|
329
329
|
#ifdef NUM_LIGHTS
|
|
330
|
-
float
|
|
330
|
+
float hL(float rad, vec3 pos, Ray r) {
|
|
331
331
|
vec3 op = pos - r.o;
|
|
332
332
|
float eps = 0.001;
|
|
333
333
|
float b = dot(op, r.d);
|
|
@@ -347,7 +347,7 @@ return t2;
|
|
|
347
347
|
return INF;
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
float
|
|
350
|
+
float og(vec3 pos, vec3 u, vec3 v, vec3 n, Ray r) {
|
|
351
351
|
float dt = dot(r.d, n);
|
|
352
352
|
float t = (dot(n, pos) - dot(n, r.o)) / dt;
|
|
353
353
|
|
|
@@ -366,7 +366,7 @@ return t;
|
|
|
366
366
|
return INF;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
float
|
|
369
|
+
float nr(Ray r, Light light, out LightSampleRec lightSample) {
|
|
370
370
|
|
|
371
371
|
|
|
372
372
|
|
|
@@ -383,15 +383,15 @@ vec3 normal = normalize(cross(u, v));
|
|
|
383
383
|
if (dot(normal, r.d) > 0.)
|
|
384
384
|
return INF;
|
|
385
385
|
|
|
386
|
-
d =
|
|
386
|
+
d = og(pos, u, v, normal, r);
|
|
387
387
|
if (d < 0.) {
|
|
388
388
|
d = INF;
|
|
389
389
|
}
|
|
390
390
|
else {
|
|
391
|
-
float
|
|
391
|
+
float ci = dot(-r.d, normal);
|
|
392
392
|
float spread = light.spread;
|
|
393
|
-
if (
|
|
394
|
-
lightSample.pdf = (d * d) / (light.area *
|
|
393
|
+
if (ci >= cos(spread * PI / 2.0)) {
|
|
394
|
+
lightSample.pdf = (d * d) / (light.area * ci);
|
|
395
395
|
lightSample.emission = light.emission;
|
|
396
396
|
}
|
|
397
397
|
}
|
|
@@ -400,10 +400,10 @@ lightSample.emission = light.emission;
|
|
|
400
400
|
#ifdef HAS_SPHERE_LIGHTS
|
|
401
401
|
if (type == SPHERE_LIGHT) {
|
|
402
402
|
if (light.radius <= 0.0) {
|
|
403
|
-
vec3
|
|
404
|
-
float projection = dot(
|
|
405
|
-
vec3
|
|
406
|
-
if (projection <= EPS || dot(
|
|
403
|
+
vec3 kT = light.position - r.o;
|
|
404
|
+
float projection = dot(kT, r.d);
|
|
405
|
+
vec3 bk = kT - projection * r.d;
|
|
406
|
+
if (projection <= EPS || dot(bk, bk) > 1e-8) return INF;
|
|
407
407
|
d = projection;
|
|
408
408
|
lightSample.direction = r.d;
|
|
409
409
|
lightSample.normal = -r.d;
|
|
@@ -411,19 +411,19 @@ lightSample.dist = d;
|
|
|
411
411
|
lightSample.pdf = 1.0;
|
|
412
412
|
lightSample.isDelta = true;
|
|
413
413
|
} else {
|
|
414
|
-
d =
|
|
414
|
+
d = hL(light.radius, light.position, r);
|
|
415
415
|
lightSample.isDelta = false;
|
|
416
416
|
}
|
|
417
417
|
if (d < 0.) {
|
|
418
418
|
d = INF;
|
|
419
419
|
}
|
|
420
420
|
else {
|
|
421
|
-
float
|
|
422
|
-
float cosThetaMax =
|
|
421
|
+
float ak = distance(r.o, light.position);
|
|
422
|
+
float cosThetaMax = ak <= light.radius
|
|
423
423
|
? -1.0
|
|
424
|
-
: sqrt(max(0.0, 1.0 - light.radius * light.radius / (
|
|
424
|
+
: sqrt(max(0.0, 1.0 - light.radius * light.radius / (ak * ak)));
|
|
425
425
|
if (light.radius > 0.0) {
|
|
426
|
-
lightSample.pdf =
|
|
426
|
+
lightSample.pdf = ak <= light.radius
|
|
427
427
|
? INV4PI
|
|
428
428
|
: 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
|
|
429
429
|
}
|
|
@@ -436,10 +436,10 @@ lightSample.emission = light.radius <= 0.0
|
|
|
436
436
|
#ifdef HAS_SPOT_LIGHTS
|
|
437
437
|
if (type == SPOT_LIGHT) {
|
|
438
438
|
if (light.radius <= 0.0) {
|
|
439
|
-
vec3
|
|
440
|
-
float projection = dot(
|
|
441
|
-
vec3
|
|
442
|
-
if (projection <= EPS || dot(
|
|
439
|
+
vec3 kT = light.position - r.o;
|
|
440
|
+
float projection = dot(kT, r.d);
|
|
441
|
+
vec3 bk = kT - projection * r.d;
|
|
442
|
+
if (projection <= EPS || dot(bk, bk) > 1e-8) return INF;
|
|
443
443
|
d = projection;
|
|
444
444
|
lightSample.direction = r.d;
|
|
445
445
|
lightSample.normal = -r.d;
|
|
@@ -447,23 +447,23 @@ lightSample.dist = d;
|
|
|
447
447
|
lightSample.pdf = 1.0;
|
|
448
448
|
lightSample.isDelta = true;
|
|
449
449
|
} else {
|
|
450
|
-
d =
|
|
450
|
+
d = hL(light.radius, light.position, r);
|
|
451
451
|
lightSample.isDelta = false;
|
|
452
452
|
}
|
|
453
453
|
if (d != INF) {
|
|
454
|
-
vec3
|
|
455
|
-
float
|
|
456
|
-
if (
|
|
457
|
-
float
|
|
458
|
-
float cosThetaMax =
|
|
454
|
+
vec3 wW = r.o + d * r.d;
|
|
455
|
+
float nv = bP(light, normalize(r.o - wW));
|
|
456
|
+
if (nv <= 0.0) return INF;
|
|
457
|
+
float ak = distance(r.o, light.position);
|
|
458
|
+
float cosThetaMax = ak <= light.radius
|
|
459
459
|
? -1.0
|
|
460
|
-
: sqrt(max(0.0, 1.0 - light.radius * light.radius / (
|
|
460
|
+
: sqrt(max(0.0, 1.0 - light.radius * light.radius / (ak * ak)));
|
|
461
461
|
if (light.radius > 0.0) {
|
|
462
|
-
lightSample.pdf =
|
|
462
|
+
lightSample.pdf = ak <= light.radius
|
|
463
463
|
? INV4PI
|
|
464
464
|
: 1.0 / max(TWOPI * (1.0 - cosThetaMax), 1e-8);
|
|
465
465
|
}
|
|
466
|
-
lightSample.emission = light.emission *
|
|
466
|
+
lightSample.emission = light.emission * nv * (light.radius <= 0.0
|
|
467
467
|
? 1.0 / max(d * d, 1e-8)
|
|
468
468
|
: 1.0);
|
|
469
469
|
}
|
|
@@ -474,96 +474,96 @@ return d;
|
|
|
474
474
|
}
|
|
475
475
|
#endif
|
|
476
476
|
|
|
477
|
-
int
|
|
478
|
-
vec2 m00 =
|
|
479
|
-
vec2 m01 =
|
|
480
|
-
vec2 m02 =
|
|
481
|
-
vec2 m10 =
|
|
482
|
-
vec2 m11 =
|
|
483
|
-
vec2 m12 =
|
|
484
|
-
vec2 m20 =
|
|
485
|
-
vec2 m21 =
|
|
486
|
-
vec2 m22 =
|
|
487
|
-
float w00 = m00.y *
|
|
488
|
-
float w01 = m01.y *
|
|
489
|
-
float w02 = m02.y *
|
|
490
|
-
float w10 = m10.y *
|
|
491
|
-
float w11 = m11.y *
|
|
492
|
-
float w12 = m12.y *
|
|
493
|
-
float w20 = m20.y *
|
|
494
|
-
float w21 = m21.y *
|
|
495
|
-
float w22 = m22.y *
|
|
496
|
-
|
|
497
|
-
float
|
|
498
|
-
|
|
499
|
-
w00 = w00 /
|
|
500
|
-
w01 = w01 /
|
|
501
|
-
w02 = w02 /
|
|
502
|
-
w10 = w10 /
|
|
503
|
-
w11 = w11 /
|
|
504
|
-
w12 = w12 /
|
|
505
|
-
w20 = w20 /
|
|
506
|
-
w21 = w21 /
|
|
507
|
-
w22 = w22 /
|
|
508
|
-
|
|
509
|
-
float rand =
|
|
510
|
-
float
|
|
477
|
+
int fF(ivec4 m0, ivec4 m1, ivec4 m2, vec3 eU) {
|
|
478
|
+
vec2 m00 = ah(m0.x);
|
|
479
|
+
vec2 m01 = ah(m0.y);
|
|
480
|
+
vec2 m02 = ah(m0.z);
|
|
481
|
+
vec2 m10 = ah(m1.x);
|
|
482
|
+
vec2 m11 = ah(m1.y);
|
|
483
|
+
vec2 m12 = ah(m1.z);
|
|
484
|
+
vec2 m20 = ah(m2.x);
|
|
485
|
+
vec2 m21 = ah(m2.y);
|
|
486
|
+
vec2 m22 = ah(m2.z);
|
|
487
|
+
float w00 = m00.y * eU.x;
|
|
488
|
+
float w01 = m01.y * eU.x;
|
|
489
|
+
float w02 = m02.y * eU.x;
|
|
490
|
+
float w10 = m10.y * eU.y;
|
|
491
|
+
float w11 = m11.y * eU.y;
|
|
492
|
+
float w12 = m12.y * eU.y;
|
|
493
|
+
float w20 = m20.y * eU.z;
|
|
494
|
+
float w21 = m21.y * eU.z;
|
|
495
|
+
float w22 = m22.y * eU.z;
|
|
496
|
+
|
|
497
|
+
float hy = w00 + w01 + w02 + w10 + w11 + w12 + w20 + w21 + w22;
|
|
498
|
+
|
|
499
|
+
w00 = w00 / hy;
|
|
500
|
+
w01 = w01 / hy + w00;
|
|
501
|
+
w02 = w02 / hy + w01;
|
|
502
|
+
w10 = w10 / hy + w02;
|
|
503
|
+
w11 = w11 / hy + w10;
|
|
504
|
+
w12 = w12 / hy + w11;
|
|
505
|
+
w20 = w20 / hy + w12;
|
|
506
|
+
w21 = w21 / hy + w20;
|
|
507
|
+
w22 = w22 / hy + w21;
|
|
508
|
+
|
|
509
|
+
float rand = eC(0u);
|
|
510
|
+
float oh;
|
|
511
511
|
if (rand < w00) {
|
|
512
|
-
|
|
512
|
+
oh = m00.x;
|
|
513
513
|
} else if (rand < w01) {
|
|
514
|
-
|
|
514
|
+
oh = m01.x;
|
|
515
515
|
} else if (rand < w02) {
|
|
516
|
-
|
|
516
|
+
oh = m02.x;
|
|
517
517
|
} else if (rand < w10) {
|
|
518
|
-
|
|
518
|
+
oh = m10.x;
|
|
519
519
|
} else if (rand < w11) {
|
|
520
|
-
|
|
520
|
+
oh = m11.x;
|
|
521
521
|
} else if (rand < w12) {
|
|
522
|
-
|
|
522
|
+
oh = m12.x;
|
|
523
523
|
} else if (rand < w20) {
|
|
524
|
-
|
|
524
|
+
oh = m20.x;
|
|
525
525
|
} else if (rand < w21) {
|
|
526
|
-
|
|
526
|
+
oh = m21.x;
|
|
527
527
|
} else {
|
|
528
|
-
|
|
528
|
+
oh = m22.x;
|
|
529
529
|
}
|
|
530
|
-
return int(
|
|
530
|
+
return int(oh);
|
|
531
531
|
}
|
|
532
532
|
|
|
533
533
|
|
|
534
|
-
vec4
|
|
534
|
+
vec4 bF(int i);
|
|
535
535
|
|
|
536
536
|
|
|
537
|
-
mat2x3
|
|
538
|
-
float determinant =
|
|
539
|
-
vec3 t =
|
|
537
|
+
mat2x3 eP(vec3 normal, vec3 dp1, vec3 dp2, vec2 oW, vec2 oX, vec4 aX) {
|
|
538
|
+
float determinant = oW.x * oX.y - oW.y * oX.x;
|
|
539
|
+
vec3 t = aX.xyz;
|
|
540
540
|
vec3 b = vec3(0.0);
|
|
541
541
|
|
|
542
|
-
float
|
|
542
|
+
float rF = abs(aX.w) > 1.5 ? 0.0 : aX.w;
|
|
543
543
|
if (abs(determinant) > 1e-12) {
|
|
544
|
-
vec3 dt = (dp1 *
|
|
545
|
-
vec3 db = (dp2 *
|
|
544
|
+
vec3 dt = (dp1 * oX.y - dp2 * oW.y) / determinant;
|
|
545
|
+
vec3 db = (dp2 * oW.x - dp1 * oX.x) / determinant;
|
|
546
546
|
if (dot(t, t) < 1e-8) { t = dt; }
|
|
547
|
-
if (
|
|
547
|
+
if (rF == 0.0) { rF = (dot(cross(normal, dt), db) < 0.0 ? -1.0 : 1.0); }
|
|
548
548
|
}
|
|
549
549
|
t -= normal * dot(normal, t);
|
|
550
550
|
if (dot(t, t) < 1e-8) {
|
|
551
|
-
float
|
|
552
|
-
float
|
|
553
|
-
float xy = normal.x * normal.y *
|
|
554
|
-
t = vec3(1.0 +
|
|
555
|
-
b = vec3(xy,
|
|
551
|
+
float iI = (normal.z >= 0.0 ? 1.0 : -1.0);
|
|
552
|
+
float cL = -1.0 / (iI + normal.z);
|
|
553
|
+
float xy = normal.x * normal.y * cL;
|
|
554
|
+
t = vec3(1.0 + iI * normal.x * normal.x * cL, iI * xy, -iI * normal.x);
|
|
555
|
+
b = vec3(xy, iI + normal.y * normal.y * cL, -normal.y);
|
|
556
556
|
}
|
|
557
557
|
else { t = normalize(t); b = normalize(cross(normal, t)); }
|
|
558
|
-
return mat2x3(t, b * (
|
|
558
|
+
return mat2x3(t, b * (rF < 0.0 ? -1.0 : 1.0));
|
|
559
559
|
}
|
|
560
560
|
|
|
561
|
-
void
|
|
561
|
+
void hH(inout SurfaceInteraction si, fP tri, vec3 barycentric, ivec3 index) {
|
|
562
562
|
si.hit = true;
|
|
563
563
|
si.position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
|
|
564
|
-
ivec2 i0 =
|
|
565
|
-
ivec2 i1 =
|
|
566
|
-
ivec2 i2 =
|
|
564
|
+
ivec2 i0 = hd(index.x, vertexColumns);
|
|
565
|
+
ivec2 i1 = hd(index.y, vertexColumns);
|
|
566
|
+
ivec2 i2 = hd(index.z, vertexColumns);
|
|
567
567
|
si.vertexColor = vec3(1.0);
|
|
568
568
|
#ifdef USE_VERTEX_COLOR
|
|
569
569
|
si.vertexColor = barycentric.x * texelFetch(colorBuffer, i0, 0).rgb
|
|
@@ -582,14 +582,14 @@ si.vertexNormal = normal;
|
|
|
582
582
|
|
|
583
583
|
|
|
584
584
|
vec3 geometricNormal = normalize(cross(tri.p1 - tri.p0, tri.p2 - tri.p0));
|
|
585
|
-
vec3
|
|
585
|
+
vec3 kR = barycentric.x * n0 + barycentric.y * n1 + barycentric.z * n2;
|
|
586
586
|
float a = dot(n2 - n0, tri.p0 - tri.p2);
|
|
587
587
|
float b = dot(n2 - n1, tri.p1 - tri.p2);
|
|
588
588
|
float c = dot(n1 - n0, tri.p1 - tri.p0);
|
|
589
589
|
float h = a * barycentric.x * (barycentric.x - 1.0)
|
|
590
590
|
+ (a + b + c) * barycentric.x * barycentric.y
|
|
591
591
|
+ b * barycentric.y * (barycentric.y - 1.0);
|
|
592
|
-
if (dot(
|
|
592
|
+
if (dot(kR, geometricNormal) > 0.0) {
|
|
593
593
|
float h0 = max(max(dot(tri.p1 - tri.p0, n0), dot(tri.p2 - tri.p0, n0)), 0.0);
|
|
594
594
|
float h1 = max(max(dot(tri.p0 - tri.p1, n1), dot(tri.p2 - tri.p1, n1)), 0.0);
|
|
595
595
|
float h2 = max(max(dot(tri.p0 - tri.p2, n2), dot(tri.p1 - tri.p2, n2)), 0.0);
|
|
@@ -607,7 +607,7 @@ h1 = max(dot(si.position - tri.p1, n1) + h1, 0.0);
|
|
|
607
607
|
h2 = max(dot(si.position - tri.p2, n2) + h2, 0.0);
|
|
608
608
|
h = min(-min(min(h0, h1), h2), h * 0.5);
|
|
609
609
|
}
|
|
610
|
-
si.shadowOffset =
|
|
610
|
+
si.shadowOffset = kR * h;
|
|
611
611
|
|
|
612
612
|
|
|
613
613
|
ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
|
|
@@ -615,7 +615,7 @@ ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
|
|
|
615
615
|
ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
|
|
616
616
|
|
|
617
617
|
if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
|
|
618
|
-
si.materialIndex =
|
|
618
|
+
si.materialIndex = fF(m0, m1, m2, barycentric);
|
|
619
619
|
}
|
|
620
620
|
|
|
621
621
|
vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
|
|
@@ -626,80 +626,80 @@ vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
|
|
|
626
626
|
vec2 secondaryUv0 = texelFetch(uv1Buffer, i0, 0).xy;
|
|
627
627
|
vec2 secondaryUv1 = texelFetch(uv1Buffer, i1, 0).xy;
|
|
628
628
|
vec2 secondaryUv2 = texelFetch(uv1Buffer, i2, 0).xy;
|
|
629
|
-
vec2
|
|
629
|
+
vec2 dj = barycentric.x * secondaryUv0
|
|
630
630
|
+ barycentric.y * secondaryUv1
|
|
631
631
|
+ barycentric.z * secondaryUv2;
|
|
632
632
|
|
|
633
|
-
vec4
|
|
634
|
-
int uvProjection = int(
|
|
633
|
+
vec4 mw = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_UV);
|
|
634
|
+
int uvProjection = int(mw.r);
|
|
635
635
|
if (uvProjection > 0) {
|
|
636
|
-
uv =
|
|
637
|
-
|
|
636
|
+
uv = gU(uvProjection, si.position, normal, mw.zw);
|
|
637
|
+
dj = uv;
|
|
638
638
|
} else {
|
|
639
|
-
uv *=
|
|
640
|
-
|
|
639
|
+
uv *= mw.zw;
|
|
640
|
+
dj *= mw.zw;
|
|
641
641
|
}
|
|
642
642
|
#else
|
|
643
643
|
vec2 uv = vec2(0.0);
|
|
644
|
-
vec2
|
|
644
|
+
vec2 dj = vec2(0.0);
|
|
645
645
|
#endif
|
|
646
646
|
|
|
647
647
|
#ifdef USE_COAT_NORMAL_FRAMES
|
|
648
648
|
si.coatNormal = normal;
|
|
649
649
|
#ifdef NUM_COAT_NORMAL_MAPS
|
|
650
|
-
float
|
|
650
|
+
float pQ = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
|
|
651
651
|
#endif
|
|
652
652
|
#endif
|
|
653
653
|
vec4 directionMaterial = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_DIRECTION_NORMAL);
|
|
654
|
-
float
|
|
655
|
-
if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 ||
|
|
654
|
+
float uL = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_FILM_TEXTURE).x;
|
|
655
|
+
if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 || uL != 0.0
|
|
656
656
|
#ifdef USE_COAT_NORMAL_FRAMES
|
|
657
657
|
|| fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_COAT).w > 0.0
|
|
658
658
|
#endif
|
|
659
659
|
) {
|
|
660
660
|
vec3 dp1 = tri.p0 - tri.p2;
|
|
661
661
|
vec3 dp2 = tri.p1 - tri.p2;
|
|
662
|
-
vec4
|
|
662
|
+
vec4 aX = vec4(0.0);
|
|
663
663
|
#ifdef USE_TANGENT
|
|
664
|
-
|
|
664
|
+
aX = barycentric.x * texelFetch(tangentBuffer, i0, 0)
|
|
665
665
|
+ barycentric.y * texelFetch(tangentBuffer, i1, 0)
|
|
666
666
|
+ barycentric.z * texelFetch(tangentBuffer, i2, 0);
|
|
667
667
|
#endif
|
|
668
|
-
mat2x3
|
|
669
|
-
si.geometryTangent =
|
|
670
|
-
si.geometryBitangent =
|
|
671
|
-
mat2x3
|
|
668
|
+
mat2x3 fc = eP(normal, dp1, dp2, uv0-uv2, uv1-uv2, aX);
|
|
669
|
+
si.geometryTangent = fc[0];
|
|
670
|
+
si.geometryBitangent = fc[1];
|
|
671
|
+
mat2x3 gm = fc;
|
|
672
672
|
#ifdef NUM_ANISOTROPY_MAPS
|
|
673
673
|
if (directionMaterial.x >= 0.0 && mapUvChannel[int(directionMaterial.x)] > 0.5) {
|
|
674
674
|
vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
|
|
675
675
|
vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
|
|
676
676
|
vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
|
|
677
|
-
|
|
677
|
+
gm = eP(normal, dp1, dp2, a-c, b-c, (aX.w == 0.0 ? vec4(0.0) : aX));
|
|
678
678
|
}
|
|
679
679
|
#endif
|
|
680
|
-
si.directionTangent =
|
|
681
|
-
si.directionBitangent =
|
|
680
|
+
si.directionTangent = gm[0];
|
|
681
|
+
si.directionBitangent = gm[1];
|
|
682
682
|
#if defined(USE_COAT_NORMAL_FRAMES) && defined(NUM_COAT_NORMAL_MAPS)
|
|
683
|
-
if (
|
|
684
|
-
int
|
|
685
|
-
mat2x3
|
|
686
|
-
if (mapUvChannel[
|
|
683
|
+
if (pQ >= 0.0) {
|
|
684
|
+
int lg = int(pQ);
|
|
685
|
+
mat2x3 mU = fc;
|
|
686
|
+
if (mapUvChannel[lg] > 0.5) {
|
|
687
687
|
vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
|
|
688
688
|
vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
|
|
689
689
|
vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
|
|
690
|
-
|
|
691
|
-
|
|
690
|
+
mU = eP(normal, dp1, dp2, a-c, b-c,
|
|
691
|
+
aX.w == 0.0 ? vec4(0.0) : aX);
|
|
692
692
|
}
|
|
693
|
-
vec3 decoded = sampleMap(
|
|
694
|
-
vec3 mapped =
|
|
695
|
-
+
|
|
693
|
+
vec3 decoded = sampleMap(lg, getMapUvSet(lg, uv, dj)).rgb * 2.0 - 1.0;
|
|
694
|
+
vec3 mapped = mU[0] * decoded.x * directionMaterial.z
|
|
695
|
+
+ mU[1] * decoded.y * directionMaterial.w + normal * decoded.z;
|
|
696
696
|
if (dot(mapped, mapped) > 1e-12) { si.coatNormal = normalize(mapped); }
|
|
697
697
|
}
|
|
698
698
|
#endif
|
|
699
699
|
}
|
|
700
700
|
|
|
701
701
|
si.uv = uv;
|
|
702
|
-
si.uv1 =
|
|
702
|
+
si.uv1 = dj;
|
|
703
703
|
|
|
704
704
|
#ifdef USE_TANGENT
|
|
705
705
|
vec3 t0 = texelFetch(tangentBuffer, i0, 0).xyz;
|
|
@@ -710,52 +710,52 @@ si.tangent = normalize(barycentric.x * t0 + barycentric.y * t1 + barycentric.z *
|
|
|
710
710
|
#if defined(NUM_NORMAL_MAPS)
|
|
711
711
|
vec3 dp1 = tri.p0 - tri.p2;
|
|
712
712
|
vec3 dp2 = tri.p1 - tri.p2;
|
|
713
|
-
vec2
|
|
714
|
-
vec2
|
|
715
|
-
si.normal =
|
|
716
|
-
si.materialIndex, uv, normal, dp1, dp2,
|
|
713
|
+
vec2 oW = uv0 - uv2;
|
|
714
|
+
vec2 oX = uv1 - uv2;
|
|
715
|
+
si.normal = pd(
|
|
716
|
+
si.materialIndex, uv, normal, dp1, dp2, oW, oX
|
|
717
717
|
);
|
|
718
718
|
#else
|
|
719
719
|
si.normal = normal;
|
|
720
720
|
#endif
|
|
721
721
|
}
|
|
722
722
|
|
|
723
|
-
struct
|
|
723
|
+
struct eK {
|
|
724
724
|
float t;
|
|
725
725
|
vec3 barycentric;
|
|
726
726
|
};
|
|
727
727
|
|
|
728
|
-
vec4
|
|
729
|
-
return
|
|
728
|
+
vec4 dJ(int i) {
|
|
729
|
+
return lm(bvhBuffer, i, bvhColumns);
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
vec4
|
|
733
|
-
return
|
|
732
|
+
vec4 bF(int i) {
|
|
733
|
+
return lm(instancesBuffer, i, instancesColumns);
|
|
734
734
|
}
|
|
735
735
|
|
|
736
736
|
|
|
737
737
|
|
|
738
|
-
uint
|
|
738
|
+
uint rY(uint value) {
|
|
739
739
|
value -= (value >> 1u) & 0x55555555u;
|
|
740
740
|
value = (value & 0x33333333u) + ((value >> 2u) & 0x33333333u);
|
|
741
741
|
value = (value + (value >> 4u)) & 0x0f0f0f0fu;
|
|
742
742
|
return (value * 0x01010101u) >> 24u;
|
|
743
743
|
}
|
|
744
744
|
|
|
745
|
-
vec4
|
|
745
|
+
vec4 fp(uint mE) {
|
|
746
746
|
return vec4(
|
|
747
|
-
float(
|
|
748
|
-
float((
|
|
749
|
-
float((
|
|
750
|
-
float(
|
|
747
|
+
float(mE & 0xffu),
|
|
748
|
+
float((mE >> 8u) & 0xffu),
|
|
749
|
+
float((mE >> 16u) & 0xffu),
|
|
750
|
+
float(mE >> 24u)
|
|
751
751
|
) / 255.0;
|
|
752
752
|
}
|
|
753
753
|
|
|
754
754
|
|
|
755
755
|
|
|
756
756
|
|
|
757
|
-
|
|
758
|
-
|
|
757
|
+
eK ga(vec3 o, vec3 d, fP tri, int eq, vec3 gY, float tMax) {
|
|
758
|
+
eK ti;
|
|
759
759
|
|
|
760
760
|
|
|
761
761
|
vec3 p0t = tri.p0 - o;
|
|
@@ -763,20 +763,20 @@ vec3 p1t = tri.p1 - o;
|
|
|
763
763
|
vec3 p2t = tri.p2 - o;
|
|
764
764
|
|
|
765
765
|
|
|
766
|
-
if (
|
|
766
|
+
if (eq == 0) {
|
|
767
767
|
p0t = p0t.yzx;
|
|
768
768
|
p1t = p1t.yzx;
|
|
769
769
|
p2t = p2t.yzx;
|
|
770
|
-
} else if (
|
|
770
|
+
} else if (eq == 1) {
|
|
771
771
|
p0t = p0t.zxy;
|
|
772
772
|
p1t = p1t.zxy;
|
|
773
773
|
p2t = p2t.zxy;
|
|
774
774
|
}
|
|
775
775
|
|
|
776
776
|
|
|
777
|
-
p0t.xy +=
|
|
778
|
-
p1t.xy +=
|
|
779
|
-
p2t.xy +=
|
|
777
|
+
p0t.xy += gY.xy * p0t.z;
|
|
778
|
+
p1t.xy += gY.xy * p1t.z;
|
|
779
|
+
p2t.xy += gY.xy * p2t.z;
|
|
780
780
|
|
|
781
781
|
|
|
782
782
|
vec3 e = vec3(
|
|
@@ -786,9 +786,9 @@ p0t.x * p1t.y - p0t.y * p1t.x
|
|
|
786
786
|
);
|
|
787
787
|
|
|
788
788
|
#ifdef DEPTH_QUERY_MODE
|
|
789
|
-
vec3
|
|
789
|
+
vec3 sF = abs(vec3(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
|
|
790
790
|
+ abs(vec3(p1t.y * p2t.x, p2t.y * p0t.x, p0t.y * p1t.x));
|
|
791
|
-
e = mix(e, vec3(0.0), lessThanEqual(abs(e),
|
|
791
|
+
e = mix(e, vec3(0.0), lessThanEqual(abs(e), sF * 1e-6));
|
|
792
792
|
#endif
|
|
793
793
|
|
|
794
794
|
|
|
@@ -801,19 +801,19 @@ float det = e.x + e.y + e.z;
|
|
|
801
801
|
if (det == 0.0) return ti;
|
|
802
802
|
#endif
|
|
803
803
|
|
|
804
|
-
p0t.z *=
|
|
805
|
-
p1t.z *=
|
|
806
|
-
p2t.z *=
|
|
807
|
-
float
|
|
804
|
+
p0t.z *= gY.z;
|
|
805
|
+
p1t.z *= gY.z;
|
|
806
|
+
p2t.z *= gY.z;
|
|
807
|
+
float sw = (e.x * p0t.z + e.y * p1t.z + e.z * p2t.z);
|
|
808
808
|
|
|
809
809
|
|
|
810
|
-
if (abs(
|
|
810
|
+
if (abs(sw) > abs(tMax * det)) {
|
|
811
811
|
return ti;
|
|
812
812
|
}
|
|
813
813
|
|
|
814
|
-
float
|
|
815
|
-
ti.t =
|
|
816
|
-
ti.barycentric = e *
|
|
814
|
+
float tN = 1. / det;
|
|
815
|
+
ti.t = sw * tN;
|
|
816
|
+
ti.barycentric = e * tN;
|
|
817
817
|
|
|
818
818
|
return ti;
|
|
819
819
|
}
|
|
@@ -824,18 +824,18 @@ vec3 max;
|
|
|
824
824
|
};
|
|
825
825
|
|
|
826
826
|
|
|
827
|
-
vec3
|
|
827
|
+
vec3 fo(vec3 d) {
|
|
828
828
|
#ifdef DEPTH_QUERY_MODE
|
|
829
|
-
vec3
|
|
830
|
-
return 1.0 /
|
|
829
|
+
vec3 aq = mix(d, mix(vec3(1e-20), vec3(-1e-20), lessThan(d, vec3(0.0))), lessThan(abs(d), vec3(1e-20)));
|
|
830
|
+
return 1.0 / aq;
|
|
831
831
|
#else
|
|
832
832
|
return 1.0 / d;
|
|
833
833
|
#endif
|
|
834
834
|
}
|
|
835
835
|
|
|
836
|
-
vec3
|
|
836
|
+
vec3 fk(vec3 gr, vec3 o) {
|
|
837
837
|
#ifdef DEPTH_QUERY_MODE
|
|
838
|
-
return abs(
|
|
838
|
+
return abs(gr) * max(vec3(1.0), abs(o)) * 1e-6;
|
|
839
839
|
#else
|
|
840
840
|
return vec3(0.0);
|
|
841
841
|
#endif
|
|
@@ -843,21 +843,21 @@ return vec3(0.0);
|
|
|
843
843
|
|
|
844
844
|
|
|
845
845
|
|
|
846
|
-
float
|
|
846
|
+
float cU(vec3 o, vec3 d, vec3 xq, vec3 xp, float tMax) {
|
|
847
847
|
#ifdef DEPTH_QUERY_MODE
|
|
848
|
-
vec3
|
|
849
|
-
vec3
|
|
850
|
-
vec3
|
|
851
|
-
vec3
|
|
848
|
+
vec3 gr = fo(d);
|
|
849
|
+
vec3 wG = (xq - o) * gr;
|
|
850
|
+
vec3 wI = (xp - o) * gr;
|
|
851
|
+
vec3 padding = fk(gr, o);
|
|
852
852
|
#else
|
|
853
|
-
vec3
|
|
854
|
-
vec3
|
|
855
|
-
vec3
|
|
853
|
+
vec3 wG = (xq - o) / d;
|
|
854
|
+
vec3 wI = (xp - o) / d;
|
|
855
|
+
vec3 padding = vec3(0.0);
|
|
856
856
|
#endif
|
|
857
|
-
vec3
|
|
858
|
-
vec3
|
|
859
|
-
float t0 = max(
|
|
860
|
-
float t1 = min(
|
|
857
|
+
vec3 nJ = min(wG, wI) - padding;
|
|
858
|
+
vec3 sY = max(wG, wI) + padding;
|
|
859
|
+
float t0 = max(nJ.x, max(nJ.y, nJ.z));
|
|
860
|
+
float t1 = min(sY.x, min(sY.y, sY.z));
|
|
861
861
|
|
|
862
862
|
return (t0 > t1 || t0 > tMax) ? -1.0 : (t0 > 0.0 ? t0 : t1);
|
|
863
863
|
}
|
|
@@ -866,12 +866,12 @@ int maxDimension(vec3 v) {
|
|
|
866
866
|
return v.x > v.y ? (v.x > v.z ? 0 : 2) : (v.y > v.z ? 1 : 2);
|
|
867
867
|
}
|
|
868
868
|
|
|
869
|
-
vec3
|
|
869
|
+
vec3 nk(vec3 d, int eq) {
|
|
870
870
|
|
|
871
871
|
|
|
872
|
-
if (
|
|
872
|
+
if (eq == 0) {
|
|
873
873
|
return vec3(-d.y, -d.z, 1.0) / d.x;
|
|
874
|
-
} else if (
|
|
874
|
+
} else if (eq == 1) {
|
|
875
875
|
return vec3(-d.z, -d.x, 1.0) / d.y;
|
|
876
876
|
} else {
|
|
877
877
|
return vec3(-d.x, -d.y, 1.0) / d.z;
|
|
@@ -879,50 +879,50 @@ return vec3(-d.x, -d.y, 1.0) / d.z;
|
|
|
879
879
|
}
|
|
880
880
|
|
|
881
881
|
|
|
882
|
-
void
|
|
882
|
+
void intersectScene(in Ray ray, inout SurfaceInteraction si, bool doubleSided) {
|
|
883
883
|
si.hit = false;
|
|
884
884
|
|
|
885
885
|
if (isEmptyScene) {
|
|
886
886
|
return;
|
|
887
887
|
}
|
|
888
888
|
|
|
889
|
-
int
|
|
890
|
-
vec3
|
|
891
|
-
int
|
|
889
|
+
int eq = maxDimension(abs(ray.d));
|
|
890
|
+
vec3 gY = nk(ray.d, eq);
|
|
891
|
+
int ap;
|
|
892
892
|
|
|
893
893
|
${getBVHTraverseCode(glsl `
|
|
894
894
|
si.triangleIndex = triangleIndex;
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
895
|
+
mk = tri;
|
|
896
|
+
hS = faceNormal;
|
|
897
|
+
aC = hit.barycentric;
|
|
898
|
+
hK = index;
|
|
899
|
+
sj = true;
|
|
900
|
+
ap = bY;
|
|
901
901
|
`)}
|
|
902
902
|
|
|
903
|
-
if (
|
|
904
|
-
si.instanceIndex =
|
|
905
|
-
si.materialIndex = int(
|
|
903
|
+
if (sj) {
|
|
904
|
+
si.instanceIndex = ap;
|
|
905
|
+
si.materialIndex = int(ah(floatBitsToInt(bF(ap * ${INSTANCE_VEC4_STRIDE}).z)).x);
|
|
906
906
|
|
|
907
|
-
|
|
907
|
+
hH(si, mk, aC, hK);
|
|
908
908
|
mat4 l2w = mat4(
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
909
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 5),
|
|
910
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 6),
|
|
911
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 7),
|
|
912
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 8)
|
|
913
913
|
);
|
|
914
914
|
mat4 w2l = mat4(
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
915
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 1),
|
|
916
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 2),
|
|
917
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 3),
|
|
918
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 4)
|
|
919
919
|
);
|
|
920
|
-
mat3
|
|
921
|
-
si.faceNormal = normalize(
|
|
922
|
-
si.vertexNormal = normalize(
|
|
923
|
-
si.normal = normalize(
|
|
920
|
+
mat3 aH = transpose(mat3(w2l));
|
|
921
|
+
si.faceNormal = normalize(aH * hS);
|
|
922
|
+
si.vertexNormal = normalize(aH * si.vertexNormal);
|
|
923
|
+
si.normal = normalize(aH * si.normal);
|
|
924
924
|
#ifdef USE_COAT_NORMAL_FRAMES
|
|
925
|
-
si.coatNormal = normalize(
|
|
925
|
+
si.coatNormal = normalize(aH * si.coatNormal);
|
|
926
926
|
#endif
|
|
927
927
|
#ifdef USE_TANGENT
|
|
928
928
|
if (dot(si.tangent, si.tangent) > 0.0) {
|
|
@@ -939,7 +939,7 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
|
|
|
939
939
|
}
|
|
940
940
|
|
|
941
941
|
|
|
942
|
-
void
|
|
942
|
+
void intersectSceneBevel(in Ray ray, inout SurfaceInteraction si, int instanceIndex, float maxDistance) {
|
|
943
943
|
si.hit = false;
|
|
944
944
|
|
|
945
945
|
if (isEmptyScene) {
|
|
@@ -947,46 +947,46 @@ return;
|
|
|
947
947
|
}
|
|
948
948
|
|
|
949
949
|
bool doubleSided = true;
|
|
950
|
-
int
|
|
951
|
-
vec3
|
|
952
|
-
int
|
|
950
|
+
int eq = maxDimension(abs(ray.d));
|
|
951
|
+
vec3 gY = nk(ray.d, eq);
|
|
952
|
+
int ap;
|
|
953
953
|
|
|
954
954
|
${getBVHTraverseCode(glsl `
|
|
955
955
|
si.triangleIndex = triangleIndex;
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
956
|
+
mk = tri;
|
|
957
|
+
hS = faceNormal;
|
|
958
|
+
aC = hit.barycentric;
|
|
959
|
+
hK = index;
|
|
960
|
+
sj = true;
|
|
961
|
+
ap = bY;
|
|
962
962
|
`, glsl `
|
|
963
|
-
if (
|
|
963
|
+
if (bY != instanceIndex) {
|
|
964
964
|
continue;
|
|
965
965
|
}
|
|
966
966
|
`, 'maxDistance')}
|
|
967
967
|
|
|
968
|
-
if (
|
|
969
|
-
si.instanceIndex =
|
|
970
|
-
si.materialIndex = int(
|
|
971
|
-
|
|
968
|
+
if (sj) {
|
|
969
|
+
si.instanceIndex = ap;
|
|
970
|
+
si.materialIndex = int(ah(floatBitsToInt(bF(ap * ${INSTANCE_VEC4_STRIDE}).z)).x);
|
|
971
|
+
hH(si, mk, aC, hK);
|
|
972
972
|
mat4 l2w = mat4(
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
973
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 5),
|
|
974
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 6),
|
|
975
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 7),
|
|
976
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 8)
|
|
977
977
|
);
|
|
978
978
|
mat4 w2l = mat4(
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
979
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 1),
|
|
980
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 2),
|
|
981
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 3),
|
|
982
|
+
bF(ap * ${INSTANCE_VEC4_STRIDE} + 4)
|
|
983
983
|
);
|
|
984
|
-
mat3
|
|
985
|
-
si.faceNormal = normalize(
|
|
986
|
-
si.vertexNormal = normalize(
|
|
987
|
-
si.normal = normalize(
|
|
984
|
+
mat3 aH = transpose(mat3(w2l));
|
|
985
|
+
si.faceNormal = normalize(aH * hS);
|
|
986
|
+
si.vertexNormal = normalize(aH * si.vertexNormal);
|
|
987
|
+
si.normal = normalize(aH * si.normal);
|
|
988
988
|
#ifdef USE_COAT_NORMAL_FRAMES
|
|
989
|
-
si.coatNormal = normalize(
|
|
989
|
+
si.coatNormal = normalize(aH * si.coatNormal);
|
|
990
990
|
#endif
|
|
991
991
|
#ifdef USE_TANGENT
|
|
992
992
|
if (dot(si.tangent, si.tangent) > 0.0) {
|
|
@@ -1002,35 +1002,35 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
|
|
|
1002
1002
|
}
|
|
1003
1003
|
}
|
|
1004
1004
|
|
|
1005
|
-
bool
|
|
1005
|
+
bool intersectSceneShadow(in Ray ray, float lightDistance, int kn) {
|
|
1006
1006
|
|
|
1007
1007
|
if (isEmptyScene) {
|
|
1008
1008
|
return false;
|
|
1009
1009
|
}
|
|
1010
1010
|
|
|
1011
1011
|
bool doubleSided = true;
|
|
1012
|
-
int
|
|
1013
|
-
vec3
|
|
1012
|
+
int eq = maxDimension(abs(ray.d));
|
|
1013
|
+
vec3 gY = nk(ray.d, eq);
|
|
1014
1014
|
|
|
1015
1015
|
${getBVHTraverseCode(glsl `
|
|
1016
1016
|
|
|
1017
1017
|
|
|
1018
|
-
bool
|
|
1018
|
+
bool jS = true;
|
|
1019
1019
|
vec3 barycentric = hit.barycentric;
|
|
1020
1020
|
vec3 position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
|
|
1021
1021
|
|
|
1022
|
-
if (
|
|
1022
|
+
if (jS) {
|
|
1023
1023
|
#ifdef HAS_ALPHA
|
|
1024
|
-
int materialIndex = int(
|
|
1025
|
-
ivec2 i0 =
|
|
1026
|
-
ivec2 i1 =
|
|
1027
|
-
ivec2 i2 =
|
|
1024
|
+
int materialIndex = int(ah(floatBitsToInt(bF(bY * ${INSTANCE_VEC4_STRIDE}).z)).x);
|
|
1025
|
+
ivec2 i0 = hd(index.x, vertexColumns);
|
|
1026
|
+
ivec2 i1 = hd(index.y, vertexColumns);
|
|
1027
|
+
ivec2 i2 = hd(index.z, vertexColumns);
|
|
1028
1028
|
ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
|
|
1029
1029
|
ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
|
|
1030
1030
|
ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
|
|
1031
1031
|
|
|
1032
1032
|
if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
|
|
1033
|
-
materialIndex =
|
|
1033
|
+
materialIndex = fF(m0, m1, m2, barycentric);
|
|
1034
1034
|
}
|
|
1035
1035
|
|
|
1036
1036
|
int ii = materialIndex * MAT_DATA_SIZE;
|
|
@@ -1044,12 +1044,12 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
|
|
|
1044
1044
|
vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
|
|
1045
1045
|
vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
|
|
1046
1046
|
vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
|
|
1047
|
-
vec4
|
|
1048
|
-
int uvProjection = int(
|
|
1047
|
+
vec4 mw = fetchMatData(ii + MAT_ROW_UV);
|
|
1048
|
+
int uvProjection = int(mw.r);
|
|
1049
1049
|
if (uvProjection > 0) {
|
|
1050
|
-
uv =
|
|
1050
|
+
uv = gU(uvProjection, position, hS, mw.zw);
|
|
1051
1051
|
} else {
|
|
1052
|
-
uv *=
|
|
1052
|
+
uv *= mw.zw;
|
|
1053
1053
|
}
|
|
1054
1054
|
|
|
1055
1055
|
alpha *= sampleMap(diffuseMapIndex, uv).a;
|
|
@@ -1063,32 +1063,32 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
|
|
|
1063
1063
|
vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
|
|
1064
1064
|
vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
|
|
1065
1065
|
vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
|
|
1066
|
-
vec4
|
|
1067
|
-
int uvProjection = int(
|
|
1066
|
+
vec4 mw = fetchMatData(ii + MAT_ROW_UV);
|
|
1067
|
+
int uvProjection = int(mw.r);
|
|
1068
1068
|
if (uvProjection > 0) {
|
|
1069
|
-
uv =
|
|
1069
|
+
uv = gU(uvProjection, position, hS, mw.zw);
|
|
1070
1070
|
} else {
|
|
1071
|
-
uv *=
|
|
1071
|
+
uv *= mw.zw;
|
|
1072
1072
|
}
|
|
1073
1073
|
alpha *= sampleMap(alphaMapIndex, uv).g;
|
|
1074
1074
|
}
|
|
1075
1075
|
#endif
|
|
1076
1076
|
float alphaCutoff = fetchMatData(ii + MAT_ROW_STANDALONE_MAPS).a;
|
|
1077
|
-
alpha =
|
|
1077
|
+
alpha = mb(
|
|
1078
1078
|
alpha, int(fetchMatData(ii + MAT_ROW_ALPHA).w), alphaCutoff
|
|
1079
1079
|
);
|
|
1080
|
-
if (
|
|
1080
|
+
if (eC(0u) > alpha) {
|
|
1081
1081
|
|
|
1082
1082
|
tMax = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
|
|
1083
|
-
|
|
1083
|
+
jS = false;
|
|
1084
1084
|
}
|
|
1085
1085
|
#endif
|
|
1086
1086
|
}
|
|
1087
|
-
if (
|
|
1087
|
+
if (jS) {
|
|
1088
1088
|
return true;
|
|
1089
1089
|
}
|
|
1090
1090
|
`, glsl `
|
|
1091
|
-
if (triangleIndex ==
|
|
1091
|
+
if (triangleIndex == kn) {
|
|
1092
1092
|
continue;
|
|
1093
1093
|
}
|
|
1094
1094
|
`, 'min(max(lightDistance, 0.0), RAY_MAX_DISTANCE)')}
|