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
|
@@ -1,35 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
2
|
+
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
3
|
+
import { Vector3 } from '../math/Vector3.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
|
-
* A geometry class for a capsule
|
|
6
|
+
* A geometry class for representing a capsule.
|
|
6
7
|
*
|
|
7
8
|
* ```js
|
|
8
|
-
* const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8 );
|
|
9
|
+
* const geometry = new THREE.CapsuleGeometry( 1, 1, 4, 8, 1 );
|
|
9
10
|
* const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
|
10
11
|
* const capsule = new THREE.Mesh( geometry, material );
|
|
11
12
|
* scene.add( capsule );
|
|
12
13
|
* ```
|
|
13
14
|
*
|
|
14
|
-
* @augments
|
|
15
|
+
* @augments BufferGeometry
|
|
15
16
|
*/
|
|
16
|
-
class CapsuleGeometry extends
|
|
17
|
+
class CapsuleGeometry extends BufferGeometry {
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Constructs a new capsule geometry.
|
|
20
21
|
*
|
|
21
22
|
* @param {number} [radius=1] - Radius of the capsule.
|
|
22
|
-
* @param {number} [
|
|
23
|
-
* @param {number} [capSegments=4] - Number of curve segments used to build
|
|
24
|
-
* @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule.
|
|
23
|
+
* @param {number} [height=1] - Height of the middle section.
|
|
24
|
+
* @param {number} [capSegments=4] - Number of curve segments used to build each cap.
|
|
25
|
+
* @param {number} [radialSegments=8] - Number of segmented faces around the circumference of the capsule. Must be an integer >= 3.
|
|
26
|
+
* @param {number} [heightSegments=1] - Number of rows of faces along the height of the middle section. Must be an integer >= 1.
|
|
25
27
|
*/
|
|
26
|
-
constructor( radius = 1,
|
|
28
|
+
constructor( radius = 1, height = 1, capSegments = 4, radialSegments = 8, heightSegments = 1 ) {
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
path.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );
|
|
30
|
-
path.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );
|
|
31
|
-
|
|
32
|
-
super( path.getPoints( capSegments ), radialSegments );
|
|
30
|
+
super();
|
|
33
31
|
|
|
34
32
|
this.type = 'CapsuleGeometry';
|
|
35
33
|
|
|
@@ -42,11 +40,163 @@ class CapsuleGeometry extends LatheGeometry {
|
|
|
42
40
|
*/
|
|
43
41
|
this.parameters = {
|
|
44
42
|
radius: radius,
|
|
45
|
-
|
|
43
|
+
height: height,
|
|
46
44
|
capSegments: capSegments,
|
|
47
45
|
radialSegments: radialSegments,
|
|
46
|
+
heightSegments: heightSegments,
|
|
48
47
|
};
|
|
49
48
|
|
|
49
|
+
height = Math.max( 0, height );
|
|
50
|
+
capSegments = Math.max( 1, Math.floor( capSegments ) );
|
|
51
|
+
radialSegments = Math.max( 3, Math.floor( radialSegments ) );
|
|
52
|
+
heightSegments = Math.max( 1, Math.floor( heightSegments ) );
|
|
53
|
+
|
|
54
|
+
// buffers
|
|
55
|
+
|
|
56
|
+
const indices = [];
|
|
57
|
+
const vertices = [];
|
|
58
|
+
const normals = [];
|
|
59
|
+
const uvs = [];
|
|
60
|
+
|
|
61
|
+
// helper variables
|
|
62
|
+
|
|
63
|
+
const halfHeight = height / 2;
|
|
64
|
+
const capArcLength = ( Math.PI / 2 ) * radius;
|
|
65
|
+
const cylinderPartLength = height;
|
|
66
|
+
const totalArcLength = 2 * capArcLength + cylinderPartLength;
|
|
67
|
+
|
|
68
|
+
const numVerticalSegments = capSegments * 2 + heightSegments;
|
|
69
|
+
const verticesPerRow = radialSegments + 1;
|
|
70
|
+
|
|
71
|
+
const normal = new Vector3();
|
|
72
|
+
const vertex = new Vector3();
|
|
73
|
+
|
|
74
|
+
// generate vertices, normals, and uvs
|
|
75
|
+
|
|
76
|
+
for ( let iy = 0; iy <= numVerticalSegments; iy ++ ) {
|
|
77
|
+
|
|
78
|
+
let currentArcLength = 0;
|
|
79
|
+
let profileY = 0;
|
|
80
|
+
let profileRadius = 0;
|
|
81
|
+
let normalYComponent = 0;
|
|
82
|
+
|
|
83
|
+
if ( iy <= capSegments ) {
|
|
84
|
+
|
|
85
|
+
// bottom cap
|
|
86
|
+
const segmentProgress = iy / capSegments;
|
|
87
|
+
const angle = ( segmentProgress * Math.PI ) / 2;
|
|
88
|
+
profileY = - halfHeight - radius * Math.cos( angle );
|
|
89
|
+
profileRadius = radius * Math.sin( angle );
|
|
90
|
+
normalYComponent = - radius * Math.cos( angle );
|
|
91
|
+
currentArcLength = segmentProgress * capArcLength;
|
|
92
|
+
|
|
93
|
+
} else if ( iy <= capSegments + heightSegments ) {
|
|
94
|
+
|
|
95
|
+
// middle section
|
|
96
|
+
const segmentProgress = ( iy - capSegments ) / heightSegments;
|
|
97
|
+
profileY = - halfHeight + segmentProgress * height;
|
|
98
|
+
profileRadius = radius;
|
|
99
|
+
normalYComponent = 0;
|
|
100
|
+
currentArcLength = capArcLength + segmentProgress * cylinderPartLength;
|
|
101
|
+
|
|
102
|
+
} else {
|
|
103
|
+
|
|
104
|
+
// top cap
|
|
105
|
+
const segmentProgress =
|
|
106
|
+
( iy - capSegments - heightSegments ) / capSegments;
|
|
107
|
+
const angle = ( segmentProgress * Math.PI ) / 2;
|
|
108
|
+
profileY = halfHeight + radius * Math.sin( angle );
|
|
109
|
+
profileRadius = radius * Math.cos( angle );
|
|
110
|
+
normalYComponent = radius * Math.sin( angle );
|
|
111
|
+
currentArcLength =
|
|
112
|
+
capArcLength + cylinderPartLength + segmentProgress * capArcLength;
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const v = Math.max( 0, Math.min( 1, currentArcLength / totalArcLength ) );
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
// special case for the poles
|
|
120
|
+
|
|
121
|
+
let uOffset = 0;
|
|
122
|
+
|
|
123
|
+
if ( iy === 0 ) {
|
|
124
|
+
|
|
125
|
+
uOffset = 0.5 / radialSegments;
|
|
126
|
+
|
|
127
|
+
} else if ( iy === numVerticalSegments ) {
|
|
128
|
+
|
|
129
|
+
uOffset = - 0.5 / radialSegments;
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
for ( let ix = 0; ix <= radialSegments; ix ++ ) {
|
|
134
|
+
|
|
135
|
+
const u = ix / radialSegments;
|
|
136
|
+
const theta = u * Math.PI * 2;
|
|
137
|
+
|
|
138
|
+
const sinTheta = Math.sin( theta );
|
|
139
|
+
const cosTheta = Math.cos( theta );
|
|
140
|
+
|
|
141
|
+
// vertex
|
|
142
|
+
|
|
143
|
+
vertex.x = - profileRadius * cosTheta;
|
|
144
|
+
vertex.y = profileY;
|
|
145
|
+
vertex.z = profileRadius * sinTheta;
|
|
146
|
+
vertices.push( vertex.x, vertex.y, vertex.z );
|
|
147
|
+
|
|
148
|
+
// normal
|
|
149
|
+
|
|
150
|
+
normal.set(
|
|
151
|
+
- profileRadius * cosTheta,
|
|
152
|
+
normalYComponent,
|
|
153
|
+
profileRadius * sinTheta
|
|
154
|
+
);
|
|
155
|
+
normal.normalize();
|
|
156
|
+
normals.push( normal.x, normal.y, normal.z );
|
|
157
|
+
|
|
158
|
+
// uv
|
|
159
|
+
|
|
160
|
+
uvs.push( u + uOffset, v );
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if ( iy > 0 ) {
|
|
165
|
+
|
|
166
|
+
const prevIndexRow = ( iy - 1 ) * verticesPerRow;
|
|
167
|
+
for ( let ix = 0; ix < radialSegments; ix ++ ) {
|
|
168
|
+
|
|
169
|
+
const i1 = prevIndexRow + ix;
|
|
170
|
+
const i2 = prevIndexRow + ix + 1;
|
|
171
|
+
const i3 = iy * verticesPerRow + ix;
|
|
172
|
+
const i4 = iy * verticesPerRow + ix + 1;
|
|
173
|
+
|
|
174
|
+
indices.push( i1, i2, i3 );
|
|
175
|
+
indices.push( i2, i4, i3 );
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// build geometry
|
|
184
|
+
|
|
185
|
+
this.setIndex( indices );
|
|
186
|
+
this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
|
|
187
|
+
this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
|
|
188
|
+
this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
copy( source ) {
|
|
193
|
+
|
|
194
|
+
super.copy( source );
|
|
195
|
+
|
|
196
|
+
this.parameters = Object.assign( {}, source.parameters );
|
|
197
|
+
|
|
198
|
+
return this;
|
|
199
|
+
|
|
50
200
|
}
|
|
51
201
|
|
|
52
202
|
/**
|
|
@@ -58,7 +208,7 @@ class CapsuleGeometry extends LatheGeometry {
|
|
|
58
208
|
*/
|
|
59
209
|
static fromJSON( data ) {
|
|
60
210
|
|
|
61
|
-
return new CapsuleGeometry( data.radius, data.
|
|
211
|
+
return new CapsuleGeometry( data.radius, data.height, data.capSegments, data.radialSegments, data.heightSegments );
|
|
62
212
|
|
|
63
213
|
}
|
|
64
214
|
|
|
@@ -184,8 +184,8 @@ class ExtrudeGeometry extends BufferGeometry {
|
|
|
184
184
|
Math.abs( prevPos.x ),
|
|
185
185
|
Math.abs( prevPos.y )
|
|
186
186
|
);
|
|
187
|
-
const
|
|
188
|
-
if ( distSq <=
|
|
187
|
+
const thresholdSqScaled = THRESHOLD_SQ * scalingFactorSqrt * scalingFactorSqrt;
|
|
188
|
+
if ( distSq <= thresholdSqScaled ) {
|
|
189
189
|
|
|
190
190
|
points.splice( currentIndex, 1 );
|
|
191
191
|
i --;
|
|
@@ -393,53 +393,63 @@ class ExtrudeGeometry extends BufferGeometry {
|
|
|
393
393
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
|
-
|
|
397
|
-
const expandedHoleVertices = [];
|
|
396
|
+
let faces;
|
|
398
397
|
|
|
399
|
-
|
|
398
|
+
if ( bevelSegments === 0 ) {
|
|
400
399
|
|
|
401
|
-
|
|
400
|
+
faces = ShapeUtils.triangulateShape( contour, holes );
|
|
402
401
|
|
|
403
|
-
|
|
402
|
+
} else {
|
|
404
403
|
|
|
405
|
-
const
|
|
406
|
-
const
|
|
407
|
-
const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
|
|
404
|
+
const contractedContourVertices = [];
|
|
405
|
+
const expandedHoleVertices = [];
|
|
408
406
|
|
|
409
|
-
//
|
|
407
|
+
// Loop bevelSegments, 1 for the front, 1 for the back
|
|
410
408
|
|
|
411
|
-
for ( let
|
|
409
|
+
for ( let b = 0; b < bevelSegments; b ++ ) {
|
|
412
410
|
|
|
413
|
-
|
|
411
|
+
//for ( b = bevelSegments; b > 0; b -- ) {
|
|
414
412
|
|
|
415
|
-
|
|
416
|
-
|
|
413
|
+
const t = b / bevelSegments;
|
|
414
|
+
const z = bevelThickness * Math.cos( t * Math.PI / 2 );
|
|
415
|
+
const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
|
|
417
416
|
|
|
418
|
-
|
|
417
|
+
// contract shape
|
|
419
418
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
|
|
419
|
+
for ( let i = 0, il = contour.length; i < il; i ++ ) {
|
|
423
420
|
|
|
424
|
-
|
|
425
|
-
oneHoleMovements = holesMovements[ h ];
|
|
426
|
-
const oneHoleVertices = [];
|
|
427
|
-
for ( let i = 0, il = ahole.length; i < il; i ++ ) {
|
|
428
|
-
|
|
429
|
-
const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
|
|
421
|
+
const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
|
|
430
422
|
|
|
431
423
|
v( vert.x, vert.y, - z );
|
|
432
|
-
if ( t
|
|
424
|
+
if ( t === 0 ) contractedContourVertices.push( vert );
|
|
433
425
|
|
|
434
426
|
}
|
|
435
427
|
|
|
436
|
-
|
|
428
|
+
// expand holes
|
|
429
|
+
|
|
430
|
+
for ( let h = 0, hl = numHoles; h < hl; h ++ ) {
|
|
431
|
+
|
|
432
|
+
const ahole = holes[ h ];
|
|
433
|
+
oneHoleMovements = holesMovements[ h ];
|
|
434
|
+
const oneHoleVertices = [];
|
|
435
|
+
for ( let i = 0, il = ahole.length; i < il; i ++ ) {
|
|
436
|
+
|
|
437
|
+
const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
|
|
438
|
+
|
|
439
|
+
v( vert.x, vert.y, - z );
|
|
440
|
+
if ( t === 0 ) oneHoleVertices.push( vert );
|
|
441
|
+
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
if ( t === 0 ) expandedHoleVertices.push( oneHoleVertices );
|
|
445
|
+
|
|
446
|
+
}
|
|
437
447
|
|
|
438
448
|
}
|
|
439
449
|
|
|
440
|
-
|
|
450
|
+
faces = ShapeUtils.triangulateShape( contractedContourVertices, expandedHoleVertices );
|
|
441
451
|
|
|
442
|
-
|
|
452
|
+
}
|
|
443
453
|
|
|
444
454
|
const flen = faces.length;
|
|
445
455
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
2
2
|
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
3
3
|
import { Object3D } from '../core/Object3D.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ConeGeometry } from '../geometries/ConeGeometry.js';
|
|
5
5
|
import { MeshBasicMaterial } from '../materials/MeshBasicMaterial.js';
|
|
6
6
|
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
|
|
7
7
|
import { Mesh } from '../objects/Mesh.js';
|
|
@@ -53,7 +53,7 @@ class ArrowHelper extends Object3D {
|
|
|
53
53
|
_lineGeometry = new BufferGeometry();
|
|
54
54
|
_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );
|
|
55
55
|
|
|
56
|
-
_coneGeometry = new
|
|
56
|
+
_coneGeometry = new ConeGeometry( 0.5, 1, 5, 1 );
|
|
57
57
|
_coneGeometry.translate( 0, - 0.5, 0 );
|
|
58
58
|
|
|
59
59
|
}
|
|
@@ -3,6 +3,7 @@ import { Vector2 } from '../math/Vector2.js';
|
|
|
3
3
|
import { Vector3 } from '../math/Vector3.js';
|
|
4
4
|
import { Vector4 } from '../math/Vector4.js';
|
|
5
5
|
import { Frustum } from '../math/Frustum.js';
|
|
6
|
+
import { UnsignedByteType } from '../constants.js';
|
|
6
7
|
|
|
7
8
|
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
8
9
|
const _lightPositionWorld = /*@__PURE__*/ new Vector3();
|
|
@@ -95,6 +96,14 @@ class LightShadow {
|
|
|
95
96
|
*/
|
|
96
97
|
this.mapSize = new Vector2( 512, 512 );
|
|
97
98
|
|
|
99
|
+
/**
|
|
100
|
+
* The type of shadow texture. The default is `UnsignedByteType`.
|
|
101
|
+
*
|
|
102
|
+
* @type {number}
|
|
103
|
+
* @default UnsignedByteType
|
|
104
|
+
*/
|
|
105
|
+
this.mapType = UnsignedByteType;
|
|
106
|
+
|
|
98
107
|
/**
|
|
99
108
|
* The depth map generated using the internal camera; a location beyond a
|
|
100
109
|
* pixel's depth is in shadow. Computed internally during rendering.
|
|
@@ -266,6 +275,11 @@ class LightShadow {
|
|
|
266
275
|
this.bias = source.bias;
|
|
267
276
|
this.radius = source.radius;
|
|
268
277
|
|
|
278
|
+
this.autoUpdate = source.autoUpdate;
|
|
279
|
+
this.needsUpdate = source.needsUpdate;
|
|
280
|
+
this.normalBias = source.normalBias;
|
|
281
|
+
this.blurSamples = source.blurSamples;
|
|
282
|
+
|
|
269
283
|
this.mapSize.copy( source.mapSize );
|
|
270
284
|
|
|
271
285
|
return this;
|
|
@@ -34,6 +34,14 @@ class SpotLightShadow extends LightShadow {
|
|
|
34
34
|
*/
|
|
35
35
|
this.focus = 1;
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Texture aspect ratio.
|
|
39
|
+
*
|
|
40
|
+
* @type {number}
|
|
41
|
+
* @default 1
|
|
42
|
+
*/
|
|
43
|
+
this.aspect = 1;
|
|
44
|
+
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
updateMatrices( light ) {
|
|
@@ -41,7 +49,7 @@ class SpotLightShadow extends LightShadow {
|
|
|
41
49
|
const camera = this.camera;
|
|
42
50
|
|
|
43
51
|
const fov = RAD2DEG * 2 * light.angle * this.focus;
|
|
44
|
-
const aspect = this.mapSize.width / this.mapSize.height;
|
|
52
|
+
const aspect = ( this.mapSize.width / this.mapSize.height ) * this.aspect;
|
|
45
53
|
const far = light.distance || camera.far;
|
|
46
54
|
|
|
47
55
|
if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SpotLight } from '../SpotLight.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A projector light version of {@link SpotLight}. Can only be used with {@link WebGPURenderer}.
|
|
5
|
+
*
|
|
6
|
+
* @augments SpotLight
|
|
7
|
+
*/
|
|
8
|
+
class ProjectorLight extends SpotLight {
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new projector light.
|
|
12
|
+
*
|
|
13
|
+
* @param {(number|Color|string)} [color=0xffffff] - The light's color.
|
|
14
|
+
* @param {number} [intensity=1] - The light's strength/intensity measured in candela (cd).
|
|
15
|
+
* @param {number} [distance=0] - Maximum range of the light. `0` means no limit.
|
|
16
|
+
* @param {number} [angle=Math.PI/3] - Maximum angle of light dispersion from its direction whose upper bound is `Math.PI/2`.
|
|
17
|
+
* @param {number} [penumbra=0] - Percent of the spotlight cone that is attenuated due to penumbra. Value range is `[0,1]`.
|
|
18
|
+
* @param {number} [decay=2] - The amount the light dims along the distance of the light.
|
|
19
|
+
*/
|
|
20
|
+
constructor( color, intensity, distance, angle, penumbra, decay ) {
|
|
21
|
+
|
|
22
|
+
super( color, intensity, distance, angle, penumbra, decay );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Aspect ratio of the light. Set to `null` to use the texture aspect ratio.
|
|
26
|
+
*
|
|
27
|
+
* @type {number}
|
|
28
|
+
* @default null
|
|
29
|
+
*/
|
|
30
|
+
this.aspect = null;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
copy( source, recursive ) {
|
|
35
|
+
|
|
36
|
+
super.copy( source, recursive );
|
|
37
|
+
|
|
38
|
+
this.aspect = source.aspect;
|
|
39
|
+
|
|
40
|
+
return this;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default ProjectorLight;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Sphere } from '../math/Sphere.js';
|
|
2
|
-
import { Vector3 } from '../math/Vector3.js';
|
|
3
2
|
import { BufferAttribute } from '../core/BufferAttribute.js';
|
|
4
3
|
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
5
4
|
import { FileLoader } from './FileLoader.js';
|
|
@@ -227,15 +226,7 @@ class BufferGeometryLoader extends Loader {
|
|
|
227
226
|
|
|
228
227
|
if ( boundingSphere !== undefined ) {
|
|
229
228
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
if ( boundingSphere.center !== undefined ) {
|
|
233
|
-
|
|
234
|
-
center.fromArray( boundingSphere.center );
|
|
235
|
-
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
geometry.boundingSphere = new Sphere( center, boundingSphere.radius );
|
|
229
|
+
geometry.boundingSphere = new Sphere().fromJSON( boundingSphere );
|
|
239
230
|
|
|
240
231
|
}
|
|
241
232
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Cache } from './Cache.js';
|
|
2
2
|
import { Loader } from './Loader.js';
|
|
3
3
|
|
|
4
|
+
const _errorMap = new WeakMap();
|
|
5
|
+
|
|
4
6
|
/**
|
|
5
7
|
* A loader for loading images as an [ImageBitmap]{@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap}.
|
|
6
8
|
* An `ImageBitmap` provides an asynchronous and resource efficient pathway to prepare
|
|
@@ -11,7 +13,7 @@ import { Loader } from './Loader.js';
|
|
|
11
13
|
*
|
|
12
14
|
* You need to set the equivalent options via {@link ImageBitmapLoader#setOptions} instead.
|
|
13
15
|
*
|
|
14
|
-
* Also note that unlike {@link FileLoader}, this loader
|
|
16
|
+
* Also note that unlike {@link FileLoader}, this loader avoids multiple concurrent requests to the same URL only if `Cache` is enabled.
|
|
15
17
|
*
|
|
16
18
|
* ```js
|
|
17
19
|
* const loader = new THREE.ImageBitmapLoader();
|
|
@@ -111,15 +113,27 @@ class ImageBitmapLoader extends Loader {
|
|
|
111
113
|
|
|
112
114
|
cached.then( imageBitmap => {
|
|
113
115
|
|
|
114
|
-
if
|
|
116
|
+
// check if there is an error for the cached promise
|
|
117
|
+
|
|
118
|
+
if ( _errorMap.has( cached ) === true ) {
|
|
119
|
+
|
|
120
|
+
if ( onError ) onError( _errorMap.get( cached ) );
|
|
121
|
+
|
|
122
|
+
scope.manager.itemError( url );
|
|
123
|
+
scope.manager.itemEnd( url );
|
|
115
124
|
|
|
116
|
-
|
|
125
|
+
} else {
|
|
117
126
|
|
|
118
|
-
|
|
127
|
+
if ( onLoad ) onLoad( imageBitmap );
|
|
119
128
|
|
|
120
|
-
|
|
129
|
+
scope.manager.itemEnd( url );
|
|
130
|
+
|
|
131
|
+
return imageBitmap;
|
|
132
|
+
|
|
133
|
+
}
|
|
121
134
|
|
|
122
135
|
} );
|
|
136
|
+
|
|
123
137
|
return;
|
|
124
138
|
|
|
125
139
|
}
|
|
@@ -163,6 +177,8 @@ class ImageBitmapLoader extends Loader {
|
|
|
163
177
|
|
|
164
178
|
if ( onError ) onError( e );
|
|
165
179
|
|
|
180
|
+
_errorMap.set( promise, e );
|
|
181
|
+
|
|
166
182
|
Cache.remove( url );
|
|
167
183
|
|
|
168
184
|
scope.manager.itemError( url );
|
|
@@ -988,37 +988,65 @@ class ObjectLoader extends Loader {
|
|
|
988
988
|
object._drawRanges = data.drawRanges;
|
|
989
989
|
object._reservedRanges = data.reservedRanges;
|
|
990
990
|
|
|
991
|
-
object.
|
|
992
|
-
object._active = data.active;
|
|
993
|
-
object._bounds = data.bounds.map( bound => {
|
|
991
|
+
object._geometryInfo = data.geometryInfo.map( info => {
|
|
994
992
|
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
993
|
+
let box = null;
|
|
994
|
+
let sphere = null;
|
|
995
|
+
if ( info.boundingBox !== undefined ) {
|
|
998
996
|
|
|
999
|
-
|
|
1000
|
-
sphere.radius = bound.sphereRadius;
|
|
1001
|
-
sphere.center.fromArray( bound.sphereCenter );
|
|
997
|
+
box = new Box3().fromJSON( info.boundingBox );
|
|
1002
998
|
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
if ( info.boundingSphere !== undefined ) {
|
|
1002
|
+
|
|
1003
|
+
sphere = new Sphere().fromJSON( info.boundingSphere );
|
|
1004
|
+
|
|
1005
|
+
}
|
|
1006
1006
|
|
|
1007
|
-
|
|
1008
|
-
|
|
1007
|
+
return {
|
|
1008
|
+
...info,
|
|
1009
|
+
boundingBox: box,
|
|
1010
|
+
boundingSphere: sphere
|
|
1009
1011
|
};
|
|
1010
1012
|
|
|
1011
1013
|
} );
|
|
1014
|
+
object._instanceInfo = data.instanceInfo;
|
|
1015
|
+
|
|
1016
|
+
object._availableInstanceIds = data._availableInstanceIds;
|
|
1017
|
+
object._availableGeometryIds = data._availableGeometryIds;
|
|
1018
|
+
|
|
1019
|
+
object._nextIndexStart = data.nextIndexStart;
|
|
1020
|
+
object._nextVertexStart = data.nextVertexStart;
|
|
1021
|
+
object._geometryCount = data.geometryCount;
|
|
1012
1022
|
|
|
1013
1023
|
object._maxInstanceCount = data.maxInstanceCount;
|
|
1014
1024
|
object._maxVertexCount = data.maxVertexCount;
|
|
1015
1025
|
object._maxIndexCount = data.maxIndexCount;
|
|
1016
1026
|
|
|
1017
1027
|
object._geometryInitialized = data.geometryInitialized;
|
|
1018
|
-
object._geometryCount = data.geometryCount;
|
|
1019
1028
|
|
|
1020
1029
|
object._matricesTexture = getTexture( data.matricesTexture.uuid );
|
|
1021
|
-
|
|
1030
|
+
|
|
1031
|
+
object._indirectTexture = getTexture( data.indirectTexture.uuid );
|
|
1032
|
+
|
|
1033
|
+
if ( data.colorsTexture !== undefined ) {
|
|
1034
|
+
|
|
1035
|
+
object._colorsTexture = getTexture( data.colorsTexture.uuid );
|
|
1036
|
+
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
if ( data.boundingSphere !== undefined ) {
|
|
1040
|
+
|
|
1041
|
+
object.boundingSphere = new Sphere().fromJSON( data.boundingSphere );
|
|
1042
|
+
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
if ( data.boundingBox !== undefined ) {
|
|
1046
|
+
|
|
1047
|
+
object.boundingBox = new Box3().fromJSON( data.boundingBox );
|
|
1048
|
+
|
|
1049
|
+
}
|
|
1022
1050
|
|
|
1023
1051
|
break;
|
|
1024
1052
|
|
|
@@ -38,7 +38,7 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
38
38
|
* A reference to hold the `nodes` JSON property.
|
|
39
39
|
*
|
|
40
40
|
* @private
|
|
41
|
-
* @type {?Object}
|
|
41
|
+
* @type {?Object[]}
|
|
42
42
|
*/
|
|
43
43
|
this._nodesJSON = null;
|
|
44
44
|
|
|
@@ -92,7 +92,7 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
92
92
|
/**
|
|
93
93
|
* Parses the node objects from the given JSON and textures.
|
|
94
94
|
*
|
|
95
|
-
* @param {Object} json - The JSON definition
|
|
95
|
+
* @param {Object[]} json - The JSON definition
|
|
96
96
|
* @param {Object<string,Texture>} textures - The texture library.
|
|
97
97
|
* @return {Object<string,Node>}. The parsed nodes.
|
|
98
98
|
*/
|
|
@@ -615,7 +615,7 @@ class Material extends EventDispatcher {
|
|
|
615
615
|
|
|
616
616
|
const data = {
|
|
617
617
|
metadata: {
|
|
618
|
-
version: 4.
|
|
618
|
+
version: 4.7,
|
|
619
619
|
type: 'Material',
|
|
620
620
|
generator: 'Material.toJSON'
|
|
621
621
|
}
|
|
@@ -997,12 +997,6 @@ class Material extends EventDispatcher {
|
|
|
997
997
|
|
|
998
998
|
}
|
|
999
999
|
|
|
1000
|
-
onBuild( /* shaderobject, renderer */ ) {
|
|
1001
|
-
|
|
1002
|
-
console.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166
|
|
1003
|
-
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
1000
|
}
|
|
1007
1001
|
|
|
1008
1002
|
export { Material };
|