@meimu/mutracer 0.1.4 → 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 +10421 -8363
- package/docs/api.md +202 -11
- package/docs/denoising.md +30 -15
- package/docs/materials.md +18 -27
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +32 -1
- package/docs/threejs.md +19 -10
- package/docs/updates.md +44 -2
- package/docs/viewer.md +41 -3
- 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 -548
- 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 +83 -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 +437 -435
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +146 -145
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +821 -821
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -1
- 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 +51 -51
- 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 +108 -108
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- 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 +743 -706
- 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 +86 -83
- 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 +7 -169
- 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,78 +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
|
-
#ifdef
|
|
647
|
+
#ifdef USE_COAT_NORMAL_FRAMES
|
|
648
648
|
si.coatNormal = normal;
|
|
649
|
-
|
|
649
|
+
#ifdef NUM_COAT_NORMAL_MAPS
|
|
650
|
+
float pQ = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_LAYER_MAPS).z;
|
|
651
|
+
#endif
|
|
650
652
|
#endif
|
|
651
653
|
vec4 directionMaterial = fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_DIRECTION_NORMAL);
|
|
652
|
-
float
|
|
653
|
-
if (directionMaterial.x >= 0.0 || directionMaterial.y != 0.0 ||
|
|
654
|
-
#ifdef
|
|
655
|
-
||
|
|
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
|
+
#ifdef USE_COAT_NORMAL_FRAMES
|
|
657
|
+
|| fetchMatData(si.materialIndex * MAT_DATA_SIZE + MAT_ROW_COAT).w > 0.0
|
|
656
658
|
#endif
|
|
657
659
|
) {
|
|
658
660
|
vec3 dp1 = tri.p0 - tri.p2;
|
|
659
661
|
vec3 dp2 = tri.p1 - tri.p2;
|
|
660
|
-
vec4
|
|
662
|
+
vec4 aX = vec4(0.0);
|
|
661
663
|
#ifdef USE_TANGENT
|
|
662
|
-
|
|
664
|
+
aX = barycentric.x * texelFetch(tangentBuffer, i0, 0)
|
|
663
665
|
+ barycentric.y * texelFetch(tangentBuffer, i1, 0)
|
|
664
666
|
+ barycentric.z * texelFetch(tangentBuffer, i2, 0);
|
|
665
667
|
#endif
|
|
666
|
-
mat2x3
|
|
667
|
-
si.geometryTangent =
|
|
668
|
-
si.geometryBitangent =
|
|
669
|
-
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;
|
|
670
672
|
#ifdef NUM_ANISOTROPY_MAPS
|
|
671
673
|
if (directionMaterial.x >= 0.0 && mapUvChannel[int(directionMaterial.x)] > 0.5) {
|
|
672
674
|
vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
|
|
673
675
|
vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
|
|
674
676
|
vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
|
|
675
|
-
|
|
677
|
+
gm = eP(normal, dp1, dp2, a-c, b-c, (aX.w == 0.0 ? vec4(0.0) : aX));
|
|
676
678
|
}
|
|
677
679
|
#endif
|
|
678
|
-
si.directionTangent =
|
|
679
|
-
si.directionBitangent =
|
|
680
|
-
#
|
|
681
|
-
if (
|
|
682
|
-
int
|
|
683
|
-
mat2x3
|
|
684
|
-
if (mapUvChannel[
|
|
680
|
+
si.directionTangent = gm[0];
|
|
681
|
+
si.directionBitangent = gm[1];
|
|
682
|
+
#if defined(USE_COAT_NORMAL_FRAMES) && defined(NUM_COAT_NORMAL_MAPS)
|
|
683
|
+
if (pQ >= 0.0) {
|
|
684
|
+
int lg = int(pQ);
|
|
685
|
+
mat2x3 mU = fc;
|
|
686
|
+
if (mapUvChannel[lg] > 0.5) {
|
|
685
687
|
vec2 a = texelFetch(uv1Buffer, i0, 0).xy;
|
|
686
688
|
vec2 b = texelFetch(uv1Buffer, i1, 0).xy;
|
|
687
689
|
vec2 c = texelFetch(uv1Buffer, i2, 0).xy;
|
|
688
|
-
|
|
689
|
-
|
|
690
|
+
mU = eP(normal, dp1, dp2, a-c, b-c,
|
|
691
|
+
aX.w == 0.0 ? vec4(0.0) : aX);
|
|
690
692
|
}
|
|
691
|
-
vec3 decoded = sampleMap(
|
|
692
|
-
vec3 mapped =
|
|
693
|
-
+
|
|
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;
|
|
694
696
|
if (dot(mapped, mapped) > 1e-12) { si.coatNormal = normalize(mapped); }
|
|
695
697
|
}
|
|
696
698
|
#endif
|
|
697
699
|
}
|
|
698
700
|
|
|
699
701
|
si.uv = uv;
|
|
700
|
-
si.uv1 =
|
|
702
|
+
si.uv1 = dj;
|
|
701
703
|
|
|
702
704
|
#ifdef USE_TANGENT
|
|
703
705
|
vec3 t0 = texelFetch(tangentBuffer, i0, 0).xyz;
|
|
@@ -708,52 +710,52 @@ si.tangent = normalize(barycentric.x * t0 + barycentric.y * t1 + barycentric.z *
|
|
|
708
710
|
#if defined(NUM_NORMAL_MAPS)
|
|
709
711
|
vec3 dp1 = tri.p0 - tri.p2;
|
|
710
712
|
vec3 dp2 = tri.p1 - tri.p2;
|
|
711
|
-
vec2
|
|
712
|
-
vec2
|
|
713
|
-
si.normal =
|
|
714
|
-
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
|
|
715
717
|
);
|
|
716
718
|
#else
|
|
717
719
|
si.normal = normal;
|
|
718
720
|
#endif
|
|
719
721
|
}
|
|
720
722
|
|
|
721
|
-
struct
|
|
723
|
+
struct eK {
|
|
722
724
|
float t;
|
|
723
725
|
vec3 barycentric;
|
|
724
726
|
};
|
|
725
727
|
|
|
726
|
-
vec4
|
|
727
|
-
return
|
|
728
|
+
vec4 dJ(int i) {
|
|
729
|
+
return lm(bvhBuffer, i, bvhColumns);
|
|
728
730
|
}
|
|
729
731
|
|
|
730
|
-
vec4
|
|
731
|
-
return
|
|
732
|
+
vec4 bF(int i) {
|
|
733
|
+
return lm(instancesBuffer, i, instancesColumns);
|
|
732
734
|
}
|
|
733
735
|
|
|
734
736
|
|
|
735
737
|
|
|
736
|
-
uint
|
|
738
|
+
uint rY(uint value) {
|
|
737
739
|
value -= (value >> 1u) & 0x55555555u;
|
|
738
740
|
value = (value & 0x33333333u) + ((value >> 2u) & 0x33333333u);
|
|
739
741
|
value = (value + (value >> 4u)) & 0x0f0f0f0fu;
|
|
740
742
|
return (value * 0x01010101u) >> 24u;
|
|
741
743
|
}
|
|
742
744
|
|
|
743
|
-
vec4
|
|
745
|
+
vec4 fp(uint mE) {
|
|
744
746
|
return vec4(
|
|
745
|
-
float(
|
|
746
|
-
float((
|
|
747
|
-
float((
|
|
748
|
-
float(
|
|
747
|
+
float(mE & 0xffu),
|
|
748
|
+
float((mE >> 8u) & 0xffu),
|
|
749
|
+
float((mE >> 16u) & 0xffu),
|
|
750
|
+
float(mE >> 24u)
|
|
749
751
|
) / 255.0;
|
|
750
752
|
}
|
|
751
753
|
|
|
752
754
|
|
|
753
755
|
|
|
754
756
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
+
eK ga(vec3 o, vec3 d, fP tri, int eq, vec3 gY, float tMax) {
|
|
758
|
+
eK ti;
|
|
757
759
|
|
|
758
760
|
|
|
759
761
|
vec3 p0t = tri.p0 - o;
|
|
@@ -761,20 +763,20 @@ vec3 p1t = tri.p1 - o;
|
|
|
761
763
|
vec3 p2t = tri.p2 - o;
|
|
762
764
|
|
|
763
765
|
|
|
764
|
-
if (
|
|
766
|
+
if (eq == 0) {
|
|
765
767
|
p0t = p0t.yzx;
|
|
766
768
|
p1t = p1t.yzx;
|
|
767
769
|
p2t = p2t.yzx;
|
|
768
|
-
} else if (
|
|
770
|
+
} else if (eq == 1) {
|
|
769
771
|
p0t = p0t.zxy;
|
|
770
772
|
p1t = p1t.zxy;
|
|
771
773
|
p2t = p2t.zxy;
|
|
772
774
|
}
|
|
773
775
|
|
|
774
776
|
|
|
775
|
-
p0t.xy +=
|
|
776
|
-
p1t.xy +=
|
|
777
|
-
p2t.xy +=
|
|
777
|
+
p0t.xy += gY.xy * p0t.z;
|
|
778
|
+
p1t.xy += gY.xy * p1t.z;
|
|
779
|
+
p2t.xy += gY.xy * p2t.z;
|
|
778
780
|
|
|
779
781
|
|
|
780
782
|
vec3 e = vec3(
|
|
@@ -784,9 +786,9 @@ p0t.x * p1t.y - p0t.y * p1t.x
|
|
|
784
786
|
);
|
|
785
787
|
|
|
786
788
|
#ifdef DEPTH_QUERY_MODE
|
|
787
|
-
vec3
|
|
789
|
+
vec3 sF = abs(vec3(p1t.x * p2t.y, p2t.x * p0t.y, p0t.x * p1t.y))
|
|
788
790
|
+ abs(vec3(p1t.y * p2t.x, p2t.y * p0t.x, p0t.y * p1t.x));
|
|
789
|
-
e = mix(e, vec3(0.0), lessThanEqual(abs(e),
|
|
791
|
+
e = mix(e, vec3(0.0), lessThanEqual(abs(e), sF * 1e-6));
|
|
790
792
|
#endif
|
|
791
793
|
|
|
792
794
|
|
|
@@ -799,19 +801,19 @@ float det = e.x + e.y + e.z;
|
|
|
799
801
|
if (det == 0.0) return ti;
|
|
800
802
|
#endif
|
|
801
803
|
|
|
802
|
-
p0t.z *=
|
|
803
|
-
p1t.z *=
|
|
804
|
-
p2t.z *=
|
|
805
|
-
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);
|
|
806
808
|
|
|
807
809
|
|
|
808
|
-
if (abs(
|
|
810
|
+
if (abs(sw) > abs(tMax * det)) {
|
|
809
811
|
return ti;
|
|
810
812
|
}
|
|
811
813
|
|
|
812
|
-
float
|
|
813
|
-
ti.t =
|
|
814
|
-
ti.barycentric = e *
|
|
814
|
+
float tN = 1. / det;
|
|
815
|
+
ti.t = sw * tN;
|
|
816
|
+
ti.barycentric = e * tN;
|
|
815
817
|
|
|
816
818
|
return ti;
|
|
817
819
|
}
|
|
@@ -822,18 +824,18 @@ vec3 max;
|
|
|
822
824
|
};
|
|
823
825
|
|
|
824
826
|
|
|
825
|
-
vec3
|
|
827
|
+
vec3 fo(vec3 d) {
|
|
826
828
|
#ifdef DEPTH_QUERY_MODE
|
|
827
|
-
vec3
|
|
828
|
-
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;
|
|
829
831
|
#else
|
|
830
832
|
return 1.0 / d;
|
|
831
833
|
#endif
|
|
832
834
|
}
|
|
833
835
|
|
|
834
|
-
vec3
|
|
836
|
+
vec3 fk(vec3 gr, vec3 o) {
|
|
835
837
|
#ifdef DEPTH_QUERY_MODE
|
|
836
|
-
return abs(
|
|
838
|
+
return abs(gr) * max(vec3(1.0), abs(o)) * 1e-6;
|
|
837
839
|
#else
|
|
838
840
|
return vec3(0.0);
|
|
839
841
|
#endif
|
|
@@ -841,21 +843,21 @@ return vec3(0.0);
|
|
|
841
843
|
|
|
842
844
|
|
|
843
845
|
|
|
844
|
-
float
|
|
846
|
+
float cU(vec3 o, vec3 d, vec3 xq, vec3 xp, float tMax) {
|
|
845
847
|
#ifdef DEPTH_QUERY_MODE
|
|
846
|
-
vec3
|
|
847
|
-
vec3
|
|
848
|
-
vec3
|
|
849
|
-
vec3
|
|
848
|
+
vec3 gr = fo(d);
|
|
849
|
+
vec3 wG = (xq - o) * gr;
|
|
850
|
+
vec3 wI = (xp - o) * gr;
|
|
851
|
+
vec3 padding = fk(gr, o);
|
|
850
852
|
#else
|
|
851
|
-
vec3
|
|
852
|
-
vec3
|
|
853
|
-
vec3
|
|
853
|
+
vec3 wG = (xq - o) / d;
|
|
854
|
+
vec3 wI = (xp - o) / d;
|
|
855
|
+
vec3 padding = vec3(0.0);
|
|
854
856
|
#endif
|
|
855
|
-
vec3
|
|
856
|
-
vec3
|
|
857
|
-
float t0 = max(
|
|
858
|
-
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));
|
|
859
861
|
|
|
860
862
|
return (t0 > t1 || t0 > tMax) ? -1.0 : (t0 > 0.0 ? t0 : t1);
|
|
861
863
|
}
|
|
@@ -864,12 +866,12 @@ int maxDimension(vec3 v) {
|
|
|
864
866
|
return v.x > v.y ? (v.x > v.z ? 0 : 2) : (v.y > v.z ? 1 : 2);
|
|
865
867
|
}
|
|
866
868
|
|
|
867
|
-
vec3
|
|
869
|
+
vec3 nk(vec3 d, int eq) {
|
|
868
870
|
|
|
869
871
|
|
|
870
|
-
if (
|
|
872
|
+
if (eq == 0) {
|
|
871
873
|
return vec3(-d.y, -d.z, 1.0) / d.x;
|
|
872
|
-
} else if (
|
|
874
|
+
} else if (eq == 1) {
|
|
873
875
|
return vec3(-d.z, -d.x, 1.0) / d.y;
|
|
874
876
|
} else {
|
|
875
877
|
return vec3(-d.x, -d.y, 1.0) / d.z;
|
|
@@ -877,50 +879,50 @@ return vec3(-d.x, -d.y, 1.0) / d.z;
|
|
|
877
879
|
}
|
|
878
880
|
|
|
879
881
|
|
|
880
|
-
void
|
|
882
|
+
void intersectScene(in Ray ray, inout SurfaceInteraction si, bool doubleSided) {
|
|
881
883
|
si.hit = false;
|
|
882
884
|
|
|
883
885
|
if (isEmptyScene) {
|
|
884
886
|
return;
|
|
885
887
|
}
|
|
886
888
|
|
|
887
|
-
int
|
|
888
|
-
vec3
|
|
889
|
-
int
|
|
889
|
+
int eq = maxDimension(abs(ray.d));
|
|
890
|
+
vec3 gY = nk(ray.d, eq);
|
|
891
|
+
int ap;
|
|
890
892
|
|
|
891
893
|
${getBVHTraverseCode(glsl `
|
|
892
894
|
si.triangleIndex = triangleIndex;
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
895
|
+
mk = tri;
|
|
896
|
+
hS = faceNormal;
|
|
897
|
+
aC = hit.barycentric;
|
|
898
|
+
hK = index;
|
|
899
|
+
sj = true;
|
|
900
|
+
ap = bY;
|
|
899
901
|
`)}
|
|
900
902
|
|
|
901
|
-
if (
|
|
902
|
-
si.instanceIndex =
|
|
903
|
-
si.materialIndex = int(
|
|
903
|
+
if (sj) {
|
|
904
|
+
si.instanceIndex = ap;
|
|
905
|
+
si.materialIndex = int(ah(floatBitsToInt(bF(ap * ${INSTANCE_VEC4_STRIDE}).z)).x);
|
|
904
906
|
|
|
905
|
-
|
|
907
|
+
hH(si, mk, aC, hK);
|
|
906
908
|
mat4 l2w = mat4(
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
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)
|
|
911
913
|
);
|
|
912
914
|
mat4 w2l = mat4(
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
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)
|
|
917
919
|
);
|
|
918
|
-
mat3
|
|
919
|
-
si.faceNormal = normalize(
|
|
920
|
-
si.vertexNormal = normalize(
|
|
921
|
-
si.normal = normalize(
|
|
922
|
-
#ifdef
|
|
923
|
-
si.coatNormal = 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
|
+
#ifdef USE_COAT_NORMAL_FRAMES
|
|
925
|
+
si.coatNormal = normalize(aH * si.coatNormal);
|
|
924
926
|
#endif
|
|
925
927
|
#ifdef USE_TANGENT
|
|
926
928
|
if (dot(si.tangent, si.tangent) > 0.0) {
|
|
@@ -937,7 +939,7 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
|
|
|
937
939
|
}
|
|
938
940
|
|
|
939
941
|
|
|
940
|
-
void
|
|
942
|
+
void intersectSceneBevel(in Ray ray, inout SurfaceInteraction si, int instanceIndex, float maxDistance) {
|
|
941
943
|
si.hit = false;
|
|
942
944
|
|
|
943
945
|
if (isEmptyScene) {
|
|
@@ -945,46 +947,46 @@ return;
|
|
|
945
947
|
}
|
|
946
948
|
|
|
947
949
|
bool doubleSided = true;
|
|
948
|
-
int
|
|
949
|
-
vec3
|
|
950
|
-
int
|
|
950
|
+
int eq = maxDimension(abs(ray.d));
|
|
951
|
+
vec3 gY = nk(ray.d, eq);
|
|
952
|
+
int ap;
|
|
951
953
|
|
|
952
954
|
${getBVHTraverseCode(glsl `
|
|
953
955
|
si.triangleIndex = triangleIndex;
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
956
|
+
mk = tri;
|
|
957
|
+
hS = faceNormal;
|
|
958
|
+
aC = hit.barycentric;
|
|
959
|
+
hK = index;
|
|
960
|
+
sj = true;
|
|
961
|
+
ap = bY;
|
|
960
962
|
`, glsl `
|
|
961
|
-
if (
|
|
963
|
+
if (bY != instanceIndex) {
|
|
962
964
|
continue;
|
|
963
965
|
}
|
|
964
966
|
`, 'maxDistance')}
|
|
965
967
|
|
|
966
|
-
if (
|
|
967
|
-
si.instanceIndex =
|
|
968
|
-
si.materialIndex = int(
|
|
969
|
-
|
|
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);
|
|
970
972
|
mat4 l2w = mat4(
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
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)
|
|
975
977
|
);
|
|
976
978
|
mat4 w2l = mat4(
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
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)
|
|
981
983
|
);
|
|
982
|
-
mat3
|
|
983
|
-
si.faceNormal = normalize(
|
|
984
|
-
si.vertexNormal = normalize(
|
|
985
|
-
si.normal = normalize(
|
|
986
|
-
#ifdef
|
|
987
|
-
si.coatNormal = 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
|
+
#ifdef USE_COAT_NORMAL_FRAMES
|
|
989
|
+
si.coatNormal = normalize(aH * si.coatNormal);
|
|
988
990
|
#endif
|
|
989
991
|
#ifdef USE_TANGENT
|
|
990
992
|
if (dot(si.tangent, si.tangent) > 0.0) {
|
|
@@ -1000,35 +1002,35 @@ si.position = (l2w * vec4(si.position, 1.0)).xyz;
|
|
|
1000
1002
|
}
|
|
1001
1003
|
}
|
|
1002
1004
|
|
|
1003
|
-
bool
|
|
1005
|
+
bool intersectSceneShadow(in Ray ray, float lightDistance, int kn) {
|
|
1004
1006
|
|
|
1005
1007
|
if (isEmptyScene) {
|
|
1006
1008
|
return false;
|
|
1007
1009
|
}
|
|
1008
1010
|
|
|
1009
1011
|
bool doubleSided = true;
|
|
1010
|
-
int
|
|
1011
|
-
vec3
|
|
1012
|
+
int eq = maxDimension(abs(ray.d));
|
|
1013
|
+
vec3 gY = nk(ray.d, eq);
|
|
1012
1014
|
|
|
1013
1015
|
${getBVHTraverseCode(glsl `
|
|
1014
1016
|
|
|
1015
1017
|
|
|
1016
|
-
bool
|
|
1018
|
+
bool jS = true;
|
|
1017
1019
|
vec3 barycentric = hit.barycentric;
|
|
1018
1020
|
vec3 position = barycentric.x * tri.p0 + barycentric.y * tri.p1 + barycentric.z * tri.p2;
|
|
1019
1021
|
|
|
1020
|
-
if (
|
|
1022
|
+
if (jS) {
|
|
1021
1023
|
#ifdef HAS_ALPHA
|
|
1022
|
-
int materialIndex = int(
|
|
1023
|
-
ivec2 i0 =
|
|
1024
|
-
ivec2 i1 =
|
|
1025
|
-
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);
|
|
1026
1028
|
ivec4 m0 = ivec4(texelFetch(materialIndexBuffer, i0, 0));
|
|
1027
1029
|
ivec4 m1 = ivec4(texelFetch(materialIndexBuffer, i1, 0));
|
|
1028
1030
|
ivec4 m2 = ivec4(texelFetch(materialIndexBuffer, i2, 0));
|
|
1029
1031
|
|
|
1030
1032
|
if (m0.x > 0 || m1.x > 0 || m2.x > 0) {
|
|
1031
|
-
materialIndex =
|
|
1033
|
+
materialIndex = fF(m0, m1, m2, barycentric);
|
|
1032
1034
|
}
|
|
1033
1035
|
|
|
1034
1036
|
int ii = materialIndex * MAT_DATA_SIZE;
|
|
@@ -1042,12 +1044,12 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
|
|
|
1042
1044
|
vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
|
|
1043
1045
|
vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
|
|
1044
1046
|
vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
|
|
1045
|
-
vec4
|
|
1046
|
-
int uvProjection = int(
|
|
1047
|
+
vec4 mw = fetchMatData(ii + MAT_ROW_UV);
|
|
1048
|
+
int uvProjection = int(mw.r);
|
|
1047
1049
|
if (uvProjection > 0) {
|
|
1048
|
-
uv =
|
|
1050
|
+
uv = gU(uvProjection, position, hS, mw.zw);
|
|
1049
1051
|
} else {
|
|
1050
|
-
uv *=
|
|
1052
|
+
uv *= mw.zw;
|
|
1051
1053
|
}
|
|
1052
1054
|
|
|
1053
1055
|
alpha *= sampleMap(diffuseMapIndex, uv).a;
|
|
@@ -1061,32 +1063,32 @@ vec2 uv0 = texelFetch(uvBuffer, i0, 0).xy;
|
|
|
1061
1063
|
vec2 uv1 = texelFetch(uvBuffer, i1, 0).xy;
|
|
1062
1064
|
vec2 uv2 = texelFetch(uvBuffer, i2, 0).xy;
|
|
1063
1065
|
vec2 uv = barycentric.x * uv0 + barycentric.y * uv1 + barycentric.z * uv2;
|
|
1064
|
-
vec4
|
|
1065
|
-
int uvProjection = int(
|
|
1066
|
+
vec4 mw = fetchMatData(ii + MAT_ROW_UV);
|
|
1067
|
+
int uvProjection = int(mw.r);
|
|
1066
1068
|
if (uvProjection > 0) {
|
|
1067
|
-
uv =
|
|
1069
|
+
uv = gU(uvProjection, position, hS, mw.zw);
|
|
1068
1070
|
} else {
|
|
1069
|
-
uv *=
|
|
1071
|
+
uv *= mw.zw;
|
|
1070
1072
|
}
|
|
1071
1073
|
alpha *= sampleMap(alphaMapIndex, uv).g;
|
|
1072
1074
|
}
|
|
1073
1075
|
#endif
|
|
1074
1076
|
float alphaCutoff = fetchMatData(ii + MAT_ROW_STANDALONE_MAPS).a;
|
|
1075
|
-
alpha =
|
|
1077
|
+
alpha = mb(
|
|
1076
1078
|
alpha, int(fetchMatData(ii + MAT_ROW_ALPHA).w), alphaCutoff
|
|
1077
1079
|
);
|
|
1078
|
-
if (
|
|
1080
|
+
if (eC(0u) > alpha) {
|
|
1079
1081
|
|
|
1080
1082
|
tMax = min(max(lightDistance, 0.0), RAY_MAX_DISTANCE);
|
|
1081
|
-
|
|
1083
|
+
jS = false;
|
|
1082
1084
|
}
|
|
1083
1085
|
#endif
|
|
1084
1086
|
}
|
|
1085
|
-
if (
|
|
1087
|
+
if (jS) {
|
|
1086
1088
|
return true;
|
|
1087
1089
|
}
|
|
1088
1090
|
`, glsl `
|
|
1089
|
-
if (triangleIndex ==
|
|
1091
|
+
if (triangleIndex == kn) {
|
|
1090
1092
|
continue;
|
|
1091
1093
|
}
|
|
1092
1094
|
`, 'min(max(lightDistance, 0.0), RAY_MAX_DISTANCE)')}
|