@meimu/mutracer 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/GLSL-PathTracer-MIT.txt +21 -0
- package/LICENSES/GlMatrix-MIT.txt +19 -0
- package/LICENSES/KinoBloom-MIT.txt +21 -0
- package/LICENSES/OIDNWeb-MIT.txt +21 -0
- package/LICENSES/Octicons-MIT.txt +21 -0
- package/LICENSES/RayTracingRenderer-MIT.txt +21 -0
- package/LICENSES/TinyBVH-MIT.txt +21 -0
- package/LICENSES/WebGPUUtils-MIT.txt +21 -0
- package/LICENSES/ZetaRay-MIT.txt +21 -0
- package/README.md +240 -2
- package/THIRD_PARTY_NOTICES.md +160 -0
- package/dist/assets/bvh.worker.js +1 -0
- package/dist/mutracer.umd.js +14360 -0
- package/docs/api.md +394 -0
- package/docs/bvh.md +141 -0
- package/docs/denoising.md +301 -0
- package/docs/getting-started.md +308 -0
- package/docs/materials.md +281 -0
- package/docs/performance.md +85 -0
- package/docs/post-processing.md +87 -0
- package/docs/progressive-rendering.md +160 -0
- package/docs/sampling.md +40 -0
- package/docs/threejs.md +274 -0
- package/docs/todo.md +61 -0
- package/docs/updates.md +208 -0
- package/lib/Display.d.ts +72 -0
- package/lib/Display.js +123 -0
- package/lib/Display.js.map +1 -0
- package/lib/Engine.d.ts +161 -0
- package/lib/Engine.js +681 -0
- package/lib/Engine.js.map +1 -0
- package/lib/Render.d.ts +265 -0
- package/lib/Render.js +742 -0
- package/lib/Render.js.map +1 -0
- package/lib/RenderLoop.d.ts +79 -0
- package/lib/RenderLoop.js +236 -0
- package/lib/RenderLoop.js.map +1 -0
- package/lib/Sync.d.ts +19 -0
- package/lib/Sync.js +19 -0
- package/lib/Sync.js.map +1 -0
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -0
- package/lib/main.d.ts +56 -0
- package/lib/main.js +43 -0
- package/lib/main.js.map +1 -0
- package/lib/math.d.ts +23 -0
- package/lib/math.js +56 -0
- package/lib/math.js.map +1 -0
- package/lib/oidn.d.ts +45 -0
- package/lib/oidn.js +42 -0
- package/lib/oidn.js.map +1 -0
- package/lib/oidnBundledWeights.cdn.d.ts +2 -0
- package/lib/oidnBundledWeights.cdn.js +5 -0
- package/lib/oidnBundledWeights.cdn.js.map +1 -0
- package/lib/oidnBundledWeights.d.ts +2 -0
- package/lib/oidnBundledWeights.js +4 -0
- package/lib/oidnBundledWeights.js.map +1 -0
- package/lib/renderer/DisplayPostProcess.d.ts +14 -0
- package/lib/renderer/DisplayPostProcess.js +41 -0
- package/lib/renderer/DisplayPostProcess.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +119 -0
- package/lib/renderer/MaterialTable.js +550 -0
- package/lib/renderer/MaterialTable.js.map +1 -0
- package/lib/renderer/OfflineAdaptiveSampling.d.ts +47 -0
- package/lib/renderer/OfflineAdaptiveSampling.js +36 -0
- package/lib/renderer/OfflineAdaptiveSampling.js.map +1 -0
- package/lib/renderer/RenderingPipeline.d.ts +232 -0
- package/lib/renderer/RenderingPipeline.js +18 -0
- package/lib/renderer/RenderingPipeline.js.map +1 -0
- package/lib/renderer/ScratchPool.d.ts +13 -0
- package/lib/renderer/ScratchPool.js +21 -0
- package/lib/renderer/ScratchPool.js.map +1 -0
- package/lib/renderer/TileRender.d.ts +44 -0
- package/lib/renderer/TileRender.js +283 -0
- package/lib/renderer/TileRender.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.d.ts +17 -0
- package/lib/renderer/WGPUBloomPass.js +243 -0
- package/lib/renderer/WGPUBloomPass.js.map +1 -0
- package/lib/renderer/WGPUCanvasSurface.d.ts +21 -0
- package/lib/renderer/WGPUCanvasSurface.js +48 -0
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -0
- package/lib/renderer/WGPUComputePass.d.ts +73 -0
- package/lib/renderer/WGPUComputePass.js +317 -0
- package/lib/renderer/WGPUComputePass.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.d.ts +73 -0
- package/lib/renderer/WGPUFullQuadPass.js +389 -0
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -0
- package/lib/renderer/WGPUHDRPeakMeter.d.ts +19 -0
- package/lib/renderer/WGPUHDRPeakMeter.js +112 -0
- package/lib/renderer/WGPUHDRPeakMeter.js.map +1 -0
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +61 -0
- package/lib/renderer/WGPUJNLMDenoiser.js +412 -0
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WGPURayTraceOutput.d.ts +44 -0
- package/lib/renderer/WGPURayTraceOutput.js +368 -0
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -0
- package/lib/renderer/WGPURayTracePass.d.ts +284 -0
- package/lib/renderer/WGPURayTracePass.js +2323 -0
- package/lib/renderer/WGPURayTracePass.js.map +1 -0
- package/lib/renderer/WGPURenderingPipeline.d.ts +9 -0
- package/lib/renderer/WGPURenderingPipeline.js +1448 -0
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -0
- package/lib/renderer/WGPUSceneFeatures.d.ts +3 -0
- package/lib/renderer/WGPUSceneFeatures.js +20 -0
- package/lib/renderer/WGPUSceneFeatures.js.map +1 -0
- package/lib/renderer/WGPUScratchBuffer.d.ts +9 -0
- package/lib/renderer/WGPUScratchBuffer.js +21 -0
- package/lib/renderer/WGPUScratchBuffer.js.map +1 -0
- package/lib/renderer/WGPUScratchTexture.d.ts +10 -0
- package/lib/renderer/WGPUScratchTexture.js +27 -0
- package/lib/renderer/WGPUScratchTexture.js.map +1 -0
- package/lib/renderer/WGPUShaderCache.d.ts +26 -0
- package/lib/renderer/WGPUShaderCache.js +103 -0
- package/lib/renderer/WGPUShaderCache.js.map +1 -0
- package/lib/renderer/WebGLBloomPass.d.ts +18 -0
- package/lib/renderer/WebGLBloomPass.js +113 -0
- package/lib/renderer/WebGLBloomPass.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +65 -0
- package/lib/renderer/WebGLFullQuadPass.js +208 -0
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -0
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +32 -0
- package/lib/renderer/WebGLJNLMDenoiser.js +328 -0
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -0
- package/lib/renderer/WebGLRayTraceOutputPass.d.ts +20 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js +106 -0
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -0
- package/lib/renderer/WebGLRayTracePass.d.ts +142 -0
- package/lib/renderer/WebGLRayTracePass.js +845 -0
- package/lib/renderer/WebGLRayTracePass.js.map +1 -0
- package/lib/renderer/WebGLReadback.d.ts +4 -0
- package/lib/renderer/WebGLReadback.js +75 -0
- package/lib/renderer/WebGLReadback.js.map +1 -0
- package/lib/renderer/WebGLRenderingPipeline.d.ts +4 -0
- package/lib/renderer/WebGLRenderingPipeline.js +510 -0
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -0
- package/lib/renderer/WebGLScratchCopy.d.ts +10 -0
- package/lib/renderer/WebGLScratchCopy.js +27 -0
- package/lib/renderer/WebGLScratchCopy.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +26 -0
- package/lib/renderer/accumulationTarget.js +2 -0
- package/lib/renderer/accumulationTarget.js.map +1 -0
- package/lib/renderer/binnedSahBvh.d.ts +31 -0
- package/lib/renderer/binnedSahBvh.js +263 -0
- package/lib/renderer/binnedSahBvh.js.map +1 -0
- package/lib/renderer/bvh.worker.d.ts +1 -0
- package/lib/renderer/bvh.worker.js +16 -0
- package/lib/renderer/bvh.worker.js.map +1 -0
- package/lib/renderer/bvhAccel.d.ts +81 -0
- package/lib/renderer/bvhAccel.js +621 -0
- package/lib/renderer/bvhAccel.js.map +1 -0
- package/lib/renderer/bvhWorkerBuild.d.ts +12 -0
- package/lib/renderer/bvhWorkerBuild.js +17 -0
- package/lib/renderer/bvhWorkerBuild.js.map +1 -0
- package/lib/renderer/bvhWorkerClient.d.ts +57 -0
- package/lib/renderer/bvhWorkerClient.js +166 -0
- package/lib/renderer/bvhWorkerClient.js.map +1 -0
- package/lib/renderer/cameraLens.d.ts +5 -0
- package/lib/renderer/cameraLens.js +15 -0
- package/lib/renderer/cameraLens.js.map +1 -0
- package/lib/renderer/cameraSnapshot.d.ts +3 -0
- package/lib/renderer/cameraSnapshot.js +7 -0
- package/lib/renderer/cameraSnapshot.js.map +1 -0
- package/lib/renderer/committedScene.d.ts +13 -0
- package/lib/renderer/committedScene.js +126 -0
- package/lib/renderer/committedScene.js.map +1 -0
- package/lib/renderer/dataTextureUtil.d.ts +32 -0
- package/lib/renderer/dataTextureUtil.js +46 -0
- package/lib/renderer/dataTextureUtil.js.map +1 -0
- package/lib/renderer/denoiser.d.ts +65 -0
- package/lib/renderer/denoiser.js +2 -0
- package/lib/renderer/denoiser.js.map +1 -0
- package/lib/renderer/depthQuery.d.ts +14 -0
- package/lib/renderer/depthQuery.js +14 -0
- package/lib/renderer/depthQuery.js.map +1 -0
- package/lib/renderer/deviceRequirements.d.ts +23 -0
- package/lib/renderer/deviceRequirements.js +50 -0
- package/lib/renderer/deviceRequirements.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +10 -0
- package/lib/renderer/envMapCreation.js +96 -0
- package/lib/renderer/envMapCreation.js.map +1 -0
- package/lib/renderer/envMapDistribution.d.ts +9 -0
- package/lib/renderer/envMapDistribution.js +107 -0
- package/lib/renderer/envMapDistribution.js.map +1 -0
- package/lib/renderer/float16.d.ts +1 -0
- package/lib/renderer/float16.js +19 -0
- package/lib/renderer/float16.js.map +1 -0
- package/lib/renderer/geometryBvh.d.ts +11 -0
- package/lib/renderer/geometryBvh.js +24 -0
- package/lib/renderer/geometryBvh.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +28 -0
- package/lib/renderer/geometryUpdates.js +131 -0
- package/lib/renderer/geometryUpdates.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +37 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/common.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/common.glsl.js +17 -0
- package/lib/renderer/glsl/chunks/common.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js +192 -0
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js +1091 -0
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +371 -0
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +1767 -0
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rand.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js +26 -0
- package/lib/renderer/glsl/chunks/rand.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/random.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/random.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/random.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +287 -0
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +254 -0
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +279 -0
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +48 -0
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js +194 -0
- package/lib/renderer/glsl/chunks/sampling.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js +170 -0
- package/lib/renderer/glsl/chunks/sobol.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +27 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +72 -0
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/depthQuery.frag.d.ts +3 -0
- package/lib/renderer/glsl/depthQuery.frag.js +55 -0
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.d.ts +6 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +46 -0
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -0
- package/lib/renderer/glsl/rayTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/rayTrace.frag.js +623 -0
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/shadowCatcher.frag.d.ts +3 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js +119 -0
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -0
- package/lib/renderer/glsl/webglPipeline.frag.d.ts +4 -0
- package/lib/renderer/glsl/webglPipeline.frag.js +208 -0
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -0
- package/lib/renderer/gpuMemory.d.ts +2 -0
- package/lib/renderer/gpuMemory.js +10 -0
- package/lib/renderer/gpuMemory.js.map +1 -0
- package/lib/renderer/halton.d.ts +1 -0
- package/lib/renderer/halton.js +15 -0
- package/lib/renderer/halton.js.map +1 -0
- package/lib/renderer/jnlm.d.ts +85 -0
- package/lib/renderer/jnlm.js +87 -0
- package/lib/renderer/jnlm.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +75 -0
- package/lib/renderer/lightSampling.js +305 -0
- package/lib/renderer/lightSampling.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +26 -0
- package/lib/renderer/lightsUtil.js +154 -0
- package/lib/renderer/lightsUtil.js.map +1 -0
- package/lib/renderer/materialChanges.d.ts +13 -0
- package/lib/renderer/materialChanges.js +59 -0
- package/lib/renderer/materialChanges.js.map +1 -0
- package/lib/renderer/materialComparison.generated.d.ts +5 -0
- package/lib/renderer/materialComparison.generated.js +655 -0
- package/lib/renderer/materialComparison.generated.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +6 -0
- package/lib/renderer/materialConstants.js +3 -0
- package/lib/renderer/materialConstants.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +9 -0
- package/lib/renderer/materialEmission.js +21 -0
- package/lib/renderer/materialEmission.js.map +1 -0
- package/lib/renderer/materialIndices.d.ts +7 -0
- package/lib/renderer/materialIndices.js +34 -0
- package/lib/renderer/materialIndices.js.map +1 -0
- package/lib/renderer/materialLayout.d.ts +102 -0
- package/lib/renderer/materialLayout.js +189 -0
- package/lib/renderer/materialLayout.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +537 -0
- package/lib/renderer/materialTextureSlots.js +219 -0
- package/lib/renderer/materialTextureSlots.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.d.ts +8 -0
- package/lib/renderer/mergeMeshesToGeometry.js +236 -0
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -0
- package/lib/renderer/meshInstances.d.ts +23 -0
- package/lib/renderer/meshInstances.js +66 -0
- package/lib/renderer/meshInstances.js.map +1 -0
- package/lib/renderer/meshMembership.d.ts +10 -0
- package/lib/renderer/meshMembership.js +72 -0
- package/lib/renderer/meshMembership.js.map +1 -0
- package/lib/renderer/oidnNetwork.d.ts +20 -0
- package/lib/renderer/oidnNetwork.js +123 -0
- package/lib/renderer/oidnNetwork.js.map +1 -0
- package/lib/renderer/openPbrEnergyLut.d.ts +32 -0
- package/lib/renderer/openPbrEnergyLut.js +965 -0
- package/lib/renderer/openPbrEnergyLut.js.map +1 -0
- package/lib/renderer/pathLimits.d.ts +4 -0
- package/lib/renderer/pathLimits.js +7 -0
- package/lib/renderer/pathLimits.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +110 -0
- package/lib/renderer/prepareMeshBVH.js +857 -0
- package/lib/renderer/prepareMeshBVH.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +11 -0
- package/lib/renderer/progressiveScheduler.js +19 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -0
- package/lib/renderer/renderPipeline.d.ts +57 -0
- package/lib/renderer/renderPipeline.js +49 -0
- package/lib/renderer/renderPipeline.js.map +1 -0
- package/lib/renderer/sampling.d.ts +10 -0
- package/lib/renderer/sampling.js +28 -0
- package/lib/renderer/sampling.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +29 -0
- package/lib/renderer/sceneChangeDetector.js +232 -0
- package/lib/renderer/sceneChangeDetector.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +14 -0
- package/lib/renderer/sceneLightChanges.js +34 -0
- package/lib/renderer/sceneLightChanges.js.map +1 -0
- package/lib/renderer/scratchSampling.d.ts +3 -0
- package/lib/renderer/scratchSampling.js +39 -0
- package/lib/renderer/scratchSampling.js.map +1 -0
- package/lib/renderer/shader.d.ts +37 -0
- package/lib/renderer/shader.js +41 -0
- package/lib/renderer/shader.js.map +1 -0
- package/lib/renderer/staticBvhPreparation.d.ts +24 -0
- package/lib/renderer/staticBvhPreparation.js +116 -0
- package/lib/renderer/staticBvhPreparation.js.map +1 -0
- package/lib/renderer/textureRegion.d.ts +8 -0
- package/lib/renderer/textureRegion.js +9 -0
- package/lib/renderer/textureRegion.js.map +1 -0
- package/lib/renderer/texturesFromMaterials.d.ts +6 -0
- package/lib/renderer/texturesFromMaterials.js +37 -0
- package/lib/renderer/texturesFromMaterials.js.map +1 -0
- package/lib/renderer/util.d.ts +17 -0
- package/lib/renderer/util.js +56 -0
- package/lib/renderer/util.js.map +1 -0
- package/lib/renderer/webgl.d.ts +131 -0
- package/lib/renderer/webgl.js +586 -0
- package/lib/renderer/webgl.js.map +1 -0
- package/lib/renderer/webglShaders.d.ts +4 -0
- package/lib/renderer/webglShaders.js +41 -0
- package/lib/renderer/webglShaders.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +23 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +128 -0
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +1441 -0
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +85 -0
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +7 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +315 -0
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +1737 -0
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +352 -0
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +25 -0
- package/lib/renderer/wgsl/chunks/rand.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js +2 -0
- package/lib/renderer/wgsl/chunks/random.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +328 -0
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +400 -0
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +439 -0
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +40 -0
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +198 -0
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +8 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +16 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +170 -0
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +42 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +218 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js +28 -0
- package/lib/renderer/wgsl/customDenoise.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +3 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js +34 -0
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.d.ts +2 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +108 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +16 -0
- package/lib/renderer/wgsl/rayTrace.compute.js +927 -0
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -0
- package/lib/scene/AmbientLight.d.ts +17 -0
- package/lib/scene/AmbientLight.js +15 -0
- package/lib/scene/AmbientLight.js.map +1 -0
- package/lib/scene/Camera.d.ts +78 -0
- package/lib/scene/Camera.js +111 -0
- package/lib/scene/Camera.js.map +1 -0
- package/lib/scene/DirectionalLight.d.ts +18 -0
- package/lib/scene/DirectionalLight.js +17 -0
- package/lib/scene/DirectionalLight.js.map +1 -0
- package/lib/scene/EnvironmentLight.d.ts +14 -0
- package/lib/scene/EnvironmentLight.js +14 -0
- package/lib/scene/EnvironmentLight.js.map +1 -0
- package/lib/scene/Geometry.d.ts +87 -0
- package/lib/scene/Geometry.js +108 -0
- package/lib/scene/Geometry.js.map +1 -0
- package/lib/scene/IESProfile.d.ts +19 -0
- package/lib/scene/IESProfile.js +165 -0
- package/lib/scene/IESProfile.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +43 -0
- package/lib/scene/InstancedMesh.js +79 -0
- package/lib/scene/InstancedMesh.js.map +1 -0
- package/lib/scene/Mesh.d.ts +14 -0
- package/lib/scene/Mesh.js +17 -0
- package/lib/scene/Mesh.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +224 -0
- package/lib/scene/OpenPBRMaterial.js +240 -0
- package/lib/scene/OpenPBRMaterial.js.map +1 -0
- package/lib/scene/RectLight.d.ts +31 -0
- package/lib/scene/RectLight.js +26 -0
- package/lib/scene/RectLight.js.map +1 -0
- package/lib/scene/Scene.d.ts +55 -0
- package/lib/scene/Scene.js +2 -0
- package/lib/scene/Scene.js.map +1 -0
- package/lib/scene/SceneNode.d.ts +16 -0
- package/lib/scene/SceneNode.js +33 -0
- package/lib/scene/SceneNode.js.map +1 -0
- package/lib/scene/SphereLight.d.ts +22 -0
- package/lib/scene/SphereLight.js +20 -0
- package/lib/scene/SphereLight.js.map +1 -0
- package/lib/scene/SpotLight.d.ts +35 -0
- package/lib/scene/SpotLight.js +29 -0
- package/lib/scene/SpotLight.js.map +1 -0
- package/lib/scene/Texture.d.ts +38 -0
- package/lib/scene/Texture.js +37 -0
- package/lib/scene/Texture.js.map +1 -0
- package/lib/scene/anisotropyParameters.d.ts +1 -0
- package/lib/scene/anisotropyParameters.js +13 -0
- package/lib/scene/anisotropyParameters.js.map +1 -0
- package/lib/scene/geometryChanges.d.ts +5 -0
- package/lib/scene/geometryChanges.js +18 -0
- package/lib/scene/geometryChanges.js.map +1 -0
- package/lib/scene/materialTextureNames.d.ts +2 -0
- package/lib/scene/materialTextureNames.js +9 -0
- package/lib/scene/materialTextureNames.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +400 -0
- package/lib/scene/openPbrSchema.js +149 -0
- package/lib/scene/openPbrSchema.js.map +1 -0
- package/lib/scene/thinFilmParameters.d.ts +4 -0
- package/lib/scene/thinFilmParameters.js +12 -0
- package/lib/scene/thinFilmParameters.js.map +1 -0
- package/lib/settings/display.d.ts +118 -0
- package/lib/settings/display.js +34 -0
- package/lib/settings/display.js.map +1 -0
- package/lib/settings/engine.d.ts +37 -0
- package/lib/settings/engine.js +26 -0
- package/lib/settings/engine.js.map +1 -0
- package/lib/settings/render.d.ts +178 -0
- package/lib/settings/render.js +36 -0
- package/lib/settings/render.js.map +1 -0
- package/lib/tinybvh/LICENSE +21 -0
- package/lib/tinybvh/TinyBvhBuilder.d.ts +17 -0
- package/lib/tinybvh/TinyBvhBuilder.js +211 -0
- package/lib/tinybvh/TinyBvhBuilder.js.map +1 -0
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/types.d.ts +13 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/util/canvas.d.ts +2 -0
- package/lib/util/canvas.js +13 -0
- package/lib/util/canvas.js.map +1 -0
- package/lib/util/commonGeometry.d.ts +15 -0
- package/lib/util/commonGeometry.js +240 -0
- package/lib/util/commonGeometry.js.map +1 -0
- package/lib/util/events.d.ts +7 -0
- package/lib/util/events.js +23 -0
- package/lib/util/events.js.map +1 -0
- package/lib/util/frame.d.ts +2 -0
- package/lib/util/frame.js +10 -0
- package/lib/util/frame.js.map +1 -0
- package/lib/util/fromTHREE.d.ts +105 -0
- package/lib/util/fromTHREE.js +1111 -0
- package/lib/util/fromTHREE.js.map +1 -0
- package/lib/util/geometry.d.ts +13 -0
- package/lib/util/geometry.js +292 -0
- package/lib/util/geometry.js.map +1 -0
- package/lib/util/loadRGBE.d.ts +7 -0
- package/lib/util/loadRGBE.js +168 -0
- package/lib/util/loadRGBE.js.map +1 -0
- package/lib/util/math.d.ts +8 -0
- package/lib/util/math.js +64 -0
- package/lib/util/math.js.map +1 -0
- package/lib/util/mesh.d.ts +7 -0
- package/lib/util/mesh.js +20 -0
- package/lib/util/mesh.js.map +1 -0
- package/lib/util/threeDeformation.d.ts +20 -0
- package/lib/util/threeDeformation.js +218 -0
- package/lib/util/threeDeformation.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.js +3 -0
- package/lib/version.js.map +1 -0
- package/llms.txt +62 -0
- package/oidn/weights/LICENSE.txt +202 -0
- package/oidn/weights/README.md +43 -0
- package/oidn/weights/rt_hdr_alb_nrm.tza +0 -0
- package/oidn/weights/rt_hdr_alb_nrm_small.tza +0 -0
- package/package.json +124 -4
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { vec3 } from '../math.js';
|
|
2
|
+
import Geometry, { Attribute } from '../scene/Geometry.js';
|
|
3
|
+
import { generateVertexNormals, updateBoundingBox } from './geometry.js';
|
|
4
|
+
/** Unit sphere (radius 1) centered at the origin, with normals and UVs. */
|
|
5
|
+
export function createSphereGeometry(phiSegments = 40, thetaSegments = 20, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) {
|
|
6
|
+
const positions = [];
|
|
7
|
+
const uvs = [];
|
|
8
|
+
const normals = [];
|
|
9
|
+
const faces = [];
|
|
10
|
+
const radius = 1;
|
|
11
|
+
const divider = 1 / radius;
|
|
12
|
+
for (let j = 0; j <= thetaSegments; j++) {
|
|
13
|
+
for (let i = 0; i <= phiSegments; i++) {
|
|
14
|
+
const u = i / phiSegments;
|
|
15
|
+
const v = j / thetaSegments;
|
|
16
|
+
// X axis is inverted so texture can be mapped from left to right
|
|
17
|
+
const x = -radius *
|
|
18
|
+
Math.cos(phiStart + u * phiLength) *
|
|
19
|
+
Math.sin(thetaStart + v * thetaLength);
|
|
20
|
+
const y = radius * Math.cos(thetaStart + v * thetaLength);
|
|
21
|
+
const z = radius *
|
|
22
|
+
Math.sin(phiStart + u * phiLength) *
|
|
23
|
+
Math.sin(thetaStart + v * thetaLength);
|
|
24
|
+
positions.push(x, y, z);
|
|
25
|
+
uvs.push(u, v);
|
|
26
|
+
normals.push(x * divider, y * divider, z * divider);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
let i1, i2, i3, i4;
|
|
30
|
+
const len = phiSegments + 1;
|
|
31
|
+
let n = 0;
|
|
32
|
+
for (let j = 0; j < thetaSegments; j++) {
|
|
33
|
+
for (let i = 0; i < phiSegments; i++) {
|
|
34
|
+
i2 = j * len + i;
|
|
35
|
+
i1 = j * len + i + 1;
|
|
36
|
+
i4 = (j + 1) * len + i + 1;
|
|
37
|
+
i3 = (j + 1) * len + i;
|
|
38
|
+
faces[n++] = i1;
|
|
39
|
+
faces[n++] = i2;
|
|
40
|
+
faces[n++] = i4;
|
|
41
|
+
faces[n++] = i2;
|
|
42
|
+
faces[n++] = i3;
|
|
43
|
+
faces[n++] = i4;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const geo = new Geometry({
|
|
47
|
+
uv: new Attribute(new Float32Array(uvs), 2),
|
|
48
|
+
position: new Attribute(new Float32Array(positions), 3),
|
|
49
|
+
normal: new Attribute(new Float32Array(normals), 3),
|
|
50
|
+
indices: new Attribute(new Uint32Array(faces), 1)
|
|
51
|
+
});
|
|
52
|
+
vec3.set(geo.boundingBox.min, -1, -1, -1);
|
|
53
|
+
vec3.set(geo.boundingBox.max, 1, 1, 1);
|
|
54
|
+
return geo;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 2x2 plane centered at the origin. `horizontal` lies in XZ facing +Y,
|
|
58
|
+
* `vertical` lies in XY facing +Z.
|
|
59
|
+
*/
|
|
60
|
+
export function createPlaneGeometry(widthSegments = 1, heightSegments = 1, orient = 'horizontal') {
|
|
61
|
+
const positions = [];
|
|
62
|
+
const uvs = [];
|
|
63
|
+
const normals = [];
|
|
64
|
+
const faces = [];
|
|
65
|
+
const isVertical = orient === 'vertical';
|
|
66
|
+
for (let y = 0; y <= heightSegments; y++) {
|
|
67
|
+
const t = y / heightSegments;
|
|
68
|
+
for (let x = 0; x <= widthSegments; x++) {
|
|
69
|
+
const s = x / widthSegments;
|
|
70
|
+
if (isVertical) {
|
|
71
|
+
positions.push(2 * s - 1, 2 * t - 1, 0);
|
|
72
|
+
if (normals) {
|
|
73
|
+
normals.push(0, 0, 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
positions.push(2 * t - 1, 0, 2 * s - 1);
|
|
78
|
+
if (normals) {
|
|
79
|
+
normals.push(0, 1, 0);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (uvs) {
|
|
83
|
+
uvs.push(s, t);
|
|
84
|
+
}
|
|
85
|
+
if (x < widthSegments && y < heightSegments) {
|
|
86
|
+
const i = x + y * (widthSegments + 1);
|
|
87
|
+
faces.push(i, i + 1, i + widthSegments + 1);
|
|
88
|
+
faces.push(i + widthSegments + 1, i + 1, i + widthSegments + 2);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const geo = new Geometry({
|
|
93
|
+
uv: new Attribute(new Float32Array(uvs), 2),
|
|
94
|
+
position: new Attribute(new Float32Array(positions), 3),
|
|
95
|
+
normal: new Attribute(new Float32Array(normals), 3),
|
|
96
|
+
indices: new Attribute(new Uint32Array(faces), 1)
|
|
97
|
+
});
|
|
98
|
+
if (isVertical) {
|
|
99
|
+
vec3.set(geo.boundingBox.min, -1, -1, 0);
|
|
100
|
+
vec3.set(geo.boundingBox.max, 1, 1, 0);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
vec3.set(geo.boundingBox.min, -1, 0, -1);
|
|
104
|
+
vec3.set(geo.boundingBox.max, 1, 0, 1);
|
|
105
|
+
}
|
|
106
|
+
return geo;
|
|
107
|
+
}
|
|
108
|
+
/** 2x2x2 cube centered at the origin. */
|
|
109
|
+
export function createCubeGeometry(widthSegments = 1, heightSegments = 1, depthSegments = 1) {
|
|
110
|
+
const faces = [];
|
|
111
|
+
const positions = [];
|
|
112
|
+
const normals = [];
|
|
113
|
+
const uvs = [];
|
|
114
|
+
// helper variables
|
|
115
|
+
let offset = 0;
|
|
116
|
+
const w = 1;
|
|
117
|
+
const h = 1;
|
|
118
|
+
const d = 1;
|
|
119
|
+
// build each side of the box geometry
|
|
120
|
+
buildPlane(2, 1, 0, -1, -1, d, h, w, depthSegments, heightSegments); // px
|
|
121
|
+
buildPlane(2, 1, 0, 1, -1, d, h, -w, depthSegments, heightSegments); // nx
|
|
122
|
+
buildPlane(0, 2, 1, 1, 1, w, d, h, widthSegments, depthSegments); // py
|
|
123
|
+
buildPlane(0, 2, 1, 1, -1, w, d, -h, widthSegments, depthSegments); // ny
|
|
124
|
+
buildPlane(0, 1, 2, 1, -1, w, h, d, widthSegments, heightSegments); // pz
|
|
125
|
+
buildPlane(0, 1, 2, -1, -1, w, h, -d, widthSegments, heightSegments); // nz
|
|
126
|
+
// build geometry
|
|
127
|
+
function buildPlane(u, v, w, udir, vdir, width, height, depth, gridX, gridY) {
|
|
128
|
+
const segmentWidth = width / gridX;
|
|
129
|
+
const segmentHeight = height / gridY;
|
|
130
|
+
const widthHalf = width / 2;
|
|
131
|
+
const heightHalf = height / 2;
|
|
132
|
+
const depthHalf = depth / 2;
|
|
133
|
+
const gridX1 = gridX + 1;
|
|
134
|
+
const gridY1 = gridY + 1;
|
|
135
|
+
let vertexCounter = 0;
|
|
136
|
+
const vector = vec3.create();
|
|
137
|
+
// generate positions, normals and uvs
|
|
138
|
+
for (let iy = 0; iy < gridY1; iy++) {
|
|
139
|
+
const y = iy * segmentHeight - heightHalf;
|
|
140
|
+
for (let ix = 0; ix < gridX1; ix++) {
|
|
141
|
+
const x = ix * segmentWidth - widthHalf;
|
|
142
|
+
vector[u] = x * udir;
|
|
143
|
+
vector[v] = y * vdir;
|
|
144
|
+
vector[w] = depthHalf;
|
|
145
|
+
positions.push(vector[0], vector[1], vector[2]);
|
|
146
|
+
vector[u] = 0;
|
|
147
|
+
vector[v] = 0;
|
|
148
|
+
vector[w] = depth > 0 ? 1 : -1;
|
|
149
|
+
normals.push(vector[0], vector[1], vector[2]);
|
|
150
|
+
uvs.push(ix / gridX);
|
|
151
|
+
uvs.push(1 - iy / gridY);
|
|
152
|
+
vertexCounter += 1;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// indices
|
|
156
|
+
// 1. you need three indices to draw a single face
|
|
157
|
+
// 2. a single segment consists of two faces
|
|
158
|
+
// 3. so we need to generate six (2*3) indices per segment
|
|
159
|
+
for (let iy = 0; iy < gridY; iy++) {
|
|
160
|
+
for (let ix = 0; ix < gridX; ix++) {
|
|
161
|
+
const a = offset + ix + gridX1 * iy;
|
|
162
|
+
const b = offset + ix + gridX1 * (iy + 1);
|
|
163
|
+
const c = offset + (ix + 1) + gridX1 * (iy + 1);
|
|
164
|
+
const d = offset + (ix + 1) + gridX1 * iy;
|
|
165
|
+
// faces
|
|
166
|
+
faces.push(a, b, d);
|
|
167
|
+
faces.push(b, c, d);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
offset += vertexCounter;
|
|
171
|
+
}
|
|
172
|
+
const geo = new Geometry({
|
|
173
|
+
uv: new Attribute(new Float32Array(uvs), 2),
|
|
174
|
+
position: new Attribute(new Float32Array(positions), 3),
|
|
175
|
+
normal: new Attribute(new Float32Array(normals), 3),
|
|
176
|
+
indices: new Attribute(new Uint32Array(faces), 1)
|
|
177
|
+
});
|
|
178
|
+
vec3.set(geo.boundingBox.min, -1, -1, -1);
|
|
179
|
+
vec3.set(geo.boundingBox.max, 1, 1, 1);
|
|
180
|
+
return geo;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Studio backdrop ("infinity cove"): a floor that curves up into a back wall.
|
|
184
|
+
* `curveSize` is the fraction of the profile taken by the bend.
|
|
185
|
+
*/
|
|
186
|
+
export function createCurvePlaneGeometry(curveSize = 0.2) {
|
|
187
|
+
const faces = [];
|
|
188
|
+
const positions = [];
|
|
189
|
+
// Set width segments to 1 may have weired bands in ray tracing.
|
|
190
|
+
const widthSegments = 5;
|
|
191
|
+
const heightSegments = 200;
|
|
192
|
+
const texcoords = [];
|
|
193
|
+
const curveRadius = (curveSize / Math.PI) * 2;
|
|
194
|
+
const planeSize = (1 - curveSize) / 2;
|
|
195
|
+
let mm = 0;
|
|
196
|
+
for (let m = 0; m <= heightSegments; m++) {
|
|
197
|
+
// TODO t is stretched
|
|
198
|
+
let y, z;
|
|
199
|
+
let t = m / heightSegments;
|
|
200
|
+
// Skip the plane part to reduce the number of vertices.
|
|
201
|
+
if ((t > 0 && t <= planeSize - 1 / heightSegments) ||
|
|
202
|
+
(t >= planeSize + curveSize + 1 / heightSegments && t < 1)) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (t <= planeSize) {
|
|
206
|
+
y = 0;
|
|
207
|
+
z = curveRadius + planeSize - t;
|
|
208
|
+
}
|
|
209
|
+
else if (t >= planeSize + curveSize) {
|
|
210
|
+
y = t - planeSize - curveSize + curveRadius;
|
|
211
|
+
z = 0;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
const rad = (((t - planeSize) / curveSize) * Math.PI) / 2;
|
|
215
|
+
y = (1 - Math.cos(rad)) * curveRadius;
|
|
216
|
+
z = (1 - Math.sin(rad)) * curveRadius;
|
|
217
|
+
}
|
|
218
|
+
for (let n = 0; n <= widthSegments; n++) {
|
|
219
|
+
const s = n / widthSegments;
|
|
220
|
+
const x = 2 * s - 1;
|
|
221
|
+
positions.push([x, y * 2, z * 2]);
|
|
222
|
+
texcoords.push([s, t]);
|
|
223
|
+
if (n < widthSegments && m < heightSegments) {
|
|
224
|
+
const i = n + mm * (widthSegments + 1);
|
|
225
|
+
faces.push([i, i + 1, i + widthSegments + 1]);
|
|
226
|
+
faces.push([i + widthSegments + 1, i + 1, i + widthSegments + 2]);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
mm++;
|
|
230
|
+
}
|
|
231
|
+
const geo = new Geometry({
|
|
232
|
+
uv: new Attribute(new Float32Array(texcoords.flat()), 2),
|
|
233
|
+
position: new Attribute(new Float32Array(positions.flat()), 3),
|
|
234
|
+
indices: new Attribute(new Uint32Array(faces.flat()), 1)
|
|
235
|
+
});
|
|
236
|
+
updateBoundingBox(geo);
|
|
237
|
+
generateVertexNormals(geo);
|
|
238
|
+
return geo;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=commonGeometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commonGeometry.js","sourceRoot":"","sources":["../../src/util/commonGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { vec3 } from '../math.js';\nimport Geometry, { Attribute } from '../scene/Geometry.js';\nimport { generateVertexNormals, updateBoundingBox } from './geometry.js';\n\n/** Unit sphere (radius 1) centered at the origin, with normals and UVs. */\nexport function createSphereGeometry(\n phiSegments: number = 40,\n thetaSegments: number = 20,\n\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI\n) {\n const positions: number[] = [];\n const uvs: number[] = [];\n const normals: number[] = [];\n const faces: number[] = [];\n\n const radius = 1;\n const divider = 1 / radius;\n for (let j = 0; j <= thetaSegments; j++) {\n for (let i = 0; i <= phiSegments; i++) {\n const u = i / phiSegments;\n const v = j / thetaSegments;\n\n // X axis is inverted so texture can be mapped from left to right\n const x =\n -radius *\n Math.cos(phiStart + u * phiLength) *\n Math.sin(thetaStart + v * thetaLength);\n const y = radius * Math.cos(thetaStart + v * thetaLength);\n const z =\n radius *\n Math.sin(phiStart + u * phiLength) *\n Math.sin(thetaStart + v * thetaLength);\n\n positions.push(x, y, z);\n uvs.push(u, v);\n normals.push(x * divider, y * divider, z * divider);\n }\n }\n\n let i1, i2, i3, i4;\n\n const len = phiSegments + 1;\n\n let n = 0;\n for (let j = 0; j < thetaSegments; j++) {\n for (let i = 0; i < phiSegments; i++) {\n i2 = j * len + i;\n i1 = j * len + i + 1;\n i4 = (j + 1) * len + i + 1;\n i3 = (j + 1) * len + i;\n\n faces[n++] = i1;\n faces[n++] = i2;\n faces[n++] = i4;\n\n faces[n++] = i2;\n faces[n++] = i3;\n faces[n++] = i4;\n }\n }\n const geo = new Geometry({\n uv: new Attribute(new Float32Array(uvs), 2),\n position: new Attribute(new Float32Array(positions), 3),\n normal: new Attribute(new Float32Array(normals), 3),\n indices: new Attribute(new Uint32Array(faces), 1)\n });\n vec3.set(geo.boundingBox.min, -1, -1, -1);\n vec3.set(geo.boundingBox.max, 1, 1, 1);\n return geo;\n}\n\n/**\n * 2x2 plane centered at the origin. `horizontal` lies in XZ facing +Y,\n * `vertical` lies in XY facing +Z.\n */\nexport function createPlaneGeometry(\n widthSegments = 1,\n heightSegments = 1,\n orient: 'horizontal' | 'vertical' = 'horizontal'\n) {\n const positions: number[] = [];\n const uvs: number[] = [];\n const normals: number[] = [];\n const faces: number[] = [];\n const isVertical = orient === 'vertical';\n\n for (let y = 0; y <= heightSegments; y++) {\n const t = y / heightSegments;\n for (let x = 0; x <= widthSegments; x++) {\n const s = x / widthSegments;\n\n if (isVertical) {\n positions.push(2 * s - 1, 2 * t - 1, 0);\n if (normals) {\n normals.push(0, 0, 1);\n }\n } else {\n positions.push(2 * t - 1, 0, 2 * s - 1);\n if (normals) {\n normals.push(0, 1, 0);\n }\n }\n if (uvs) {\n uvs.push(s, t);\n }\n if (x < widthSegments && y < heightSegments) {\n const i = x + y * (widthSegments + 1);\n faces.push(i, i + 1, i + widthSegments + 1);\n faces.push(i + widthSegments + 1, i + 1, i + widthSegments + 2);\n }\n }\n }\n\n const geo = new Geometry({\n uv: new Attribute(new Float32Array(uvs), 2),\n position: new Attribute(new Float32Array(positions), 3),\n normal: new Attribute(new Float32Array(normals), 3),\n indices: new Attribute(new Uint32Array(faces), 1)\n });\n\n if (isVertical) {\n vec3.set(geo.boundingBox.min, -1, -1, 0);\n vec3.set(geo.boundingBox.max, 1, 1, 0);\n } else {\n vec3.set(geo.boundingBox.min, -1, 0, -1);\n vec3.set(geo.boundingBox.max, 1, 0, 1);\n }\n return geo;\n}\n\n/** 2x2x2 cube centered at the origin. */\nexport function createCubeGeometry(\n widthSegments: number = 1,\n heightSegments: number = 1,\n depthSegments: number = 1\n) {\n const faces: number[] = [];\n const positions: number[] = [];\n const normals: number[] = [];\n const uvs: number[] = [];\n\n // helper variables\n\n let offset = 0;\n\n const w = 1;\n const h = 1;\n const d = 1;\n\n // build each side of the box geometry\n\n buildPlane(2, 1, 0, -1, -1, d, h, w, depthSegments, heightSegments); // px\n buildPlane(2, 1, 0, 1, -1, d, h, -w, depthSegments, heightSegments); // nx\n buildPlane(0, 2, 1, 1, 1, w, d, h, widthSegments, depthSegments); // py\n buildPlane(0, 2, 1, 1, -1, w, d, -h, widthSegments, depthSegments); // ny\n buildPlane(0, 1, 2, 1, -1, w, h, d, widthSegments, heightSegments); // pz\n buildPlane(0, 1, 2, -1, -1, w, h, -d, widthSegments, heightSegments); // nz\n\n // build geometry\n\n function buildPlane(\n u: 0 | 1 | 2,\n v: 0 | 1 | 2,\n w: 0 | 1 | 2,\n udir: number,\n vdir: number,\n width: number,\n height: number,\n depth: number,\n gridX: number,\n gridY: number\n ) {\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n let vertexCounter = 0;\n\n const vector = vec3.create();\n\n // generate positions, normals and uvs\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n\n vector[u] = x * udir;\n vector[v] = y * vdir;\n vector[w] = depthHalf;\n\n positions.push(vector[0], vector[1], vector[2]);\n\n vector[u] = 0;\n vector[v] = 0;\n vector[w] = depth > 0 ? 1 : -1;\n\n normals.push(vector[0], vector[1], vector[2]);\n\n uvs.push(ix / gridX);\n uvs.push(1 - iy / gridY);\n\n vertexCounter += 1;\n }\n }\n\n // indices\n\n // 1. you need three indices to draw a single face\n // 2. a single segment consists of two faces\n // 3. so we need to generate six (2*3) indices per segment\n\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = offset + ix + gridX1 * iy;\n const b = offset + ix + gridX1 * (iy + 1);\n const c = offset + (ix + 1) + gridX1 * (iy + 1);\n const d = offset + (ix + 1) + gridX1 * iy;\n\n // faces\n faces.push(a, b, d);\n faces.push(b, c, d);\n }\n }\n\n offset += vertexCounter;\n }\n\n const geo = new Geometry({\n uv: new Attribute(new Float32Array(uvs), 2),\n position: new Attribute(new Float32Array(positions), 3),\n normal: new Attribute(new Float32Array(normals), 3),\n indices: new Attribute(new Uint32Array(faces), 1)\n });\n vec3.set(geo.boundingBox.min, -1, -1, -1);\n vec3.set(geo.boundingBox.max, 1, 1, 1);\n return geo;\n}\n\n/**\n * Studio backdrop (\"infinity cove\"): a floor that curves up into a back wall.\n * `curveSize` is the fraction of the profile taken by the bend.\n */\nexport function createCurvePlaneGeometry(curveSize = 0.2) {\n const faces = [];\n const positions = [];\n // Set width segments to 1 may have weired bands in ray tracing.\n const widthSegments = 5;\n const heightSegments = 200;\n const texcoords = [];\n const curveRadius = (curveSize / Math.PI) * 2;\n const planeSize = (1 - curveSize) / 2;\n\n let mm = 0;\n for (let m = 0; m <= heightSegments; m++) {\n // TODO t is stretched\n let y, z;\n let t = m / heightSegments;\n\n // Skip the plane part to reduce the number of vertices.\n if (\n (t > 0 && t <= planeSize - 1 / heightSegments) ||\n (t >= planeSize + curveSize + 1 / heightSegments && t < 1)\n ) {\n continue;\n }\n\n if (t <= planeSize) {\n y = 0;\n z = curveRadius + planeSize - t;\n } else if (t >= planeSize + curveSize) {\n y = t - planeSize - curveSize + curveRadius;\n z = 0;\n } else {\n const rad = (((t - planeSize) / curveSize) * Math.PI) / 2;\n y = (1 - Math.cos(rad)) * curveRadius;\n z = (1 - Math.sin(rad)) * curveRadius;\n }\n\n for (let n = 0; n <= widthSegments; n++) {\n const s = n / widthSegments;\n const x = 2 * s - 1;\n positions.push([x, y * 2, z * 2]);\n texcoords.push([s, t]);\n if (n < widthSegments && m < heightSegments) {\n const i = n + mm * (widthSegments + 1);\n faces.push([i, i + 1, i + widthSegments + 1]);\n faces.push([i + widthSegments + 1, i + 1, i + widthSegments + 2]);\n }\n }\n mm++;\n }\n const geo = new Geometry({\n uv: new Attribute(new Float32Array(texcoords.flat()), 2),\n position: new Attribute(new Float32Array(positions.flat()), 3),\n indices: new Attribute(new Uint32Array(faces.flat()), 1)\n });\n updateBoundingBox(geo);\n generateVertexNormals(geo);\n return geo;\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Internal typed event subscriptions. A failing listener does not block others. */
|
|
2
|
+
export declare class Events<T extends object> {
|
|
3
|
+
private listeners;
|
|
4
|
+
on<K extends keyof T>(name: K, listener: (event: T[K]) => void): () => void;
|
|
5
|
+
emit<K extends keyof T>(name: K, event: T[K]): void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Internal typed event subscriptions. A failing listener does not block others. */
|
|
2
|
+
export class Events {
|
|
3
|
+
listeners = new Map();
|
|
4
|
+
on(name, listener) {
|
|
5
|
+
let listeners = this.listeners.get(name);
|
|
6
|
+
if (!listeners)
|
|
7
|
+
this.listeners.set(name, listeners = new Set());
|
|
8
|
+
listeners.add(listener);
|
|
9
|
+
return () => { listeners.delete(listener); };
|
|
10
|
+
}
|
|
11
|
+
emit(name, event) {
|
|
12
|
+
for (const listener of [...this.listeners.get(name) ?? []]) {
|
|
13
|
+
try {
|
|
14
|
+
listener(event);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error('Event listener failed.', error);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
clear() { this.listeners.clear(); }
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/util/events.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,OAAO,MAAM;IACT,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IAClE,EAAE,CAAoB,IAAO,EAAE,QAA+B;QAC5D,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAChE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAoB,IAAO,EAAE,KAAW;QAC1C,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC;gBAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,KAAK,KAAW,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC1C","sourcesContent":["/** Internal typed event subscriptions. A failing listener does not block others. */\nexport class Events<T extends object> {\n private listeners = new Map<keyof T, Set<(event: any) => void>>();\n on<K extends keyof T>(name: K, listener: (event: T[K]) => void): () => void {\n let listeners = this.listeners.get(name);\n if (!listeners) this.listeners.set(name, listeners = new Set());\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n }\n emit<K extends keyof T>(name: K, event: T[K]): void {\n for (const listener of [...this.listeners.get(name) ?? []]) {\n try { listener(event); } catch (error) { console.error('Event listener failed.', error); }\n }\n }\n clear(): void { this.listeners.clear(); }\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Internal frame scheduling; dedicated workers without rAF use a 16 ms timer. */
|
|
2
|
+
export function scheduleFrame(callback) {
|
|
3
|
+
if (typeof requestAnimationFrame === 'function') {
|
|
4
|
+
const id = requestAnimationFrame(callback);
|
|
5
|
+
return () => cancelAnimationFrame(id);
|
|
6
|
+
}
|
|
7
|
+
const id = setTimeout(() => callback(performance.now()), 16);
|
|
8
|
+
return () => clearTimeout(id);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/util/frame.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,QAAgC;IAC5D,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/** Internal frame scheduling; dedicated workers without rAF use a 16 ms timer. */\nexport function scheduleFrame(callback: (time: number) => void): () => void {\n if (typeof requestAnimationFrame === 'function') {\n const id = requestAnimationFrame(callback); return () => cancelAnimationFrame(id);\n }\n const id = setTimeout(() => callback(performance.now()), 16);\n return () => clearTimeout(id);\n}\n"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import InstancedMesh from '../scene/InstancedMesh.js';
|
|
2
|
+
import Sync from '../Sync.js';
|
|
3
|
+
import type Engine from '../Engine.js';
|
|
4
|
+
import type * as THREE from 'three';
|
|
5
|
+
import Mesh from '../scene/Mesh.js';
|
|
6
|
+
import OpenPBRMaterial from '../scene/OpenPBRMaterial.js';
|
|
7
|
+
import Camera from '../scene/Camera.js';
|
|
8
|
+
import { Scene, SceneLight } from '../scene/Scene.js';
|
|
9
|
+
/** Options for one-shot conversion and persistent Three.js synchronization. */
|
|
10
|
+
export interface FromTHREESceneOptions {
|
|
11
|
+
/** Custom material conversion. Default undefined uses built-in conversion; returning null skips every mesh using this material. THREESync invokes once per source material identity/version, so the result cannot depend on a particular mesh. Returned materials are caller-owned; engine.update detects parameter edits. */
|
|
12
|
+
convertMaterial?(material: THREE.Material): OpenPBRMaterial | null | undefined;
|
|
13
|
+
/** Custom light conversion. Default undefined uses built-in conversion; returning null skips this light. THREESync invokes once per source light identity and numeric userData.mutracerVersion (default undefined, never rerun). Returned lights are retained by identity and remain caller-owned. */
|
|
14
|
+
convertLight?(light: THREE.Light): SceneLight | null | undefined;
|
|
15
|
+
/** Receives each converted visible mesh/group on every update. Default: no callback. */
|
|
16
|
+
onMeshConverted?(mesh: Mesh | InstancedMesh, source: THREE.Mesh, group: {
|
|
17
|
+
start: number;
|
|
18
|
+
count: number;
|
|
19
|
+
materialIndex?: number;
|
|
20
|
+
}, groupIndex: number): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Converts a Three.js scene into a MuTracer {@link Scene}: meshes with
|
|
24
|
+
* `MeshStandardMaterial` / `MeshPhysicalMaterial` (mapped to OpenPBR),
|
|
25
|
+
* directional, ambient, rect-area, point and spot lights, and the scene
|
|
26
|
+
* background / environment. Calls `scene.updateMatrixWorld()` and creates fresh objects on every call.
|
|
27
|
+
* CPU-evaluates skinning/morph targets and batches InstancedMesh instances
|
|
28
|
+
* with shared geometry, native colors and cached projection material variants. Unsupported batched
|
|
29
|
+
* or instanced deformation falls back to an ordinary mesh with a warning.
|
|
30
|
+
* For animation and editing, use {@link THREESync}.
|
|
31
|
+
*
|
|
32
|
+
* Renderer-specific material settings can be supplied through
|
|
33
|
+
* `material.userData`, e.g. `userData.mutracerShadowCatcher = true` or
|
|
34
|
+
* `userData.mutracerOpenPBR = { ... }` for OpenPBR inputs without a Three.js
|
|
35
|
+
* equivalent.
|
|
36
|
+
*/
|
|
37
|
+
export declare function fromTHREEScene(scene: THREE.Scene, options?: FromTHREESceneOptions): Scene;
|
|
38
|
+
/** Structural control interface; no Three.js imports are needed in core APIs. */
|
|
39
|
+
export interface THREEControls {
|
|
40
|
+
update(deltaTime?: number): boolean | void;
|
|
41
|
+
addEventListener(type: 'start' | 'end', listener: () => void): void;
|
|
42
|
+
removeEventListener(type: 'start' | 'end', listener: () => void): void;
|
|
43
|
+
target?: THREE.Vector3;
|
|
44
|
+
enableDamping?: boolean;
|
|
45
|
+
/** Damping per 60 Hz frame; synchronization adjusts it for elapsed time. Default undefined uses the control's own timing. */
|
|
46
|
+
dampingFactor?: number;
|
|
47
|
+
autoRotate?: boolean;
|
|
48
|
+
enabled?: boolean;
|
|
49
|
+
/** Optional OrbitControls polar-angle accessor. Default undefined. */ getPolarAngle?(): number;
|
|
50
|
+
/** Optional OrbitControls azimuthal-angle accessor. Default undefined. */ getAzimuthalAngle?(): number;
|
|
51
|
+
}
|
|
52
|
+
/** Three.js sources synchronized on each tick. */
|
|
53
|
+
export interface THREESyncOptions extends FromTHREESceneOptions {
|
|
54
|
+
/** Scene source. Default undefined (engine.scene is untouched). */ scene?: THREE.Scene;
|
|
55
|
+
/** Camera source. Default undefined (engine.camera is untouched). */ camera?: THREE.PerspectiveCamera | THREE.OrthographicCamera;
|
|
56
|
+
/** Camera controls. Default undefined. */ controls?: THREEControls;
|
|
57
|
+
/** Call controls.update during synchronization. Default true. */ updateControls?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Keeps one MuTracer scene in sync with a Three.js scene, reusing unchanged objects.
|
|
61
|
+
* Skinning/morph targets run on the CPU with per-source-mesh dynamic geometry.
|
|
62
|
+
* InstancedMesh retains its prefix on count changes and shares geometry/BLAS;
|
|
63
|
+
* Instance colors use native batch storage; automatic UV-less projections
|
|
64
|
+
* share cached material variants per source material. Source edits refresh variants; unused variants
|
|
65
|
+
* are removed after each update.
|
|
66
|
+
*/
|
|
67
|
+
export declare class THREESync extends Sync {
|
|
68
|
+
private _options;
|
|
69
|
+
/** Retained converted scene; absent when no scene source was supplied. */
|
|
70
|
+
readonly scene: Scene | undefined;
|
|
71
|
+
/** Retained converted camera; absent until the first camera update. */
|
|
72
|
+
private _camera?;
|
|
73
|
+
private _store;
|
|
74
|
+
private _disposed;
|
|
75
|
+
private _started;
|
|
76
|
+
private _cameraState;
|
|
77
|
+
private _lastUpdate?;
|
|
78
|
+
private _idleControlsState?;
|
|
79
|
+
private _start;
|
|
80
|
+
private _end;
|
|
81
|
+
/** Subscribes to controls without converting sources or modifying the engine. */
|
|
82
|
+
constructor(engine: Engine, _options?: THREESyncOptions);
|
|
83
|
+
/** Updates controls, world matrices, retained instances and camera before engine.update. */
|
|
84
|
+
update(): void;
|
|
85
|
+
/** Removes control subscriptions and caches. The last converted objects remain usable. */
|
|
86
|
+
dispose(): void;
|
|
87
|
+
}
|
|
88
|
+
/** Lens settings for {@link fromTHREECamera}. */
|
|
89
|
+
export interface FromTHREECameraOptions {
|
|
90
|
+
/** Lens f-number; `0` disables depth of field. Default `0`. */
|
|
91
|
+
fStop?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Distance to the plane in focus in scene units. Default: the perspective
|
|
94
|
+
* camera's `focus` (Three.js default `10`), otherwise `10`.
|
|
95
|
+
*/
|
|
96
|
+
focusDistance?: number;
|
|
97
|
+
/** Length of one scene unit in metres. Default `1`. */
|
|
98
|
+
metersPerUnit?: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Converts a Three.js perspective or orthographic camera. A perspective
|
|
102
|
+
* camera's `focus` and film height (`filmGauge` and `aspect`) become
|
|
103
|
+
* `focusDistance` and `sensorHeight`.
|
|
104
|
+
*/
|
|
105
|
+
export declare function fromTHREECamera(threeCamera: THREE.PerspectiveCamera | THREE.OrthographicCamera, options?: FromTHREECameraOptions): Camera;
|