@plastic-software/three 0.175.14 → 0.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -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
|
|
|
@@ -41,7 +41,8 @@ class FileLoader extends Loader {
|
|
|
41
41
|
super( manager );
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
|
-
* The expected mime type.
|
|
44
|
+
* The expected mime type. Valid values can be found
|
|
45
|
+
* [here]{@link hhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype}
|
|
45
46
|
*
|
|
46
47
|
* @type {string}
|
|
47
48
|
*/
|
|
@@ -55,6 +56,14 @@ class FileLoader extends Loader {
|
|
|
55
56
|
*/
|
|
56
57
|
this.responseType = '';
|
|
57
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Used for aborting requests.
|
|
61
|
+
*
|
|
62
|
+
* @private
|
|
63
|
+
* @type {AbortController}
|
|
64
|
+
*/
|
|
65
|
+
this._abortController = new AbortController();
|
|
66
|
+
|
|
58
67
|
}
|
|
59
68
|
|
|
60
69
|
/**
|
|
@@ -74,7 +83,7 @@ class FileLoader extends Loader {
|
|
|
74
83
|
|
|
75
84
|
url = this.manager.resolveURL( url );
|
|
76
85
|
|
|
77
|
-
const cached = Cache.get( url );
|
|
86
|
+
const cached = Cache.get( `file:${url}` );
|
|
78
87
|
|
|
79
88
|
if ( cached !== undefined ) {
|
|
80
89
|
|
|
@@ -121,7 +130,7 @@ class FileLoader extends Loader {
|
|
|
121
130
|
const req = new Request( url, {
|
|
122
131
|
headers: new Headers( this.requestHeader ),
|
|
123
132
|
credentials: this.withCredentials ? 'include' : 'same-origin',
|
|
124
|
-
|
|
133
|
+
signal: ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal
|
|
125
134
|
} );
|
|
126
135
|
|
|
127
136
|
// record states ( avoid data race )
|
|
@@ -263,7 +272,7 @@ class FileLoader extends Loader {
|
|
|
263
272
|
|
|
264
273
|
// Add to cache only on HTTP success, so that we do not cache
|
|
265
274
|
// error response bodies as proper responses to requests.
|
|
266
|
-
Cache.add( url
|
|
275
|
+
Cache.add( `file:${url}`, data );
|
|
267
276
|
|
|
268
277
|
const callbacks = loading[ url ];
|
|
269
278
|
delete loading[ url ];
|
|
@@ -338,6 +347,20 @@ class FileLoader extends Loader {
|
|
|
338
347
|
|
|
339
348
|
}
|
|
340
349
|
|
|
350
|
+
/**
|
|
351
|
+
* Aborts ongoing fetch requests.
|
|
352
|
+
*
|
|
353
|
+
* @return {FileLoader} A reference to this instance.
|
|
354
|
+
*/
|
|
355
|
+
abort() {
|
|
356
|
+
|
|
357
|
+
this._abortController.abort();
|
|
358
|
+
this._abortController = new AbortController();
|
|
359
|
+
|
|
360
|
+
return this;
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
341
364
|
}
|
|
342
365
|
|
|
343
366
|
|
|
@@ -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();
|
|
@@ -64,6 +66,14 @@ class ImageBitmapLoader extends Loader {
|
|
|
64
66
|
*/
|
|
65
67
|
this.options = { premultiplyAlpha: 'none' };
|
|
66
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Used for aborting requests.
|
|
71
|
+
*
|
|
72
|
+
* @private
|
|
73
|
+
* @type {AbortController}
|
|
74
|
+
*/
|
|
75
|
+
this._abortController = new AbortController();
|
|
76
|
+
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
/**
|
|
@@ -100,7 +110,7 @@ class ImageBitmapLoader extends Loader {
|
|
|
100
110
|
|
|
101
111
|
const scope = this;
|
|
102
112
|
|
|
103
|
-
const cached = Cache.get( url );
|
|
113
|
+
const cached = Cache.get( `image-bitmap:${url}` );
|
|
104
114
|
|
|
105
115
|
if ( cached !== undefined ) {
|
|
106
116
|
|
|
@@ -111,15 +121,27 @@ class ImageBitmapLoader extends Loader {
|
|
|
111
121
|
|
|
112
122
|
cached.then( imageBitmap => {
|
|
113
123
|
|
|
114
|
-
if
|
|
124
|
+
// check if there is an error for the cached promise
|
|
125
|
+
|
|
126
|
+
if ( _errorMap.has( cached ) === true ) {
|
|
115
127
|
|
|
116
|
-
|
|
128
|
+
if ( onError ) onError( _errorMap.get( cached ) );
|
|
117
129
|
|
|
118
|
-
|
|
130
|
+
scope.manager.itemError( url );
|
|
131
|
+
scope.manager.itemEnd( url );
|
|
119
132
|
|
|
120
|
-
|
|
133
|
+
} else {
|
|
134
|
+
|
|
135
|
+
if ( onLoad ) onLoad( imageBitmap );
|
|
136
|
+
|
|
137
|
+
scope.manager.itemEnd( url );
|
|
138
|
+
|
|
139
|
+
return imageBitmap;
|
|
140
|
+
|
|
141
|
+
}
|
|
121
142
|
|
|
122
143
|
} );
|
|
144
|
+
|
|
123
145
|
return;
|
|
124
146
|
|
|
125
147
|
}
|
|
@@ -140,6 +162,7 @@ class ImageBitmapLoader extends Loader {
|
|
|
140
162
|
const fetchOptions = {};
|
|
141
163
|
fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';
|
|
142
164
|
fetchOptions.headers = this.requestHeader;
|
|
165
|
+
fetchOptions.signal = ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal;
|
|
143
166
|
|
|
144
167
|
const promise = fetch( url, fetchOptions ).then( function ( res ) {
|
|
145
168
|
|
|
@@ -151,7 +174,7 @@ class ImageBitmapLoader extends Loader {
|
|
|
151
174
|
|
|
152
175
|
} ).then( function ( imageBitmap ) {
|
|
153
176
|
|
|
154
|
-
Cache.add( url
|
|
177
|
+
Cache.add( `image-bitmap:${url}`, imageBitmap );
|
|
155
178
|
|
|
156
179
|
if ( onLoad ) onLoad( imageBitmap );
|
|
157
180
|
|
|
@@ -163,18 +186,34 @@ class ImageBitmapLoader extends Loader {
|
|
|
163
186
|
|
|
164
187
|
if ( onError ) onError( e );
|
|
165
188
|
|
|
166
|
-
|
|
189
|
+
_errorMap.set( promise, e );
|
|
190
|
+
|
|
191
|
+
Cache.remove( `image-bitmap:${url}` );
|
|
167
192
|
|
|
168
193
|
scope.manager.itemError( url );
|
|
169
194
|
scope.manager.itemEnd( url );
|
|
170
195
|
|
|
171
196
|
} );
|
|
172
197
|
|
|
173
|
-
Cache.add( url
|
|
198
|
+
Cache.add( `image-bitmap:${url}`, promise );
|
|
174
199
|
scope.manager.itemStart( url );
|
|
175
200
|
|
|
176
201
|
}
|
|
177
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Aborts ongoing fetch requests.
|
|
205
|
+
*
|
|
206
|
+
* @return {ImageBitmapLoader} A reference to this instance.
|
|
207
|
+
*/
|
|
208
|
+
abort() {
|
|
209
|
+
|
|
210
|
+
this._abortController.abort();
|
|
211
|
+
this._abortController = new AbortController();
|
|
212
|
+
|
|
213
|
+
return this;
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
178
217
|
}
|
|
179
218
|
|
|
180
219
|
export { ImageBitmapLoader };
|
|
@@ -2,6 +2,8 @@ import { Cache } from './Cache.js';
|
|
|
2
2
|
import { Loader } from './Loader.js';
|
|
3
3
|
import { createElementNS } from '../utils.js';
|
|
4
4
|
|
|
5
|
+
const _loading = new WeakMap();
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* A loader for loading images. The class loads images with the HTML `Image` API.
|
|
7
9
|
*
|
|
@@ -48,19 +50,36 @@ class ImageLoader extends Loader {
|
|
|
48
50
|
|
|
49
51
|
const scope = this;
|
|
50
52
|
|
|
51
|
-
const cached = Cache.get( url );
|
|
53
|
+
const cached = Cache.get( `image:${url}` );
|
|
52
54
|
|
|
53
55
|
if ( cached !== undefined ) {
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
if ( cached.complete === true ) {
|
|
58
|
+
|
|
59
|
+
scope.manager.itemStart( url );
|
|
60
|
+
|
|
61
|
+
setTimeout( function () {
|
|
62
|
+
|
|
63
|
+
if ( onLoad ) onLoad( cached );
|
|
64
|
+
|
|
65
|
+
scope.manager.itemEnd( url );
|
|
66
|
+
|
|
67
|
+
}, 0 );
|
|
56
68
|
|
|
57
|
-
|
|
69
|
+
} else {
|
|
58
70
|
|
|
59
|
-
|
|
71
|
+
let arr = _loading.get( cached );
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
if ( arr === undefined ) {
|
|
62
74
|
|
|
63
|
-
|
|
75
|
+
arr = [];
|
|
76
|
+
_loading.set( cached, arr );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
arr.push( { onLoad, onError } );
|
|
81
|
+
|
|
82
|
+
}
|
|
64
83
|
|
|
65
84
|
return cached;
|
|
66
85
|
|
|
@@ -72,10 +91,21 @@ class ImageLoader extends Loader {
|
|
|
72
91
|
|
|
73
92
|
removeEventListeners();
|
|
74
93
|
|
|
75
|
-
Cache.add( url, this );
|
|
76
|
-
|
|
77
94
|
if ( onLoad ) onLoad( this );
|
|
78
95
|
|
|
96
|
+
//
|
|
97
|
+
|
|
98
|
+
const callbacks = _loading.get( this ) || [];
|
|
99
|
+
|
|
100
|
+
for ( let i = 0; i < callbacks.length; i ++ ) {
|
|
101
|
+
|
|
102
|
+
const callback = callbacks[ i ];
|
|
103
|
+
if ( callback.onLoad ) callback.onLoad( this );
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
_loading.delete( this );
|
|
108
|
+
|
|
79
109
|
scope.manager.itemEnd( url );
|
|
80
110
|
|
|
81
111
|
}
|
|
@@ -86,6 +116,22 @@ class ImageLoader extends Loader {
|
|
|
86
116
|
|
|
87
117
|
if ( onError ) onError( event );
|
|
88
118
|
|
|
119
|
+
Cache.remove( `image:${url}` );
|
|
120
|
+
|
|
121
|
+
//
|
|
122
|
+
|
|
123
|
+
const callbacks = _loading.get( this ) || [];
|
|
124
|
+
|
|
125
|
+
for ( let i = 0; i < callbacks.length; i ++ ) {
|
|
126
|
+
|
|
127
|
+
const callback = callbacks[ i ];
|
|
128
|
+
if ( callback.onError ) callback.onError( event );
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
_loading.delete( this );
|
|
133
|
+
|
|
134
|
+
|
|
89
135
|
scope.manager.itemError( url );
|
|
90
136
|
scope.manager.itemEnd( url );
|
|
91
137
|
|
|
@@ -107,6 +153,7 @@ class ImageLoader extends Loader {
|
|
|
107
153
|
|
|
108
154
|
}
|
|
109
155
|
|
|
156
|
+
Cache.add( `image:${url}`, image );
|
|
110
157
|
scope.manager.itemStart( url );
|
|
111
158
|
|
|
112
159
|
image.src = url;
|
package/src/loaders/Loader.js
CHANGED
|
@@ -67,6 +67,7 @@ class Loader {
|
|
|
67
67
|
* This method needs to be implemented by all concrete loaders. It holds the
|
|
68
68
|
* logic for loading assets from the backend.
|
|
69
69
|
*
|
|
70
|
+
* @abstract
|
|
70
71
|
* @param {string} url - The path/URL of the file to be loaded.
|
|
71
72
|
* @param {Function} onLoad - Executed when the loading process has been finished.
|
|
72
73
|
* @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
|
|
@@ -97,6 +98,7 @@ class Loader {
|
|
|
97
98
|
* This method needs to be implemented by all concrete loaders. It holds the
|
|
98
99
|
* logic for parsing the asset into three.js entities.
|
|
99
100
|
*
|
|
101
|
+
* @abstract
|
|
100
102
|
* @param {any} data - The data to parse.
|
|
101
103
|
*/
|
|
102
104
|
parse( /* data */ ) {}
|
|
@@ -171,6 +173,18 @@ class Loader {
|
|
|
171
173
|
|
|
172
174
|
}
|
|
173
175
|
|
|
176
|
+
/**
|
|
177
|
+
* This method can be implemented in loaders for aborting ongoing requests.
|
|
178
|
+
*
|
|
179
|
+
* @abstract
|
|
180
|
+
* @return {Loader} A reference to this instance.
|
|
181
|
+
*/
|
|
182
|
+
abort() {
|
|
183
|
+
|
|
184
|
+
return this;
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
174
188
|
}
|
|
175
189
|
|
|
176
190
|
/**
|
|
@@ -69,6 +69,13 @@ class LoadingManager {
|
|
|
69
69
|
*/
|
|
70
70
|
this.onError = onError;
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Used for aborting ongoing requests in loaders using this manager.
|
|
74
|
+
*
|
|
75
|
+
* @type {AbortController}
|
|
76
|
+
*/
|
|
77
|
+
this.abortController = new AbortController();
|
|
78
|
+
|
|
72
79
|
/**
|
|
73
80
|
* This should be called by any loader using the manager when the loader
|
|
74
81
|
* starts loading an item.
|
|
@@ -269,6 +276,22 @@ class LoadingManager {
|
|
|
269
276
|
|
|
270
277
|
};
|
|
271
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Can be used to abort ongoing loading requests in loaders using this manager.
|
|
281
|
+
* The abort only works if the loaders implement {@link Loader#abort} and `AbortSignal.any()`
|
|
282
|
+
* is supported in the browser.
|
|
283
|
+
*
|
|
284
|
+
* @return {LoadingManager} A reference to this loading manager.
|
|
285
|
+
*/
|
|
286
|
+
this.abort = function () {
|
|
287
|
+
|
|
288
|
+
this.abortController.abort();
|
|
289
|
+
this.abortController = new AbortController();
|
|
290
|
+
|
|
291
|
+
return this;
|
|
292
|
+
|
|
293
|
+
};
|
|
294
|
+
|
|
272
295
|
}
|
|
273
296
|
|
|
274
297
|
}
|
|
@@ -975,37 +975,65 @@ class ObjectLoader extends Loader {
|
|
|
975
975
|
object._drawRanges = data.drawRanges;
|
|
976
976
|
object._reservedRanges = data.reservedRanges;
|
|
977
977
|
|
|
978
|
-
object.
|
|
979
|
-
object._active = data.active;
|
|
980
|
-
object._bounds = data.bounds.map( bound => {
|
|
978
|
+
object._geometryInfo = data.geometryInfo.map( info => {
|
|
981
979
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
980
|
+
let box = null;
|
|
981
|
+
let sphere = null;
|
|
982
|
+
if ( info.boundingBox !== undefined ) {
|
|
985
983
|
|
|
986
|
-
|
|
987
|
-
sphere.radius = bound.sphereRadius;
|
|
988
|
-
sphere.center.fromArray( bound.sphereCenter );
|
|
984
|
+
box = new Box3().fromJSON( info.boundingBox );
|
|
989
985
|
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
if ( info.boundingSphere !== undefined ) {
|
|
989
|
+
|
|
990
|
+
sphere = new Sphere().fromJSON( info.boundingSphere );
|
|
991
|
+
|
|
992
|
+
}
|
|
993
993
|
|
|
994
|
-
|
|
995
|
-
|
|
994
|
+
return {
|
|
995
|
+
...info,
|
|
996
|
+
boundingBox: box,
|
|
997
|
+
boundingSphere: sphere
|
|
996
998
|
};
|
|
997
999
|
|
|
998
1000
|
} );
|
|
1001
|
+
object._instanceInfo = data.instanceInfo;
|
|
1002
|
+
|
|
1003
|
+
object._availableInstanceIds = data._availableInstanceIds;
|
|
1004
|
+
object._availableGeometryIds = data._availableGeometryIds;
|
|
1005
|
+
|
|
1006
|
+
object._nextIndexStart = data.nextIndexStart;
|
|
1007
|
+
object._nextVertexStart = data.nextVertexStart;
|
|
1008
|
+
object._geometryCount = data.geometryCount;
|
|
999
1009
|
|
|
1000
1010
|
object._maxInstanceCount = data.maxInstanceCount;
|
|
1001
1011
|
object._maxVertexCount = data.maxVertexCount;
|
|
1002
1012
|
object._maxIndexCount = data.maxIndexCount;
|
|
1003
1013
|
|
|
1004
1014
|
object._geometryInitialized = data.geometryInitialized;
|
|
1005
|
-
object._geometryCount = data.geometryCount;
|
|
1006
1015
|
|
|
1007
1016
|
object._matricesTexture = getTexture( data.matricesTexture.uuid );
|
|
1008
|
-
|
|
1017
|
+
|
|
1018
|
+
object._indirectTexture = getTexture( data.indirectTexture.uuid );
|
|
1019
|
+
|
|
1020
|
+
if ( data.colorsTexture !== undefined ) {
|
|
1021
|
+
|
|
1022
|
+
object._colorsTexture = getTexture( data.colorsTexture.uuid );
|
|
1023
|
+
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
if ( data.boundingSphere !== undefined ) {
|
|
1027
|
+
|
|
1028
|
+
object.boundingSphere = new Sphere().fromJSON( data.boundingSphere );
|
|
1029
|
+
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
if ( data.boundingBox !== undefined ) {
|
|
1033
|
+
|
|
1034
|
+
object.boundingBox = new Box3().fromJSON( data.boundingBox );
|
|
1035
|
+
|
|
1036
|
+
}
|
|
1009
1037
|
|
|
1010
1038
|
break;
|
|
1011
1039
|
|
|
@@ -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 };
|
|
@@ -42,7 +42,7 @@ class MeshBasicMaterial extends Material {
|
|
|
42
42
|
* @type {Color}
|
|
43
43
|
* @default (1,1,1)
|
|
44
44
|
*/
|
|
45
|
-
this.color = new Color( 0xffffff ); //
|
|
45
|
+
this.color = new Color( 0xffffff ); // diffuse
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* The color map. May optionally include an alpha channel, typically combined
|
|
@@ -3,8 +3,9 @@ import { materialLightMap } from '../../nodes/accessors/MaterialNode.js';
|
|
|
3
3
|
import BasicEnvironmentNode from '../../nodes/lighting/BasicEnvironmentNode.js';
|
|
4
4
|
import BasicLightMapNode from '../../nodes/lighting/BasicLightMapNode.js';
|
|
5
5
|
import BasicLightingModel from '../../nodes/functions/BasicLightingModel.js';
|
|
6
|
-
import {
|
|
6
|
+
import { normalViewGeometry } from '../../nodes/accessors/Normal.js';
|
|
7
7
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
8
|
+
import { directionToFaceDirection } from '../../nodes/display/FrontFacingNode.js';
|
|
8
9
|
|
|
9
10
|
import { MeshBasicMaterial } from '../MeshBasicMaterial.js';
|
|
10
11
|
|
|
@@ -59,13 +60,13 @@ class MeshBasicNodeMaterial extends NodeMaterial {
|
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
62
|
* Basic materials are not affected by normal and bump maps so we
|
|
62
|
-
* return by default {@link
|
|
63
|
+
* return by default {@link normalViewGeometry}.
|
|
63
64
|
*
|
|
64
65
|
* @return {Node<vec3>} The normal node.
|
|
65
66
|
*/
|
|
66
67
|
setupNormal() {
|
|
67
68
|
|
|
68
|
-
return
|
|
69
|
+
return directionToFaceDirection( normalViewGeometry ); // see #28839
|
|
69
70
|
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -3,7 +3,7 @@ import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.j
|
|
|
3
3
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
4
4
|
import { vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
5
5
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
6
|
-
import { matcapUV } from '../../nodes/utils/
|
|
6
|
+
import { matcapUV } from '../../nodes/utils/MatcapUV.js';
|
|
7
7
|
|
|
8
8
|
import { MeshMatcapMaterial } from '../MeshMatcapMaterial.js';
|
|
9
9
|
|
|
@@ -2,7 +2,7 @@ import NodeMaterial from './NodeMaterial.js';
|
|
|
2
2
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
3
3
|
import { directionToColor } from '../../nodes/utils/Packing.js';
|
|
4
4
|
import { materialOpacity } from '../../nodes/accessors/MaterialNode.js';
|
|
5
|
-
import {
|
|
5
|
+
import { normalView } from '../../nodes/accessors/Normal.js';
|
|
6
6
|
import { colorSpaceToWorking } from '../../nodes/display/ColorSpaceNode.js';
|
|
7
7
|
import { float, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
8
8
|
import { SRGBColorSpace } from '../../constants.js';
|
|
@@ -58,7 +58,7 @@ class MeshNormalNodeMaterial extends NodeMaterial {
|
|
|
58
58
|
|
|
59
59
|
// By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.
|
|
60
60
|
|
|
61
|
-
diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor(
|
|
61
|
+
diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( normalView ), opacityNode ), SRGBColorSpace ) );
|
|
62
62
|
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -6,6 +6,7 @@ import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
|
|
|
6
6
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
7
7
|
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
8
8
|
import { mix, pow2, min } from '../../nodes/math/MathNode.js';
|
|
9
|
+
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
9
10
|
|
|
10
11
|
import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
|
|
11
12
|
|
|
@@ -478,7 +479,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
478
479
|
|
|
479
480
|
setup( builder ) {
|
|
480
481
|
|
|
481
|
-
builder.context.setupClearcoatNormal = () => this.setupClearcoatNormal( builder );
|
|
482
|
+
builder.context.setupClearcoatNormal = () => subBuild( this.setupClearcoatNormal( builder ), 'NORMAL', 'vec3' );
|
|
482
483
|
|
|
483
484
|
super.setup( builder );
|
|
484
485
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
|
|
2
2
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
3
|
-
import {
|
|
3
|
+
import { normalView } from '../../nodes/accessors/Normal.js';
|
|
4
4
|
import { positionViewDirection } from '../../nodes/accessors/Position.js';
|
|
5
5
|
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
6
6
|
|
|
@@ -52,7 +52,7 @@ class SSSLightingModel extends PhysicalLightingModel {
|
|
|
52
52
|
|
|
53
53
|
const { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material;
|
|
54
54
|
|
|
55
|
-
const scatteringHalf = lightDirection.add(
|
|
55
|
+
const scatteringHalf = lightDirection.add( normalView.mul( thicknessDistortionNode ) ).normalize();
|
|
56
56
|
const scatteringDot = float( positionViewDirection.dot( scatteringHalf.negate() ).saturate().pow( thicknessPowerNode ).mul( thicknessScaleNode ) );
|
|
57
57
|
const scatteringIllu = vec3( scatteringDot.add( thicknessAmbientNode ).mul( thicknessColorNode ) );
|
|
58
58
|
|