@plastic-software/three 0.175.13 → 0.178.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 +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- 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 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +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 +2 -1
- 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 +6 -5
- 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 +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +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 +139 -12
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +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/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -87
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +1 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +4 -29
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +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 +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -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 +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/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/FileLoader.js +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- 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/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +105 -19
- 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/Frustum.js +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- 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 +102 -16
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- 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/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +59 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- 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 +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +14 -14
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +78 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +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 +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- 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 +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- 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/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +451 -128
- 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 +86 -33
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- 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
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
package/src/extras/core/Curve.js
CHANGED
package/src/extras/core/Path.js
CHANGED
|
@@ -190,11 +190,11 @@ class Path extends CurvePath {
|
|
|
190
190
|
* Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative
|
|
191
191
|
* to the current point.
|
|
192
192
|
*
|
|
193
|
-
* @param {number} aX - The x coordinate of the center of the arc offsetted from the previous curve.
|
|
194
|
-
* @param {number} aY - The y coordinate of the center of the arc offsetted from the previous curve.
|
|
195
|
-
* @param {number} aRadius - The radius of the arc.
|
|
196
|
-
* @param {number} aStartAngle - The start angle in radians.
|
|
197
|
-
* @param {number} aEndAngle - The end angle in radians.
|
|
193
|
+
* @param {number} [aX=0] - The x coordinate of the center of the arc offsetted from the previous curve.
|
|
194
|
+
* @param {number} [aY=0] - The y coordinate of the center of the arc offsetted from the previous curve.
|
|
195
|
+
* @param {number} [aRadius=1] - The radius of the arc.
|
|
196
|
+
* @param {number} [aStartAngle=0] - The start angle in radians.
|
|
197
|
+
* @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
|
|
198
198
|
* @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
|
|
199
199
|
* @return {Path} A reference to this path.
|
|
200
200
|
*/
|
|
@@ -213,11 +213,11 @@ class Path extends CurvePath {
|
|
|
213
213
|
/**
|
|
214
214
|
* Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.
|
|
215
215
|
*
|
|
216
|
-
* @param {number} aX - The x coordinate of the center of the arc.
|
|
217
|
-
* @param {number} aY - The y coordinate of the center of the arc.
|
|
218
|
-
* @param {number} aRadius - The radius of the arc.
|
|
219
|
-
* @param {number} aStartAngle - The start angle in radians.
|
|
220
|
-
* @param {number} aEndAngle - The end angle in radians.
|
|
216
|
+
* @param {number} [aX=0] - The x coordinate of the center of the arc.
|
|
217
|
+
* @param {number} [aY=0] - The y coordinate of the center of the arc.
|
|
218
|
+
* @param {number} [aRadius=1] - The radius of the arc.
|
|
219
|
+
* @param {number} [aStartAngle=0] - The start angle in radians.
|
|
220
|
+
* @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
|
|
221
221
|
* @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
|
|
222
222
|
* @return {Path} A reference to this path.
|
|
223
223
|
*/
|
|
@@ -233,12 +233,12 @@ class Path extends CurvePath {
|
|
|
233
233
|
* Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative
|
|
234
234
|
* to the current point
|
|
235
235
|
*
|
|
236
|
-
* @param {number} aX - The x coordinate of the center of the ellipse offsetted from the previous curve.
|
|
237
|
-
* @param {number} aY - The y coordinate of the center of the ellipse offsetted from the previous curve.
|
|
238
|
-
* @param {number} xRadius - The radius of the ellipse in the x axis.
|
|
239
|
-
* @param {number} yRadius - The radius of the ellipse in the y axis.
|
|
240
|
-
* @param {number} aStartAngle - The start angle in radians.
|
|
241
|
-
* @param {number} aEndAngle - The end angle in radians.
|
|
236
|
+
* @param {number} [aX=0] - The x coordinate of the center of the ellipse offsetted from the previous curve.
|
|
237
|
+
* @param {number} [aY=0] - The y coordinate of the center of the ellipse offsetted from the previous curve.
|
|
238
|
+
* @param {number} [xRadius=1] - The radius of the ellipse in the x axis.
|
|
239
|
+
* @param {number} [yRadius=1] - The radius of the ellipse in the y axis.
|
|
240
|
+
* @param {number} [aStartAngle=0] - The start angle in radians.
|
|
241
|
+
* @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
|
|
242
242
|
* @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
|
|
243
243
|
* @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
|
|
244
244
|
* @return {Path} A reference to this path.
|
|
@@ -257,12 +257,12 @@ class Path extends CurvePath {
|
|
|
257
257
|
/**
|
|
258
258
|
* Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.
|
|
259
259
|
*
|
|
260
|
-
* @param {number} aX - The x coordinate of the absolute center of the ellipse.
|
|
261
|
-
* @param {number} aY - The y coordinate of the absolute center of the ellipse.
|
|
262
|
-
* @param {number} xRadius - The radius of the ellipse in the x axis.
|
|
263
|
-
* @param {number} yRadius - The radius of the ellipse in the y axis.
|
|
264
|
-
* @param {number} aStartAngle - The start angle in radians.
|
|
265
|
-
* @param {number} aEndAngle - The end angle in radians.
|
|
260
|
+
* @param {number} [aX=0] - The x coordinate of the absolute center of the ellipse.
|
|
261
|
+
* @param {number} [aY=0] - The y coordinate of the absolute center of the ellipse.
|
|
262
|
+
* @param {number} [xRadius=1] - The radius of the ellipse in the x axis.
|
|
263
|
+
* @param {number} [yRadius=1] - The radius of the ellipse in the y axis.
|
|
264
|
+
* @param {number} [aStartAngle=0] - The start angle in radians.
|
|
265
|
+
* @param {number} [aEndAngle=Math.PI*2] - The end angle in radians.
|
|
266
266
|
* @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
|
|
267
267
|
* @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
|
|
268
268
|
* @return {Path} A reference to this path.
|
|
@@ -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
|
|
|
@@ -74,7 +74,7 @@ class FileLoader extends Loader {
|
|
|
74
74
|
|
|
75
75
|
url = this.manager.resolveURL( url );
|
|
76
76
|
|
|
77
|
-
const cached = Cache.get( url );
|
|
77
|
+
const cached = Cache.get( `file:${url}` );
|
|
78
78
|
|
|
79
79
|
if ( cached !== undefined ) {
|
|
80
80
|
|
|
@@ -263,7 +263,7 @@ class FileLoader extends Loader {
|
|
|
263
263
|
|
|
264
264
|
// Add to cache only on HTTP success, so that we do not cache
|
|
265
265
|
// error response bodies as proper responses to requests.
|
|
266
|
-
Cache.add( url
|
|
266
|
+
Cache.add( `file:${url}`, data );
|
|
267
267
|
|
|
268
268
|
const callbacks = loading[ url ];
|
|
269
269
|
delete loading[ url ];
|
|
@@ -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();
|
|
@@ -100,7 +102,7 @@ class ImageBitmapLoader extends Loader {
|
|
|
100
102
|
|
|
101
103
|
const scope = this;
|
|
102
104
|
|
|
103
|
-
const cached = Cache.get( url );
|
|
105
|
+
const cached = Cache.get( `image-bitmap:${url}` );
|
|
104
106
|
|
|
105
107
|
if ( cached !== undefined ) {
|
|
106
108
|
|
|
@@ -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
|
}
|
|
@@ -151,7 +165,7 @@ class ImageBitmapLoader extends Loader {
|
|
|
151
165
|
|
|
152
166
|
} ).then( function ( imageBitmap ) {
|
|
153
167
|
|
|
154
|
-
Cache.add( url
|
|
168
|
+
Cache.add( `image-bitmap:${url}`, imageBitmap );
|
|
155
169
|
|
|
156
170
|
if ( onLoad ) onLoad( imageBitmap );
|
|
157
171
|
|
|
@@ -163,14 +177,16 @@ class ImageBitmapLoader extends Loader {
|
|
|
163
177
|
|
|
164
178
|
if ( onError ) onError( e );
|
|
165
179
|
|
|
166
|
-
|
|
180
|
+
_errorMap.set( promise, e );
|
|
181
|
+
|
|
182
|
+
Cache.remove( `image-bitmap:${url}` );
|
|
167
183
|
|
|
168
184
|
scope.manager.itemError( url );
|
|
169
185
|
scope.manager.itemEnd( url );
|
|
170
186
|
|
|
171
187
|
} );
|
|
172
188
|
|
|
173
|
-
Cache.add( url
|
|
189
|
+
Cache.add( `image-bitmap:${url}`, promise );
|
|
174
190
|
scope.manager.itemStart( url );
|
|
175
191
|
|
|
176
192
|
}
|