@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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Options for a batch sharing geometry and materials. */
|
|
2
|
+
export interface InstancedMeshOptions {
|
|
3
|
+
/** Required active instance count; a nonnegative integer. */
|
|
4
|
+
count: number;
|
|
5
|
+
/** Column-major local matrices, at least 16 * count floats. Default: count identity matrices. The array is retained. */
|
|
6
|
+
transforms?: Float32Array;
|
|
7
|
+
/** Linear RGB multipliers, at least 3 * count floats. Default undefined (white). The array is retained. */
|
|
8
|
+
colors?: Float32Array;
|
|
9
|
+
}
|
|
10
|
+
export default class InstanceState {
|
|
11
|
+
/** Local column-major matrices. Default: count identities. Call markTransformsUpdated after element edits. */
|
|
12
|
+
transforms: Float32Array;
|
|
13
|
+
/** Active prefix length. Default: constructor count; must fit transforms and colors. Changes are detected by engine.update. */
|
|
14
|
+
count: number;
|
|
15
|
+
/** Linear RGB multipliers, 3 floats per instance. Default undefined (white). Call markColorsUpdated after element edits. */
|
|
16
|
+
colors: Float32Array | undefined;
|
|
17
|
+
/** Advanced by any update notification. Default 0. */
|
|
18
|
+
get version(): number;
|
|
19
|
+
private _version;
|
|
20
|
+
private _transformVersion;
|
|
21
|
+
private _colorVersion;
|
|
22
|
+
constructor(options: InstancedMeshOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Notify edits to both local matrices and colors for all active instances.
|
|
25
|
+
* Advances version once. Does not notify geometry or material edits. Returns this.
|
|
26
|
+
* Use the dedicated methods for single-property edits to avoid unnecessary work.
|
|
27
|
+
*/
|
|
28
|
+
markUpdated(): this;
|
|
29
|
+
/**
|
|
30
|
+
* Notify edited local matrices, avoiding copies of unchanged colors.
|
|
31
|
+
* Defaults: start 0, count all active matrices from start. Returns this.
|
|
32
|
+
*/
|
|
33
|
+
markTransformsUpdated(start?: number, count?: number): this;
|
|
34
|
+
/**
|
|
35
|
+
* Notify edited colors without copying matrices or updating BVHs.
|
|
36
|
+
* Defaults: start 0, count all active instances from start. Returns this.
|
|
37
|
+
*/
|
|
38
|
+
markColorsUpdated(start?: number, count?: number): this;
|
|
39
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Shared instance storage and revisions; the browser facade delegates to this state.
|
|
2
|
+
export default class InstanceState {
|
|
3
|
+
/** Local column-major matrices. Default: count identities. Call markTransformsUpdated after element edits. */
|
|
4
|
+
transforms;
|
|
5
|
+
/** Active prefix length. Default: constructor count; must fit transforms and colors. Changes are detected by engine.update. */
|
|
6
|
+
count;
|
|
7
|
+
/** Linear RGB multipliers, 3 floats per instance. Default undefined (white). Call markColorsUpdated after element edits. */
|
|
8
|
+
colors;
|
|
9
|
+
/** Advanced by any update notification. Default 0. */
|
|
10
|
+
get version() { return this._version; }
|
|
11
|
+
_version = 0;
|
|
12
|
+
_transformVersion = 0;
|
|
13
|
+
_colorVersion = 0;
|
|
14
|
+
/** @internal */
|
|
15
|
+
get transformsVersion() { return this._transformVersion; }
|
|
16
|
+
/** @internal */
|
|
17
|
+
get colorsVersion() { return this._colorVersion; }
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.count = options.count;
|
|
20
|
+
this.transforms = options.transforms ?? new Float32Array(this.count * 16);
|
|
21
|
+
this.colors = options.colors;
|
|
22
|
+
this.validate();
|
|
23
|
+
if (!options.transforms)
|
|
24
|
+
for (let i = 0; i < this.count; i++) {
|
|
25
|
+
const offset = i * 16;
|
|
26
|
+
this.transforms[offset] = this.transforms[offset + 5] = this.transforms[offset + 10] = this.transforms[offset + 15] = 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Notify edits to both local matrices and colors for all active instances.
|
|
31
|
+
* Advances version once. Does not notify geometry or material edits. Returns this.
|
|
32
|
+
* Use the dedicated methods for single-property edits to avoid unnecessary work.
|
|
33
|
+
*/
|
|
34
|
+
markUpdated() {
|
|
35
|
+
this.validate();
|
|
36
|
+
this._transformVersion++;
|
|
37
|
+
this._colorVersion++;
|
|
38
|
+
this._version++;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Notify edited local matrices, avoiding copies of unchanged colors.
|
|
43
|
+
* Defaults: start 0, count all active matrices from start. Returns this.
|
|
44
|
+
*/
|
|
45
|
+
markTransformsUpdated(start = 0, count = this.count - start) {
|
|
46
|
+
this.validate();
|
|
47
|
+
if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {
|
|
48
|
+
throw new RangeError('Instance transform range must fit the active count.');
|
|
49
|
+
}
|
|
50
|
+
this._transformVersion++;
|
|
51
|
+
this._version++;
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Notify edited colors without copying matrices or updating BVHs.
|
|
56
|
+
* Defaults: start 0, count all active instances from start. Returns this.
|
|
57
|
+
*/
|
|
58
|
+
markColorsUpdated(start = 0, count = this.count - start) {
|
|
59
|
+
this.validate();
|
|
60
|
+
if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {
|
|
61
|
+
throw new RangeError('Instance color range must fit the active count.');
|
|
62
|
+
}
|
|
63
|
+
this._colorVersion++;
|
|
64
|
+
this._version++;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/** @internal */
|
|
68
|
+
validate() {
|
|
69
|
+
if (!Number.isInteger(this.count) || this.count < 0 || !(this.transforms instanceof Float32Array) || this.transforms.length < this.count * 16) {
|
|
70
|
+
throw new RangeError('InstancedMesh requires a nonnegative count and at least 16 * count Float32 transforms.');
|
|
71
|
+
}
|
|
72
|
+
if (this.colors !== undefined && (!(this.colors instanceof Float32Array) || this.colors.length < this.count * 3)) {
|
|
73
|
+
throw new RangeError('InstancedMesh colors must contain at least 3 * count Float32 values.');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=InstanceState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceState.js","sourceRoot":"","sources":["../../src/scene/InstanceState.ts"],"names":[],"mappings":"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","sourcesContent":["/** Options for a batch sharing geometry and materials. */\nexport interface InstancedMeshOptions {\n /** Required active instance count; a nonnegative integer. */\n count: number;\n /** Column-major local matrices, at least 16 * count floats. Default: count identity matrices. The array is retained. */\n transforms?: Float32Array;\n /** Linear RGB multipliers, at least 3 * count floats. Default undefined (white). The array is retained. */\n colors?: Float32Array;\n}\n\n// Shared instance storage and revisions; the browser facade delegates to this state.\nexport default class InstanceState {\n /** Local column-major matrices. Default: count identities. Call markTransformsUpdated after element edits. */\n transforms: Float32Array;\n /** Active prefix length. Default: constructor count; must fit transforms and colors. Changes are detected by engine.update. */\n count: number;\n /** Linear RGB multipliers, 3 floats per instance. Default undefined (white). Call markColorsUpdated after element edits. */\n colors: Float32Array | undefined;\n /** Advanced by any update notification. Default 0. */\n get version(): number { return this._version; }\n private _version = 0;\n private _transformVersion = 0;\n private _colorVersion = 0;\n /** @internal */\n get transformsVersion(): number { return this._transformVersion; }\n /** @internal */\n get colorsVersion(): number { return this._colorVersion; }\n\n constructor(options: InstancedMeshOptions) {\n this.count = options.count;\n this.transforms = options.transforms ?? new Float32Array(this.count * 16);\n this.colors = options.colors;\n this.validate();\n if (!options.transforms) for (let i = 0; i < this.count; i++) {\n const offset = i * 16;\n this.transforms[offset] = this.transforms[offset + 5] = this.transforms[offset + 10] = this.transforms[offset + 15] = 1;\n }\n }\n /**\n * Notify edits to both local matrices and colors for all active instances.\n * Advances version once. Does not notify geometry or material edits. Returns this.\n * Use the dedicated methods for single-property edits to avoid unnecessary work.\n */\n markUpdated(): this {\n this.validate();\n this._transformVersion++; this._colorVersion++; this._version++;\n return this;\n }\n /**\n * Notify edited local matrices, avoiding copies of unchanged colors.\n * Defaults: start 0, count all active matrices from start. Returns this.\n */\n markTransformsUpdated(start = 0, count = this.count - start): this {\n this.validate();\n if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {\n throw new RangeError('Instance transform range must fit the active count.');\n }\n this._transformVersion++; this._version++;\n return this;\n }\n /**\n * Notify edited colors without copying matrices or updating BVHs.\n * Defaults: start 0, count all active instances from start. Returns this.\n */\n markColorsUpdated(start = 0, count = this.count - start): this {\n this.validate();\n if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {\n throw new RangeError('Instance color range must fit the active count.');\n }\n this._colorVersion++; this._version++;\n return this;\n }\n /** @internal */\n validate() {\n if (!Number.isInteger(this.count) || this.count < 0 || !(this.transforms instanceof Float32Array) || this.transforms.length < this.count * 16) {\n throw new RangeError('InstancedMesh requires a nonnegative count and at least 16 * count Float32 transforms.');\n }\n if (this.colors !== undefined && (!(this.colors instanceof Float32Array) || this.colors.length < this.count * 3)) {\n throw new RangeError('InstancedMesh colors must contain at least 3 * count Float32 values.');\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Mesh from './Mesh.js';
|
|
2
2
|
import Geometry from './Geometry.js';
|
|
3
|
-
import OpenPBRMaterial from './OpenPBRMaterial.js';
|
|
3
|
+
import type OpenPBRMaterial from './OpenPBRMaterial.js';
|
|
4
4
|
/** Options for a batch sharing geometry and materials. */
|
|
5
5
|
export interface InstancedMeshOptions {
|
|
6
6
|
/** Required active instance count; a nonnegative integer. */
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import Mesh from './Mesh.js';
|
|
2
2
|
/** A batch of instances. World matrices are transform * transforms[i]. */
|
|
3
3
|
export default class InstancedMesh extends Mesh {
|
|
4
|
+
// A live view over the public own properties keeps engine snapshots independent.
|
|
5
|
+
/** @internal */
|
|
6
|
+
get instanceData() { return this; }
|
|
4
7
|
/** Local column-major matrices. Default: count identities. Call markTransformsUpdated after element edits. */
|
|
5
8
|
transforms;
|
|
6
9
|
/** Active prefix length. Default: constructor count; must fit transforms and colors. Changes are detected by engine.update. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstancedMesh.js","sourceRoot":"","sources":["../../src/scene/InstancedMesh.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"InstancedMesh.js","sourceRoot":"","sources":["../../src/scene/InstancedMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import Mesh from './Mesh.js';\nimport Geometry from './Geometry.js';\nimport type OpenPBRMaterial from './OpenPBRMaterial.js';\nimport type { InstanceData } from './MeshState.js';\n\n/** Options for a batch sharing geometry and materials. */\nexport interface InstancedMeshOptions {\n /** Required active instance count; a nonnegative integer. */\n count: number;\n /** Column-major local matrices, at least 16 * count floats. Default: count identity matrices. The array is retained. */\n transforms?: Float32Array;\n /** Linear RGB multipliers, at least 3 * count floats. Default undefined (white). The array is retained. */\n colors?: Float32Array;\n}\n\n/** A batch of instances. World matrices are transform * transforms[i]. */\nexport default class InstancedMesh extends Mesh {\n // A live view over the public own properties keeps engine snapshots independent.\n /** @internal */\n override get instanceData(): InstanceData { return this; }\n /** Local column-major matrices. Default: count identities. Call markTransformsUpdated after element edits. */\n transforms: Float32Array;\n /** Active prefix length. Default: constructor count; must fit transforms and colors. Changes are detected by engine.update. */\n count: number;\n /** Linear RGB multipliers, 3 floats per instance. Default undefined (white). Call markColorsUpdated after element edits. */\n colors: Float32Array | undefined;\n /** Advanced by any update notification. Default 0. */\n get version(): number { return this._version; }\n private _version = 0;\n private _transformVersion = 0;\n private _colorVersion = 0;\n /** @internal */\n get transformsVersion(): number { return this._transformVersion; }\n /** @internal */\n get colorsVersion(): number { return this._colorVersion; }\n\n constructor(geometry: Geometry, material: OpenPBRMaterial | OpenPBRMaterial[], options: InstancedMeshOptions) {\n super(geometry, material);\n this.count = options.count;\n this.transforms = options.transforms ?? new Float32Array(this.count * 16);\n this.colors = options.colors;\n this.validate();\n if (!options.transforms) for (let i = 0; i < this.count; i++) {\n const offset = i * 16;\n this.transforms[offset] = this.transforms[offset + 5] = this.transforms[offset + 10] = this.transforms[offset + 15] = 1;\n }\n }\n /**\n * Notify edits to both local matrices and colors for all active instances.\n * Advances version once. Does not notify geometry or material edits. Returns this.\n * Use the dedicated methods for single-property edits to avoid unnecessary work.\n */\n markUpdated(): this {\n this.validate();\n this._transformVersion++; this._colorVersion++; this._version++;\n return this;\n }\n /**\n * Notify edited local matrices, avoiding copies of unchanged colors.\n * Defaults: start 0, count all active matrices from start. Returns this.\n */\n markTransformsUpdated(start = 0, count = this.count - start): this {\n this.validate();\n if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {\n throw new RangeError('Instance transform range must fit the active count.');\n }\n this._transformVersion++; this._version++;\n return this;\n }\n /**\n * Notify edited colors without copying matrices or updating BVHs.\n * Defaults: start 0, count all active instances from start. Returns this.\n */\n markColorsUpdated(start = 0, count = this.count - start): this {\n this.validate();\n if (!Number.isInteger(start) || !Number.isInteger(count) || start < 0 || count < 0 || start + count > this.count) {\n throw new RangeError('Instance color range must fit the active count.');\n }\n this._colorVersion++; this._version++;\n return this;\n }\n /** @internal */\n validate() {\n if (!Number.isInteger(this.count) || this.count < 0 || !(this.transforms instanceof Float32Array) || this.transforms.length < this.count * 16) {\n throw new RangeError('InstancedMesh requires a nonnegative count and at least 16 * count Float32 transforms.');\n }\n if (this.colors !== undefined && (!(this.colors instanceof Float32Array) || this.colors.length < this.count * 3)) {\n throw new RangeError('InstancedMesh colors must contain at least 3 * count Float32 values.');\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import type { Vec2 } from '../types.js';
|
|
2
|
+
import type { ColorRGB } from '../types.js';
|
|
3
|
+
import type TextureState from './TextureState.js';
|
|
4
|
+
import type { ThinFilmMapChannel } from './thinFilmParameters.js';
|
|
5
|
+
export type UVProjection = 'none' | 'triplanar' | 'spherical' | 'cylindrical';
|
|
6
|
+
export type MaterialAlphaMode = 'auto' | 'opaque' | 'mask' | 'blend';
|
|
7
|
+
export type { MaterialTextureName } from './materialTextureNames.js';
|
|
8
|
+
export default class MaterialState {
|
|
9
|
+
/** Stable unsigned material ID, excluding 0xFFFFFFFF. Default process-unique monotonic ID; assign before committing the scene. */
|
|
10
|
+
get aovId(): number;
|
|
11
|
+
set aovId(value: number);
|
|
12
|
+
/** Creates a material. Omitted properties use their documented defaults. */
|
|
13
|
+
constructor(params?: MaterialStateParams);
|
|
14
|
+
/** Multiplier of diffuse reflection and metallic normal-incidence color; does not scale dielectric specular, transmission or subsurface. Default `1`. */
|
|
15
|
+
baseWeight: number;
|
|
16
|
+
/** Diffuse/metal color. Default `[0.8, 0.8, 0.8]`. */
|
|
17
|
+
baseColor: ColorRGB;
|
|
18
|
+
/** Oren-Nayar style roughness of the diffuse lobe. Default `0`. */
|
|
19
|
+
baseDiffuseRoughness: number;
|
|
20
|
+
/** `0` dielectric, `1` metal. Default `0`. */
|
|
21
|
+
baseMetalness: number;
|
|
22
|
+
/** Dielectric specular strength (via IOR) and overall metallic Fresnel multiplier. Default `1`. */
|
|
23
|
+
specularWeight: number;
|
|
24
|
+
/** Dielectric specular tint and metallic F82 near-grazing tint. Default `[1, 1, 1]`. */
|
|
25
|
+
specularColor: ColorRGB;
|
|
26
|
+
/** Microfacet roughness, `0` mirror to `1` rough; retains source perceptual roughness in `gltf` anisotropy mode. Default `0.3`. */
|
|
27
|
+
specularRoughness: number;
|
|
28
|
+
/** Index of refraction. Default `1.5`. */
|
|
29
|
+
specularIor: number;
|
|
30
|
+
/**
|
|
31
|
+
* GGX anisotropy strength, 0 to 1 (requires tangents); native OpenPBR or source glTF strength according to specularAnisotropyModel. Default `0`.
|
|
32
|
+
* @deprecated Use specularRoughnessAnisotropy.
|
|
33
|
+
*/
|
|
34
|
+
specularAnisotropy: number;
|
|
35
|
+
/** `1` makes the dielectric base fully transmissive (glass). Default `0`. */
|
|
36
|
+
transmissionWeight: number;
|
|
37
|
+
/** Transmission tint, or the medium color at `transmissionDepth`. Default `[1, 1, 1]`. */
|
|
38
|
+
transmissionColor: ColorRGB;
|
|
39
|
+
/** Depth at which `transmissionColor` is reached; `0` tints at the surface. Default `0`. */
|
|
40
|
+
transmissionDepth: number;
|
|
41
|
+
/** Volume scattering color of the transmissive medium. Default `[0, 0, 0]`. */
|
|
42
|
+
transmissionScatter: ColorRGB;
|
|
43
|
+
/** Henyey-Greenstein anisotropy of the medium, -1 to 1. Default `0`. */
|
|
44
|
+
transmissionScatterAnisotropy: number;
|
|
45
|
+
/** Nonnegative dispersion strength; values above `1` are supported. `0` disables wavelength-dependent refraction. Default `0`. */
|
|
46
|
+
transmissionDispersionScale: number;
|
|
47
|
+
/** Abbe number controlling dispersion. Default `20`. */
|
|
48
|
+
transmissionDispersionAbbeNumber: number;
|
|
49
|
+
/** Subsurface scattering weight. Default `0`. */
|
|
50
|
+
subsurfaceWeight: number;
|
|
51
|
+
/** Subsurface color. Default `[0.8, 0.8, 0.8]`. */
|
|
52
|
+
subsurfaceColor: ColorRGB;
|
|
53
|
+
/** Mean free path in scene units. Default `1`. */
|
|
54
|
+
subsurfaceRadius: number;
|
|
55
|
+
/** Per-channel multiplier of `subsurfaceRadius`. Default `[1, 0.5, 0.25]`. */
|
|
56
|
+
subsurfaceRadiusScale: ColorRGB;
|
|
57
|
+
/**
|
|
58
|
+
* Scattering anisotropy, -1 to 1. Default `0`.
|
|
59
|
+
* @deprecated Use subsurfaceScatterAnisotropy.
|
|
60
|
+
*/
|
|
61
|
+
subsurfaceAnisotropy: number;
|
|
62
|
+
/** Fuzz (sheen) layer weight. Default `0`. */
|
|
63
|
+
fuzzWeight: number;
|
|
64
|
+
/** Fuzz reflection color; substrate attenuation uses white fuzz albedo. Default `[1, 1, 1]`. */
|
|
65
|
+
fuzzColor: ColorRGB;
|
|
66
|
+
/** Fuzz roughness; imported from Three.js `sheenRoughness`. Default `0.5`. */
|
|
67
|
+
fuzzRoughness: number;
|
|
68
|
+
/** Clear coat weight. Default `0`. */
|
|
69
|
+
coatWeight: number;
|
|
70
|
+
/** Squared coat transmittance at normal incidence; colors the base and emission, not coat reflection. Default `[1, 1, 1]`. */
|
|
71
|
+
coatColor: ColorRGB;
|
|
72
|
+
/** Coat roughness. Default `0`. */
|
|
73
|
+
coatRoughness: number;
|
|
74
|
+
/**
|
|
75
|
+
* OpenPBR GGX coat anisotropy, 0 to 1; uses the base geometry tangent. Default `0`.
|
|
76
|
+
* @deprecated Use coatRoughnessAnisotropy.
|
|
77
|
+
*/
|
|
78
|
+
coatAnisotropy: number;
|
|
79
|
+
/** Coat index of refraction. Default `1.6`. */
|
|
80
|
+
coatIor: number;
|
|
81
|
+
/** Internal-reflection darkening: 0 compensates darkening, 1 is physical; absorption remains at 0. Default `1`. */
|
|
82
|
+
coatDarkening: number;
|
|
83
|
+
/** Thin-film interference weight (iridescence). Default `0`. */
|
|
84
|
+
thinFilmWeight: number;
|
|
85
|
+
/** Film thickness in micrometres; maximum endpoint when thinFilmMap is present. Default `0.5`. */
|
|
86
|
+
thinFilmThickness: number;
|
|
87
|
+
/** Film index of refraction. Default `1.4`. */
|
|
88
|
+
thinFilmIor: number;
|
|
89
|
+
/** Thickness at a thinFilmMap sample of zero, in micrometres; ignored without a map. May exceed thinFilmThickness. Default `0`. */
|
|
90
|
+
thinFilmThicknessMinimum: number;
|
|
91
|
+
/** Linear channel sampled by thinFilmMap. Default `r`. */
|
|
92
|
+
thinFilmMapChannel: ThinFilmMapChannel;
|
|
93
|
+
/** Emission color. Default `[1, 1, 1]`. */
|
|
94
|
+
emissionColor: ColorRGB;
|
|
95
|
+
/** Emitted radiance scale; `0` disables emission. Default `0`. */
|
|
96
|
+
emissionLuminance: number;
|
|
97
|
+
/**
|
|
98
|
+
* Coverage, `1` opaque. See `alphaMode`. Default `1`.
|
|
99
|
+
* @deprecated Use geometryOpacity.
|
|
100
|
+
*/
|
|
101
|
+
opacity: number;
|
|
102
|
+
/**
|
|
103
|
+
* Treat the surface as an infinitely thin shell (leaves, paper). Default `false`.
|
|
104
|
+
* @deprecated Use geometryThinWalled.
|
|
105
|
+
*/
|
|
106
|
+
thinWalled: boolean;
|
|
107
|
+
/** Disables geometric back-face culling and permits back-face emission. Default `false`. */
|
|
108
|
+
doubleSided: boolean;
|
|
109
|
+
/** Base color texture, multiplied with `baseColor` using Texture color encoding. Default `undefined`. */
|
|
110
|
+
map?: TextureState;
|
|
111
|
+
/** Standalone opacity texture sampled from its green channel, matching Three.js. Default `undefined`. */
|
|
112
|
+
alphaMap?: TextureState;
|
|
113
|
+
/**
|
|
114
|
+
* Coverage for surface and shadow rays: `opaque` ignores alpha inputs,
|
|
115
|
+
* `mask` uses binary alpha testing, `blend` retains fractional coverage.
|
|
116
|
+
* `auto` derives the mode from the alpha inputs. Default `auto`.
|
|
117
|
+
*/
|
|
118
|
+
alphaMode: MaterialAlphaMode;
|
|
119
|
+
/** Alpha-test threshold for `mask` mode; equality is fully covered. Default `0`. */
|
|
120
|
+
alphaCutoff: number;
|
|
121
|
+
/** Emission texture multiplied with `emissionColor`. Default `undefined`. */
|
|
122
|
+
emissiveMap?: TextureState;
|
|
123
|
+
/** Tangent-space normal map. Default `undefined`. */
|
|
124
|
+
normalMap?: TextureState;
|
|
125
|
+
/** Normal map strength per axis. Default `[1, 1]`. */
|
|
126
|
+
normalScale: Vec2;
|
|
127
|
+
/** glTF-compatible B=metalness, G=specular roughness texture. Default `undefined`. */
|
|
128
|
+
metallicRoughnessMap?: TextureState;
|
|
129
|
+
/** Standalone roughness texture sampled from its green channel. Default `undefined`. */
|
|
130
|
+
roughnessMap?: TextureState;
|
|
131
|
+
/** Standalone metalness texture sampled from its blue channel. Default `undefined`. */
|
|
132
|
+
metalnessMap?: TextureState;
|
|
133
|
+
/** Multiplies transmission weight using the texture's red channel. Default `undefined`. */
|
|
134
|
+
transmissionMap?: TextureState;
|
|
135
|
+
/** Linear thickness-range texture; R and zero minimum preserve multiplication semantics. Default `undefined`. */
|
|
136
|
+
thinFilmMap?: TextureState;
|
|
137
|
+
/** Multiplies coatWeight by the linear red channel. Default `undefined`. */
|
|
138
|
+
coatWeightMap?: TextureState;
|
|
139
|
+
/** Multiplies coatRoughness by the linear green channel. Default `undefined`. */
|
|
140
|
+
coatRoughnessMap?: TextureState;
|
|
141
|
+
/** Multiplies fuzzColor by RGB channels using Texture color encoding. Default `undefined`. */
|
|
142
|
+
fuzzColorMap?: TextureState;
|
|
143
|
+
/** Multiplies fuzzRoughness by the linear alpha channel. Default `undefined`. */
|
|
144
|
+
fuzzRoughnessMap?: TextureState;
|
|
145
|
+
/** Multiplies specularWeight by the linear alpha channel. Default `undefined`. */
|
|
146
|
+
specularWeightMap?: TextureState;
|
|
147
|
+
/** Multiplies specularColor by RGB channels using Texture color encoding. Default `undefined`. */
|
|
148
|
+
specularColorMap?: TextureState;
|
|
149
|
+
/** Source convention for base specular anisotropy. `gltf` converts textured roughness and strength before coat roughening; `openpbr` uses native parameters. Default `openpbr`. */
|
|
150
|
+
specularAnisotropyModel: 'openpbr' | 'gltf';
|
|
151
|
+
/** Linear RG tangent direction and B strength multiplier for the base specular layer. Default `undefined`. */
|
|
152
|
+
anisotropyMap?: TextureState;
|
|
153
|
+
/** Independent tangent-space coat normal in linear RGB. Without a map, coat uses the surface normal before base normal mapping. Default `undefined`. */
|
|
154
|
+
coatNormalMap?: TextureState;
|
|
155
|
+
/** XY strength of coatNormalMap; independent of normalScale. Default `[1, 1]`. */
|
|
156
|
+
coatNormalScale: Vec2;
|
|
157
|
+
/** Base direction rotation in radians, counter-clockwise in tangent/bitangent space after RG decoding. Default `0`. */
|
|
158
|
+
specularAnisotropyRotation: number;
|
|
159
|
+
/** Coat direction rotation in radians relative to the geometry tangent. Default `0`. */
|
|
160
|
+
coatAnisotropyRotation: number;
|
|
161
|
+
/** GGX roughness anisotropy in [0, 1]; native OpenPBR or source glTF strength according to specularAnisotropyModel. Requires tangents. Default `0`. */
|
|
162
|
+
get specularRoughnessAnisotropy(): number;
|
|
163
|
+
set specularRoughnessAnisotropy(value: number);
|
|
164
|
+
/** OpenPBR coat GGX roughness anisotropy in [0, 1]. Default `0`. */
|
|
165
|
+
get coatRoughnessAnisotropy(): number;
|
|
166
|
+
set coatRoughnessAnisotropy(value: number);
|
|
167
|
+
/** Subsurface scattering anisotropy in [-1, 1]. Default `0`. */
|
|
168
|
+
get subsurfaceScatterAnisotropy(): number;
|
|
169
|
+
set subsurfaceScatterAnisotropy(value: number);
|
|
170
|
+
/** Surface coverage; alphaMode controls testing and blending. Default `1`. */
|
|
171
|
+
get geometryOpacity(): number;
|
|
172
|
+
set geometryOpacity(value: number);
|
|
173
|
+
/** Treat the surface as an infinitely thin shell. Default `false`. */
|
|
174
|
+
get geometryThinWalled(): boolean;
|
|
175
|
+
set geometryThinWalled(value: boolean);
|
|
176
|
+
/**
|
|
177
|
+
* Invisible ground that only receives shadows, composited over the
|
|
178
|
+
* background. Default `false`.
|
|
179
|
+
*/
|
|
180
|
+
shadowCatcher: boolean;
|
|
181
|
+
/** Displays emission without scattering or illuminating other surfaces. Default `false`. */
|
|
182
|
+
unlit: boolean;
|
|
183
|
+
/** Radius of rounded-edge shading (shader bevel) in scene units. `0` disables it. Default `0`. */
|
|
184
|
+
bevelSize: number;
|
|
185
|
+
/** How map alpha is used: ignored, opacity or transmission. Default `opaque`. */
|
|
186
|
+
mapAlphaUsage: 'opaque' | 'alpha' | 'transmission';
|
|
187
|
+
/** Procedural UV projection for textures without (good) UVs. Default `none`. */
|
|
188
|
+
uvProjection: UVProjection;
|
|
189
|
+
/** UV scale used with `uvProjection`. Default `[1, 1]`. */
|
|
190
|
+
uvProjectionScale: Vec2;
|
|
191
|
+
/** Height texture (red channel) for displacement. Default `undefined`. */
|
|
192
|
+
displacementMap?: TextureState;
|
|
193
|
+
/** Procedural UV projection for the displacement map. Default `none`. */
|
|
194
|
+
displacementUvProjection: UVProjection;
|
|
195
|
+
/** UV scale used with `displacementUvProjection`. Default `1`. */
|
|
196
|
+
displacementUvProjectionScale: number;
|
|
197
|
+
/** Height multiplier in mesh-local coordinate units. Default `0.1`. */
|
|
198
|
+
displacementScale: number;
|
|
199
|
+
/** Offset added after scaling the height map, along the normal in mesh-local units; requires a displacement map. Default `0`. */
|
|
200
|
+
displacementBias: number;
|
|
201
|
+
/** Ray-marching step in mesh-local units; 0 automatically uses abs(displacementScale) / 32. Default `0`. */
|
|
202
|
+
displacementStepSize: number;
|
|
203
|
+
}
|
|
204
|
+
export { materialAlphaModeConstants } from '../renderer/materialConstants.js';
|
|
205
|
+
export type ResolvedMaterialAlphaMode = Exclude<MaterialAlphaMode, 'auto'>;
|
|
206
|
+
export declare function resolveMaterialAlphaMode(material: MaterialState): ResolvedMaterialAlphaMode;
|
|
207
|
+
export { materialKeys, materialTextureKeys, materialGeometryKeys, materialParamKeys, getMaterialHashKey, resetMaterialTextureId } from './openPbrSchema.js';
|
|
208
|
+
/** Optional material properties; defaults are documented on MaterialState. */
|
|
209
|
+
export type MaterialStateParams = Partial<MaterialState>;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { allocateAovId, validateAovId } from '../renderer/aov.js';
|
|
2
|
+
import { materialDefault, applyMaterialParams } from './openPbrSchema.js';
|
|
3
|
+
// Shared material state; browser texture types are refined by the public facade.
|
|
4
|
+
const aovIds = new WeakMap();
|
|
5
|
+
export default class MaterialState {
|
|
6
|
+
/** Stable unsigned material ID, excluding 0xFFFFFFFF. Default process-unique monotonic ID; assign before committing the scene. */
|
|
7
|
+
get aovId() { return aovIds.get(this); }
|
|
8
|
+
set aovId(value) { aovIds.set(this, validateAovId(value)); }
|
|
9
|
+
/** Creates a material. Omitted properties use their documented defaults. */
|
|
10
|
+
constructor(params = {}) {
|
|
11
|
+
aovIds.set(this, allocateAovId());
|
|
12
|
+
applyMaterialParams(this, params);
|
|
13
|
+
if (params.aovId !== undefined)
|
|
14
|
+
this.aovId = validateAovId(params.aovId);
|
|
15
|
+
}
|
|
16
|
+
// Base
|
|
17
|
+
/** Multiplier of diffuse reflection and metallic normal-incidence color; does not scale dielectric specular, transmission or subsurface. Default `1`. */
|
|
18
|
+
baseWeight = materialDefault('baseWeight');
|
|
19
|
+
/** Diffuse/metal color. Default `[0.8, 0.8, 0.8]`. */
|
|
20
|
+
baseColor = materialDefault('baseColor');
|
|
21
|
+
/** Oren-Nayar style roughness of the diffuse lobe. Default `0`. */
|
|
22
|
+
baseDiffuseRoughness = materialDefault('baseDiffuseRoughness');
|
|
23
|
+
/** `0` dielectric, `1` metal. Default `0`. */
|
|
24
|
+
baseMetalness = materialDefault('baseMetalness');
|
|
25
|
+
// Specular
|
|
26
|
+
/** Dielectric specular strength (via IOR) and overall metallic Fresnel multiplier. Default `1`. */
|
|
27
|
+
specularWeight = materialDefault('specularWeight');
|
|
28
|
+
/** Dielectric specular tint and metallic F82 near-grazing tint. Default `[1, 1, 1]`. */
|
|
29
|
+
specularColor = materialDefault('specularColor');
|
|
30
|
+
/** Microfacet roughness, `0` mirror to `1` rough; retains source perceptual roughness in `gltf` anisotropy mode. Default `0.3`. */
|
|
31
|
+
specularRoughness = materialDefault('specularRoughness');
|
|
32
|
+
/** Index of refraction. Default `1.5`. */
|
|
33
|
+
specularIor = materialDefault('specularIor');
|
|
34
|
+
/**
|
|
35
|
+
* GGX anisotropy strength, 0 to 1 (requires tangents); native OpenPBR or source glTF strength according to specularAnisotropyModel. Default `0`.
|
|
36
|
+
* @deprecated Use specularRoughnessAnisotropy.
|
|
37
|
+
*/
|
|
38
|
+
specularAnisotropy = materialDefault('specularAnisotropy');
|
|
39
|
+
// Transmission
|
|
40
|
+
/** `1` makes the dielectric base fully transmissive (glass). Default `0`. */
|
|
41
|
+
transmissionWeight = materialDefault('transmissionWeight');
|
|
42
|
+
/** Transmission tint, or the medium color at `transmissionDepth`. Default `[1, 1, 1]`. */
|
|
43
|
+
transmissionColor = materialDefault('transmissionColor');
|
|
44
|
+
/** Depth at which `transmissionColor` is reached; `0` tints at the surface. Default `0`. */
|
|
45
|
+
transmissionDepth = materialDefault('transmissionDepth');
|
|
46
|
+
/** Volume scattering color of the transmissive medium. Default `[0, 0, 0]`. */
|
|
47
|
+
transmissionScatter = materialDefault('transmissionScatter');
|
|
48
|
+
/** Henyey-Greenstein anisotropy of the medium, -1 to 1. Default `0`. */
|
|
49
|
+
transmissionScatterAnisotropy = materialDefault('transmissionScatterAnisotropy');
|
|
50
|
+
/** Nonnegative dispersion strength; values above `1` are supported. `0` disables wavelength-dependent refraction. Default `0`. */
|
|
51
|
+
transmissionDispersionScale = materialDefault('transmissionDispersionScale');
|
|
52
|
+
/** Abbe number controlling dispersion. Default `20`. */
|
|
53
|
+
transmissionDispersionAbbeNumber = materialDefault('transmissionDispersionAbbeNumber');
|
|
54
|
+
// Subsurface
|
|
55
|
+
/** Subsurface scattering weight. Default `0`. */
|
|
56
|
+
subsurfaceWeight = materialDefault('subsurfaceWeight');
|
|
57
|
+
/** Subsurface color. Default `[0.8, 0.8, 0.8]`. */
|
|
58
|
+
subsurfaceColor = materialDefault('subsurfaceColor');
|
|
59
|
+
/** Mean free path in scene units. Default `1`. */
|
|
60
|
+
subsurfaceRadius = materialDefault('subsurfaceRadius');
|
|
61
|
+
/** Per-channel multiplier of `subsurfaceRadius`. Default `[1, 0.5, 0.25]`. */
|
|
62
|
+
subsurfaceRadiusScale = materialDefault('subsurfaceRadiusScale');
|
|
63
|
+
/**
|
|
64
|
+
* Scattering anisotropy, -1 to 1. Default `0`.
|
|
65
|
+
* @deprecated Use subsurfaceScatterAnisotropy.
|
|
66
|
+
*/
|
|
67
|
+
subsurfaceAnisotropy = materialDefault('subsurfaceAnisotropy');
|
|
68
|
+
// Fuzz (sheen)
|
|
69
|
+
/** Fuzz (sheen) layer weight. Default `0`. */
|
|
70
|
+
fuzzWeight = materialDefault('fuzzWeight');
|
|
71
|
+
/** Fuzz reflection color; substrate attenuation uses white fuzz albedo. Default `[1, 1, 1]`. */
|
|
72
|
+
fuzzColor = materialDefault('fuzzColor');
|
|
73
|
+
/** Fuzz roughness; imported from Three.js `sheenRoughness`. Default `0.5`. */
|
|
74
|
+
fuzzRoughness = materialDefault('fuzzRoughness');
|
|
75
|
+
// Coat
|
|
76
|
+
/** Clear coat weight. Default `0`. */
|
|
77
|
+
coatWeight = materialDefault('coatWeight');
|
|
78
|
+
/** Squared coat transmittance at normal incidence; colors the base and emission, not coat reflection. Default `[1, 1, 1]`. */
|
|
79
|
+
coatColor = materialDefault('coatColor');
|
|
80
|
+
/** Coat roughness. Default `0`. */
|
|
81
|
+
coatRoughness = materialDefault('coatRoughness');
|
|
82
|
+
/**
|
|
83
|
+
* OpenPBR GGX coat anisotropy, 0 to 1; uses the base geometry tangent. Default `0`.
|
|
84
|
+
* @deprecated Use coatRoughnessAnisotropy.
|
|
85
|
+
*/
|
|
86
|
+
coatAnisotropy = materialDefault('coatAnisotropy');
|
|
87
|
+
/** Coat index of refraction. Default `1.6`. */
|
|
88
|
+
coatIor = materialDefault('coatIor');
|
|
89
|
+
/** Internal-reflection darkening: 0 compensates darkening, 1 is physical; absorption remains at 0. Default `1`. */
|
|
90
|
+
coatDarkening = materialDefault('coatDarkening');
|
|
91
|
+
// Thin film
|
|
92
|
+
/** Thin-film interference weight (iridescence). Default `0`. */
|
|
93
|
+
thinFilmWeight = materialDefault('thinFilmWeight');
|
|
94
|
+
/** Film thickness in micrometres; maximum endpoint when thinFilmMap is present. Default `0.5`. */
|
|
95
|
+
thinFilmThickness = materialDefault('thinFilmThickness');
|
|
96
|
+
/** Film index of refraction. Default `1.4`. */
|
|
97
|
+
thinFilmIor = materialDefault('thinFilmIor');
|
|
98
|
+
/** Thickness at a thinFilmMap sample of zero, in micrometres; ignored without a map. May exceed thinFilmThickness. Default `0`. */
|
|
99
|
+
thinFilmThicknessMinimum = materialDefault('thinFilmThicknessMinimum');
|
|
100
|
+
/** Linear channel sampled by thinFilmMap. Default `r`. */
|
|
101
|
+
thinFilmMapChannel = materialDefault('thinFilmMapChannel');
|
|
102
|
+
// Emission and geometry
|
|
103
|
+
/** Emission color. Default `[1, 1, 1]`. */
|
|
104
|
+
emissionColor = materialDefault('emissionColor');
|
|
105
|
+
/** Emitted radiance scale; `0` disables emission. Default `0`. */
|
|
106
|
+
emissionLuminance = materialDefault('emissionLuminance');
|
|
107
|
+
/**
|
|
108
|
+
* Coverage, `1` opaque. See `alphaMode`. Default `1`.
|
|
109
|
+
* @deprecated Use geometryOpacity.
|
|
110
|
+
*/
|
|
111
|
+
opacity = materialDefault('opacity');
|
|
112
|
+
/**
|
|
113
|
+
* Treat the surface as an infinitely thin shell (leaves, paper). Default `false`.
|
|
114
|
+
* @deprecated Use geometryThinWalled.
|
|
115
|
+
*/
|
|
116
|
+
thinWalled = materialDefault('thinWalled');
|
|
117
|
+
/** Disables geometric back-face culling and permits back-face emission. Default `false`. */
|
|
118
|
+
doubleSided = materialDefault('doubleSided');
|
|
119
|
+
// Textures
|
|
120
|
+
/** Base color texture, multiplied with `baseColor` using Texture color encoding. Default `undefined`. */
|
|
121
|
+
map;
|
|
122
|
+
/** Standalone opacity texture sampled from its green channel, matching Three.js. Default `undefined`. */
|
|
123
|
+
alphaMap;
|
|
124
|
+
/**
|
|
125
|
+
* Coverage for surface and shadow rays: `opaque` ignores alpha inputs,
|
|
126
|
+
* `mask` uses binary alpha testing, `blend` retains fractional coverage.
|
|
127
|
+
* `auto` derives the mode from the alpha inputs. Default `auto`.
|
|
128
|
+
*/
|
|
129
|
+
alphaMode = materialDefault('alphaMode');
|
|
130
|
+
/** Alpha-test threshold for `mask` mode; equality is fully covered. Default `0`. */
|
|
131
|
+
alphaCutoff = materialDefault('alphaCutoff');
|
|
132
|
+
/** Emission texture multiplied with `emissionColor`. Default `undefined`. */
|
|
133
|
+
emissiveMap;
|
|
134
|
+
/** Tangent-space normal map. Default `undefined`. */
|
|
135
|
+
normalMap;
|
|
136
|
+
/** Normal map strength per axis. Default `[1, 1]`. */
|
|
137
|
+
normalScale = materialDefault('normalScale');
|
|
138
|
+
/** glTF-compatible B=metalness, G=specular roughness texture. Default `undefined`. */
|
|
139
|
+
metallicRoughnessMap;
|
|
140
|
+
/** Standalone roughness texture sampled from its green channel. Default `undefined`. */
|
|
141
|
+
roughnessMap;
|
|
142
|
+
/** Standalone metalness texture sampled from its blue channel. Default `undefined`. */
|
|
143
|
+
metalnessMap;
|
|
144
|
+
/** Multiplies transmission weight using the texture's red channel. Default `undefined`. */
|
|
145
|
+
transmissionMap;
|
|
146
|
+
/** Linear thickness-range texture; R and zero minimum preserve multiplication semantics. Default `undefined`. */
|
|
147
|
+
thinFilmMap;
|
|
148
|
+
/** Multiplies coatWeight by the linear red channel. Default `undefined`. */
|
|
149
|
+
coatWeightMap;
|
|
150
|
+
/** Multiplies coatRoughness by the linear green channel. Default `undefined`. */
|
|
151
|
+
coatRoughnessMap;
|
|
152
|
+
/** Multiplies fuzzColor by RGB channels using Texture color encoding. Default `undefined`. */
|
|
153
|
+
fuzzColorMap;
|
|
154
|
+
/** Multiplies fuzzRoughness by the linear alpha channel. Default `undefined`. */
|
|
155
|
+
fuzzRoughnessMap;
|
|
156
|
+
/** Multiplies specularWeight by the linear alpha channel. Default `undefined`. */
|
|
157
|
+
specularWeightMap;
|
|
158
|
+
/** Multiplies specularColor by RGB channels using Texture color encoding. Default `undefined`. */
|
|
159
|
+
specularColorMap;
|
|
160
|
+
/** Source convention for base specular anisotropy. `gltf` converts textured roughness and strength before coat roughening; `openpbr` uses native parameters. Default `openpbr`. */
|
|
161
|
+
specularAnisotropyModel = 'openpbr';
|
|
162
|
+
/** Linear RG tangent direction and B strength multiplier for the base specular layer. Default `undefined`. */
|
|
163
|
+
anisotropyMap;
|
|
164
|
+
/** Independent tangent-space coat normal in linear RGB. Without a map, coat uses the surface normal before base normal mapping. Default `undefined`. */
|
|
165
|
+
coatNormalMap;
|
|
166
|
+
/** XY strength of coatNormalMap; independent of normalScale. Default `[1, 1]`. */
|
|
167
|
+
coatNormalScale = materialDefault('coatNormalScale');
|
|
168
|
+
/** Base direction rotation in radians, counter-clockwise in tangent/bitangent space after RG decoding. Default `0`. */
|
|
169
|
+
specularAnisotropyRotation = 0;
|
|
170
|
+
/** Coat direction rotation in radians relative to the geometry tangent. Default `0`. */
|
|
171
|
+
coatAnisotropyRotation = 0;
|
|
172
|
+
/** GGX roughness anisotropy in [0, 1]; native OpenPBR or source glTF strength according to specularAnisotropyModel. Requires tangents. Default `0`. */
|
|
173
|
+
get specularRoughnessAnisotropy() { return this.specularAnisotropy; }
|
|
174
|
+
set specularRoughnessAnisotropy(value) { this.specularAnisotropy = value; }
|
|
175
|
+
/** OpenPBR coat GGX roughness anisotropy in [0, 1]. Default `0`. */
|
|
176
|
+
get coatRoughnessAnisotropy() { return this.coatAnisotropy; }
|
|
177
|
+
set coatRoughnessAnisotropy(value) { this.coatAnisotropy = value; }
|
|
178
|
+
/** Subsurface scattering anisotropy in [-1, 1]. Default `0`. */
|
|
179
|
+
get subsurfaceScatterAnisotropy() { return this.subsurfaceAnisotropy; }
|
|
180
|
+
set subsurfaceScatterAnisotropy(value) { this.subsurfaceAnisotropy = value; }
|
|
181
|
+
/** Surface coverage; alphaMode controls testing and blending. Default `1`. */
|
|
182
|
+
get geometryOpacity() { return this.opacity; }
|
|
183
|
+
set geometryOpacity(value) { this.opacity = value; }
|
|
184
|
+
/** Treat the surface as an infinitely thin shell. Default `false`. */
|
|
185
|
+
get geometryThinWalled() { return this.thinWalled; }
|
|
186
|
+
set geometryThinWalled(value) { this.thinWalled = value; }
|
|
187
|
+
// Renderer extensions
|
|
188
|
+
/**
|
|
189
|
+
* Invisible ground that only receives shadows, composited over the
|
|
190
|
+
* background. Default `false`.
|
|
191
|
+
*/
|
|
192
|
+
shadowCatcher = materialDefault('shadowCatcher');
|
|
193
|
+
/** Displays emission without scattering or illuminating other surfaces. Default `false`. */
|
|
194
|
+
unlit = materialDefault('unlit');
|
|
195
|
+
/** Radius of rounded-edge shading (shader bevel) in scene units. `0` disables it. Default `0`. */
|
|
196
|
+
bevelSize = materialDefault('bevelSize');
|
|
197
|
+
/** How map alpha is used: ignored, opacity or transmission. Default `opaque`. */
|
|
198
|
+
mapAlphaUsage = materialDefault('mapAlphaUsage');
|
|
199
|
+
/** Procedural UV projection for textures without (good) UVs. Default `none`. */
|
|
200
|
+
uvProjection = materialDefault('uvProjection');
|
|
201
|
+
/** UV scale used with `uvProjection`. Default `[1, 1]`. */
|
|
202
|
+
uvProjectionScale = materialDefault('uvProjectionScale');
|
|
203
|
+
// Displacement
|
|
204
|
+
/** Height texture (red channel) for displacement. Default `undefined`. */
|
|
205
|
+
displacementMap;
|
|
206
|
+
/** Procedural UV projection for the displacement map. Default `none`. */
|
|
207
|
+
displacementUvProjection = materialDefault('displacementUvProjection');
|
|
208
|
+
/** UV scale used with `displacementUvProjection`. Default `1`. */
|
|
209
|
+
displacementUvProjectionScale = materialDefault('displacementUvProjectionScale');
|
|
210
|
+
/** Height multiplier in mesh-local coordinate units. Default `0.1`. */
|
|
211
|
+
displacementScale = materialDefault('displacementScale');
|
|
212
|
+
/** Offset added after scaling the height map, along the normal in mesh-local units; requires a displacement map. Default `0`. */
|
|
213
|
+
displacementBias = materialDefault('displacementBias');
|
|
214
|
+
/** Ray-marching step in mesh-local units; 0 automatically uses abs(displacementScale) / 32. Default `0`. */
|
|
215
|
+
displacementStepSize = materialDefault('displacementStepSize');
|
|
216
|
+
}
|
|
217
|
+
export { materialAlphaModeConstants } from '../renderer/materialConstants.js';
|
|
218
|
+
export function resolveMaterialAlphaMode(material) {
|
|
219
|
+
if (material.alphaMode !== 'auto')
|
|
220
|
+
return material.alphaMode;
|
|
221
|
+
if (material.alphaCutoff > 0)
|
|
222
|
+
return 'mask';
|
|
223
|
+
if (material.opacity < 1 ||
|
|
224
|
+
material.mapAlphaUsage === "alpha" ||
|
|
225
|
+
material.alphaMap) {
|
|
226
|
+
return 'blend';
|
|
227
|
+
}
|
|
228
|
+
return 'opaque';
|
|
229
|
+
}
|
|
230
|
+
export { materialKeys, materialTextureKeys, materialGeometryKeys, materialParamKeys, getMaterialHashKey, resetMaterialTextureId } from './openPbrSchema.js';
|
|
231
|
+
//# sourceMappingURL=MaterialState.js.map
|