@plastic-software/three 0.175.14 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
package/src/math/Frustum.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { WebGLCoordinateSystem, WebGPUCoordinateSystem } from '../constants.js';
|
|
2
|
+
import { Vector2 } from './Vector2.js';
|
|
2
3
|
import { Vector3 } from './Vector3.js';
|
|
3
4
|
import { Sphere } from './Sphere.js';
|
|
4
5
|
import { Plane } from './Plane.js';
|
|
5
6
|
|
|
6
7
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
8
|
+
const _defaultSpriteCenter = /*@__PURE__*/ new Vector2( 0.5, 0.5 );
|
|
7
9
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -87,9 +89,10 @@ class Frustum {
|
|
|
87
89
|
*
|
|
88
90
|
* @param {Matrix4} m - The projection matrix.
|
|
89
91
|
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} coordinateSystem - The coordinate system.
|
|
92
|
+
* @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
|
|
90
93
|
* @return {Frustum} A reference to this frustum.
|
|
91
94
|
*/
|
|
92
|
-
setFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {
|
|
95
|
+
setFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
|
|
93
96
|
|
|
94
97
|
const planes = this.planes;
|
|
95
98
|
const me = m.elements;
|
|
@@ -102,19 +105,29 @@ class Frustum {
|
|
|
102
105
|
planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
|
|
103
106
|
planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
|
|
104
107
|
planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
|
|
105
|
-
planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
|
|
106
108
|
|
|
107
|
-
if (
|
|
109
|
+
if ( reversedDepth ) {
|
|
108
110
|
|
|
109
|
-
planes[
|
|
111
|
+
planes[ 4 ].setComponents( me2, me6, me10, me14 ).normalize(); // far
|
|
112
|
+
planes[ 5 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // near
|
|
110
113
|
|
|
111
|
-
} else
|
|
114
|
+
} else {
|
|
112
115
|
|
|
113
|
-
planes[
|
|
116
|
+
planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); // far
|
|
114
117
|
|
|
115
|
-
|
|
118
|
+
if ( coordinateSystem === WebGLCoordinateSystem ) {
|
|
119
|
+
|
|
120
|
+
planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); // near
|
|
121
|
+
|
|
122
|
+
} else if ( coordinateSystem === WebGPUCoordinateSystem ) {
|
|
123
|
+
|
|
124
|
+
planes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize(); // near
|
|
116
125
|
|
|
117
|
-
|
|
126
|
+
} else {
|
|
127
|
+
|
|
128
|
+
throw new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );
|
|
129
|
+
|
|
130
|
+
}
|
|
118
131
|
|
|
119
132
|
}
|
|
120
133
|
|
|
@@ -161,7 +174,10 @@ class Frustum {
|
|
|
161
174
|
intersectsSprite( sprite ) {
|
|
162
175
|
|
|
163
176
|
_sphere.center.set( 0, 0, 0 );
|
|
164
|
-
|
|
177
|
+
|
|
178
|
+
const offset = _defaultSpriteCenter.distanceTo( sprite.center );
|
|
179
|
+
|
|
180
|
+
_sphere.radius = 0.7071067811865476 + offset;
|
|
165
181
|
_sphere.applyMatrix4( sprite.matrixWorld );
|
|
166
182
|
|
|
167
183
|
return this.intersectsSphere( _sphere );
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { WebGLCoordinateSystem } from '../constants.js';
|
|
2
|
+
import { Frustum } from './Frustum.js';
|
|
3
|
+
import { Matrix4 } from './Matrix4.js';
|
|
4
|
+
|
|
5
|
+
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
6
|
+
const _frustum = /*@__PURE__*/ new Frustum();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* FrustumArray is used to determine if an object is visible in at least one camera
|
|
10
|
+
* from an array of cameras. This is particularly useful for multi-view renderers.
|
|
11
|
+
*/
|
|
12
|
+
class FrustumArray {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new frustum array.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
constructor() {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The coordinate system to use.
|
|
22
|
+
*
|
|
23
|
+
* @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}
|
|
24
|
+
* @default WebGLCoordinateSystem
|
|
25
|
+
*/
|
|
26
|
+
this.coordinateSystem = WebGLCoordinateSystem;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Returns `true` if the 3D object's bounding sphere is intersecting any frustum
|
|
32
|
+
* from the camera array.
|
|
33
|
+
*
|
|
34
|
+
* @param {Object3D} object - The 3D object to test.
|
|
35
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
36
|
+
* @return {boolean} Whether the 3D object is visible in any camera.
|
|
37
|
+
*/
|
|
38
|
+
intersectsObject( object, cameraArray ) {
|
|
39
|
+
|
|
40
|
+
if ( ! cameraArray.isArrayCamera || cameraArray.cameras.length === 0 ) {
|
|
41
|
+
|
|
42
|
+
return false;
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
47
|
+
|
|
48
|
+
const camera = cameraArray.cameras[ i ];
|
|
49
|
+
|
|
50
|
+
_projScreenMatrix.multiplyMatrices(
|
|
51
|
+
camera.projectionMatrix,
|
|
52
|
+
camera.matrixWorldInverse
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
_frustum.setFromProjectionMatrix(
|
|
56
|
+
_projScreenMatrix,
|
|
57
|
+
camera.coordinateSystem,
|
|
58
|
+
camera.reversedDepth
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
if ( _frustum.intersectsObject( object ) ) {
|
|
62
|
+
|
|
63
|
+
return true; // Object is visible in at least one camera
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return false; // Not visible in any camera
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns `true` if the given sprite is intersecting any frustum
|
|
75
|
+
* from the camera array.
|
|
76
|
+
*
|
|
77
|
+
* @param {Sprite} sprite - The sprite to test.
|
|
78
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
79
|
+
* @return {boolean} Whether the sprite is visible in any camera.
|
|
80
|
+
*/
|
|
81
|
+
intersectsSprite( sprite, cameraArray ) {
|
|
82
|
+
|
|
83
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
84
|
+
|
|
85
|
+
return false;
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
90
|
+
|
|
91
|
+
const camera = cameraArray.cameras[ i ];
|
|
92
|
+
|
|
93
|
+
_projScreenMatrix.multiplyMatrices(
|
|
94
|
+
camera.projectionMatrix,
|
|
95
|
+
camera.matrixWorldInverse
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
_frustum.setFromProjectionMatrix(
|
|
99
|
+
_projScreenMatrix,
|
|
100
|
+
camera.coordinateSystem,
|
|
101
|
+
camera.reversedDepth
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
if ( _frustum.intersectsSprite( sprite ) ) {
|
|
105
|
+
|
|
106
|
+
return true; // Sprite is visible in at least one camera
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return false; // Not visible in any camera
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Returns `true` if the given bounding sphere is intersecting any frustum
|
|
118
|
+
* from the camera array.
|
|
119
|
+
*
|
|
120
|
+
* @param {Sphere} sphere - The bounding sphere to test.
|
|
121
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
122
|
+
* @return {boolean} Whether the sphere is visible in any camera.
|
|
123
|
+
*/
|
|
124
|
+
intersectsSphere( sphere, cameraArray ) {
|
|
125
|
+
|
|
126
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
127
|
+
|
|
128
|
+
return false;
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
133
|
+
|
|
134
|
+
const camera = cameraArray.cameras[ i ];
|
|
135
|
+
|
|
136
|
+
_projScreenMatrix.multiplyMatrices(
|
|
137
|
+
camera.projectionMatrix,
|
|
138
|
+
camera.matrixWorldInverse
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
_frustum.setFromProjectionMatrix(
|
|
142
|
+
_projScreenMatrix,
|
|
143
|
+
camera.coordinateSystem,
|
|
144
|
+
camera.reversedDepth
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
if ( _frustum.intersectsSphere( sphere ) ) {
|
|
148
|
+
|
|
149
|
+
return true; // Sphere is visible in at least one camera
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return false; // Not visible in any camera
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Returns `true` if the given bounding box is intersecting any frustum
|
|
161
|
+
* from the camera array.
|
|
162
|
+
*
|
|
163
|
+
* @param {Box3} box - The bounding box to test.
|
|
164
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
165
|
+
* @return {boolean} Whether the box is visible in any camera.
|
|
166
|
+
*/
|
|
167
|
+
intersectsBox( box, cameraArray ) {
|
|
168
|
+
|
|
169
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
170
|
+
|
|
171
|
+
return false;
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
176
|
+
|
|
177
|
+
const camera = cameraArray.cameras[ i ];
|
|
178
|
+
|
|
179
|
+
_projScreenMatrix.multiplyMatrices(
|
|
180
|
+
camera.projectionMatrix,
|
|
181
|
+
camera.matrixWorldInverse
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
_frustum.setFromProjectionMatrix(
|
|
185
|
+
_projScreenMatrix,
|
|
186
|
+
camera.coordinateSystem,
|
|
187
|
+
camera.reversedDepth
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
if ( _frustum.intersectsBox( box ) ) {
|
|
191
|
+
|
|
192
|
+
return true; // Box is visible in at least one camera
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return false; // Not visible in any camera
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Returns `true` if the given point lies within any frustum
|
|
204
|
+
* from the camera array.
|
|
205
|
+
*
|
|
206
|
+
* @param {Vector3} point - The point to test.
|
|
207
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
208
|
+
* @return {boolean} Whether the point is visible in any camera.
|
|
209
|
+
*/
|
|
210
|
+
containsPoint( point, cameraArray ) {
|
|
211
|
+
|
|
212
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
213
|
+
|
|
214
|
+
return false;
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
219
|
+
|
|
220
|
+
const camera = cameraArray.cameras[ i ];
|
|
221
|
+
|
|
222
|
+
_projScreenMatrix.multiplyMatrices(
|
|
223
|
+
camera.projectionMatrix,
|
|
224
|
+
camera.matrixWorldInverse
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
_frustum.setFromProjectionMatrix(
|
|
228
|
+
_projScreenMatrix,
|
|
229
|
+
camera.coordinateSystem,
|
|
230
|
+
camera.reversedDepth
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
if ( _frustum.containsPoint( point ) ) {
|
|
234
|
+
|
|
235
|
+
return true; // Point is visible in at least one camera
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return false; // Not visible in any camera
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Returns a new frustum array with copied values from this instance.
|
|
247
|
+
*
|
|
248
|
+
* @return {FrustumArray} A clone of this instance.
|
|
249
|
+
*/
|
|
250
|
+
clone() {
|
|
251
|
+
|
|
252
|
+
return new FrustumArray();
|
|
253
|
+
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export { FrustumArray };
|
package/src/math/Line3.js
CHANGED
|
@@ -4,6 +4,12 @@ import { clamp } from './MathUtils.js';
|
|
|
4
4
|
const _startP = /*@__PURE__*/ new Vector3();
|
|
5
5
|
const _startEnd = /*@__PURE__*/ new Vector3();
|
|
6
6
|
|
|
7
|
+
const _d1 = /*@__PURE__*/ new Vector3();
|
|
8
|
+
const _d2 = /*@__PURE__*/ new Vector3();
|
|
9
|
+
const _r = /*@__PURE__*/ new Vector3();
|
|
10
|
+
const _c1 = /*@__PURE__*/ new Vector3();
|
|
11
|
+
const _c2 = /*@__PURE__*/ new Vector3();
|
|
12
|
+
|
|
7
13
|
/**
|
|
8
14
|
* An analytical line segment in 3D space represented by a start and end point.
|
|
9
15
|
*/
|
|
@@ -151,11 +157,11 @@ class Line3 {
|
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
/**
|
|
154
|
-
* Returns the
|
|
160
|
+
* Returns the closest point on the line for a given point.
|
|
155
161
|
*
|
|
156
162
|
* @param {Vector3} point - The point to compute the closest point on the line for.
|
|
157
163
|
* @param {boolean} clampToLine - Whether to clamp the result to the range `[0,1]` or not.
|
|
158
|
-
* @param {Vector3} target -
|
|
164
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
159
165
|
* @return {Vector3} The closest point on the line.
|
|
160
166
|
*/
|
|
161
167
|
closestPointToPoint( point, clampToLine, target ) {
|
|
@@ -166,6 +172,127 @@ class Line3 {
|
|
|
166
172
|
|
|
167
173
|
}
|
|
168
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Returns the closest squared distance between this line segment and the given one.
|
|
177
|
+
*
|
|
178
|
+
* @param {Line3} line - The line segment to compute the closest squared distance to.
|
|
179
|
+
* @param {Vector3} [c1] - The closest point on this line segment.
|
|
180
|
+
* @param {Vector3} [c2] - The closest point on the given line segment.
|
|
181
|
+
* @return {number} The squared distance between this line segment and the given one.
|
|
182
|
+
*/
|
|
183
|
+
distanceSqToLine3( line, c1 = _c1, c2 = _c2 ) {
|
|
184
|
+
|
|
185
|
+
// from Real-Time Collision Detection by Christer Ericson, chapter 5.1.9
|
|
186
|
+
|
|
187
|
+
// Computes closest points C1 and C2 of S1(s)=P1+s*(Q1-P1) and
|
|
188
|
+
// S2(t)=P2+t*(Q2-P2), returning s and t. Function result is squared
|
|
189
|
+
// distance between between S1(s) and S2(t)
|
|
190
|
+
|
|
191
|
+
const EPSILON = 1e-8 * 1e-8; // must be squared since we compare squared length
|
|
192
|
+
let s, t;
|
|
193
|
+
|
|
194
|
+
const p1 = this.start;
|
|
195
|
+
const p2 = line.start;
|
|
196
|
+
const q1 = this.end;
|
|
197
|
+
const q2 = line.end;
|
|
198
|
+
|
|
199
|
+
_d1.subVectors( q1, p1 ); // Direction vector of segment S1
|
|
200
|
+
_d2.subVectors( q2, p2 ); // Direction vector of segment S2
|
|
201
|
+
_r.subVectors( p1, p2 );
|
|
202
|
+
|
|
203
|
+
const a = _d1.dot( _d1 ); // Squared length of segment S1, always nonnegative
|
|
204
|
+
const e = _d2.dot( _d2 ); // Squared length of segment S2, always nonnegative
|
|
205
|
+
const f = _d2.dot( _r );
|
|
206
|
+
|
|
207
|
+
// Check if either or both segments degenerate into points
|
|
208
|
+
|
|
209
|
+
if ( a <= EPSILON && e <= EPSILON ) {
|
|
210
|
+
|
|
211
|
+
// Both segments degenerate into points
|
|
212
|
+
|
|
213
|
+
c1.copy( p1 );
|
|
214
|
+
c2.copy( p2 );
|
|
215
|
+
|
|
216
|
+
c1.sub( c2 );
|
|
217
|
+
|
|
218
|
+
return c1.dot( c1 );
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if ( a <= EPSILON ) {
|
|
223
|
+
|
|
224
|
+
// First segment degenerates into a point
|
|
225
|
+
|
|
226
|
+
s = 0;
|
|
227
|
+
t = f / e; // s = 0 => t = (b*s + f) / e = f / e
|
|
228
|
+
t = clamp( t, 0, 1 );
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
} else {
|
|
232
|
+
|
|
233
|
+
const c = _d1.dot( _r );
|
|
234
|
+
|
|
235
|
+
if ( e <= EPSILON ) {
|
|
236
|
+
|
|
237
|
+
// Second segment degenerates into a point
|
|
238
|
+
|
|
239
|
+
t = 0;
|
|
240
|
+
s = clamp( - c / a, 0, 1 ); // t = 0 => s = (b*t - c) / a = -c / a
|
|
241
|
+
|
|
242
|
+
} else {
|
|
243
|
+
|
|
244
|
+
// The general nondegenerate case starts here
|
|
245
|
+
|
|
246
|
+
const b = _d1.dot( _d2 );
|
|
247
|
+
const denom = a * e - b * b; // Always nonnegative
|
|
248
|
+
|
|
249
|
+
// If segments not parallel, compute closest point on L1 to L2 and
|
|
250
|
+
// clamp to segment S1. Else pick arbitrary s (here 0)
|
|
251
|
+
|
|
252
|
+
if ( denom !== 0 ) {
|
|
253
|
+
|
|
254
|
+
s = clamp( ( b * f - c * e ) / denom, 0, 1 );
|
|
255
|
+
|
|
256
|
+
} else {
|
|
257
|
+
|
|
258
|
+
s = 0;
|
|
259
|
+
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Compute point on L2 closest to S1(s) using
|
|
263
|
+
// t = Dot((P1 + D1*s) - P2,D2) / Dot(D2,D2) = (b*s + f) / e
|
|
264
|
+
|
|
265
|
+
t = ( b * s + f ) / e;
|
|
266
|
+
|
|
267
|
+
// If t in [0,1] done. Else clamp t, recompute s for the new value
|
|
268
|
+
// of t using s = Dot((P2 + D2*t) - P1,D1) / Dot(D1,D1)= (t*b - c) / a
|
|
269
|
+
// and clamp s to [0, 1]
|
|
270
|
+
|
|
271
|
+
if ( t < 0 ) {
|
|
272
|
+
|
|
273
|
+
t = 0.;
|
|
274
|
+
s = clamp( - c / a, 0, 1 );
|
|
275
|
+
|
|
276
|
+
} else if ( t > 1 ) {
|
|
277
|
+
|
|
278
|
+
t = 1;
|
|
279
|
+
s = clamp( ( b - c ) / a, 0, 1 );
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
c1.copy( p1 ).add( _d1.multiplyScalar( s ) );
|
|
288
|
+
c2.copy( p2 ).add( _d2.multiplyScalar( t ) );
|
|
289
|
+
|
|
290
|
+
c1.sub( c2 );
|
|
291
|
+
|
|
292
|
+
return c1.dot( c1 );
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
169
296
|
/**
|
|
170
297
|
* Applies a 4x4 transformation matrix to this line segment.
|
|
171
298
|
*
|
package/src/math/Matrix4.js
CHANGED
|
@@ -1103,11 +1103,13 @@ class Matrix4 {
|
|
|
1103
1103
|
* @param {number} near - The distance from the camera to the near plane.
|
|
1104
1104
|
* @param {number} far - The distance from the camera to the far plane.
|
|
1105
1105
|
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1106
|
+
* @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
|
|
1106
1107
|
* @return {Matrix4} A reference to this matrix.
|
|
1107
1108
|
*/
|
|
1108
|
-
makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
|
|
1109
|
+
makePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
|
|
1109
1110
|
|
|
1110
1111
|
const te = this.elements;
|
|
1112
|
+
|
|
1111
1113
|
const x = 2 * near / ( right - left );
|
|
1112
1114
|
const y = 2 * near / ( top - bottom );
|
|
1113
1115
|
|
|
@@ -1116,19 +1118,28 @@ class Matrix4 {
|
|
|
1116
1118
|
|
|
1117
1119
|
let c, d;
|
|
1118
1120
|
|
|
1119
|
-
if (
|
|
1121
|
+
if ( reversedDepth ) {
|
|
1120
1122
|
|
|
1121
|
-
c =
|
|
1122
|
-
d = (
|
|
1123
|
+
c = near / ( far - near );
|
|
1124
|
+
d = ( far * near ) / ( far - near );
|
|
1123
1125
|
|
|
1124
|
-
} else
|
|
1126
|
+
} else {
|
|
1125
1127
|
|
|
1126
|
-
|
|
1127
|
-
d = ( - far * near ) / ( far - near );
|
|
1128
|
+
if ( coordinateSystem === WebGLCoordinateSystem ) {
|
|
1128
1129
|
|
|
1129
|
-
|
|
1130
|
+
c = - ( far + near ) / ( far - near );
|
|
1131
|
+
d = ( - 2 * far * near ) / ( far - near );
|
|
1132
|
+
|
|
1133
|
+
} else if ( coordinateSystem === WebGPUCoordinateSystem ) {
|
|
1134
|
+
|
|
1135
|
+
c = - far / ( far - near );
|
|
1136
|
+
d = ( - far * near ) / ( far - near );
|
|
1130
1137
|
|
|
1131
|
-
|
|
1138
|
+
} else {
|
|
1139
|
+
|
|
1140
|
+
throw new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );
|
|
1141
|
+
|
|
1142
|
+
}
|
|
1132
1143
|
|
|
1133
1144
|
}
|
|
1134
1145
|
|
|
@@ -1152,39 +1163,49 @@ class Matrix4 {
|
|
|
1152
1163
|
* @param {number} near - The distance from the camera to the near plane.
|
|
1153
1164
|
* @param {number} far - The distance from the camera to the far plane.
|
|
1154
1165
|
* @param {(WebGLCoordinateSystem|WebGPUCoordinateSystem)} [coordinateSystem=WebGLCoordinateSystem] - The coordinate system.
|
|
1166
|
+
* @param {boolean} [reversedDepth=false] - Whether to use a reversed depth.
|
|
1155
1167
|
* @return {Matrix4} A reference to this matrix.
|
|
1156
1168
|
*/
|
|
1157
|
-
makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {
|
|
1169
|
+
makeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem, reversedDepth = false ) {
|
|
1158
1170
|
|
|
1159
1171
|
const te = this.elements;
|
|
1160
|
-
const w = 1.0 / ( right - left );
|
|
1161
|
-
const h = 1.0 / ( top - bottom );
|
|
1162
|
-
const p = 1.0 / ( far - near );
|
|
1163
|
-
|
|
1164
|
-
const x = ( right + left ) * w;
|
|
1165
|
-
const y = ( top + bottom ) * h;
|
|
1166
1172
|
|
|
1167
|
-
|
|
1173
|
+
const x = 2 / ( right - left );
|
|
1174
|
+
const y = 2 / ( top - bottom );
|
|
1168
1175
|
|
|
1169
|
-
|
|
1176
|
+
const a = - ( right + left ) / ( right - left );
|
|
1177
|
+
const b = - ( top + bottom ) / ( top - bottom );
|
|
1170
1178
|
|
|
1171
|
-
|
|
1172
|
-
zInv = - 2 * p;
|
|
1179
|
+
let c, d;
|
|
1173
1180
|
|
|
1174
|
-
|
|
1181
|
+
if ( reversedDepth ) {
|
|
1175
1182
|
|
|
1176
|
-
|
|
1177
|
-
|
|
1183
|
+
c = 1 / ( far - near );
|
|
1184
|
+
d = far / ( far - near );
|
|
1178
1185
|
|
|
1179
1186
|
} else {
|
|
1180
1187
|
|
|
1181
|
-
|
|
1188
|
+
if ( coordinateSystem === WebGLCoordinateSystem ) {
|
|
1189
|
+
|
|
1190
|
+
c = - 2 / ( far - near );
|
|
1191
|
+
d = - ( far + near ) / ( far - near );
|
|
1192
|
+
|
|
1193
|
+
} else if ( coordinateSystem === WebGPUCoordinateSystem ) {
|
|
1194
|
+
|
|
1195
|
+
c = - 1 / ( far - near );
|
|
1196
|
+
d = - near / ( far - near );
|
|
1197
|
+
|
|
1198
|
+
} else {
|
|
1199
|
+
|
|
1200
|
+
throw new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );
|
|
1201
|
+
|
|
1202
|
+
}
|
|
1182
1203
|
|
|
1183
1204
|
}
|
|
1184
1205
|
|
|
1185
|
-
te[ 0 ] =
|
|
1186
|
-
te[ 1 ] = 0; te[ 5 ] =
|
|
1187
|
-
te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] =
|
|
1206
|
+
te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = a;
|
|
1207
|
+
te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = 0; te[ 13 ] = b;
|
|
1208
|
+
te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d;
|
|
1188
1209
|
te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1;
|
|
1189
1210
|
|
|
1190
1211
|
return this;
|
package/src/math/Quaternion.js
CHANGED
package/src/math/Ray.js
CHANGED
package/src/math/Sphere.js
CHANGED
|
@@ -387,6 +387,34 @@ class Sphere {
|
|
|
387
387
|
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
+
/**
|
|
391
|
+
* Returns a serialized structure of the bounding sphere.
|
|
392
|
+
*
|
|
393
|
+
* @return {Object} Serialized structure with fields representing the object state.
|
|
394
|
+
*/
|
|
395
|
+
toJSON() {
|
|
396
|
+
|
|
397
|
+
return {
|
|
398
|
+
radius: this.radius,
|
|
399
|
+
center: this.center.toArray()
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Returns a serialized structure of the bounding sphere.
|
|
406
|
+
*
|
|
407
|
+
* @param {Object} json - The serialized json to set the sphere from.
|
|
408
|
+
* @return {Box3} A reference to this bounding sphere.
|
|
409
|
+
*/
|
|
410
|
+
fromJSON( json ) {
|
|
411
|
+
|
|
412
|
+
this.radius = json.radius;
|
|
413
|
+
this.center.fromArray( json.center );
|
|
414
|
+
return this;
|
|
415
|
+
|
|
416
|
+
}
|
|
417
|
+
|
|
390
418
|
}
|
|
391
419
|
|
|
392
420
|
export { Sphere };
|
package/src/math/Spherical.js
CHANGED
|
@@ -107,8 +107,8 @@ class Spherical {
|
|
|
107
107
|
* Sets the spherical components from the given Cartesian coordinates.
|
|
108
108
|
*
|
|
109
109
|
* @param {number} x - The x value.
|
|
110
|
-
* @param {number} y - The
|
|
111
|
-
* @param {number} z - The
|
|
110
|
+
* @param {number} y - The y value.
|
|
111
|
+
* @param {number} z - The z value.
|
|
112
112
|
* @return {Spherical} A reference to this spherical.
|
|
113
113
|
*/
|
|
114
114
|
setFromCartesianCoords( x, y, z ) {
|