super-three 0.175.0 → 0.177.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 +3 -3
- package/build/three.cjs +7631 -6743
- package/build/three.core.js +7496 -6758
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +172 -22
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +14 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3948 -1678
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3941 -1678
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -0
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +14 -3
- 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 +1 -0
- 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 +18 -4
- 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 +49 -35
- 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 +12 -10
- 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 +1 -0
- 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 +7 -0
- 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/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- 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 +5 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +1 -0
- package/examples/jsm/loaders/FBXLoader.js +24 -22
- 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 +1 -0
- 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 +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- 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/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/Timer.js +2 -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 +1 -0
- 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 +20 -17
- 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 +58 -1
- 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 +5 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +4 -3
- 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 +5 -2
- 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 +2 -1
- 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 +4 -1
- 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/GLSLDecoder.js +1 -2
- package/examples/jsm/transpiler/TSLEncoder.js +52 -8
- package/examples/jsm/transpiler/Transpiler.js +2 -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 +1 -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 +2 -27
- 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 +3 -2
- 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 +5 -4
- 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 +4 -3
- 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 +1 -1
- package/src/Three.TSL.js +13 -5
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +1 -1
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Object3D.js +22 -21
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- 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/ImageBitmapLoader.js +21 -5
- 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/nodes/NodeMaterial.js +81 -18
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/Bitangent.js +31 -9
- package/src/nodes/accessors/Camera.js +31 -4
- 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 +26 -6
- package/src/nodes/accessors/Object3DNode.js +6 -7
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.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 +14 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- 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/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/CacheNode.js +14 -0
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +68 -19
- package/src/nodes/core/NodeBuilder.js +100 -12
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +127 -2
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +40 -21
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/PassNode.js +8 -11
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- 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 +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +25 -7
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +172 -240
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/MathNode.js +56 -20
- package/src/nodes/math/OperatorNode.js +109 -82
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLCore.js +140 -49
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/LoopNode.js +64 -17
- package/src/nodes/utils/ReflectorNode.js +67 -4
- package/src/objects/BatchedMesh.js +16 -4
- 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 +21 -10
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +11 -0
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +12 -1
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Textures.js +15 -21
- 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 +154 -25
- package/src/renderers/common/extras/PMREMGenerator.js +29 -22
- 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/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLTextures.js +143 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +170 -34
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -7
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +42 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +442 -127
- 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 +75 -27
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +34 -4
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +44 -49
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
|
@@ -2,7 +2,6 @@ import { Material } from '../Material.js';
|
|
|
2
2
|
import { NormalBlending } from '../../constants.js';
|
|
3
3
|
|
|
4
4
|
import { getNodeChildren, getCacheKey } from '../../nodes/core/NodeUtils.js';
|
|
5
|
-
import { attribute } from '../../nodes/core/AttributeNode.js';
|
|
6
5
|
import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
|
|
7
6
|
import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
|
|
8
7
|
import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
|
|
@@ -14,7 +13,7 @@ import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
|
|
|
14
13
|
import { skinning } from '../../nodes/accessors/SkinningNode.js';
|
|
15
14
|
import { morphReference } from '../../nodes/accessors/MorphNode.js';
|
|
16
15
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
17
|
-
import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
16
|
+
import { namespace, float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
|
|
18
17
|
import AONode from '../../nodes/lighting/AONode.js';
|
|
19
18
|
import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
|
|
20
19
|
import IrradianceNode from '../../nodes/lighting/IrradianceNode.js';
|
|
@@ -24,6 +23,7 @@ import { clipping, clippingAlpha, hardwareClipping } from '../../nodes/accessors
|
|
|
24
23
|
import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
|
|
25
24
|
import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
|
|
26
25
|
import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
26
|
+
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Base class for all node materials.
|
|
@@ -188,7 +188,7 @@ class NodeMaterial extends Material {
|
|
|
188
188
|
this.opacityNode = null;
|
|
189
189
|
|
|
190
190
|
/**
|
|
191
|
-
* This node can be used to
|
|
191
|
+
* This node can be used to implement a variety of filter-like effects. The idea is
|
|
192
192
|
* to store the current rendering into a texture e.g. via `viewportSharedTexture()`, use it
|
|
193
193
|
* to create an arbitrary effect and then assign the node composition to this property.
|
|
194
194
|
* Everything behind the object using this material will now be affected by a filter.
|
|
@@ -229,6 +229,15 @@ class NodeMaterial extends Material {
|
|
|
229
229
|
*/
|
|
230
230
|
this.alphaTestNode = null;
|
|
231
231
|
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Discards the fragment if the mask value is `false`.
|
|
235
|
+
*
|
|
236
|
+
* @type {?Node<bool>}
|
|
237
|
+
* @default null
|
|
238
|
+
*/
|
|
239
|
+
this.maskNode = null;
|
|
240
|
+
|
|
232
241
|
/**
|
|
233
242
|
* The local vertex positions are computed based on multiple factors like the
|
|
234
243
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -278,7 +287,16 @@ class NodeMaterial extends Material {
|
|
|
278
287
|
* @type {?Node<float>}
|
|
279
288
|
* @default null
|
|
280
289
|
*/
|
|
281
|
-
this.
|
|
290
|
+
this.receivedShadowPositionNode = null;
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Allows to overwrite the geometry position used for shadow map projection which
|
|
294
|
+
* is by default {@link positionLocal}, the vertex position in local space.
|
|
295
|
+
*
|
|
296
|
+
* @type {?Node<float>}
|
|
297
|
+
* @default null
|
|
298
|
+
*/
|
|
299
|
+
this.castShadowPositionNode = null;
|
|
282
300
|
|
|
283
301
|
/**
|
|
284
302
|
* This node can be used to influence how an object using this node material
|
|
@@ -362,6 +380,26 @@ class NodeMaterial extends Material {
|
|
|
362
380
|
*/
|
|
363
381
|
this.vertexNode = null;
|
|
364
382
|
|
|
383
|
+
// Deprecated properties
|
|
384
|
+
|
|
385
|
+
Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
|
|
386
|
+
|
|
387
|
+
get: () => {
|
|
388
|
+
|
|
389
|
+
return this.receivedShadowPositionNode;
|
|
390
|
+
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
set: ( value ) => {
|
|
394
|
+
|
|
395
|
+
console.warn( 'THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
|
|
396
|
+
|
|
397
|
+
this.receivedShadowPositionNode = value;
|
|
398
|
+
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
} );
|
|
402
|
+
|
|
365
403
|
}
|
|
366
404
|
|
|
367
405
|
/**
|
|
@@ -417,7 +455,9 @@ class NodeMaterial extends Material {
|
|
|
417
455
|
|
|
418
456
|
builder.addStack();
|
|
419
457
|
|
|
420
|
-
const
|
|
458
|
+
const mvp = this.setupVertex( builder );
|
|
459
|
+
|
|
460
|
+
const vertexNode = this.vertexNode || mvp;
|
|
421
461
|
|
|
422
462
|
builder.stack.outputNode = vertexNode;
|
|
423
463
|
|
|
@@ -632,7 +672,7 @@ class NodeMaterial extends Material {
|
|
|
632
672
|
|
|
633
673
|
if ( depthNode !== null ) {
|
|
634
674
|
|
|
635
|
-
depth.assign( depthNode ).
|
|
675
|
+
depth.assign( depthNode ).toStack();
|
|
636
676
|
|
|
637
677
|
}
|
|
638
678
|
|
|
@@ -693,13 +733,13 @@ class NodeMaterial extends Material {
|
|
|
693
733
|
|
|
694
734
|
if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
|
|
695
735
|
|
|
696
|
-
morphReference( object ).
|
|
736
|
+
morphReference( object ).toStack();
|
|
697
737
|
|
|
698
738
|
}
|
|
699
739
|
|
|
700
740
|
if ( object.isSkinnedMesh === true ) {
|
|
701
741
|
|
|
702
|
-
skinning( object ).
|
|
742
|
+
skinning( object ).toStack();
|
|
703
743
|
|
|
704
744
|
}
|
|
705
745
|
|
|
@@ -715,19 +755,19 @@ class NodeMaterial extends Material {
|
|
|
715
755
|
|
|
716
756
|
if ( object.isBatchedMesh ) {
|
|
717
757
|
|
|
718
|
-
batch( object ).
|
|
758
|
+
batch( object ).toStack();
|
|
719
759
|
|
|
720
760
|
}
|
|
721
761
|
|
|
722
762
|
if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
|
|
723
763
|
|
|
724
|
-
instancedMesh( object ).
|
|
764
|
+
instancedMesh( object ).toStack();
|
|
725
765
|
|
|
726
766
|
}
|
|
727
767
|
|
|
728
768
|
if ( this.positionNode !== null ) {
|
|
729
769
|
|
|
730
|
-
positionLocal.assign( this.positionNode
|
|
770
|
+
positionLocal.assign( namespace( this.positionNode, 'POSITION' ) );
|
|
731
771
|
|
|
732
772
|
}
|
|
733
773
|
|
|
@@ -743,17 +783,29 @@ class NodeMaterial extends Material {
|
|
|
743
783
|
*/
|
|
744
784
|
setupDiffuseColor( { object, geometry } ) {
|
|
745
785
|
|
|
786
|
+
// MASK
|
|
787
|
+
|
|
788
|
+
if ( this.maskNode !== null ) {
|
|
789
|
+
|
|
790
|
+
// Discard if the mask is `false`
|
|
791
|
+
|
|
792
|
+
bool( this.maskNode ).not().discard();
|
|
793
|
+
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
// COLOR
|
|
797
|
+
|
|
746
798
|
let colorNode = this.colorNode ? vec4( this.colorNode ) : materialColor;
|
|
747
799
|
|
|
748
800
|
// VERTEX COLORS
|
|
749
801
|
|
|
750
802
|
if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
|
|
751
803
|
|
|
752
|
-
colorNode =
|
|
804
|
+
colorNode = colorNode.mul( vertexColor() );
|
|
753
805
|
|
|
754
806
|
}
|
|
755
807
|
|
|
756
|
-
//
|
|
808
|
+
// INSTANCED COLORS
|
|
757
809
|
|
|
758
810
|
if ( object.instanceColor ) {
|
|
759
811
|
|
|
@@ -771,8 +823,7 @@ class NodeMaterial extends Material {
|
|
|
771
823
|
|
|
772
824
|
}
|
|
773
825
|
|
|
774
|
-
|
|
775
|
-
// COLOR
|
|
826
|
+
// DIFFUSE COLOR
|
|
776
827
|
|
|
777
828
|
diffuseColor.assign( colorNode );
|
|
778
829
|
|
|
@@ -783,9 +834,11 @@ class NodeMaterial extends Material {
|
|
|
783
834
|
|
|
784
835
|
// ALPHA TEST
|
|
785
836
|
|
|
837
|
+
let alphaTestNode = null;
|
|
838
|
+
|
|
786
839
|
if ( this.alphaTestNode !== null || this.alphaTest > 0 ) {
|
|
787
840
|
|
|
788
|
-
|
|
841
|
+
alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
|
|
789
842
|
|
|
790
843
|
diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
|
|
791
844
|
|
|
@@ -799,10 +852,18 @@ class NodeMaterial extends Material {
|
|
|
799
852
|
|
|
800
853
|
}
|
|
801
854
|
|
|
802
|
-
|
|
855
|
+
// OPAQUE
|
|
856
|
+
|
|
857
|
+
const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
|
|
858
|
+
|
|
859
|
+
if ( isOpaque ) {
|
|
803
860
|
|
|
804
861
|
diffuseColor.a.assign( 1.0 );
|
|
805
862
|
|
|
863
|
+
} else if ( alphaTestNode === null ) {
|
|
864
|
+
|
|
865
|
+
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
866
|
+
|
|
806
867
|
}
|
|
807
868
|
|
|
808
869
|
}
|
|
@@ -1160,12 +1221,14 @@ class NodeMaterial extends Material {
|
|
|
1160
1221
|
this.backdropNode = source.backdropNode;
|
|
1161
1222
|
this.backdropAlphaNode = source.backdropAlphaNode;
|
|
1162
1223
|
this.alphaTestNode = source.alphaTestNode;
|
|
1224
|
+
this.maskNode = source.maskNode;
|
|
1163
1225
|
|
|
1164
1226
|
this.positionNode = source.positionNode;
|
|
1165
1227
|
this.geometryNode = source.geometryNode;
|
|
1166
1228
|
|
|
1167
1229
|
this.depthNode = source.depthNode;
|
|
1168
|
-
this.
|
|
1230
|
+
this.receivedShadowPositionNode = source.receivedShadowPositionNode;
|
|
1231
|
+
this.castShadowPositionNode = source.castShadowPositionNode;
|
|
1169
1232
|
this.receivedShadowNode = source.receivedShadowNode;
|
|
1170
1233
|
this.castShadowNode = source.castShadowNode;
|
|
1171
1234
|
|
|
@@ -5,6 +5,7 @@ const refreshUniforms = [
|
|
|
5
5
|
'anisotropyMap',
|
|
6
6
|
'anisotropyRotation',
|
|
7
7
|
'aoMap',
|
|
8
|
+
'aoMapIntensity',
|
|
8
9
|
'attenuationColor',
|
|
9
10
|
'attenuationDistance',
|
|
10
11
|
'bumpMap',
|
|
@@ -17,8 +18,10 @@ const refreshUniforms = [
|
|
|
17
18
|
'dispersion',
|
|
18
19
|
'displacementMap',
|
|
19
20
|
'emissive',
|
|
21
|
+
'emissiveIntensity',
|
|
20
22
|
'emissiveMap',
|
|
21
23
|
'envMap',
|
|
24
|
+
'envMapIntensity',
|
|
22
25
|
'gradientMap',
|
|
23
26
|
'ior',
|
|
24
27
|
'iridescence',
|
|
@@ -26,6 +29,7 @@ const refreshUniforms = [
|
|
|
26
29
|
'iridescenceMap',
|
|
27
30
|
'iridescenceThicknessMap',
|
|
28
31
|
'lightMap',
|
|
32
|
+
'lightMapIntensity',
|
|
29
33
|
'map',
|
|
30
34
|
'matcap',
|
|
31
35
|
'metalness',
|
|
@@ -126,6 +130,20 @@ class NodeMaterialObserver {
|
|
|
126
130
|
|
|
127
131
|
}
|
|
128
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Returns `true` if the current rendering produces motion vectors.
|
|
135
|
+
*
|
|
136
|
+
* @param {Renderer} renderer - The renderer.
|
|
137
|
+
* @return {boolean} Whether the current rendering produces motion vectors or not.
|
|
138
|
+
*/
|
|
139
|
+
needsVelocity( renderer ) {
|
|
140
|
+
|
|
141
|
+
const mrt = renderer.getMRT();
|
|
142
|
+
|
|
143
|
+
return ( mrt !== null && mrt.has( 'velocity' ) );
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
129
147
|
/**
|
|
130
148
|
* Returns monitoring data for the given render object.
|
|
131
149
|
*
|
|
@@ -229,7 +247,7 @@ class NodeMaterialObserver {
|
|
|
229
247
|
|
|
230
248
|
}
|
|
231
249
|
|
|
232
|
-
if ( builder.renderer.
|
|
250
|
+
if ( builder.renderer.overrideNodes.modelViewMatrix !== null || builder.renderer.overrideNodes.modelNormalViewMatrix !== null )
|
|
233
251
|
return true;
|
|
234
252
|
|
|
235
253
|
return false;
|
|
@@ -479,7 +497,7 @@ class NodeMaterialObserver {
|
|
|
479
497
|
*/
|
|
480
498
|
needsRefresh( renderObject, nodeFrame ) {
|
|
481
499
|
|
|
482
|
-
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
|
|
500
|
+
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )
|
|
483
501
|
return true;
|
|
484
502
|
|
|
485
503
|
const { renderId } = nodeFrame;
|
package/src/math/Box3.js
CHANGED
|
@@ -714,6 +714,34 @@ class Box3 {
|
|
|
714
714
|
|
|
715
715
|
}
|
|
716
716
|
|
|
717
|
+
/**
|
|
718
|
+
* Returns a serialized structure of the bounding box.
|
|
719
|
+
*
|
|
720
|
+
* @return {Object} Serialized structure with fields representing the object state.
|
|
721
|
+
*/
|
|
722
|
+
toJSON() {
|
|
723
|
+
|
|
724
|
+
return {
|
|
725
|
+
min: this.min.toArray(),
|
|
726
|
+
max: this.max.toArray()
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Returns a serialized structure of the bounding box.
|
|
733
|
+
*
|
|
734
|
+
* @param {Object} json - The serialized json to set the box from.
|
|
735
|
+
* @return {Box3} A reference to this bounding box.
|
|
736
|
+
*/
|
|
737
|
+
fromJSON( json ) {
|
|
738
|
+
|
|
739
|
+
this.min.fromArray( json.min );
|
|
740
|
+
this.max.fromArray( json.max );
|
|
741
|
+
return this;
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
717
745
|
}
|
|
718
746
|
|
|
719
747
|
const _points = [
|
package/src/math/Color.js
CHANGED
|
@@ -208,7 +208,7 @@ class Color {
|
|
|
208
208
|
this.g = ( hex >> 8 & 255 ) / 255;
|
|
209
209
|
this.b = ( hex & 255 ) / 255;
|
|
210
210
|
|
|
211
|
-
ColorManagement.
|
|
211
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
212
212
|
|
|
213
213
|
return this;
|
|
214
214
|
|
|
@@ -229,7 +229,7 @@ class Color {
|
|
|
229
229
|
this.g = g;
|
|
230
230
|
this.b = b;
|
|
231
231
|
|
|
232
|
-
ColorManagement.
|
|
232
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
233
233
|
|
|
234
234
|
return this;
|
|
235
235
|
|
|
@@ -266,7 +266,7 @@ class Color {
|
|
|
266
266
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
ColorManagement.
|
|
269
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
270
270
|
|
|
271
271
|
return this;
|
|
272
272
|
|
|
@@ -537,7 +537,7 @@ class Color {
|
|
|
537
537
|
*/
|
|
538
538
|
getHex( colorSpace = SRGBColorSpace ) {
|
|
539
539
|
|
|
540
|
-
ColorManagement.
|
|
540
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
541
541
|
|
|
542
542
|
return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
|
|
543
543
|
|
|
@@ -567,7 +567,7 @@ class Color {
|
|
|
567
567
|
|
|
568
568
|
// h,s,l ranges are in 0.0 - 1.0
|
|
569
569
|
|
|
570
|
-
ColorManagement.
|
|
570
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
571
571
|
|
|
572
572
|
const r = _color.r, g = _color.g, b = _color.b;
|
|
573
573
|
|
|
@@ -617,7 +617,7 @@ class Color {
|
|
|
617
617
|
*/
|
|
618
618
|
getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
|
|
619
619
|
|
|
620
|
-
ColorManagement.
|
|
620
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
621
621
|
|
|
622
622
|
target.r = _color.r;
|
|
623
623
|
target.g = _color.g;
|
|
@@ -635,7 +635,7 @@ class Color {
|
|
|
635
635
|
*/
|
|
636
636
|
getStyle( colorSpace = SRGBColorSpace ) {
|
|
637
637
|
|
|
638
|
-
ColorManagement.
|
|
638
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
639
639
|
|
|
640
640
|
const r = _color.r, g = _color.g, b = _color.b;
|
|
641
641
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SRGBColorSpace, LinearSRGBColorSpace, SRGBTransfer, LinearTransfer, NoColorSpace } from '../constants.js';
|
|
2
2
|
import { Matrix3 } from './Matrix3.js';
|
|
3
|
+
import { warnOnce } from '../utils.js';
|
|
3
4
|
|
|
4
5
|
const LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(
|
|
5
6
|
0.4123908, 0.3575843, 0.1804808,
|
|
@@ -76,13 +77,13 @@ function createColorManagement() {
|
|
|
76
77
|
|
|
77
78
|
},
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
workingToColorSpace: function ( color, targetColorSpace ) {
|
|
80
81
|
|
|
81
82
|
return this.convert( color, this.workingColorSpace, targetColorSpace );
|
|
82
83
|
|
|
83
84
|
},
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
colorSpaceToWorking: function ( color, sourceColorSpace ) {
|
|
86
87
|
|
|
87
88
|
return this.convert( color, sourceColorSpace, this.workingColorSpace );
|
|
88
89
|
|
|
@@ -134,7 +135,25 @@ function createColorManagement() {
|
|
|
134
135
|
|
|
135
136
|
return this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;
|
|
136
137
|
|
|
137
|
-
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
// Deprecated
|
|
141
|
+
|
|
142
|
+
fromWorkingColorSpace: function ( color, targetColorSpace ) {
|
|
143
|
+
|
|
144
|
+
warnOnce( 'THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
|
|
145
|
+
|
|
146
|
+
return ColorManagement.workingToColorSpace( color, targetColorSpace );
|
|
147
|
+
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
toWorkingColorSpace: function ( color, sourceColorSpace ) {
|
|
151
|
+
|
|
152
|
+
warnOnce( 'THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
|
|
153
|
+
|
|
154
|
+
return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
|
|
155
|
+
|
|
156
|
+
},
|
|
138
157
|
|
|
139
158
|
};
|
|
140
159
|
|
|
@@ -0,0 +1,253 @@
|
|
|
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
|
+
this.coordinateSystem
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if ( _frustum.intersectsObject( object ) ) {
|
|
61
|
+
|
|
62
|
+
return true; // Object is visible in at least one camera
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return false; // Not visible in any camera
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Returns `true` if the given sprite is intersecting any frustum
|
|
74
|
+
* from the camera array.
|
|
75
|
+
*
|
|
76
|
+
* @param {Sprite} sprite - The sprite to test.
|
|
77
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
78
|
+
* @return {boolean} Whether the sprite is visible in any camera.
|
|
79
|
+
*/
|
|
80
|
+
intersectsSprite( sprite, cameraArray ) {
|
|
81
|
+
|
|
82
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
83
|
+
|
|
84
|
+
return false;
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
89
|
+
|
|
90
|
+
const camera = cameraArray.cameras[ i ];
|
|
91
|
+
|
|
92
|
+
_projScreenMatrix.multiplyMatrices(
|
|
93
|
+
camera.projectionMatrix,
|
|
94
|
+
camera.matrixWorldInverse
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
_frustum.setFromProjectionMatrix(
|
|
98
|
+
_projScreenMatrix,
|
|
99
|
+
this.coordinateSystem
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
if ( _frustum.intersectsSprite( sprite ) ) {
|
|
103
|
+
|
|
104
|
+
return true; // Sprite is visible in at least one camera
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return false; // Not visible in any camera
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Returns `true` if the given bounding sphere is intersecting any frustum
|
|
116
|
+
* from the camera array.
|
|
117
|
+
*
|
|
118
|
+
* @param {Sphere} sphere - The bounding sphere to test.
|
|
119
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
120
|
+
* @return {boolean} Whether the sphere is visible in any camera.
|
|
121
|
+
*/
|
|
122
|
+
intersectsSphere( sphere, cameraArray ) {
|
|
123
|
+
|
|
124
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
125
|
+
|
|
126
|
+
return false;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
131
|
+
|
|
132
|
+
const camera = cameraArray.cameras[ i ];
|
|
133
|
+
|
|
134
|
+
_projScreenMatrix.multiplyMatrices(
|
|
135
|
+
camera.projectionMatrix,
|
|
136
|
+
camera.matrixWorldInverse
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
_frustum.setFromProjectionMatrix(
|
|
140
|
+
_projScreenMatrix,
|
|
141
|
+
this.coordinateSystem
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
if ( _frustum.intersectsSphere( sphere ) ) {
|
|
145
|
+
|
|
146
|
+
return true; // Sphere is visible in at least one camera
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return false; // Not visible in any camera
|
|
153
|
+
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Returns `true` if the given bounding box is intersecting any frustum
|
|
158
|
+
* from the camera array.
|
|
159
|
+
*
|
|
160
|
+
* @param {Box3} box - The bounding box to test.
|
|
161
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
162
|
+
* @return {boolean} Whether the box is visible in any camera.
|
|
163
|
+
*/
|
|
164
|
+
intersectsBox( box, cameraArray ) {
|
|
165
|
+
|
|
166
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
167
|
+
|
|
168
|
+
return false;
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
173
|
+
|
|
174
|
+
const camera = cameraArray.cameras[ i ];
|
|
175
|
+
|
|
176
|
+
_projScreenMatrix.multiplyMatrices(
|
|
177
|
+
camera.projectionMatrix,
|
|
178
|
+
camera.matrixWorldInverse
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
_frustum.setFromProjectionMatrix(
|
|
182
|
+
_projScreenMatrix,
|
|
183
|
+
this.coordinateSystem
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
if ( _frustum.intersectsBox( box ) ) {
|
|
187
|
+
|
|
188
|
+
return true; // Box is visible in at least one camera
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return false; // Not visible in any camera
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Returns `true` if the given point lies within any frustum
|
|
200
|
+
* from the camera array.
|
|
201
|
+
*
|
|
202
|
+
* @param {Vector3} point - The point to test.
|
|
203
|
+
* @param {Object} cameraArray - An object with a cameras property containing an array of cameras.
|
|
204
|
+
* @return {boolean} Whether the point is visible in any camera.
|
|
205
|
+
*/
|
|
206
|
+
containsPoint( point, cameraArray ) {
|
|
207
|
+
|
|
208
|
+
if ( ! cameraArray || ! cameraArray.cameras || cameraArray.cameras.length === 0 ) {
|
|
209
|
+
|
|
210
|
+
return false;
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
for ( let i = 0; i < cameraArray.cameras.length; i ++ ) {
|
|
215
|
+
|
|
216
|
+
const camera = cameraArray.cameras[ i ];
|
|
217
|
+
|
|
218
|
+
_projScreenMatrix.multiplyMatrices(
|
|
219
|
+
camera.projectionMatrix,
|
|
220
|
+
camera.matrixWorldInverse
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
_frustum.setFromProjectionMatrix(
|
|
224
|
+
_projScreenMatrix,
|
|
225
|
+
this.coordinateSystem
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
if ( _frustum.containsPoint( point ) ) {
|
|
229
|
+
|
|
230
|
+
return true; // Point is visible in at least one camera
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return false; // Not visible in any camera
|
|
237
|
+
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Returns a new frustum array with copied values from this instance.
|
|
242
|
+
*
|
|
243
|
+
* @return {FrustumArray} A clone of this instance.
|
|
244
|
+
*/
|
|
245
|
+
clone() {
|
|
246
|
+
|
|
247
|
+
return new FrustumArray();
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export { FrustumArray };
|