super-three 0.179.0 → 0.184.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/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -66,11 +66,12 @@ import {
|
|
|
66
66
|
InstancedBufferAttribute
|
|
67
67
|
} from 'three';
|
|
68
68
|
import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
69
|
+
import { clone } from '../utils/SkeletonUtils.js';
|
|
69
70
|
|
|
70
71
|
/**
|
|
71
72
|
* A loader for the glTF 2.0 format.
|
|
72
73
|
*
|
|
73
|
-
* [glTF]
|
|
74
|
+
* [glTF](https://www.khronos.org/gltf/) (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/main/specification/2.0)
|
|
74
75
|
* for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf) or binary (.glb)
|
|
75
76
|
* format. External files store textures (.jpg, .png) and additional binary data (.bin). A glTF asset may deliver
|
|
76
77
|
* one or more scenes, including meshes, materials, textures, skins, skeletons, morph targets, animations, lights,
|
|
@@ -82,8 +83,11 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
|
82
83
|
*
|
|
83
84
|
* `GLTFLoader` supports the following glTF 2.0 extensions:
|
|
84
85
|
* - KHR_draco_mesh_compression
|
|
86
|
+
* - KHR_lights_punctual
|
|
87
|
+
* - KHR_materials_anisotropy
|
|
85
88
|
* - KHR_materials_clearcoat
|
|
86
89
|
* - KHR_materials_dispersion
|
|
90
|
+
* - KHR_materials_emissive_strength
|
|
87
91
|
* - KHR_materials_ior
|
|
88
92
|
* - KHR_materials_specular
|
|
89
93
|
* - KHR_materials_transmission
|
|
@@ -91,16 +95,20 @@ import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
|
91
95
|
* - KHR_materials_unlit
|
|
92
96
|
* - KHR_materials_volume
|
|
93
97
|
* - KHR_mesh_quantization
|
|
94
|
-
* -
|
|
98
|
+
* - KHR_meshopt_compression
|
|
95
99
|
* - KHR_texture_basisu
|
|
96
100
|
* - KHR_texture_transform
|
|
97
|
-
* -
|
|
101
|
+
* - EXT_materials_bump
|
|
98
102
|
* - EXT_meshopt_compression
|
|
99
103
|
* - EXT_mesh_gpu_instancing
|
|
104
|
+
* - EXT_texture_avif
|
|
105
|
+
* - EXT_texture_webp
|
|
100
106
|
*
|
|
101
107
|
* The following glTF 2.0 extension is supported by an external user plugin:
|
|
102
|
-
* - [KHR_materials_variants]
|
|
103
|
-
* - [MSFT_texture_dds]
|
|
108
|
+
* - [KHR_materials_variants](https://github.com/takahirox/three-gltf-extensions)
|
|
109
|
+
* - [MSFT_texture_dds](https://github.com/takahirox/three-gltf-extensions)
|
|
110
|
+
* - [KHR_animation_pointer](https://github.com/needle-tools/three-animation-pointer)
|
|
111
|
+
* - [NEEDLE_progressive](https://github.com/needle-tools/gltf-progressive)
|
|
104
112
|
*
|
|
105
113
|
* ```js
|
|
106
114
|
* const loader = new GLTFLoader();
|
|
@@ -226,7 +234,13 @@ class GLTFLoader extends Loader {
|
|
|
226
234
|
|
|
227
235
|
this.register( function ( parser ) {
|
|
228
236
|
|
|
229
|
-
return new GLTFMeshoptCompression( parser );
|
|
237
|
+
return new GLTFMeshoptCompression( parser, EXTENSIONS.EXT_MESHOPT_COMPRESSION );
|
|
238
|
+
|
|
239
|
+
} );
|
|
240
|
+
|
|
241
|
+
this.register( function ( parser ) {
|
|
242
|
+
|
|
243
|
+
return new GLTFMeshoptCompression( parser, EXTENSIONS.KHR_MESHOPT_COMPRESSION );
|
|
230
244
|
|
|
231
245
|
} );
|
|
232
246
|
|
|
@@ -405,7 +419,7 @@ class GLTFLoader extends Loader {
|
|
|
405
419
|
}
|
|
406
420
|
|
|
407
421
|
/**
|
|
408
|
-
* Parses the given
|
|
422
|
+
* Parses the given glTF data and returns the resulting group.
|
|
409
423
|
*
|
|
410
424
|
* @param {string|ArrayBuffer} data - The raw glTF data.
|
|
411
425
|
* @param {string} path - The URL base path.
|
|
@@ -597,6 +611,20 @@ function GLTFRegistry() {
|
|
|
597
611
|
/********** EXTENSIONS ***********/
|
|
598
612
|
/*********************************/
|
|
599
613
|
|
|
614
|
+
function getMaterialExtension( parser, materialIndex, extensionName ) {
|
|
615
|
+
|
|
616
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
617
|
+
|
|
618
|
+
if ( materialDef.extensions && materialDef.extensions[ extensionName ] ) {
|
|
619
|
+
|
|
620
|
+
return materialDef.extensions[ extensionName ];
|
|
621
|
+
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
return null;
|
|
625
|
+
|
|
626
|
+
}
|
|
627
|
+
|
|
600
628
|
const EXTENSIONS = {
|
|
601
629
|
KHR_BINARY_GLTF: 'KHR_binary_glTF',
|
|
602
630
|
KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
|
|
@@ -619,6 +647,7 @@ const EXTENSIONS = {
|
|
|
619
647
|
EXT_TEXTURE_WEBP: 'EXT_texture_webp',
|
|
620
648
|
EXT_TEXTURE_AVIF: 'EXT_texture_avif',
|
|
621
649
|
EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
|
|
650
|
+
KHR_MESHOPT_COMPRESSION: 'KHR_meshopt_compression',
|
|
622
651
|
EXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'
|
|
623
652
|
};
|
|
624
653
|
|
|
@@ -833,20 +862,13 @@ class GLTFMaterialsEmissiveStrengthExtension {
|
|
|
833
862
|
|
|
834
863
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
835
864
|
|
|
836
|
-
const
|
|
837
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
838
|
-
|
|
839
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
865
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
840
866
|
|
|
841
|
-
|
|
867
|
+
if ( extension === null ) return Promise.resolve();
|
|
842
868
|
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
const emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;
|
|
869
|
+
if ( extension.emissiveStrength !== undefined ) {
|
|
846
870
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
materialParams.emissiveIntensity = emissiveStrength;
|
|
871
|
+
materialParams.emissiveIntensity = extension.emissiveStrength;
|
|
850
872
|
|
|
851
873
|
}
|
|
852
874
|
|
|
@@ -874,30 +896,20 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
874
896
|
|
|
875
897
|
getMaterialType( materialIndex ) {
|
|
876
898
|
|
|
877
|
-
const
|
|
878
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
899
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
879
900
|
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
return MeshPhysicalMaterial;
|
|
901
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
883
902
|
|
|
884
903
|
}
|
|
885
904
|
|
|
886
905
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
887
906
|
|
|
888
|
-
const
|
|
889
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
890
|
-
|
|
891
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
907
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
892
908
|
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
}
|
|
909
|
+
if ( extension === null ) return Promise.resolve();
|
|
896
910
|
|
|
897
911
|
const pending = [];
|
|
898
912
|
|
|
899
|
-
const extension = materialDef.extensions[ this.name ];
|
|
900
|
-
|
|
901
913
|
if ( extension.clearcoatFactor !== undefined ) {
|
|
902
914
|
|
|
903
915
|
materialParams.clearcoat = extension.clearcoatFactor;
|
|
@@ -906,7 +918,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
906
918
|
|
|
907
919
|
if ( extension.clearcoatTexture !== undefined ) {
|
|
908
920
|
|
|
909
|
-
pending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );
|
|
921
|
+
pending.push( this.parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );
|
|
910
922
|
|
|
911
923
|
}
|
|
912
924
|
|
|
@@ -918,13 +930,13 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
918
930
|
|
|
919
931
|
if ( extension.clearcoatRoughnessTexture !== undefined ) {
|
|
920
932
|
|
|
921
|
-
pending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );
|
|
933
|
+
pending.push( this.parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );
|
|
922
934
|
|
|
923
935
|
}
|
|
924
936
|
|
|
925
937
|
if ( extension.clearcoatNormalTexture !== undefined ) {
|
|
926
938
|
|
|
927
|
-
pending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );
|
|
939
|
+
pending.push( this.parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );
|
|
928
940
|
|
|
929
941
|
if ( extension.clearcoatNormalTexture.scale !== undefined ) {
|
|
930
942
|
|
|
@@ -960,27 +972,17 @@ class GLTFMaterialsDispersionExtension {
|
|
|
960
972
|
|
|
961
973
|
getMaterialType( materialIndex ) {
|
|
962
974
|
|
|
963
|
-
const
|
|
964
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
965
|
-
|
|
966
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
975
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
967
976
|
|
|
968
|
-
return MeshPhysicalMaterial;
|
|
977
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
969
978
|
|
|
970
979
|
}
|
|
971
980
|
|
|
972
981
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
973
982
|
|
|
974
|
-
const
|
|
975
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
976
|
-
|
|
977
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
978
|
-
|
|
979
|
-
return Promise.resolve();
|
|
983
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
980
984
|
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
const extension = materialDef.extensions[ this.name ];
|
|
985
|
+
if ( extension === null ) return Promise.resolve();
|
|
984
986
|
|
|
985
987
|
materialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;
|
|
986
988
|
|
|
@@ -1008,30 +1010,20 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
1008
1010
|
|
|
1009
1011
|
getMaterialType( materialIndex ) {
|
|
1010
1012
|
|
|
1011
|
-
const
|
|
1012
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1013
|
-
|
|
1014
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1013
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1015
1014
|
|
|
1016
|
-
return MeshPhysicalMaterial;
|
|
1015
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1017
1016
|
|
|
1018
1017
|
}
|
|
1019
1018
|
|
|
1020
1019
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1021
1020
|
|
|
1022
|
-
const
|
|
1023
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1024
|
-
|
|
1025
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1021
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1026
1022
|
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
}
|
|
1023
|
+
if ( extension === null ) return Promise.resolve();
|
|
1030
1024
|
|
|
1031
1025
|
const pending = [];
|
|
1032
1026
|
|
|
1033
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1034
|
-
|
|
1035
1027
|
if ( extension.iridescenceFactor !== undefined ) {
|
|
1036
1028
|
|
|
1037
1029
|
materialParams.iridescence = extension.iridescenceFactor;
|
|
@@ -1040,7 +1032,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
1040
1032
|
|
|
1041
1033
|
if ( extension.iridescenceTexture !== undefined ) {
|
|
1042
1034
|
|
|
1043
|
-
pending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );
|
|
1035
|
+
pending.push( this.parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );
|
|
1044
1036
|
|
|
1045
1037
|
}
|
|
1046
1038
|
|
|
@@ -1070,7 +1062,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
1070
1062
|
|
|
1071
1063
|
if ( extension.iridescenceThicknessTexture !== undefined ) {
|
|
1072
1064
|
|
|
1073
|
-
pending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );
|
|
1065
|
+
pending.push( this.parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );
|
|
1074
1066
|
|
|
1075
1067
|
}
|
|
1076
1068
|
|
|
@@ -1098,25 +1090,17 @@ class GLTFMaterialsSheenExtension {
|
|
|
1098
1090
|
|
|
1099
1091
|
getMaterialType( materialIndex ) {
|
|
1100
1092
|
|
|
1101
|
-
const
|
|
1102
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1103
|
-
|
|
1104
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1093
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1105
1094
|
|
|
1106
|
-
return MeshPhysicalMaterial;
|
|
1095
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1107
1096
|
|
|
1108
1097
|
}
|
|
1109
1098
|
|
|
1110
1099
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1111
1100
|
|
|
1112
|
-
const
|
|
1113
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1101
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1114
1102
|
|
|
1115
|
-
if (
|
|
1116
|
-
|
|
1117
|
-
return Promise.resolve();
|
|
1118
|
-
|
|
1119
|
-
}
|
|
1103
|
+
if ( extension === null ) return Promise.resolve();
|
|
1120
1104
|
|
|
1121
1105
|
const pending = [];
|
|
1122
1106
|
|
|
@@ -1124,8 +1108,6 @@ class GLTFMaterialsSheenExtension {
|
|
|
1124
1108
|
materialParams.sheenRoughness = 0;
|
|
1125
1109
|
materialParams.sheen = 1;
|
|
1126
1110
|
|
|
1127
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1128
|
-
|
|
1129
1111
|
if ( extension.sheenColorFactor !== undefined ) {
|
|
1130
1112
|
|
|
1131
1113
|
const colorFactor = extension.sheenColorFactor;
|
|
@@ -1141,13 +1123,13 @@ class GLTFMaterialsSheenExtension {
|
|
|
1141
1123
|
|
|
1142
1124
|
if ( extension.sheenColorTexture !== undefined ) {
|
|
1143
1125
|
|
|
1144
|
-
pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
|
|
1126
|
+
pending.push( this.parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
|
|
1145
1127
|
|
|
1146
1128
|
}
|
|
1147
1129
|
|
|
1148
1130
|
if ( extension.sheenRoughnessTexture !== undefined ) {
|
|
1149
1131
|
|
|
1150
|
-
pending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
|
|
1132
|
+
pending.push( this.parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );
|
|
1151
1133
|
|
|
1152
1134
|
}
|
|
1153
1135
|
|
|
@@ -1176,30 +1158,20 @@ class GLTFMaterialsTransmissionExtension {
|
|
|
1176
1158
|
|
|
1177
1159
|
getMaterialType( materialIndex ) {
|
|
1178
1160
|
|
|
1179
|
-
const
|
|
1180
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1181
|
-
|
|
1182
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1161
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1183
1162
|
|
|
1184
|
-
return MeshPhysicalMaterial;
|
|
1163
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1185
1164
|
|
|
1186
1165
|
}
|
|
1187
1166
|
|
|
1188
1167
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1189
1168
|
|
|
1190
|
-
const
|
|
1191
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1192
|
-
|
|
1193
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1169
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1194
1170
|
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
}
|
|
1171
|
+
if ( extension === null ) return Promise.resolve();
|
|
1198
1172
|
|
|
1199
1173
|
const pending = [];
|
|
1200
1174
|
|
|
1201
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1202
|
-
|
|
1203
1175
|
if ( extension.transmissionFactor !== undefined ) {
|
|
1204
1176
|
|
|
1205
1177
|
materialParams.transmission = extension.transmissionFactor;
|
|
@@ -1208,7 +1180,7 @@ class GLTFMaterialsTransmissionExtension {
|
|
|
1208
1180
|
|
|
1209
1181
|
if ( extension.transmissionTexture !== undefined ) {
|
|
1210
1182
|
|
|
1211
|
-
pending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );
|
|
1183
|
+
pending.push( this.parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );
|
|
1212
1184
|
|
|
1213
1185
|
}
|
|
1214
1186
|
|
|
@@ -1236,35 +1208,25 @@ class GLTFMaterialsVolumeExtension {
|
|
|
1236
1208
|
|
|
1237
1209
|
getMaterialType( materialIndex ) {
|
|
1238
1210
|
|
|
1239
|
-
const
|
|
1240
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1211
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1241
1212
|
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
return MeshPhysicalMaterial;
|
|
1213
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1245
1214
|
|
|
1246
1215
|
}
|
|
1247
1216
|
|
|
1248
1217
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1249
1218
|
|
|
1250
|
-
const
|
|
1251
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1252
|
-
|
|
1253
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1219
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1254
1220
|
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
}
|
|
1221
|
+
if ( extension === null ) return Promise.resolve();
|
|
1258
1222
|
|
|
1259
1223
|
const pending = [];
|
|
1260
1224
|
|
|
1261
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1262
|
-
|
|
1263
1225
|
materialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;
|
|
1264
1226
|
|
|
1265
1227
|
if ( extension.thicknessTexture !== undefined ) {
|
|
1266
1228
|
|
|
1267
|
-
pending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );
|
|
1229
|
+
pending.push( this.parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );
|
|
1268
1230
|
|
|
1269
1231
|
}
|
|
1270
1232
|
|
|
@@ -1297,30 +1259,22 @@ class GLTFMaterialsIorExtension {
|
|
|
1297
1259
|
|
|
1298
1260
|
getMaterialType( materialIndex ) {
|
|
1299
1261
|
|
|
1300
|
-
const
|
|
1301
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1302
|
-
|
|
1303
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1262
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1304
1263
|
|
|
1305
|
-
return MeshPhysicalMaterial;
|
|
1264
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1306
1265
|
|
|
1307
1266
|
}
|
|
1308
1267
|
|
|
1309
1268
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1310
1269
|
|
|
1311
|
-
const
|
|
1312
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1313
|
-
|
|
1314
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1315
|
-
|
|
1316
|
-
return Promise.resolve();
|
|
1270
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1317
1271
|
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1272
|
+
if ( extension === null ) return Promise.resolve();
|
|
1321
1273
|
|
|
1322
1274
|
materialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;
|
|
1323
1275
|
|
|
1276
|
+
if ( materialParams.ior === 0 ) materialParams.ior = 1000; // see #26167
|
|
1277
|
+
|
|
1324
1278
|
return Promise.resolve();
|
|
1325
1279
|
|
|
1326
1280
|
}
|
|
@@ -1345,35 +1299,25 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1345
1299
|
|
|
1346
1300
|
getMaterialType( materialIndex ) {
|
|
1347
1301
|
|
|
1348
|
-
const
|
|
1349
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1350
|
-
|
|
1351
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1302
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1352
1303
|
|
|
1353
|
-
return MeshPhysicalMaterial;
|
|
1304
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1354
1305
|
|
|
1355
1306
|
}
|
|
1356
1307
|
|
|
1357
1308
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1358
1309
|
|
|
1359
|
-
const
|
|
1360
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1361
|
-
|
|
1362
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1310
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1363
1311
|
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
}
|
|
1312
|
+
if ( extension === null ) return Promise.resolve();
|
|
1367
1313
|
|
|
1368
1314
|
const pending = [];
|
|
1369
1315
|
|
|
1370
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1371
|
-
|
|
1372
1316
|
materialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;
|
|
1373
1317
|
|
|
1374
1318
|
if ( extension.specularTexture !== undefined ) {
|
|
1375
1319
|
|
|
1376
|
-
pending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );
|
|
1320
|
+
pending.push( this.parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );
|
|
1377
1321
|
|
|
1378
1322
|
}
|
|
1379
1323
|
|
|
@@ -1382,7 +1326,7 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1382
1326
|
|
|
1383
1327
|
if ( extension.specularColorTexture !== undefined ) {
|
|
1384
1328
|
|
|
1385
|
-
pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
|
|
1329
|
+
pending.push( this.parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
|
|
1386
1330
|
|
|
1387
1331
|
}
|
|
1388
1332
|
|
|
@@ -1411,35 +1355,25 @@ class GLTFMaterialsBumpExtension {
|
|
|
1411
1355
|
|
|
1412
1356
|
getMaterialType( materialIndex ) {
|
|
1413
1357
|
|
|
1414
|
-
const
|
|
1415
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1416
|
-
|
|
1417
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1358
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1418
1359
|
|
|
1419
|
-
return MeshPhysicalMaterial;
|
|
1360
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1420
1361
|
|
|
1421
1362
|
}
|
|
1422
1363
|
|
|
1423
1364
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1424
1365
|
|
|
1425
|
-
const
|
|
1426
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1427
|
-
|
|
1428
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1366
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1429
1367
|
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
}
|
|
1368
|
+
if ( extension === null ) return Promise.resolve();
|
|
1433
1369
|
|
|
1434
1370
|
const pending = [];
|
|
1435
1371
|
|
|
1436
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1437
|
-
|
|
1438
1372
|
materialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;
|
|
1439
1373
|
|
|
1440
1374
|
if ( extension.bumpTexture !== undefined ) {
|
|
1441
1375
|
|
|
1442
|
-
pending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
|
|
1376
|
+
pending.push( this.parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
|
|
1443
1377
|
|
|
1444
1378
|
}
|
|
1445
1379
|
|
|
@@ -1467,30 +1401,20 @@ class GLTFMaterialsAnisotropyExtension {
|
|
|
1467
1401
|
|
|
1468
1402
|
getMaterialType( materialIndex ) {
|
|
1469
1403
|
|
|
1470
|
-
const
|
|
1471
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1472
|
-
|
|
1473
|
-
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1404
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1474
1405
|
|
|
1475
|
-
return MeshPhysicalMaterial;
|
|
1406
|
+
return extension !== null ? MeshPhysicalMaterial : null;
|
|
1476
1407
|
|
|
1477
1408
|
}
|
|
1478
1409
|
|
|
1479
1410
|
extendMaterialParams( materialIndex, materialParams ) {
|
|
1480
1411
|
|
|
1481
|
-
const
|
|
1482
|
-
const materialDef = parser.json.materials[ materialIndex ];
|
|
1412
|
+
const extension = getMaterialExtension( this.parser, materialIndex, this.name );
|
|
1483
1413
|
|
|
1484
|
-
if (
|
|
1485
|
-
|
|
1486
|
-
return Promise.resolve();
|
|
1487
|
-
|
|
1488
|
-
}
|
|
1414
|
+
if ( extension === null ) return Promise.resolve();
|
|
1489
1415
|
|
|
1490
1416
|
const pending = [];
|
|
1491
1417
|
|
|
1492
|
-
const extension = materialDef.extensions[ this.name ];
|
|
1493
|
-
|
|
1494
1418
|
if ( extension.anisotropyStrength !== undefined ) {
|
|
1495
1419
|
|
|
1496
1420
|
materialParams.anisotropy = extension.anisotropyStrength;
|
|
@@ -1505,7 +1429,7 @@ class GLTFMaterialsAnisotropyExtension {
|
|
|
1505
1429
|
|
|
1506
1430
|
if ( extension.anisotropyTexture !== undefined ) {
|
|
1507
1431
|
|
|
1508
|
-
pending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
|
|
1432
|
+
pending.push( this.parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
|
|
1509
1433
|
|
|
1510
1434
|
}
|
|
1511
1435
|
|
|
@@ -1671,9 +1595,9 @@ class GLTFTextureAVIFExtension {
|
|
|
1671
1595
|
*/
|
|
1672
1596
|
class GLTFMeshoptCompression {
|
|
1673
1597
|
|
|
1674
|
-
constructor( parser ) {
|
|
1598
|
+
constructor( parser, name ) {
|
|
1675
1599
|
|
|
1676
|
-
this.name =
|
|
1600
|
+
this.name = name;
|
|
1677
1601
|
this.parser = parser;
|
|
1678
1602
|
|
|
1679
1603
|
}
|
|
@@ -2376,7 +2300,7 @@ function addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {
|
|
|
2376
2300
|
/**
|
|
2377
2301
|
*
|
|
2378
2302
|
* @private
|
|
2379
|
-
* @param {Object3D|Material|BufferGeometry|Object} object
|
|
2303
|
+
* @param {Object3D|Material|BufferGeometry|Object|AnimationClip} object
|
|
2380
2304
|
* @param {GLTF.definition} gltfDef
|
|
2381
2305
|
*/
|
|
2382
2306
|
function assignExtrasToUserData( object, gltfDef ) {
|
|
@@ -2660,7 +2584,7 @@ class GLTFParser {
|
|
|
2660
2584
|
let isFirefox = false;
|
|
2661
2585
|
let firefoxVersion = - 1;
|
|
2662
2586
|
|
|
2663
|
-
if ( typeof navigator !== 'undefined' ) {
|
|
2587
|
+
if ( typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined' ) {
|
|
2664
2588
|
|
|
2665
2589
|
const userAgent = navigator.userAgent;
|
|
2666
2590
|
|
|
@@ -2943,7 +2867,7 @@ class GLTFParser {
|
|
|
2943
2867
|
* @private
|
|
2944
2868
|
* @param {string} type
|
|
2945
2869
|
* @param {number} index
|
|
2946
|
-
* @return {Promise<Object3D|Material|
|
|
2870
|
+
* @return {Promise<Object3D|Material|Texture|AnimationClip|ArrayBuffer|Object>}
|
|
2947
2871
|
*/
|
|
2948
2872
|
getDependency( type, index ) {
|
|
2949
2873
|
|
|
@@ -3283,7 +3207,7 @@ class GLTFParser {
|
|
|
3283
3207
|
*
|
|
3284
3208
|
* @private
|
|
3285
3209
|
* @param {number} textureIndex
|
|
3286
|
-
* @return {Promise
|
|
3210
|
+
* @return {Promise<?Texture>}
|
|
3287
3211
|
*/
|
|
3288
3212
|
loadTexture( textureIndex ) {
|
|
3289
3213
|
|
|
@@ -4020,7 +3944,7 @@ class GLTFParser {
|
|
|
4020
3944
|
*
|
|
4021
3945
|
* @private
|
|
4022
3946
|
* @param {number} cameraIndex
|
|
4023
|
-
* @return {Promise<
|
|
3947
|
+
* @return {Promise<Camera>|undefined}
|
|
4024
3948
|
*/
|
|
4025
3949
|
loadCamera( cameraIndex ) {
|
|
4026
3950
|
|
|
@@ -4213,7 +4137,11 @@ class GLTFParser {
|
|
|
4213
4137
|
|
|
4214
4138
|
}
|
|
4215
4139
|
|
|
4216
|
-
|
|
4140
|
+
const animation = new AnimationClip( animationName, undefined, tracks );
|
|
4141
|
+
|
|
4142
|
+
assignExtrasToUserData( animation, animationDef );
|
|
4143
|
+
|
|
4144
|
+
return animation;
|
|
4217
4145
|
|
|
4218
4146
|
} );
|
|
4219
4147
|
|
|
@@ -4313,6 +4241,28 @@ class GLTFParser {
|
|
|
4313
4241
|
|
|
4314
4242
|
}
|
|
4315
4243
|
|
|
4244
|
+
// Reconstruct pivot from container pattern created by GLTFExporter
|
|
4245
|
+
// The container has position+pivot, rotation, scale; child has -pivot offset and mesh
|
|
4246
|
+
if ( node.userData.pivot !== undefined && children.length > 0 ) {
|
|
4247
|
+
|
|
4248
|
+
const pivot = node.userData.pivot;
|
|
4249
|
+
const pivotChild = children[ 0 ];
|
|
4250
|
+
|
|
4251
|
+
// Set pivot on container and adjust transforms
|
|
4252
|
+
node.pivot = new Vector3().fromArray( pivot );
|
|
4253
|
+
|
|
4254
|
+
// Adjust container position: stored as position + pivot, so subtract pivot
|
|
4255
|
+
node.position.x -= pivot[ 0 ];
|
|
4256
|
+
node.position.y -= pivot[ 1 ];
|
|
4257
|
+
node.position.z -= pivot[ 2 ];
|
|
4258
|
+
|
|
4259
|
+
// Remove the child's -pivot offset since pivot now handles it
|
|
4260
|
+
pivotChild.position.set( 0, 0, 0 );
|
|
4261
|
+
|
|
4262
|
+
delete node.userData.pivot;
|
|
4263
|
+
|
|
4264
|
+
}
|
|
4265
|
+
|
|
4316
4266
|
return node;
|
|
4317
4267
|
|
|
4318
4268
|
} );
|
|
@@ -4504,7 +4454,20 @@ class GLTFParser {
|
|
|
4504
4454
|
|
|
4505
4455
|
for ( let i = 0, il = nodes.length; i < il; i ++ ) {
|
|
4506
4456
|
|
|
4507
|
-
|
|
4457
|
+
const node = nodes[ i ];
|
|
4458
|
+
|
|
4459
|
+
// If the node already has a parent, it means it's being reused across multiple scenes.
|
|
4460
|
+
// Clone it to avoid the second scene's add() removing it from the first scene.
|
|
4461
|
+
// See: https://github.com/mrdoob/three.js/issues/27993
|
|
4462
|
+
if ( node.parent !== null ) {
|
|
4463
|
+
|
|
4464
|
+
scene.add( clone( node ) );
|
|
4465
|
+
|
|
4466
|
+
} else {
|
|
4467
|
+
|
|
4468
|
+
scene.add( node );
|
|
4469
|
+
|
|
4470
|
+
}
|
|
4508
4471
|
|
|
4509
4472
|
}
|
|
4510
4473
|
|
|
@@ -4555,17 +4518,28 @@ class GLTFParser {
|
|
|
4555
4518
|
const targetName = node.name ? node.name : node.uuid;
|
|
4556
4519
|
const targetNames = [];
|
|
4557
4520
|
|
|
4521
|
+
function collectMorphTargets( object ) {
|
|
4522
|
+
|
|
4523
|
+
if ( object.morphTargetInfluences ) {
|
|
4524
|
+
|
|
4525
|
+
targetNames.push( object.name ? object.name : object.uuid );
|
|
4526
|
+
|
|
4527
|
+
}
|
|
4528
|
+
|
|
4529
|
+
}
|
|
4530
|
+
|
|
4531
|
+
|
|
4558
4532
|
if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
|
|
4559
4533
|
|
|
4560
|
-
|
|
4534
|
+
collectMorphTargets( node );
|
|
4561
4535
|
|
|
4562
|
-
|
|
4536
|
+
// for multi-primitive meshes, the node is a Group containing the sub-meshes
|
|
4563
4537
|
|
|
4564
|
-
|
|
4538
|
+
if ( node.isGroup ) {
|
|
4565
4539
|
|
|
4566
|
-
|
|
4540
|
+
node.children.forEach( collectMorphTargets );
|
|
4567
4541
|
|
|
4568
|
-
}
|
|
4542
|
+
}
|
|
4569
4543
|
|
|
4570
4544
|
} else {
|
|
4571
4545
|
|