@plastic-software/three 0.167.3 → 0.174.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 +1 -1
- package/build/three.cjs +36277 -24023
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46743
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50670
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -26,8 +26,6 @@ import {
|
|
|
26
26
|
Quaternion,
|
|
27
27
|
REVISION
|
|
28
28
|
} from 'three';
|
|
29
|
-
import { decompress } from './../utils/TextureUtils.js';
|
|
30
|
-
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
31
|
* The KHR_mesh_quantization extension allows these extra attribute component types
|
|
@@ -68,6 +66,8 @@ class GLTFExporter {
|
|
|
68
66
|
|
|
69
67
|
constructor() {
|
|
70
68
|
|
|
69
|
+
this.textureUtils = null;
|
|
70
|
+
|
|
71
71
|
this.pluginCallbacks = [];
|
|
72
72
|
|
|
73
73
|
this.register( function ( writer ) {
|
|
@@ -180,9 +180,18 @@ class GLTFExporter {
|
|
|
180
180
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
+
setTextureUtils( utils ) {
|
|
184
|
+
|
|
185
|
+
this.textureUtils = utils;
|
|
186
|
+
|
|
187
|
+
return this;
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
183
191
|
/**
|
|
184
192
|
* Parse scenes and generate GLTF output
|
|
185
|
-
*
|
|
193
|
+
*
|
|
194
|
+
* @param {Scene|Array<Scene>} input Scene or Array of THREE.Scenes
|
|
186
195
|
* @param {Function} onDone Callback on completed
|
|
187
196
|
* @param {Function} onError Callback on errors
|
|
188
197
|
* @param {Object} options options
|
|
@@ -199,7 +208,8 @@ class GLTFExporter {
|
|
|
199
208
|
}
|
|
200
209
|
|
|
201
210
|
writer.setPlugins( plugins );
|
|
202
|
-
writer.
|
|
211
|
+
writer.setTextureUtils( this.textureUtils );
|
|
212
|
+
writer.writeAsync( input, onDone, options ).catch( onError );
|
|
203
213
|
|
|
204
214
|
}
|
|
205
215
|
|
|
@@ -296,7 +306,7 @@ const GLB_CHUNK_TYPE_BIN = 0x004E4942;
|
|
|
296
306
|
* Compare two arrays
|
|
297
307
|
* @param {Array} array1 Array 1 to compare
|
|
298
308
|
* @param {Array} array2 Array 2 to compare
|
|
299
|
-
* @return {
|
|
309
|
+
* @return {boolean} Returns true if both arrays are equal
|
|
300
310
|
*/
|
|
301
311
|
function equalArray( array1, array2 ) {
|
|
302
312
|
|
|
@@ -323,7 +333,7 @@ function stringToArrayBuffer( text ) {
|
|
|
323
333
|
* Is identity matrix
|
|
324
334
|
*
|
|
325
335
|
* @param {Matrix4} matrix
|
|
326
|
-
* @returns {
|
|
336
|
+
* @returns {boolean} Returns true, if parameter is identity matrix
|
|
327
337
|
*/
|
|
328
338
|
function isIdentityMatrix( matrix ) {
|
|
329
339
|
|
|
@@ -333,9 +343,10 @@ function isIdentityMatrix( matrix ) {
|
|
|
333
343
|
|
|
334
344
|
/**
|
|
335
345
|
* Get the min and max vectors from the given attribute
|
|
346
|
+
*
|
|
336
347
|
* @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count
|
|
337
|
-
* @param {
|
|
338
|
-
* @param {
|
|
348
|
+
* @param {number} start Start index
|
|
349
|
+
* @param {number} count Range to cover
|
|
339
350
|
* @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)
|
|
340
351
|
*/
|
|
341
352
|
function getMinMax( attribute, start, count ) {
|
|
@@ -389,8 +400,8 @@ function getMinMax( attribute, start, count ) {
|
|
|
389
400
|
* Get the required size + padding for a buffer, rounded to the next 4-byte boundary.
|
|
390
401
|
* https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment
|
|
391
402
|
*
|
|
392
|
-
* @param {
|
|
393
|
-
* @returns {
|
|
403
|
+
* @param {number} bufferSize The size the original buffer. Should be an integer.
|
|
404
|
+
* @returns {number} new buffer size with required padding as an integer.
|
|
394
405
|
*
|
|
395
406
|
*/
|
|
396
407
|
function getPaddedBufferSize( bufferSize ) {
|
|
@@ -403,7 +414,7 @@ function getPaddedBufferSize( bufferSize ) {
|
|
|
403
414
|
* Returns a buffer aligned to 4-byte boundary.
|
|
404
415
|
*
|
|
405
416
|
* @param {ArrayBuffer} arrayBuffer Buffer to pad
|
|
406
|
-
* @param {
|
|
417
|
+
* @param {number} [paddingByte=0] Should be an integer
|
|
407
418
|
* @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer
|
|
408
419
|
*/
|
|
409
420
|
function getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {
|
|
@@ -516,6 +527,8 @@ class GLTFWriter {
|
|
|
516
527
|
images: new Map()
|
|
517
528
|
};
|
|
518
529
|
|
|
530
|
+
this.textureUtils = null;
|
|
531
|
+
|
|
519
532
|
}
|
|
520
533
|
|
|
521
534
|
setPlugins( plugins ) {
|
|
@@ -524,13 +537,20 @@ class GLTFWriter {
|
|
|
524
537
|
|
|
525
538
|
}
|
|
526
539
|
|
|
540
|
+
setTextureUtils( utils ) {
|
|
541
|
+
|
|
542
|
+
this.textureUtils = utils;
|
|
543
|
+
|
|
544
|
+
}
|
|
545
|
+
|
|
527
546
|
/**
|
|
528
547
|
* Parse scenes and generate GLTF output
|
|
529
|
-
*
|
|
530
|
-
* @param
|
|
531
|
-
* @param
|
|
548
|
+
*
|
|
549
|
+
* @param {Scene|Array<Scene>} input Scene or Array of THREE.Scenes
|
|
550
|
+
* @param {Function} onDone Callback on completed
|
|
551
|
+
* @param {Object} options options
|
|
532
552
|
*/
|
|
533
|
-
async
|
|
553
|
+
async writeAsync( input, onDone, options = {} ) {
|
|
534
554
|
|
|
535
555
|
this.options = Object.assign( {
|
|
536
556
|
// default options
|
|
@@ -549,7 +569,7 @@ class GLTFWriter {
|
|
|
549
569
|
|
|
550
570
|
}
|
|
551
571
|
|
|
552
|
-
this.
|
|
572
|
+
await this.processInputAsync( input );
|
|
553
573
|
|
|
554
574
|
await Promise.all( this.pending );
|
|
555
575
|
|
|
@@ -692,8 +712,10 @@ class GLTFWriter {
|
|
|
692
712
|
|
|
693
713
|
/**
|
|
694
714
|
* Returns ids for buffer attributes.
|
|
695
|
-
*
|
|
696
|
-
* @
|
|
715
|
+
*
|
|
716
|
+
* @param {Object} attribute
|
|
717
|
+
* @param {boolean} [isRelativeCopy=false]
|
|
718
|
+
* @return {number} An integer
|
|
697
719
|
*/
|
|
698
720
|
getUID( attribute, isRelativeCopy = false ) {
|
|
699
721
|
|
|
@@ -718,7 +740,7 @@ class GLTFWriter {
|
|
|
718
740
|
* Checks if normal attribute values are normalized.
|
|
719
741
|
*
|
|
720
742
|
* @param {BufferAttribute} normal
|
|
721
|
-
* @returns {
|
|
743
|
+
* @returns {boolean}
|
|
722
744
|
*/
|
|
723
745
|
isNormalizedNormalAttribute( normal ) {
|
|
724
746
|
|
|
@@ -823,7 +845,7 @@ class GLTFWriter {
|
|
|
823
845
|
|
|
824
846
|
}
|
|
825
847
|
|
|
826
|
-
|
|
848
|
+
async buildMetalRoughTextureAsync( metalnessMap, roughnessMap ) {
|
|
827
849
|
|
|
828
850
|
if ( metalnessMap === roughnessMap ) return metalnessMap;
|
|
829
851
|
|
|
@@ -847,17 +869,15 @@ class GLTFWriter {
|
|
|
847
869
|
|
|
848
870
|
}
|
|
849
871
|
|
|
850
|
-
console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
|
|
851
|
-
|
|
852
872
|
if ( metalnessMap instanceof CompressedTexture ) {
|
|
853
873
|
|
|
854
|
-
metalnessMap =
|
|
874
|
+
metalnessMap = await this.decompressTextureAsync( metalnessMap );
|
|
855
875
|
|
|
856
876
|
}
|
|
857
877
|
|
|
858
878
|
if ( roughnessMap instanceof CompressedTexture ) {
|
|
859
879
|
|
|
860
|
-
roughnessMap =
|
|
880
|
+
roughnessMap = await this.decompressTextureAsync( roughnessMap );
|
|
861
881
|
|
|
862
882
|
}
|
|
863
883
|
|
|
@@ -927,14 +947,29 @@ class GLTFWriter {
|
|
|
927
947
|
|
|
928
948
|
}
|
|
929
949
|
|
|
950
|
+
console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
|
|
951
|
+
|
|
930
952
|
return texture;
|
|
931
953
|
|
|
932
954
|
}
|
|
933
955
|
|
|
956
|
+
|
|
957
|
+
async decompressTextureAsync( texture, maxTextureSize = Infinity ) {
|
|
958
|
+
|
|
959
|
+
if ( this.textureUtils === null ) {
|
|
960
|
+
|
|
961
|
+
throw new Error( 'THREE.GLTFExporter: setTextureUtils() must be called to process compressed textures.' );
|
|
962
|
+
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
return await this.textureUtils.decompress( texture, maxTextureSize );
|
|
966
|
+
|
|
967
|
+
}
|
|
968
|
+
|
|
934
969
|
/**
|
|
935
970
|
* Process a buffer to append to the default one.
|
|
936
971
|
* @param {ArrayBuffer} buffer
|
|
937
|
-
* @return {
|
|
972
|
+
* @return {0}
|
|
938
973
|
*/
|
|
939
974
|
processBuffer( buffer ) {
|
|
940
975
|
|
|
@@ -952,11 +987,11 @@ class GLTFWriter {
|
|
|
952
987
|
|
|
953
988
|
/**
|
|
954
989
|
* Process and generate a BufferView
|
|
955
|
-
* @param
|
|
956
|
-
* @param
|
|
957
|
-
* @param
|
|
958
|
-
* @param
|
|
959
|
-
* @param
|
|
990
|
+
* @param {BufferAttribute} attribute
|
|
991
|
+
* @param {number} componentType
|
|
992
|
+
* @param {number} start
|
|
993
|
+
* @param {number} count
|
|
994
|
+
* @param {?number} target Target usage of the BufferView
|
|
960
995
|
* @return {Object}
|
|
961
996
|
*/
|
|
962
997
|
processBufferView( attribute, componentType, start, count, target ) {
|
|
@@ -1110,7 +1145,7 @@ class GLTFWriter {
|
|
|
1110
1145
|
/**
|
|
1111
1146
|
* Process and generate a BufferView from an image Blob.
|
|
1112
1147
|
* @param {Blob} blob
|
|
1113
|
-
* @return {Promise<
|
|
1148
|
+
* @return {Promise<number>} An integer
|
|
1114
1149
|
*/
|
|
1115
1150
|
processBufferViewImage( blob ) {
|
|
1116
1151
|
|
|
@@ -1144,11 +1179,11 @@ class GLTFWriter {
|
|
|
1144
1179
|
|
|
1145
1180
|
/**
|
|
1146
1181
|
* Process attribute to generate an accessor
|
|
1147
|
-
* @param
|
|
1148
|
-
* @param
|
|
1149
|
-
* @param
|
|
1150
|
-
* @param
|
|
1151
|
-
* @return {
|
|
1182
|
+
* @param {BufferAttribute} attribute Attribute to process
|
|
1183
|
+
* @param {?BufferGeometry} geometry Geometry used for truncated draw range
|
|
1184
|
+
* @param {number} [start=0]
|
|
1185
|
+
* @param {number} [count=Infinity]
|
|
1186
|
+
* @return {?number} Index of the processed accessor on the "accessors" array
|
|
1152
1187
|
*/
|
|
1153
1188
|
processAccessor( attribute, geometry, start, count ) {
|
|
1154
1189
|
|
|
@@ -1243,10 +1278,10 @@ class GLTFWriter {
|
|
|
1243
1278
|
/**
|
|
1244
1279
|
* Process image
|
|
1245
1280
|
* @param {Image} image to process
|
|
1246
|
-
* @param {
|
|
1247
|
-
* @param {
|
|
1248
|
-
* @param {
|
|
1249
|
-
* @return {
|
|
1281
|
+
* @param {number} format Identifier of the format (RGBAFormat)
|
|
1282
|
+
* @param {boolean} flipY before writing out the image
|
|
1283
|
+
* @param {string} mimeType export format
|
|
1284
|
+
* @return {number} Index of the processed texture in the "images" array
|
|
1250
1285
|
*/
|
|
1251
1286
|
processImage( image, format, flipY, mimeType = 'image/png' ) {
|
|
1252
1287
|
|
|
@@ -1383,7 +1418,7 @@ class GLTFWriter {
|
|
|
1383
1418
|
/**
|
|
1384
1419
|
* Process sampler
|
|
1385
1420
|
* @param {Texture} map Texture to process
|
|
1386
|
-
* @return {
|
|
1421
|
+
* @return {number} Index of the processed texture in the "samplers" array
|
|
1387
1422
|
*/
|
|
1388
1423
|
processSampler( map ) {
|
|
1389
1424
|
|
|
@@ -1405,9 +1440,9 @@ class GLTFWriter {
|
|
|
1405
1440
|
/**
|
|
1406
1441
|
* Process texture
|
|
1407
1442
|
* @param {Texture} map Map to process
|
|
1408
|
-
* @return {
|
|
1443
|
+
* @return {Promise<number>} Index of the processed texture in the "textures" array
|
|
1409
1444
|
*/
|
|
1410
|
-
|
|
1445
|
+
async processTextureAsync( map ) {
|
|
1411
1446
|
|
|
1412
1447
|
const writer = this;
|
|
1413
1448
|
const options = writer.options;
|
|
@@ -1421,7 +1456,7 @@ class GLTFWriter {
|
|
|
1421
1456
|
// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture
|
|
1422
1457
|
if ( map instanceof CompressedTexture ) {
|
|
1423
1458
|
|
|
1424
|
-
map =
|
|
1459
|
+
map = await this.decompressTextureAsync( map, options.maxTextureSize );
|
|
1425
1460
|
|
|
1426
1461
|
}
|
|
1427
1462
|
|
|
@@ -1436,9 +1471,9 @@ class GLTFWriter {
|
|
|
1436
1471
|
|
|
1437
1472
|
if ( map.name ) textureDef.name = map.name;
|
|
1438
1473
|
|
|
1439
|
-
this.
|
|
1474
|
+
await this._invokeAllAsync( async function ( ext ) {
|
|
1440
1475
|
|
|
1441
|
-
ext.writeTexture && ext.writeTexture( map, textureDef );
|
|
1476
|
+
ext.writeTexture && await ext.writeTexture( map, textureDef );
|
|
1442
1477
|
|
|
1443
1478
|
} );
|
|
1444
1479
|
|
|
@@ -1451,9 +1486,9 @@ class GLTFWriter {
|
|
|
1451
1486
|
/**
|
|
1452
1487
|
* Process material
|
|
1453
1488
|
* @param {THREE.Material} material Material to process
|
|
1454
|
-
* @return {
|
|
1489
|
+
* @return {Promise<number|null>} Index of the processed material in the "materials" array
|
|
1455
1490
|
*/
|
|
1456
|
-
|
|
1491
|
+
async processMaterialAsync( material ) {
|
|
1457
1492
|
|
|
1458
1493
|
const cache = this.cache;
|
|
1459
1494
|
const json = this.json;
|
|
@@ -1494,19 +1529,19 @@ class GLTFWriter {
|
|
|
1494
1529
|
|
|
1495
1530
|
} else {
|
|
1496
1531
|
|
|
1497
|
-
materialDef.pbrMetallicRoughness.metallicFactor = 0
|
|
1498
|
-
materialDef.pbrMetallicRoughness.roughnessFactor =
|
|
1532
|
+
materialDef.pbrMetallicRoughness.metallicFactor = 0;
|
|
1533
|
+
materialDef.pbrMetallicRoughness.roughnessFactor = 1;
|
|
1499
1534
|
|
|
1500
1535
|
}
|
|
1501
1536
|
|
|
1502
1537
|
// pbrMetallicRoughness.metallicRoughnessTexture
|
|
1503
1538
|
if ( material.metalnessMap || material.roughnessMap ) {
|
|
1504
1539
|
|
|
1505
|
-
const metalRoughTexture = this.
|
|
1540
|
+
const metalRoughTexture = await this.buildMetalRoughTextureAsync( material.metalnessMap, material.roughnessMap );
|
|
1506
1541
|
|
|
1507
1542
|
const metalRoughMapDef = {
|
|
1508
|
-
index: this.
|
|
1509
|
-
|
|
1543
|
+
index: await this.processTextureAsync( metalRoughTexture ),
|
|
1544
|
+
texCoord: metalRoughTexture.channel
|
|
1510
1545
|
};
|
|
1511
1546
|
this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
|
|
1512
1547
|
materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
|
|
@@ -1517,7 +1552,7 @@ class GLTFWriter {
|
|
|
1517
1552
|
if ( material.map ) {
|
|
1518
1553
|
|
|
1519
1554
|
const baseColorMapDef = {
|
|
1520
|
-
index: this.
|
|
1555
|
+
index: await this.processTextureAsync( material.map ),
|
|
1521
1556
|
texCoord: material.map.channel
|
|
1522
1557
|
};
|
|
1523
1558
|
this.applyTextureTransform( baseColorMapDef, material.map );
|
|
@@ -1540,7 +1575,7 @@ class GLTFWriter {
|
|
|
1540
1575
|
if ( material.emissiveMap ) {
|
|
1541
1576
|
|
|
1542
1577
|
const emissiveMapDef = {
|
|
1543
|
-
index: this.
|
|
1578
|
+
index: await this.processTextureAsync( material.emissiveMap ),
|
|
1544
1579
|
texCoord: material.emissiveMap.channel
|
|
1545
1580
|
};
|
|
1546
1581
|
this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
|
|
@@ -1554,7 +1589,7 @@ class GLTFWriter {
|
|
|
1554
1589
|
if ( material.normalMap ) {
|
|
1555
1590
|
|
|
1556
1591
|
const normalMapDef = {
|
|
1557
|
-
index: this.
|
|
1592
|
+
index: await this.processTextureAsync( material.normalMap ),
|
|
1558
1593
|
texCoord: material.normalMap.channel
|
|
1559
1594
|
};
|
|
1560
1595
|
|
|
@@ -1575,7 +1610,7 @@ class GLTFWriter {
|
|
|
1575
1610
|
if ( material.aoMap ) {
|
|
1576
1611
|
|
|
1577
1612
|
const occlusionMapDef = {
|
|
1578
|
-
index: this.
|
|
1613
|
+
index: await this.processTextureAsync( material.aoMap ),
|
|
1579
1614
|
texCoord: material.aoMap.channel
|
|
1580
1615
|
};
|
|
1581
1616
|
|
|
@@ -1612,9 +1647,9 @@ class GLTFWriter {
|
|
|
1612
1647
|
|
|
1613
1648
|
this.serializeUserData( material, materialDef );
|
|
1614
1649
|
|
|
1615
|
-
this.
|
|
1650
|
+
await this._invokeAllAsync( async function ( ext ) {
|
|
1616
1651
|
|
|
1617
|
-
ext.
|
|
1652
|
+
ext.writeMaterialAsync && await ext.writeMaterialAsync( material, materialDef );
|
|
1618
1653
|
|
|
1619
1654
|
} );
|
|
1620
1655
|
|
|
@@ -1627,9 +1662,9 @@ class GLTFWriter {
|
|
|
1627
1662
|
/**
|
|
1628
1663
|
* Process mesh
|
|
1629
1664
|
* @param {THREE.Mesh} mesh Mesh to process
|
|
1630
|
-
* @return {
|
|
1665
|
+
* @return {Promise<number|null>} Index of the processed mesh in the "meshes" array
|
|
1631
1666
|
*/
|
|
1632
|
-
|
|
1667
|
+
async processMeshAsync( mesh ) {
|
|
1633
1668
|
|
|
1634
1669
|
const cache = this.cache;
|
|
1635
1670
|
const json = this.json;
|
|
@@ -1733,7 +1768,9 @@ class GLTFWriter {
|
|
|
1733
1768
|
|
|
1734
1769
|
}
|
|
1735
1770
|
|
|
1736
|
-
//
|
|
1771
|
+
// Enforce glTF vertex attribute requirements:
|
|
1772
|
+
// - JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT
|
|
1773
|
+
// - Only custom attributes may be INT or UNSIGNED_INT
|
|
1737
1774
|
modifiedAttribute = null;
|
|
1738
1775
|
const array = attribute.array;
|
|
1739
1776
|
|
|
@@ -1744,6 +1781,11 @@ class GLTFWriter {
|
|
|
1744
1781
|
console.warn( 'GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.' );
|
|
1745
1782
|
modifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );
|
|
1746
1783
|
|
|
1784
|
+
} else if ( ( array instanceof Uint32Array || array instanceof Int32Array ) && ! attributeName.startsWith( '_' ) ) {
|
|
1785
|
+
|
|
1786
|
+
console.warn( `GLTFExporter: Attribute "${ attributeName }" converted to type FLOAT.` );
|
|
1787
|
+
modifiedAttribute = GLTFExporter.Utils.toFloat32BufferAttribute( attribute );
|
|
1788
|
+
|
|
1747
1789
|
}
|
|
1748
1790
|
|
|
1749
1791
|
const accessor = this.processAccessor( modifiedAttribute || attribute, geometry );
|
|
@@ -1930,7 +1972,7 @@ class GLTFWriter {
|
|
|
1930
1972
|
|
|
1931
1973
|
}
|
|
1932
1974
|
|
|
1933
|
-
const material = this.
|
|
1975
|
+
const material = await this.processMaterialAsync( materials[ groups[ i ].materialIndex ] );
|
|
1934
1976
|
|
|
1935
1977
|
if ( material !== null ) primitive.material = material;
|
|
1936
1978
|
|
|
@@ -1948,7 +1990,7 @@ class GLTFWriter {
|
|
|
1948
1990
|
|
|
1949
1991
|
if ( ! json.meshes ) json.meshes = [];
|
|
1950
1992
|
|
|
1951
|
-
this.
|
|
1993
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
1952
1994
|
|
|
1953
1995
|
ext.writeMesh && ext.writeMesh( mesh, meshDef );
|
|
1954
1996
|
|
|
@@ -2025,7 +2067,7 @@ class GLTFWriter {
|
|
|
2025
2067
|
/**
|
|
2026
2068
|
* Process camera
|
|
2027
2069
|
* @param {THREE.Camera} camera Camera to process
|
|
2028
|
-
* @return {
|
|
2070
|
+
* @return {number} Index of the processed mesh in the "camera" array
|
|
2029
2071
|
*/
|
|
2030
2072
|
processCamera( camera ) {
|
|
2031
2073
|
|
|
@@ -2225,10 +2267,10 @@ class GLTFWriter {
|
|
|
2225
2267
|
|
|
2226
2268
|
/**
|
|
2227
2269
|
* Process Object3D node
|
|
2228
|
-
* @param {THREE.Object3D}
|
|
2229
|
-
* @return {
|
|
2270
|
+
* @param {THREE.Object3D} object Object3D to processNodeAsync
|
|
2271
|
+
* @return {Promise<number>} Index of the node in the nodes list
|
|
2230
2272
|
*/
|
|
2231
|
-
|
|
2273
|
+
async processNodeAsync( object ) {
|
|
2232
2274
|
|
|
2233
2275
|
const json = this.json;
|
|
2234
2276
|
const options = this.options;
|
|
@@ -2285,7 +2327,7 @@ class GLTFWriter {
|
|
|
2285
2327
|
|
|
2286
2328
|
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
2287
2329
|
|
|
2288
|
-
const meshIndex = this.
|
|
2330
|
+
const meshIndex = await this.processMeshAsync( object );
|
|
2289
2331
|
|
|
2290
2332
|
if ( meshIndex !== null ) nodeDef.mesh = meshIndex;
|
|
2291
2333
|
|
|
@@ -2307,7 +2349,7 @@ class GLTFWriter {
|
|
|
2307
2349
|
|
|
2308
2350
|
if ( child.visible || options.onlyVisible === false ) {
|
|
2309
2351
|
|
|
2310
|
-
const nodeIndex = this.
|
|
2352
|
+
const nodeIndex = await this.processNodeAsync( child );
|
|
2311
2353
|
|
|
2312
2354
|
if ( nodeIndex !== null ) children.push( nodeIndex );
|
|
2313
2355
|
|
|
@@ -2319,7 +2361,7 @@ class GLTFWriter {
|
|
|
2319
2361
|
|
|
2320
2362
|
}
|
|
2321
2363
|
|
|
2322
|
-
this.
|
|
2364
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
2323
2365
|
|
|
2324
2366
|
ext.writeNode && ext.writeNode( object, nodeDef );
|
|
2325
2367
|
|
|
@@ -2333,9 +2375,9 @@ class GLTFWriter {
|
|
|
2333
2375
|
|
|
2334
2376
|
/**
|
|
2335
2377
|
* Process Scene
|
|
2336
|
-
* @param {Scene}
|
|
2378
|
+
* @param {Scene} scene Scene to process
|
|
2337
2379
|
*/
|
|
2338
|
-
|
|
2380
|
+
async processSceneAsync( scene ) {
|
|
2339
2381
|
|
|
2340
2382
|
const json = this.json;
|
|
2341
2383
|
const options = this.options;
|
|
@@ -2361,7 +2403,7 @@ class GLTFWriter {
|
|
|
2361
2403
|
|
|
2362
2404
|
if ( child.visible || options.onlyVisible === false ) {
|
|
2363
2405
|
|
|
2364
|
-
const nodeIndex = this.
|
|
2406
|
+
const nodeIndex = await this.processNodeAsync( child );
|
|
2365
2407
|
|
|
2366
2408
|
if ( nodeIndex !== null ) nodes.push( nodeIndex );
|
|
2367
2409
|
|
|
@@ -2377,9 +2419,9 @@ class GLTFWriter {
|
|
|
2377
2419
|
|
|
2378
2420
|
/**
|
|
2379
2421
|
* Creates a Scene to hold a list of objects and parse it
|
|
2380
|
-
* @param {Array} objects List of objects to process
|
|
2422
|
+
* @param {Array<THREE.Object3D>} objects List of objects to process
|
|
2381
2423
|
*/
|
|
2382
|
-
|
|
2424
|
+
async processObjectsAsync( objects ) {
|
|
2383
2425
|
|
|
2384
2426
|
const scene = new Scene();
|
|
2385
2427
|
scene.name = 'AuxScene';
|
|
@@ -2392,20 +2434,20 @@ class GLTFWriter {
|
|
|
2392
2434
|
|
|
2393
2435
|
}
|
|
2394
2436
|
|
|
2395
|
-
this.
|
|
2437
|
+
await this.processSceneAsync( scene );
|
|
2396
2438
|
|
|
2397
2439
|
}
|
|
2398
2440
|
|
|
2399
2441
|
/**
|
|
2400
2442
|
* @param {THREE.Object3D|Array<THREE.Object3D>} input
|
|
2401
2443
|
*/
|
|
2402
|
-
|
|
2444
|
+
async processInputAsync( input ) {
|
|
2403
2445
|
|
|
2404
2446
|
const options = this.options;
|
|
2405
2447
|
|
|
2406
2448
|
input = input instanceof Array ? input : [ input ];
|
|
2407
2449
|
|
|
2408
|
-
this.
|
|
2450
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
2409
2451
|
|
|
2410
2452
|
ext.beforeParse && ext.beforeParse( input );
|
|
2411
2453
|
|
|
@@ -2417,7 +2459,7 @@ class GLTFWriter {
|
|
|
2417
2459
|
|
|
2418
2460
|
if ( input[ i ] instanceof Scene ) {
|
|
2419
2461
|
|
|
2420
|
-
this.
|
|
2462
|
+
await this.processSceneAsync( input[ i ] );
|
|
2421
2463
|
|
|
2422
2464
|
} else {
|
|
2423
2465
|
|
|
@@ -2427,7 +2469,11 @@ class GLTFWriter {
|
|
|
2427
2469
|
|
|
2428
2470
|
}
|
|
2429
2471
|
|
|
2430
|
-
if ( objectsWithoutScene.length > 0 )
|
|
2472
|
+
if ( objectsWithoutScene.length > 0 ) {
|
|
2473
|
+
|
|
2474
|
+
await this.processObjectsAsync( objectsWithoutScene );
|
|
2475
|
+
|
|
2476
|
+
}
|
|
2431
2477
|
|
|
2432
2478
|
for ( let i = 0; i < this.skins.length; ++ i ) {
|
|
2433
2479
|
|
|
@@ -2441,7 +2487,7 @@ class GLTFWriter {
|
|
|
2441
2487
|
|
|
2442
2488
|
}
|
|
2443
2489
|
|
|
2444
|
-
this.
|
|
2490
|
+
await this._invokeAllAsync( function ( ext ) {
|
|
2445
2491
|
|
|
2446
2492
|
ext.afterParse && ext.afterParse( input );
|
|
2447
2493
|
|
|
@@ -2449,11 +2495,11 @@ class GLTFWriter {
|
|
|
2449
2495
|
|
|
2450
2496
|
}
|
|
2451
2497
|
|
|
2452
|
-
|
|
2498
|
+
async _invokeAllAsync( func ) {
|
|
2453
2499
|
|
|
2454
2500
|
for ( let i = 0, il = this.plugins.length; i < il; i ++ ) {
|
|
2455
2501
|
|
|
2456
|
-
func( this.plugins[ i ] );
|
|
2502
|
+
await func( this.plugins[ i ] );
|
|
2457
2503
|
|
|
2458
2504
|
}
|
|
2459
2505
|
|
|
@@ -2570,7 +2616,7 @@ class GLTFMaterialsUnlitExtension {
|
|
|
2570
2616
|
|
|
2571
2617
|
}
|
|
2572
2618
|
|
|
2573
|
-
|
|
2619
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2574
2620
|
|
|
2575
2621
|
if ( ! material.isMeshBasicMaterial ) return;
|
|
2576
2622
|
|
|
@@ -2603,7 +2649,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2603
2649
|
|
|
2604
2650
|
}
|
|
2605
2651
|
|
|
2606
|
-
|
|
2652
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2607
2653
|
|
|
2608
2654
|
if ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;
|
|
2609
2655
|
|
|
@@ -2617,7 +2663,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2617
2663
|
if ( material.clearcoatMap ) {
|
|
2618
2664
|
|
|
2619
2665
|
const clearcoatMapDef = {
|
|
2620
|
-
index: writer.
|
|
2666
|
+
index: await writer.processTextureAsync( material.clearcoatMap ),
|
|
2621
2667
|
texCoord: material.clearcoatMap.channel
|
|
2622
2668
|
};
|
|
2623
2669
|
writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
|
|
@@ -2630,7 +2676,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2630
2676
|
if ( material.clearcoatRoughnessMap ) {
|
|
2631
2677
|
|
|
2632
2678
|
const clearcoatRoughnessMapDef = {
|
|
2633
|
-
index: writer.
|
|
2679
|
+
index: await writer.processTextureAsync( material.clearcoatRoughnessMap ),
|
|
2634
2680
|
texCoord: material.clearcoatRoughnessMap.channel
|
|
2635
2681
|
};
|
|
2636
2682
|
writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
|
|
@@ -2641,7 +2687,7 @@ class GLTFMaterialsClearcoatExtension {
|
|
|
2641
2687
|
if ( material.clearcoatNormalMap ) {
|
|
2642
2688
|
|
|
2643
2689
|
const clearcoatNormalMapDef = {
|
|
2644
|
-
index: writer.
|
|
2690
|
+
index: await writer.processTextureAsync( material.clearcoatNormalMap ),
|
|
2645
2691
|
texCoord: material.clearcoatNormalMap.channel
|
|
2646
2692
|
};
|
|
2647
2693
|
|
|
@@ -2676,7 +2722,7 @@ class GLTFMaterialsDispersionExtension {
|
|
|
2676
2722
|
|
|
2677
2723
|
}
|
|
2678
2724
|
|
|
2679
|
-
|
|
2725
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2680
2726
|
|
|
2681
2727
|
if ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;
|
|
2682
2728
|
|
|
@@ -2710,7 +2756,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2710
2756
|
|
|
2711
2757
|
}
|
|
2712
2758
|
|
|
2713
|
-
|
|
2759
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2714
2760
|
|
|
2715
2761
|
if ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;
|
|
2716
2762
|
|
|
@@ -2724,7 +2770,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2724
2770
|
if ( material.iridescenceMap ) {
|
|
2725
2771
|
|
|
2726
2772
|
const iridescenceMapDef = {
|
|
2727
|
-
index: writer.
|
|
2773
|
+
index: await writer.processTextureAsync( material.iridescenceMap ),
|
|
2728
2774
|
texCoord: material.iridescenceMap.channel
|
|
2729
2775
|
};
|
|
2730
2776
|
writer.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );
|
|
@@ -2739,7 +2785,7 @@ class GLTFMaterialsIridescenceExtension {
|
|
|
2739
2785
|
if ( material.iridescenceThicknessMap ) {
|
|
2740
2786
|
|
|
2741
2787
|
const iridescenceThicknessMapDef = {
|
|
2742
|
-
index: writer.
|
|
2788
|
+
index: await writer.processTextureAsync( material.iridescenceThicknessMap ),
|
|
2743
2789
|
texCoord: material.iridescenceThicknessMap.channel
|
|
2744
2790
|
};
|
|
2745
2791
|
writer.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );
|
|
@@ -2770,7 +2816,7 @@ class GLTFMaterialsTransmissionExtension {
|
|
|
2770
2816
|
|
|
2771
2817
|
}
|
|
2772
2818
|
|
|
2773
|
-
|
|
2819
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2774
2820
|
|
|
2775
2821
|
if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
|
|
2776
2822
|
|
|
@@ -2784,7 +2830,7 @@ class GLTFMaterialsTransmissionExtension {
|
|
|
2784
2830
|
if ( material.transmissionMap ) {
|
|
2785
2831
|
|
|
2786
2832
|
const transmissionMapDef = {
|
|
2787
|
-
index: writer.
|
|
2833
|
+
index: await writer.processTextureAsync( material.transmissionMap ),
|
|
2788
2834
|
texCoord: material.transmissionMap.channel
|
|
2789
2835
|
};
|
|
2790
2836
|
writer.applyTextureTransform( transmissionMapDef, material.transmissionMap );
|
|
@@ -2815,7 +2861,7 @@ class GLTFMaterialsVolumeExtension {
|
|
|
2815
2861
|
|
|
2816
2862
|
}
|
|
2817
2863
|
|
|
2818
|
-
|
|
2864
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2819
2865
|
|
|
2820
2866
|
if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
|
|
2821
2867
|
|
|
@@ -2829,7 +2875,7 @@ class GLTFMaterialsVolumeExtension {
|
|
|
2829
2875
|
if ( material.thicknessMap ) {
|
|
2830
2876
|
|
|
2831
2877
|
const thicknessMapDef = {
|
|
2832
|
-
index: writer.
|
|
2878
|
+
index: await writer.processTextureAsync( material.thicknessMap ),
|
|
2833
2879
|
texCoord: material.thicknessMap.channel
|
|
2834
2880
|
};
|
|
2835
2881
|
writer.applyTextureTransform( thicknessMapDef, material.thicknessMap );
|
|
@@ -2868,7 +2914,7 @@ class GLTFMaterialsIorExtension {
|
|
|
2868
2914
|
|
|
2869
2915
|
}
|
|
2870
2916
|
|
|
2871
|
-
|
|
2917
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2872
2918
|
|
|
2873
2919
|
if ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;
|
|
2874
2920
|
|
|
@@ -2902,7 +2948,7 @@ class GLTFMaterialsSpecularExtension {
|
|
|
2902
2948
|
|
|
2903
2949
|
}
|
|
2904
2950
|
|
|
2905
|
-
|
|
2951
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2906
2952
|
|
|
2907
2953
|
if ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&
|
|
2908
2954
|
material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&
|
|
@@ -2916,7 +2962,7 @@ class GLTFMaterialsSpecularExtension {
|
|
|
2916
2962
|
if ( material.specularIntensityMap ) {
|
|
2917
2963
|
|
|
2918
2964
|
const specularIntensityMapDef = {
|
|
2919
|
-
index: writer.
|
|
2965
|
+
index: await writer.processTextureAsync( material.specularIntensityMap ),
|
|
2920
2966
|
texCoord: material.specularIntensityMap.channel
|
|
2921
2967
|
};
|
|
2922
2968
|
writer.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );
|
|
@@ -2927,7 +2973,7 @@ class GLTFMaterialsSpecularExtension {
|
|
|
2927
2973
|
if ( material.specularColorMap ) {
|
|
2928
2974
|
|
|
2929
2975
|
const specularColorMapDef = {
|
|
2930
|
-
index: writer.
|
|
2976
|
+
index: await writer.processTextureAsync( material.specularColorMap ),
|
|
2931
2977
|
texCoord: material.specularColorMap.channel
|
|
2932
2978
|
};
|
|
2933
2979
|
writer.applyTextureTransform( specularColorMapDef, material.specularColorMap );
|
|
@@ -2961,7 +3007,7 @@ class GLTFMaterialsSheenExtension {
|
|
|
2961
3007
|
|
|
2962
3008
|
}
|
|
2963
3009
|
|
|
2964
|
-
|
|
3010
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
2965
3011
|
|
|
2966
3012
|
if ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;
|
|
2967
3013
|
|
|
@@ -2973,7 +3019,7 @@ class GLTFMaterialsSheenExtension {
|
|
|
2973
3019
|
if ( material.sheenRoughnessMap ) {
|
|
2974
3020
|
|
|
2975
3021
|
const sheenRoughnessMapDef = {
|
|
2976
|
-
index: writer.
|
|
3022
|
+
index: await writer.processTextureAsync( material.sheenRoughnessMap ),
|
|
2977
3023
|
texCoord: material.sheenRoughnessMap.channel
|
|
2978
3024
|
};
|
|
2979
3025
|
writer.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );
|
|
@@ -2984,7 +3030,7 @@ class GLTFMaterialsSheenExtension {
|
|
|
2984
3030
|
if ( material.sheenColorMap ) {
|
|
2985
3031
|
|
|
2986
3032
|
const sheenColorMapDef = {
|
|
2987
|
-
index: writer.
|
|
3033
|
+
index: await writer.processTextureAsync( material.sheenColorMap ),
|
|
2988
3034
|
texCoord: material.sheenColorMap.channel
|
|
2989
3035
|
};
|
|
2990
3036
|
writer.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );
|
|
@@ -3018,7 +3064,7 @@ class GLTFMaterialsAnisotropyExtension {
|
|
|
3018
3064
|
|
|
3019
3065
|
}
|
|
3020
3066
|
|
|
3021
|
-
|
|
3067
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
3022
3068
|
|
|
3023
3069
|
if ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;
|
|
3024
3070
|
|
|
@@ -3029,7 +3075,7 @@ class GLTFMaterialsAnisotropyExtension {
|
|
|
3029
3075
|
|
|
3030
3076
|
if ( material.anisotropyMap ) {
|
|
3031
3077
|
|
|
3032
|
-
const anisotropyMapDef = { index: writer.
|
|
3078
|
+
const anisotropyMapDef = { index: await writer.processTextureAsync( material.anisotropyMap ) };
|
|
3033
3079
|
writer.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );
|
|
3034
3080
|
extensionDef.anisotropyTexture = anisotropyMapDef;
|
|
3035
3081
|
|
|
@@ -3061,7 +3107,7 @@ class GLTFMaterialsEmissiveStrengthExtension {
|
|
|
3061
3107
|
|
|
3062
3108
|
}
|
|
3063
3109
|
|
|
3064
|
-
|
|
3110
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
3065
3111
|
|
|
3066
3112
|
if ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;
|
|
3067
3113
|
|
|
@@ -3096,7 +3142,7 @@ class GLTFMaterialsBumpExtension {
|
|
|
3096
3142
|
|
|
3097
3143
|
}
|
|
3098
3144
|
|
|
3099
|
-
|
|
3145
|
+
async writeMaterialAsync( material, materialDef ) {
|
|
3100
3146
|
|
|
3101
3147
|
if ( ! material.isMeshStandardMaterial || (
|
|
3102
3148
|
material.bumpScale === 1 &&
|
|
@@ -3110,7 +3156,7 @@ class GLTFMaterialsBumpExtension {
|
|
|
3110
3156
|
if ( material.bumpMap ) {
|
|
3111
3157
|
|
|
3112
3158
|
const bumpMapDef = {
|
|
3113
|
-
index: writer.
|
|
3159
|
+
index: await writer.processTextureAsync( material.bumpMap ),
|
|
3114
3160
|
texCoord: material.bumpMap.channel
|
|
3115
3161
|
};
|
|
3116
3162
|
writer.applyTextureTransform( bumpMapDef, material.bumpMap );
|
|
@@ -3382,6 +3428,32 @@ GLTFExporter.Utils = {
|
|
|
3382
3428
|
|
|
3383
3429
|
return clip;
|
|
3384
3430
|
|
|
3431
|
+
},
|
|
3432
|
+
|
|
3433
|
+
toFloat32BufferAttribute: function ( srcAttribute ) {
|
|
3434
|
+
|
|
3435
|
+
const dstAttribute = new BufferAttribute( new Float32Array( srcAttribute.count * srcAttribute.itemSize ), srcAttribute.itemSize, false );
|
|
3436
|
+
|
|
3437
|
+
if ( ! srcAttribute.normalized && ! srcAttribute.isInterleavedBufferAttribute ) {
|
|
3438
|
+
|
|
3439
|
+
dstAttribute.array.set( srcAttribute.array );
|
|
3440
|
+
|
|
3441
|
+
return dstAttribute;
|
|
3442
|
+
|
|
3443
|
+
}
|
|
3444
|
+
|
|
3445
|
+
for ( let i = 0, il = srcAttribute.count; i < il; i ++ ) {
|
|
3446
|
+
|
|
3447
|
+
for ( let j = 0; j < srcAttribute.itemSize; j ++ ) {
|
|
3448
|
+
|
|
3449
|
+
dstAttribute.setComponent( i, j, srcAttribute.getComponent( i, j ) );
|
|
3450
|
+
|
|
3451
|
+
}
|
|
3452
|
+
|
|
3453
|
+
}
|
|
3454
|
+
|
|
3455
|
+
return dstAttribute;
|
|
3456
|
+
|
|
3385
3457
|
}
|
|
3386
3458
|
|
|
3387
3459
|
};
|