@meimu/mutracer 0.1.5 → 0.3.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 +10 -7
- package/THIRD_PARTY_NOTICES.md +13 -8
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +12316 -9228
- package/docs/api.md +232 -21
- package/docs/caustics.md +80 -0
- package/docs/denoising.md +30 -15
- package/docs/materials.md +6 -5
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +73 -1
- package/docs/technical/continuous-spectrum.md +93 -0
- package/docs/threejs.md +14 -5
- package/docs/updates.md +46 -2
- package/docs/viewer-checklist.md +65 -0
- package/docs/viewer.md +15 -8
- package/lib/Display.d.ts +13 -2
- package/lib/Display.js +28 -7
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +4 -0
- package/lib/Engine.js +99 -37
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +98 -15
- package/lib/Render.js +275 -27
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +11 -1
- package/lib/RenderLoop.js +120 -15
- 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 +11 -0
- package/lib/renderer/GPUTraceQueue.js +33 -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 +36 -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/WGPUCausticLightPass.d.ts +48 -0
- package/lib/renderer/WGPUCausticLightPass.js +217 -0
- package/lib/renderer/WGPUCausticLightPass.js.map +1 -0
- 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/WGPUPhotonMap.d.ts +37 -0
- package/lib/renderer/WGPUPhotonMap.js +191 -0
- package/lib/renderer/WGPUPhotonMap.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +13 -1
- package/lib/renderer/WGPURayTraceOutput.js +132 -29
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +83 -56
- package/lib/renderer/WGPURayTracePass.js +884 -837
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
- package/lib/renderer/WGPURenderingPipeline.js +297 -82
- 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 +7 -4
- package/lib/renderer/WebGLFullQuadPass.js +22 -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 +18 -3
- package/lib/renderer/WebGLRayTracePass.js +121 -9
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +126 -22
- 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 +6 -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/causticDiagnostics.d.ts +31 -0
- package/lib/renderer/causticDiagnostics.js +5 -0
- package/lib/renderer/causticDiagnostics.js.map +1 -0
- package/lib/renderer/causticEmission.d.ts +10 -0
- package/lib/renderer/causticEmission.js +40 -0
- package/lib/renderer/causticEmission.js.map +1 -0
- package/lib/renderer/causticUniform.d.ts +12 -0
- package/lib/renderer/causticUniform.js +22 -0
- package/lib/renderer/causticUniform.js.map +1 -0
- package/lib/renderer/caustics.d.ts +16 -0
- package/lib/renderer/caustics.js +93 -0
- package/lib/renderer/caustics.js.map +1 -0
- package/lib/renderer/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/emissiveLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +35 -0
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +73 -67
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +432 -434
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +160 -157
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +802 -802
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +72 -67
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +94 -76
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +143 -120
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +21 -18
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampling.glsl.js +91 -94
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/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.d.ts +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +271 -248
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +37 -32
- 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 +22 -18
- package/lib/renderer/lightSampling.js +135 -62
- 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 +7 -3
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +4 -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/researchTransport.d.ts +31 -0
- package/lib/renderer/researchTransport.js +5 -0
- package/lib/renderer/researchTransport.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +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 +119 -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/spectrum.d.ts +21 -0
- package/lib/renderer/spectrum.js +154 -0
- package/lib/renderer/spectrum.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/webglLightSampling.d.ts +39 -0
- package/lib/renderer/webglLightSampling.js +15 -0
- package/lib/renderer/webglLightSampling.js.map +1 -0
- 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 +22 -0
- package/lib/renderer/wgpuShaderSource.js +33 -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/causticLight.compute.d.ts +6 -0
- package/lib/renderer/wgsl/causticLight.compute.js +537 -0
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js +102 -0
- package/lib/renderer/wgsl/chunks/background.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +12 -0
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +62 -0
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +41 -35
- 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 +747 -704
- 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 +4 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +83 -79
- 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 +137 -137
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +3 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +52 -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 -144
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +269 -245
- 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 +27 -14
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -95
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -1
- 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/photonMap.compute.d.ts +29 -0
- package/lib/renderer/wgsl/photonMap.compute.js +352 -0
- package/lib/renderer/wgsl/photonMap.compute.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.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 +25 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +645 -500
- 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 +36 -3
- package/lib/settings/render.js +4 -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 +20 -7
- 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 +5 -0
- package/package.json +33 -7
- package/lib/renderer/texturesFromMaterials.d.ts +0 -6
- package/lib/renderer/texturesFromMaterials.js.map +0 -1
package/lib/renderer/bvhAccel.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { readMeshInstance } from './
|
|
2
|
-
// Bounding volume hierarchies of scene geometry (BLAS) and mesh instances
|
|
3
|
-
// (TLAS), built with the binned SAH builder in ./binnedSahBvh and written
|
|
4
|
-
// directly in the BVH2 layout read by the traversal shaders.
|
|
5
|
-
import { Attribute } from '../scene/Geometry.js';
|
|
1
|
+
import { readMeshInstance, meshInstancesLength } from './packedMeshInstances.js';
|
|
6
2
|
import { mat4, vec3 } from '../math.js';
|
|
7
3
|
import { buildBinnedSahBvh, layoutBvh2 } from './binnedSahBvh.js';
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import { read, write } from '../math/access.js';
|
|
5
|
+
import { attributeLength, attributeValue, indexStorage } from '../scene/attributeData.js';
|
|
6
|
+
import { Box3 } from './Box3.js';
|
|
7
|
+
import { quantizeDisplacementRange } from './displacementRange.js';
|
|
8
|
+
export { Box3 } from './Box3.js';
|
|
10
9
|
export const INSTANCE_VEC4_STRIDE = 10;
|
|
11
10
|
export const INSTANCE_WORD_STRIDE = INSTANCE_VEC4_STRIDE * 4;
|
|
12
11
|
const BLAS_LAYOUT_SHIFT = 30;
|
|
@@ -23,17 +22,9 @@ function encodeBlasOffset(offset, layout) {
|
|
|
23
22
|
}
|
|
24
23
|
return (offset | (blasLayoutCodes[layout] << BLAS_LAYOUT_SHIFT)) | 0;
|
|
25
24
|
}
|
|
26
|
-
export class Box3 {
|
|
27
|
-
min;
|
|
28
|
-
max;
|
|
29
|
-
constructor() {
|
|
30
|
-
this.min = [Infinity, Infinity, Infinity];
|
|
31
|
-
this.max = [-Infinity, -Infinity, -Infinity];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
25
|
function unionBounds(bounds, a, b) {
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
vec3.min(bounds.min, a.min, b.min);
|
|
27
|
+
vec3.max(bounds.max, a.max, b.max);
|
|
37
28
|
return bounds;
|
|
38
29
|
}
|
|
39
30
|
// Keep a bounded specialization range for unusually deep hierarchies while
|
|
@@ -139,16 +130,17 @@ export function emptyBLAS() {
|
|
|
139
130
|
*/
|
|
140
131
|
export function buildBLAS(geometry, displacementScale = 0, trianglesDisplacement) {
|
|
141
132
|
const position = geometry.position;
|
|
142
|
-
const
|
|
143
|
-
if (!position || !
|
|
133
|
+
const indexAttribute = geometry.indices;
|
|
134
|
+
if (!position || !indexAttribute || !position.array.length) {
|
|
144
135
|
return emptyBvh(false);
|
|
145
136
|
}
|
|
137
|
+
const indices = indexStorage(indexAttribute.array);
|
|
146
138
|
const positions = position.array;
|
|
147
139
|
const stride = position.itemSize;
|
|
148
140
|
const normal = trianglesDisplacement ? geometry.normal : undefined;
|
|
149
141
|
const normals = normal?.array;
|
|
150
142
|
const normalStride = normal?.itemSize ?? 0;
|
|
151
|
-
const triangleCount = Math.floor(indices
|
|
143
|
+
const triangleCount = Math.floor(attributeLength(indices) / 3);
|
|
152
144
|
const aabbs = new Float32Array(triangleCount * 6);
|
|
153
145
|
const triangles = new Uint32Array(triangleCount);
|
|
154
146
|
let count = 0;
|
|
@@ -162,7 +154,7 @@ export function buildBLAS(geometry, displacementScale = 0, trianglesDisplacement
|
|
|
162
154
|
maxHeight = displacementScale;
|
|
163
155
|
}
|
|
164
156
|
}
|
|
165
|
-
if (triangleBounds(positions, stride, normals, normalStride, indices
|
|
157
|
+
if (triangleBounds(positions, stride, normals, normalStride, attributeValue(indices, t * 3), attributeValue(indices, t * 3 + 1), attributeValue(indices, t * 3 + 2), minHeight, maxHeight, aabbs, count * 6)) {
|
|
166
158
|
triangles[count++] = t;
|
|
167
159
|
}
|
|
168
160
|
}
|
|
@@ -175,6 +167,7 @@ export function buildBLAS(geometry, displacementScale = 0, trianglesDisplacement
|
|
|
175
167
|
const floats = new Float32Array(buffer);
|
|
176
168
|
const ints = new Int32Array(buffer);
|
|
177
169
|
let buildSurfaceArea = 0;
|
|
170
|
+
const triangleIds = [];
|
|
178
171
|
for (let k = 0; k < order.length; k++) {
|
|
179
172
|
const node = order[k];
|
|
180
173
|
const o = offsets[node] * 4, b = node * 6;
|
|
@@ -197,9 +190,11 @@ export function buildBLAS(geometry, displacementScale = 0, trianglesDisplacement
|
|
|
197
190
|
for (let i = 0; i < prims; i++) {
|
|
198
191
|
const t = triangles[primIndices[leftFirst[node] + i]];
|
|
199
192
|
const e = o + 8 + i * 4;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
ints[e
|
|
193
|
+
if (trianglesDisplacement)
|
|
194
|
+
triangleIds.push(e / 4, t);
|
|
195
|
+
ints[e] = attributeValue(indices, t * 3);
|
|
196
|
+
ints[e + 1] = attributeValue(indices, t * 3 + 1);
|
|
197
|
+
ints[e + 2] = attributeValue(indices, t * 3 + 2);
|
|
203
198
|
// Pack minH, maxH to one channel.
|
|
204
199
|
ints[e + 3] = trianglesDisplacement
|
|
205
200
|
? packH(trianglesDisplacement[t * 2], trianglesDisplacement[t * 2 + 1])
|
|
@@ -208,6 +203,7 @@ export function buildBLAS(geometry, displacementScale = 0, trianglesDisplacement
|
|
|
208
203
|
}
|
|
209
204
|
return {
|
|
210
205
|
builder: 'builtin',
|
|
206
|
+
triangleIds: trianglesDisplacement ? new Uint32Array(triangleIds) : undefined,
|
|
211
207
|
buildSurfaceArea,
|
|
212
208
|
maxDepth,
|
|
213
209
|
maxLeafPrimitives,
|
|
@@ -235,16 +231,22 @@ function instanceBounds(instance, out, o) {
|
|
|
235
231
|
const displacementScale = instance.displacementScale;
|
|
236
232
|
if (displacementScale) {
|
|
237
233
|
const m = instance.transform;
|
|
238
|
-
padX = Math.max(0, displacementScale * Math.hypot(m
|
|
239
|
-
padY = Math.max(0, displacementScale * Math.hypot(m
|
|
240
|
-
padZ = Math.max(0, displacementScale * Math.hypot(m
|
|
234
|
+
padX = Math.max(0, displacementScale * Math.hypot(read(m, 0), read(m, 1), read(m, 2)));
|
|
235
|
+
padY = Math.max(0, displacementScale * Math.hypot(read(m, 4), read(m, 5), read(m, 6)));
|
|
236
|
+
padZ = Math.max(0, displacementScale * Math.hypot(read(m, 8), read(m, 9), read(m, 10)));
|
|
241
237
|
}
|
|
242
|
-
out[o] = min
|
|
243
|
-
out[o + 1] = min
|
|
244
|
-
out[o + 2] = min
|
|
245
|
-
out[o + 3] = max
|
|
246
|
-
out[o + 4] = max
|
|
247
|
-
out[o + 5] = max
|
|
238
|
+
out[o] = read(min, 0) - padX;
|
|
239
|
+
out[o + 1] = read(min, 1) - padY;
|
|
240
|
+
out[o + 2] = read(min, 2) - padZ;
|
|
241
|
+
out[o + 3] = read(max, 0) + padX;
|
|
242
|
+
out[o + 4] = read(max, 1) + padY;
|
|
243
|
+
out[o + 5] = read(max, 2) + padZ;
|
|
244
|
+
}
|
|
245
|
+
function writeInstanceColor(output, offset, instance) {
|
|
246
|
+
const color = instance.color;
|
|
247
|
+
output[offset] = color ? color[0] : 1;
|
|
248
|
+
output[offset + 1] = color ? color[1] : 1;
|
|
249
|
+
output[offset + 2] = color ? color[2] : 1;
|
|
248
250
|
}
|
|
249
251
|
function writeInstanceRecord(instanceInts, instanceFloats, targetIndex, instance, placement) {
|
|
250
252
|
const offset = targetIndex * INSTANCE_WORD_STRIDE;
|
|
@@ -252,13 +254,36 @@ function writeInstanceRecord(instanceInts, instanceFloats, targetIndex, instance
|
|
|
252
254
|
instanceInts[offset + 1] = placement.vertexOffsets[instance.blasIndex];
|
|
253
255
|
instanceInts[offset + 2] = instance.materialsIndices[0] || 0;
|
|
254
256
|
instanceFloats[offset + 3] = instance.displacementScale || 0;
|
|
255
|
-
instanceFloats
|
|
257
|
+
writeInstanceColor(instanceFloats, offset + 36, instance);
|
|
256
258
|
instanceFloats[offset + 39] = 0;
|
|
257
|
-
const inverse = mat4.invert(
|
|
259
|
+
const inverse = mat4.invert(new Float64Array(16), instance.transform);
|
|
258
260
|
for (let i = 0; i < 16; i++) {
|
|
259
261
|
instanceFloats[offset + 4 + i] = inverse[i];
|
|
260
|
-
instanceFloats[offset + 20 + i] = instance.transform
|
|
262
|
+
instanceFloats[offset + 20 + i] = read(instance.transform, i);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Hardware adapters use the same instance/material/matrix packing without a
|
|
266
|
+
// software hierarchy. Offsets are primitive offsets in their indexed geometry.
|
|
267
|
+
export function packLinearInstances(instances, primitiveOffsets, vertexOffsets) {
|
|
268
|
+
const buffer = new ArrayBuffer(meshInstancesLength(instances) * INSTANCE_WORD_STRIDE * 4);
|
|
269
|
+
const words = new Int32Array(buffer), floats = new Float32Array(buffer);
|
|
270
|
+
const placement = { blasOffsets: primitiveOffsets, vertexOffsets,
|
|
271
|
+
layouts: primitiveOffsets.map(() => 'bvh2') };
|
|
272
|
+
for (let i = 0; i < meshInstancesLength(instances); i++) {
|
|
273
|
+
writeInstanceRecord(words, floats, i, readMeshInstance(instances, i), placement);
|
|
261
274
|
}
|
|
275
|
+
return buffer;
|
|
276
|
+
}
|
|
277
|
+
/** Repack only selected source-order instance slots for hardware adapters. */
|
|
278
|
+
export function refitLinearInstances(buffer, instances, primitiveOffsets, vertexOffsets, dirty) {
|
|
279
|
+
const words = new Int32Array(buffer), floats = new Float32Array(buffer);
|
|
280
|
+
const placement = { blasOffsets: primitiveOffsets, vertexOffsets, layouts: primitiveOffsets.map(() => 'bvh2') };
|
|
281
|
+
const ranges = [];
|
|
282
|
+
for (const index of dirty) {
|
|
283
|
+
writeInstanceRecord(words, floats, index, readMeshInstance(instances, index), placement);
|
|
284
|
+
ranges.push({ offset: index * INSTANCE_WORD_STRIDE * 4, size: INSTANCE_WORD_STRIDE * 4 });
|
|
285
|
+
}
|
|
286
|
+
return mergeRefitRanges(ranges);
|
|
262
287
|
}
|
|
263
288
|
/**
|
|
264
289
|
* Builds a BVH2 TLAS over the instances. Leaves store
|
|
@@ -266,20 +291,20 @@ function writeInstanceRecord(instanceInts, instanceFloats, targetIndex, instance
|
|
|
266
291
|
* are written in leaf order to instancesBuffer.
|
|
267
292
|
*/
|
|
268
293
|
export function buildTLAS(instances, blases) {
|
|
269
|
-
if (!instances
|
|
294
|
+
if (!meshInstancesLength(instances))
|
|
270
295
|
return emptyBvh(true);
|
|
271
296
|
const placement = getBlasPlacement(blases);
|
|
272
|
-
const aabbs = new Float32Array(instances
|
|
273
|
-
for (let i = 0; i < instances
|
|
297
|
+
const aabbs = new Float32Array(meshInstancesLength(instances) * 6);
|
|
298
|
+
for (let i = 0; i < meshInstancesLength(instances); i++) {
|
|
274
299
|
instanceBounds(readMeshInstance(instances, i), aabbs, i * 6);
|
|
275
300
|
}
|
|
276
|
-
const bvh = buildBinnedSahBvh(aabbs, instances
|
|
301
|
+
const bvh = buildBinnedSahBvh(aabbs, meshInstancesLength(instances));
|
|
277
302
|
const { order, offsets, vec4Count, maxDepth, maxLeafPrimitives } = layoutBvh2(bvh);
|
|
278
303
|
const { bounds, leftFirst, primCount, primIndices } = bvh;
|
|
279
304
|
const buffer = new ArrayBuffer(vec4Count * 16);
|
|
280
305
|
const floats = new Float32Array(buffer);
|
|
281
306
|
const ints = new Int32Array(buffer);
|
|
282
|
-
const instancesBuffer = new ArrayBuffer(instances
|
|
307
|
+
const instancesBuffer = new ArrayBuffer(meshInstancesLength(instances) * INSTANCE_WORD_STRIDE * 4);
|
|
283
308
|
const instanceInts = new Int32Array(instancesBuffer);
|
|
284
309
|
const instanceFloats = new Float32Array(instancesBuffer);
|
|
285
310
|
let target = 0;
|
|
@@ -320,6 +345,47 @@ export function buildTLAS(instances, blases) {
|
|
|
320
345
|
instancesBuffer
|
|
321
346
|
};
|
|
322
347
|
}
|
|
348
|
+
/** Bounds transport for a platform BVH builder; same padding as buildTLAS. */
|
|
349
|
+
export function meshInstanceBounds(instances) {
|
|
350
|
+
const bounds = new Float32Array(meshInstancesLength(instances) * 6);
|
|
351
|
+
for (let i = 0; i < meshInstancesLength(instances); i++)
|
|
352
|
+
instanceBounds(readMeshInstance(instances, i), bounds, i * 6);
|
|
353
|
+
return bounds;
|
|
354
|
+
}
|
|
355
|
+
/** Pack a platform-built BVH2 hierarchy whose leaf x lane holds source indices. */
|
|
356
|
+
export function packBuiltTLAS(instances, blases, hierarchy) {
|
|
357
|
+
const count = meshInstancesLength(instances);
|
|
358
|
+
if (!count)
|
|
359
|
+
return emptyBvh(true);
|
|
360
|
+
const placement = getBlasPlacement(blases), words = new Int32Array(hierarchy.buffer);
|
|
361
|
+
const instancesBuffer = new ArrayBuffer(count * INSTANCE_WORD_STRIDE * 4);
|
|
362
|
+
const instanceInts = new Int32Array(instancesBuffer), instanceFloats = new Float32Array(instancesBuffer);
|
|
363
|
+
const stack = [0];
|
|
364
|
+
let target = 0;
|
|
365
|
+
while (stack.length) {
|
|
366
|
+
const node = stack.pop(), o = node * 4, child = words[o + 3];
|
|
367
|
+
if (child >= 0) {
|
|
368
|
+
stack.push(child);
|
|
369
|
+
stack.push(node + 2);
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
for (let i = 0; i < -child; i++) {
|
|
373
|
+
const e = o + 8 + i * 4, source = words[e];
|
|
374
|
+
if (source < 0 || source >= count || target >= count)
|
|
375
|
+
throw new Error('Invalid platform TLAS instance');
|
|
376
|
+
const instance = readMeshInstance(instances, source);
|
|
377
|
+
words[e] = target;
|
|
378
|
+
words[e + 1] = placement.blasOffsets[instance.blasIndex];
|
|
379
|
+
words[e + 2] = source;
|
|
380
|
+
words[e + 3] = 0;
|
|
381
|
+
writeInstanceRecord(instanceInts, instanceFloats, target++, instance, placement);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
if (target !== count)
|
|
385
|
+
throw new Error('Platform TLAS instance count mismatch');
|
|
386
|
+
hierarchy.instancesBuffer = instancesBuffer;
|
|
387
|
+
return hierarchy;
|
|
388
|
+
}
|
|
323
389
|
const tlasRefitMetadata = new WeakMap();
|
|
324
390
|
function getTLASRefitMetadata(flattened, ints) {
|
|
325
391
|
const cached = tlasRefitMetadata.get(flattened);
|
|
@@ -369,11 +435,19 @@ export function mergeRefitRanges(ranges) {
|
|
|
369
435
|
previous.size = Math.max(previous.size, range.offset + range.size - previous.offset);
|
|
370
436
|
}
|
|
371
437
|
else {
|
|
372
|
-
merged.push({
|
|
438
|
+
merged.push({ offset: range.offset, size: range.size });
|
|
373
439
|
}
|
|
374
440
|
}
|
|
375
441
|
return merged;
|
|
376
442
|
}
|
|
443
|
+
/** A transactional candidate shares immutable refit topology metadata. */
|
|
444
|
+
export function copyTLASForRefit(flattened) {
|
|
445
|
+
const next = { ...flattened, buffer: flattened.buffer.slice(0), instancesBuffer: flattened.instancesBuffer?.slice(0) };
|
|
446
|
+
if (flattened.buffer.byteLength && flattened.instancesBuffer) {
|
|
447
|
+
tlasRefitMetadata.set(next, getTLASRefitMetadata(flattened, new Int32Array(flattened.buffer)));
|
|
448
|
+
}
|
|
449
|
+
return next;
|
|
450
|
+
}
|
|
377
451
|
export function refitTLAS(flattened, instances, blases, dirtySourceIndices) {
|
|
378
452
|
if (!flattened.instancesBuffer || !flattened.buffer.byteLength) {
|
|
379
453
|
return { tlasRanges: [], instanceRanges: [] };
|
|
@@ -389,21 +463,21 @@ export function refitTLAS(flattened, instances, blases, dirtySourceIndices) {
|
|
|
389
463
|
}
|
|
390
464
|
function addInstanceBounds(bounds, instance) {
|
|
391
465
|
instanceBounds(instance, scratch, 0);
|
|
392
|
-
bounds.min
|
|
393
|
-
bounds.min
|
|
394
|
-
bounds.min
|
|
395
|
-
bounds.max
|
|
396
|
-
bounds.max
|
|
397
|
-
bounds.max
|
|
466
|
+
write(bounds.min, 0, Math.min(read(bounds.min, 0), scratch[0]));
|
|
467
|
+
write(bounds.min, 1, Math.min(read(bounds.min, 1), scratch[1]));
|
|
468
|
+
write(bounds.min, 2, Math.min(read(bounds.min, 2), scratch[2]));
|
|
469
|
+
write(bounds.max, 0, Math.max(read(bounds.max, 0), scratch[3]));
|
|
470
|
+
write(bounds.max, 1, Math.max(read(bounds.max, 1), scratch[4]));
|
|
471
|
+
write(bounds.max, 2, Math.max(read(bounds.max, 2), scratch[5]));
|
|
398
472
|
}
|
|
399
473
|
function writeNodeBounds(index, bounds) {
|
|
400
474
|
const base = index * 4;
|
|
401
|
-
floats[base] = bounds.min
|
|
402
|
-
floats[base + 1] = bounds.min
|
|
403
|
-
floats[base + 2] = bounds.min
|
|
404
|
-
floats[base + 4] = bounds.max
|
|
405
|
-
floats[base + 5] = bounds.max
|
|
406
|
-
floats[base + 6] = bounds.max
|
|
475
|
+
floats[base] = read(bounds.min, 0);
|
|
476
|
+
floats[base + 1] = read(bounds.min, 1);
|
|
477
|
+
floats[base + 2] = read(bounds.min, 2);
|
|
478
|
+
floats[base + 4] = read(bounds.max, 0);
|
|
479
|
+
floats[base + 5] = read(bounds.max, 1);
|
|
480
|
+
floats[base + 6] = read(bounds.max, 2);
|
|
407
481
|
}
|
|
408
482
|
function readNodeBounds(index) {
|
|
409
483
|
const base = index * 4;
|
|
@@ -543,13 +617,26 @@ function getBlasRefitData(buffer) {
|
|
|
543
617
|
return data;
|
|
544
618
|
}
|
|
545
619
|
/** Refit a BVH2 BLAS after vertex deformation, preserving topology. */
|
|
546
|
-
export function refitBLAS(flattened, geometry) {
|
|
620
|
+
export function refitBLAS(flattened, geometry, displacement) {
|
|
547
621
|
if ((flattened.layout ?? 'bvh2') !== 'bvh2' || !flattened.buffer.byteLength) {
|
|
548
622
|
return false;
|
|
549
623
|
}
|
|
550
624
|
const { offsets, vertices, postorder } = getBlasRefitData(flattened.buffer);
|
|
551
625
|
const floats = new Float32Array(flattened.buffer), ints = new Int32Array(flattened.buffer);
|
|
552
626
|
const positions = geometry.position.array, stride = geometry.position.itemSize;
|
|
627
|
+
const sourceTriangles = new Int32Array(displacement ? floats.length / 4 : 0).fill(-1);
|
|
628
|
+
const prism = new Float32Array(6);
|
|
629
|
+
if (displacement) {
|
|
630
|
+
// Leaf source IDs remain distinct even for duplicate index triples.
|
|
631
|
+
// Refuse old caches without this metadata before mutating their bounds.
|
|
632
|
+
const triangleIds = flattened.triangleIds;
|
|
633
|
+
if (!(triangleIds instanceof Uint32Array))
|
|
634
|
+
return false;
|
|
635
|
+
for (let i = 0; i < triangleIds.length; i += 2) {
|
|
636
|
+
const record = Number(triangleIds[i]);
|
|
637
|
+
sourceTriangles[record] = triangleIds[i + 1];
|
|
638
|
+
}
|
|
639
|
+
}
|
|
553
640
|
if (flattened.buildSurfaceArea == null) {
|
|
554
641
|
let area = 0;
|
|
555
642
|
for (const index of postorder) {
|
|
@@ -573,6 +660,25 @@ export function refitBLAS(flattened, geometry) {
|
|
|
573
660
|
maxY = Math.max(floats[left + 5], floats[right + 5]);
|
|
574
661
|
maxZ = Math.max(floats[left + 6], floats[right + 6]);
|
|
575
662
|
}
|
|
663
|
+
else if (displacement) {
|
|
664
|
+
for (let i = 0; i < -child; i++) {
|
|
665
|
+
const record = base + 8 + i * 4;
|
|
666
|
+
const ia = ints[record], ib = ints[record + 1], ic = ints[record + 2];
|
|
667
|
+
const triangle = sourceTriangles[record / 4];
|
|
668
|
+
if (triangle < 0)
|
|
669
|
+
return false;
|
|
670
|
+
const minimum = displacement.ranges[triangle * 2], maximum = displacement.ranges[triangle * 2 + 1];
|
|
671
|
+
if (!triangleBounds(positions, stride, displacement.normal, 3, ia, ib, ic, minimum * displacement.scale, maximum * displacement.scale, prism, 0))
|
|
672
|
+
return false;
|
|
673
|
+
ints[record + 3] = flattened.builder === 'tinybvh' ? quantizeDisplacementRange(minimum, maximum) : packH(minimum, maximum);
|
|
674
|
+
minX = Math.min(minX, prism[0]);
|
|
675
|
+
minY = Math.min(minY, prism[1]);
|
|
676
|
+
minZ = Math.min(minZ, prism[2]);
|
|
677
|
+
maxX = Math.max(maxX, prism[3]);
|
|
678
|
+
maxY = Math.max(maxY, prism[4]);
|
|
679
|
+
maxZ = Math.max(maxZ, prism[5]);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
576
682
|
else {
|
|
577
683
|
const start = offsets[index], end = start + 1 + vertices[start];
|
|
578
684
|
for (let i = start + 1; i < end; i++) {
|
|
@@ -606,16 +712,20 @@ export function updateTLASInstanceColors(flattened, instances, dirty) {
|
|
|
606
712
|
const metadata = getTLASRefitMetadata(flattened, new Int32Array(flattened.buffer));
|
|
607
713
|
const floats = new Float32Array(flattened.instancesBuffer);
|
|
608
714
|
const ranges = [];
|
|
609
|
-
for (const source of dirty)
|
|
610
|
-
|
|
715
|
+
for (const source of dirty) {
|
|
716
|
+
const leaves = metadata.leavesBySource.get(source);
|
|
717
|
+
if (!leaves)
|
|
718
|
+
continue;
|
|
719
|
+
for (const leaf of leaves) {
|
|
611
720
|
for (const entry of metadata.instancesByLeaf.get(leaf) ?? []) {
|
|
612
721
|
if (entry.source !== source)
|
|
613
722
|
continue;
|
|
614
723
|
const offset = entry.target * INSTANCE_WORD_STRIDE + 36;
|
|
615
|
-
floats
|
|
724
|
+
writeInstanceColor(floats, offset, readMeshInstance(instances, source));
|
|
616
725
|
ranges.push({ offset: offset * 4, size: 16 });
|
|
617
726
|
}
|
|
618
727
|
}
|
|
728
|
+
}
|
|
619
729
|
return mergeRefitRanges(ranges);
|
|
620
730
|
}
|
|
621
731
|
//# sourceMappingURL=bvhAccel.js.map
|