three-stdlib 2.15.0 → 2.15.2
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/animation/AnimationClipCreator.js +32 -52
- package/animation/AnimationClipCreator.mjs +57 -0
- package/animation/CCDIKSolver.js +66 -161
- package/animation/CCDIKSolver.mjs +234 -0
- package/animation/MMDAnimationHelper.js +150 -341
- package/animation/MMDAnimationHelper.mjs +514 -0
- package/animation/MMDPhysics.js +154 -361
- package/animation/MMDPhysics.mjs +769 -0
- package/cameras/CinematicCamera.js +67 -77
- package/cameras/CinematicCamera.mjs +129 -0
- package/controls/ArcballControls.js +544 -1449
- package/controls/ArcballControls.mjs +1737 -0
- package/controls/DeviceOrientationControls.js +52 -97
- package/controls/DeviceOrientationControls.mjs +74 -0
- package/controls/DragControls.js +85 -187
- package/controls/DragControls.mjs +172 -0
- package/controls/FirstPersonControls.js +123 -193
- package/controls/FirstPersonControls.mjs +220 -0
- package/controls/FlyControls.js +82 -152
- package/controls/FlyControls.mjs +239 -0
- package/controls/OrbitControls.js +232 -481
- package/controls/OrbitControls.mjs +731 -0
- package/controls/PointerLockControls.js +63 -99
- package/controls/PointerLockControls.mjs +88 -0
- package/controls/TrackballControls.js +211 -383
- package/controls/TrackballControls.mjs +481 -0
- package/controls/TransformControls.js +575 -782
- package/controls/TransformControls.mjs +1068 -0
- package/controls/experimental/CameraControls.js +329 -609
- package/controls/experimental/CameraControls.mjs +673 -0
- package/csm/CSM.js +47 -108
- package/csm/CSM.mjs +244 -0
- package/csm/CSMFrustum.js +14 -29
- package/csm/CSMFrustum.mjs +75 -0
- package/csm/CSMHelper.js +20 -34
- package/csm/CSMHelper.mjs +114 -0
- package/csm/CSMShader.js +7 -11
- package/csm/CSMShader.mjs +251 -0
- package/curves/CurveExtras.js +73 -115
- package/curves/CurveExtras.mjs +224 -0
- package/curves/NURBSCurve.js +15 -43
- package/curves/NURBSCurve.mjs +35 -0
- package/curves/NURBSSurface.js +11 -27
- package/curves/NURBSSurface.mjs +28 -0
- package/curves/NURBSUtils.js +54 -203
- package/curves/NURBSUtils.mjs +226 -0
- package/deprecated/Geometry.js +191 -486
- package/deprecated/Geometry.mjs +966 -0
- package/effects/AnaglyphEffect.js +95 -60
- package/effects/AnaglyphEffect.mjs +120 -0
- package/effects/AsciiEffect.js +80 -110
- package/effects/AsciiEffect.mjs +173 -0
- package/effects/OutlineEffect.js +121 -204
- package/effects/OutlineEffect.mjs +295 -0
- package/effects/ParallaxBarrierEffect.js +39 -38
- package/effects/ParallaxBarrierEffect.mjs +64 -0
- package/effects/PeppersGhostEffect.js +19 -68
- package/effects/PeppersGhostEffect.mjs +85 -0
- package/effects/StereoEffect.js +12 -16
- package/effects/StereoEffect.mjs +32 -0
- package/environments/RoomEnvironment.js +52 -47
- package/environments/RoomEnvironment.mjs +78 -0
- package/exporters/ColladaExporter.js +115 -241
- package/exporters/ColladaExporter.mjs +299 -0
- package/exporters/DRACOExporter.js +67 -121
- package/exporters/DRACOExporter.mjs +132 -0
- package/exporters/GLTFExporter.js +463 -1014
- package/exporters/GLTFExporter.mjs +1381 -0
- package/exporters/MMDExporter.js +44 -102
- package/exporters/MMDExporter.mjs +102 -0
- package/exporters/OBJExporter.js +78 -140
- package/exporters/OBJExporter.mjs +166 -0
- package/exporters/PLYExporter.js +93 -154
- package/exporters/PLYExporter.mjs +278 -0
- package/exporters/STLExporter.js +30 -81
- package/exporters/STLExporter.mjs +129 -0
- package/exporters/USDZExporter.js +84 -144
- package/exporters/USDZExporter.mjs +328 -0
- package/geometries/BoxLineGeometry.js +7 -14
- package/geometries/BoxLineGeometry.mjs +45 -0
- package/geometries/ConvexGeometry.js +15 -24
- package/geometries/ConvexGeometry.mjs +29 -0
- package/geometries/DecalGeometry.js +108 -162
- package/geometries/DecalGeometry.mjs +184 -0
- package/geometries/LightningStrike.js +101 -294
- package/geometries/LightningStrike.mjs +547 -0
- package/geometries/ParametricGeometries.js +26 -76
- package/geometries/ParametricGeometries.mjs +129 -0
- package/geometries/ParametricGeometry.js +24 -48
- package/geometries/ParametricGeometry.mjs +63 -0
- package/geometries/RoundedBoxGeometry.js +33 -64
- package/geometries/RoundedBoxGeometry.mjs +91 -0
- package/geometries/TeapotGeometry.js +1434 -174
- package/geometries/TeapotGeometry.mjs +1557 -0
- package/geometries/TextGeometry.js +9 -17
- package/geometries/TextGeometry.mjs +23 -0
- package/helpers/LightProbeHelper.js +53 -21
- package/helpers/LightProbeHelper.mjs +72 -0
- package/helpers/PositionalAudioHelper.js +23 -30
- package/helpers/PositionalAudioHelper.mjs +68 -0
- package/helpers/RectAreaLightHelper.js +17 -33
- package/helpers/RectAreaLightHelper.mjs +44 -0
- package/helpers/VertexNormalsHelper.js +20 -41
- package/helpers/VertexNormalsHelper.mjs +54 -0
- package/helpers/VertexTangentsHelper.js +18 -36
- package/helpers/VertexTangentsHelper.mjs +45 -0
- package/index.d.ts +54 -0
- package/index.js +968 -333
- package/index.mjs +968 -0
- package/interactive/SelectionBox.js +31 -46
- package/interactive/SelectionBox.mjs +137 -0
- package/interactive/SelectionHelper.js +16 -21
- package/interactive/SelectionHelper.mjs +54 -0
- package/libs/MeshoptDecoder.js +147 -58
- package/libs/MeshoptDecoder.mjs +210 -0
- package/libs/MotionControllers.js +66 -208
- package/libs/MotionControllers.mjs +261 -0
- package/lights/LightProbeGenerator.js +40 -96
- package/lights/LightProbeGenerator.mjs +145 -0
- package/lights/RectAreaLightUniformsLib.js +32842 -9
- package/lights/RectAreaLightUniformsLib.mjs +32842 -0
- package/lines/Line2.js +9 -12
- package/lines/Line2.mjs +13 -0
- package/lines/LineGeometry.js +7 -19
- package/lines/LineGeometry.mjs +44 -0
- package/lines/LineMaterial.js +51 -89
- package/lines/LineMaterial.mjs +539 -0
- package/lines/LineSegments2.js +56 -165
- package/lines/LineSegments2.mjs +202 -0
- package/lines/LineSegmentsGeometry.js +29 -71
- package/lines/LineSegmentsGeometry.mjs +124 -0
- package/lines/Wireframe.js +15 -29
- package/lines/Wireframe.mjs +31 -0
- package/lines/WireframeGeometry2.js +8 -9
- package/lines/WireframeGeometry2.mjs +13 -0
- package/loaders/3DMLoader.js +234 -469
- package/loaders/3DMLoader.mjs +802 -0
- package/loaders/3MFLoader.js +340 -555
- package/loaders/3MFLoader.mjs +837 -0
- package/loaders/AMFLoader.js +114 -219
- package/loaders/AMFLoader.mjs +284 -0
- package/loaders/AssimpLoader.js +328 -725
- package/loaders/AssimpLoader.mjs +1396 -0
- package/loaders/BVHLoader.js +94 -200
- package/loaders/BVHLoader.mjs +207 -0
- package/loaders/BasisTextureLoader.js +229 -357
- package/loaders/BasisTextureLoader.mjs +474 -0
- package/loaders/ColladaLoader.js +932 -1522
- package/loaders/ColladaLoader.mjs +2403 -0
- package/loaders/DDSLoader.js +42 -108
- package/loaders/DDSLoader.mjs +148 -0
- package/loaders/DRACOLoader.js +103 -210
- package/loaders/DRACOLoader.mjs +340 -0
- package/loaders/EXRLoader.js +461 -809
- package/loaders/EXRLoader.mjs +1351 -0
- package/loaders/FBXLoader.js +842 -1397
- package/loaders/FBXLoader.mjs +2362 -0
- package/loaders/FontLoader.js +33 -66
- package/loaders/FontLoader.mjs +111 -0
- package/loaders/GCodeLoader.js +63 -111
- package/loaders/GCodeLoader.mjs +141 -0
- package/loaders/GLTFLoader.js +771 -1484
- package/loaders/GLTFLoader.mjs +2316 -0
- package/loaders/HDRCubeTextureLoader.js +45 -50
- package/loaders/HDRCubeTextureLoader.mjs +77 -0
- package/loaders/KMZLoader.js +42 -55
- package/loaders/KMZLoader.mjs +75 -0
- package/loaders/KTX2Loader.js +229 -362
- package/loaders/KTX2Loader.mjs +427 -0
- package/loaders/KTXLoader.js +37 -99
- package/loaders/KTXLoader.mjs +87 -0
- package/loaders/LDrawLoader.js +313 -746
- package/loaders/LDrawLoader.mjs +1409 -0
- package/loaders/LUT3dlLoader.js +50 -62
- package/loaders/LUT3dlLoader.mjs +100 -0
- package/loaders/LUTCubeLoader.js +45 -56
- package/loaders/LUTCubeLoader.mjs +104 -0
- package/loaders/LWOLoader.js +227 -339
- package/loaders/LWOLoader.mjs +625 -0
- package/loaders/LottieLoader.js +36 -38
- package/loaders/LottieLoader.mjs +47 -0
- package/loaders/MD2Loader.js +248 -91
- package/loaders/MD2Loader.mjs +359 -0
- package/loaders/MDDLoader.js +25 -45
- package/loaders/MDDLoader.mjs +58 -0
- package/loaders/MMDLoader.js +359 -795
- package/loaders/MMDLoader.mjs +998 -0
- package/loaders/MTLLoader.js +91 -201
- package/loaders/MTLLoader.mjs +280 -0
- package/loaders/NRRDLoader.js +182 -263
- package/loaders/NRRDLoader.mjs +401 -0
- package/loaders/NodeMaterialLoader.js +121 -14
- package/loaders/NodeMaterialLoader.mjs +146 -0
- package/loaders/OBJLoader.js +161 -283
- package/loaders/OBJLoader.mjs +487 -0
- package/loaders/PCDLoader.js +145 -164
- package/loaders/PCDLoader.mjs +248 -0
- package/loaders/PDBLoader.js +45 -63
- package/loaders/PDBLoader.mjs +246 -0
- package/loaders/PLYLoader.js +106 -203
- package/loaders/PLYLoader.mjs +317 -0
- package/loaders/PRWMLoader.js +73 -110
- package/loaders/PRWMLoader.mjs +160 -0
- package/loaders/PVRLoader.js +32 -93
- package/loaders/PVRLoader.mjs +131 -0
- package/loaders/RGBELoader.js +96 -233
- package/loaders/RGBELoader.mjs +244 -0
- package/loaders/RGBMLoader.js +344 -514
- package/loaders/RGBMLoader.mjs +998 -0
- package/loaders/STLLoader.js +59 -165
- package/loaders/STLLoader.mjs +190 -0
- package/loaders/SVGLoader.js +481 -851
- package/loaders/SVGLoader.mjs +1709 -0
- package/loaders/TDSLoader.js +137 -527
- package/loaders/TDSLoader.mjs +480 -0
- package/loaders/TGALoader.js +94 -205
- package/loaders/TGALoader.mjs +285 -0
- package/loaders/TTFLoader.js +58 -79
- package/loaders/TTFLoader.mjs +131 -0
- package/loaders/TiltLoader.js +129 -167
- package/loaders/TiltLoader.mjs +373 -0
- package/loaders/VOXLoader.js +320 -84
- package/loaders/VOXLoader.mjs +431 -0
- package/loaders/VRMLLoader.js +786 -1268
- package/loaders/VRMLLoader.mjs +2093 -0
- package/loaders/VRMLoader.js +23 -31
- package/loaders/VRMLoader.mjs +38 -0
- package/loaders/VTKLoader.js +219 -407
- package/loaders/VTKLoader.mjs +646 -0
- package/loaders/XLoader.js +1083 -1259
- package/loaders/XLoader.mjs +1258 -0
- package/loaders/XYZLoader.js +28 -34
- package/loaders/XYZLoader.mjs +60 -0
- package/loaders/lwo/IFFParser.js +238 -492
- package/loaders/lwo/IFFParser.mjs +697 -0
- package/loaders/lwo/LWO2Parser.js +176 -279
- package/loaders/lwo/LWO2Parser.mjs +327 -0
- package/loaders/lwo/LWO3Parser.js +160 -247
- package/loaders/lwo/LWO3Parser.mjs +298 -0
- package/math/Capsule.js +56 -43
- package/math/Capsule.mjs +100 -0
- package/math/ColorConverter.js +18 -32
- package/math/ColorConverter.mjs +51 -0
- package/math/ConvexHull.js +515 -739
- package/math/ConvexHull.mjs +574 -0
- package/math/ImprovedNoise.js +282 -32
- package/math/ImprovedNoise.mjs +302 -0
- package/math/Lut.js +51 -35
- package/math/Lut.mjs +135 -0
- package/math/MeshSurfaceSampler.js +25 -68
- package/math/MeshSurfaceSampler.mjs +107 -0
- package/math/OBB.js +91 -152
- package/math/OBB.mjs +235 -0
- package/math/Octree.js +76 -139
- package/math/Octree.mjs +278 -0
- package/math/SimplexNoise.js +217 -238
- package/math/SimplexNoise.mjs +425 -0
- package/misc/ConvexObjectBreaker.js +79 -185
- package/misc/ConvexObjectBreaker.mjs +292 -0
- package/misc/GPUComputationRenderer.js +69 -194
- package/misc/GPUComputationRenderer.mjs +171 -0
- package/misc/Gyroscope.js +16 -22
- package/misc/Gyroscope.mjs +35 -0
- package/misc/MD2Character.js +52 -74
- package/misc/MD2Character.mjs +162 -0
- package/misc/MD2CharacterComplex.js +112 -163
- package/misc/MD2CharacterComplex.mjs +328 -0
- package/misc/MorphAnimMesh.js +20 -28
- package/misc/MorphAnimMesh.mjs +40 -0
- package/misc/MorphBlendMesh.js +45 -69
- package/misc/MorphBlendMesh.mjs +179 -0
- package/misc/ProgressiveLightmap.js +70 -187
- package/misc/ProgressiveLightmap.mjs +166 -0
- package/misc/RollerCoaster.js +106 -135
- package/misc/RollerCoaster.mjs +346 -0
- package/misc/TubePainter.js +74 -92
- package/misc/TubePainter.mjs +123 -0
- package/misc/Volume.js +108 -270
- package/misc/Volume.mjs +244 -0
- package/misc/VolumeSlice.js +34 -122
- package/misc/VolumeSlice.mjs +106 -0
- package/misc/WebGL.js +37 -34
- package/misc/WebGL.mjs +74 -0
- package/modifiers/CurveModifier.js +46 -151
- package/modifiers/CurveModifier.mjs +182 -0
- package/modifiers/EdgeSplitModifier.js +46 -90
- package/modifiers/EdgeSplitModifier.mjs +162 -0
- package/modifiers/SimplifyModifier.js +77 -202
- package/modifiers/SimplifyModifier.mjs +282 -0
- package/modifiers/TessellateModifier.js +65 -90
- package/modifiers/TessellateModifier.mjs +206 -0
- package/nodes/Nodes.js +274 -140
- package/nodes/Nodes.mjs +400 -0
- package/nodes/ShaderNode.js +296 -196
- package/nodes/ShaderNode.mjs +408 -0
- package/nodes/accessors/BufferNode.js +4 -8
- package/nodes/accessors/BufferNode.mjs +15 -0
- package/nodes/accessors/CameraNode.js +20 -25
- package/nodes/accessors/CameraNode.mjs +44 -0
- package/nodes/accessors/CubeTextureNode.js +14 -26
- package/nodes/accessors/CubeTextureNode.mjs +42 -0
- package/nodes/accessors/MaterialNode.js +43 -53
- package/nodes/accessors/MaterialNode.mjs +71 -0
- package/nodes/accessors/MaterialReferenceNode.js +3 -6
- package/nodes/accessors/MaterialReferenceNode.mjs +14 -0
- package/nodes/accessors/ModelNode.js +3 -5
- package/nodes/accessors/ModelNode.mjs +9 -0
- package/nodes/accessors/ModelViewProjectionNode.js +14 -13
- package/nodes/accessors/ModelViewProjectionNode.mjs +24 -0
- package/nodes/accessors/NormalNode.js +40 -39
- package/nodes/accessors/NormalNode.mjs +62 -0
- package/nodes/accessors/Object3DNode.js +40 -50
- package/nodes/accessors/Object3DNode.mjs +76 -0
- package/nodes/accessors/PointUVNode.js +5 -9
- package/nodes/accessors/PointUVNode.mjs +13 -0
- package/nodes/accessors/PositionNode.js +42 -41
- package/nodes/accessors/PositionNode.mjs +65 -0
- package/nodes/accessors/ReferenceNode.js +10 -17
- package/nodes/accessors/ReferenceNode.mjs +37 -0
- package/nodes/accessors/ReflectNode.js +23 -26
- package/nodes/accessors/ReflectNode.mjs +43 -0
- package/nodes/accessors/SkinningNode.js +46 -48
- package/nodes/accessors/SkinningNode.mjs +58 -0
- package/nodes/accessors/TextureNode.js +14 -29
- package/nodes/accessors/TextureNode.mjs +54 -0
- package/nodes/accessors/UVNode.js +5 -11
- package/nodes/accessors/UVNode.mjs +23 -0
- package/nodes/core/ArrayUniformNode.js +3 -7
- package/nodes/core/ArrayUniformNode.mjs +14 -0
- package/nodes/core/AttributeNode.js +5 -12
- package/nodes/core/AttributeNode.mjs +30 -0
- package/nodes/core/BypassNode.js +5 -12
- package/nodes/core/BypassNode.mjs +22 -0
- package/nodes/core/CodeNode.js +4 -12
- package/nodes/core/CodeNode.mjs +28 -0
- package/nodes/core/ConstNode.js +3 -7
- package/nodes/core/ConstNode.mjs +14 -0
- package/nodes/core/ContextNode.js +3 -8
- package/nodes/core/ContextNode.mjs +22 -0
- package/nodes/core/ExpressionNode.js +5 -9
- package/nodes/core/ExpressionNode.mjs +19 -0
- package/nodes/core/FunctionCallNode.js +6 -15
- package/nodes/core/FunctionCallNode.mjs +37 -0
- package/nodes/core/FunctionNode.js +10 -25
- package/nodes/core/FunctionNode.mjs +56 -0
- package/nodes/core/InputNode.js +12 -23
- package/nodes/core/InputNode.mjs +38 -0
- package/nodes/core/Node.js +35 -75
- package/nodes/core/Node.mjs +139 -0
- package/nodes/core/NodeAttribute.js +2 -4
- package/nodes/core/NodeAttribute.mjs +10 -0
- package/nodes/core/NodeBuilder.js +110 -224
- package/nodes/core/NodeBuilder.mjs +395 -0
- package/nodes/core/NodeCode.js +4 -7
- package/nodes/core/NodeCode.mjs +11 -0
- package/nodes/core/NodeFrame.js +9 -12
- package/nodes/core/NodeFrame.mjs +35 -0
- package/nodes/core/NodeFunctionInput.js +3 -5
- package/nodes/core/NodeFunctionInput.mjs +13 -0
- package/nodes/core/NodeKeywords.js +5 -16
- package/nodes/core/NodeKeywords.mjs +44 -0
- package/nodes/core/NodeUniform.js +3 -7
- package/nodes/core/NodeUniform.mjs +18 -0
- package/nodes/core/NodeUtils.js +39 -43
- package/nodes/core/NodeUtils.mjs +57 -0
- package/nodes/core/NodeVar.js +2 -4
- package/nodes/core/NodeVar.mjs +10 -0
- package/nodes/core/NodeVary.js +2 -4
- package/nodes/core/NodeVary.mjs +10 -0
- package/nodes/core/PropertyNode.js +4 -10
- package/nodes/core/PropertyNode.mjs +21 -0
- package/nodes/core/TempNode.js +5 -11
- package/nodes/core/TempNode.mjs +25 -0
- package/nodes/core/UniformNode.js +4 -10
- package/nodes/core/UniformNode.mjs +23 -0
- package/nodes/core/VarNode.js +3 -11
- package/nodes/core/VarNode.mjs +31 -0
- package/nodes/core/VaryNode.js +6 -15
- package/nodes/core/VaryNode.mjs +30 -0
- package/nodes/core/constants.js +20 -7
- package/nodes/core/constants.mjs +24 -0
- package/nodes/display/ColorSpaceNode.js +34 -38
- package/nodes/display/ColorSpaceNode.mjs +63 -0
- package/nodes/display/NormalMapNode.js +35 -53
- package/nodes/display/NormalMapNode.mjs +54 -0
- package/nodes/fog/FogNode.js +5 -9
- package/nodes/fog/FogNode.mjs +15 -0
- package/nodes/fog/FogRangeNode.js +5 -9
- package/nodes/fog/FogRangeNode.mjs +17 -0
- package/nodes/functions/BSDFs.js +61 -118
- package/nodes/functions/BSDFs.mjs +64 -0
- package/nodes/lights/LightContextNode.js +14 -23
- package/nodes/lights/LightContextNode.mjs +35 -0
- package/nodes/lights/LightNode.js +27 -31
- package/nodes/lights/LightNode.mjs +58 -0
- package/nodes/lights/LightsNode.js +9 -28
- package/nodes/lights/LightsNode.mjs +59 -0
- package/nodes/loaders/NodeLoader.js +27 -42
- package/nodes/loaders/NodeLoader.mjs +66 -0
- package/nodes/loaders/NodeMaterialLoader.js +4 -10
- package/nodes/loaders/NodeMaterialLoader.mjs +24 -0
- package/nodes/loaders/NodeObjectLoader.js +9 -19
- package/nodes/loaders/NodeObjectLoader.mjs +40 -0
- package/nodes/materials/LineBasicNodeMaterial.js +5 -10
- package/nodes/materials/LineBasicNodeMaterial.mjs +27 -0
- package/nodes/materials/Materials.js +14 -17
- package/nodes/materials/Materials.mjs +28 -0
- package/nodes/materials/MeshBasicNodeMaterial.js +5 -10
- package/nodes/materials/MeshBasicNodeMaterial.mjs +28 -0
- package/nodes/materials/MeshStandardNodeMaterial.js +5 -8
- package/nodes/materials/MeshStandardNodeMaterial.mjs +41 -0
- package/nodes/materials/NodeMaterial.js +20 -36
- package/nodes/materials/NodeMaterial.mjs +64 -0
- package/nodes/materials/PointsNodeMaterial.js +5 -10
- package/nodes/materials/PointsNodeMaterial.mjs +30 -0
- package/nodes/math/CondNode.js +11 -23
- package/nodes/math/CondNode.mjs +38 -0
- package/nodes/math/MathNode.js +98 -142
- package/nodes/math/MathNode.mjs +163 -0
- package/nodes/math/OperatorNode.js +24 -46
- package/nodes/math/OperatorNode.mjs +103 -0
- package/nodes/procedural/CheckerNode.js +13 -19
- package/nodes/procedural/CheckerNode.mjs +21 -0
- package/nodes/utils/ArrayElementNode.js +4 -8
- package/nodes/utils/ArrayElementNode.mjs +19 -0
- package/nodes/utils/ConvertNode.js +3 -8
- package/nodes/utils/ConvertNode.mjs +25 -0
- package/nodes/utils/JoinNode.js +7 -11
- package/nodes/utils/JoinNode.mjs +26 -0
- package/nodes/utils/MatcapUVNode.js +8 -11
- package/nodes/utils/MatcapUVNode.mjs +16 -0
- package/nodes/utils/OscNode.js +27 -33
- package/nodes/utils/OscNode.mjs +50 -0
- package/nodes/utils/SplitNode.js +6 -20
- package/nodes/utils/SplitNode.mjs +45 -0
- package/nodes/utils/SpriteSheetUVNode.js +23 -23
- package/nodes/utils/SpriteSheetUVNode.mjs +40 -0
- package/nodes/utils/TimerNode.js +20 -24
- package/nodes/utils/TimerNode.mjs +44 -0
- package/objects/GroundProjectedEnv.js +22 -37
- package/objects/GroundProjectedEnv.mjs +130 -0
- package/objects/Lensflare.js +86 -156
- package/objects/Lensflare.mjs +262 -0
- package/objects/LightningStorm.js +38 -102
- package/objects/LightningStorm.mjs +110 -0
- package/objects/MarchingCubes.js +150 -303
- package/objects/MarchingCubes.mjs +457 -0
- package/objects/Reflector.js +50 -72
- package/objects/Reflector.mjs +166 -0
- package/objects/ReflectorForSSRPass.js +80 -131
- package/objects/ReflectorForSSRPass.mjs +247 -0
- package/objects/ReflectorRTT.js +6 -7
- package/objects/ReflectorRTT.mjs +10 -0
- package/objects/Refractor.js +64 -106
- package/objects/Refractor.mjs +178 -0
- package/objects/ShadowMesh.js +8 -17
- package/objects/ShadowMesh.mjs +41 -0
- package/objects/Sky.js +119 -80
- package/objects/Sky.mjs +124 -0
- package/objects/Water.js +83 -127
- package/objects/Water.mjs +235 -0
- package/objects/Water2.js +72 -108
- package/objects/Water2.mjs +252 -0
- package/offscreen/jank.js +10 -14
- package/offscreen/jank.mjs +27 -0
- package/offscreen/offscreen.js +4 -5
- package/offscreen/offscreen.mjs +5 -0
- package/offscreen/scene.js +45 -48
- package/offscreen/scene.mjs +52 -0
- package/package.json +3 -3
- package/physics/AmmoPhysics.js +30 -71
- package/physics/AmmoPhysics.mjs +165 -0
- package/postprocessing/AdaptiveToneMappingPass.js +97 -123
- package/postprocessing/AdaptiveToneMappingPass.mjs +221 -0
- package/postprocessing/AfterimagePass.js +28 -49
- package/postprocessing/AfterimagePass.mjs +55 -0
- package/postprocessing/BloomPass.js +43 -69
- package/postprocessing/BloomPass.mjs +90 -0
- package/postprocessing/BokehPass.js +39 -69
- package/postprocessing/BokehPass.mjs +76 -0
- package/postprocessing/ClearPass.js +10 -25
- package/postprocessing/ClearPass.mjs +27 -0
- package/postprocessing/CubeTexturePass.js +28 -27
- package/postprocessing/CubeTexturePass.mjs +49 -0
- package/postprocessing/DotScreenPass.js +24 -32
- package/postprocessing/DotScreenPass.mjs +40 -0
- package/postprocessing/EffectComposer.js +39 -86
- package/postprocessing/EffectComposer.mjs +139 -0
- package/postprocessing/FilmPass.js +25 -30
- package/postprocessing/FilmPass.mjs +42 -0
- package/postprocessing/GlitchPass.js +38 -61
- package/postprocessing/GlitchPass.mjs +75 -0
- package/postprocessing/HalftonePass.js +19 -39
- package/postprocessing/HalftonePass.mjs +44 -0
- package/postprocessing/LUTPass.js +13 -38
- package/postprocessing/LUTPass.mjs +136 -0
- package/postprocessing/MaskPass.js +19 -38
- package/postprocessing/MaskPass.mjs +60 -0
- package/postprocessing/OutlinePass.js +135 -277
- package/postprocessing/OutlinePass.mjs +438 -0
- package/postprocessing/Pass.js +20 -44
- package/postprocessing/Pass.mjs +37 -0
- package/postprocessing/RenderPass.js +13 -36
- package/postprocessing/RenderPass.mjs +48 -0
- package/postprocessing/RenderPixelatedPass.js +44 -58
- package/postprocessing/RenderPixelatedPass.mjs +199 -0
- package/postprocessing/SAOPass.js +154 -189
- package/postprocessing/SAOPass.mjs +282 -0
- package/postprocessing/SMAAPass.js +64 -84
- package/postprocessing/SMAAPass.mjs +112 -0
- package/postprocessing/SSAARenderPass.js +121 -69
- package/postprocessing/SSAARenderPass.mjs +170 -0
- package/postprocessing/SSAOPass.js +123 -172
- package/postprocessing/SSAOPass.mjs +265 -0
- package/postprocessing/SSRPass.js +211 -280
- package/postprocessing/SSRPass.mjs +432 -0
- package/postprocessing/SavePass.js +20 -25
- package/postprocessing/SavePass.mjs +37 -0
- package/postprocessing/ShaderPass.js +14 -30
- package/postprocessing/ShaderPass.mjs +39 -0
- package/postprocessing/TAARenderPass.js +42 -61
- package/postprocessing/TAARenderPass.mjs +88 -0
- package/postprocessing/TexturePass.js +21 -22
- package/postprocessing/TexturePass.mjs +39 -0
- package/postprocessing/UnrealBloomPass.js +105 -213
- package/postprocessing/UnrealBloomPass.mjs +220 -0
- package/renderers/CSS2DRenderer.js +44 -56
- package/renderers/CSS2DRenderer.mjs +112 -0
- package/renderers/CSS3DRenderer.js +53 -86
- package/renderers/CSS3DRenderer.mjs +133 -0
- package/renderers/Projector.js +107 -274
- package/renderers/Projector.mjs +511 -0
- package/renderers/SVGRenderer.js +72 -182
- package/renderers/SVGRenderer.mjs +306 -0
- package/renderers/nodes/accessors/CameraNode.js +29 -40
- package/renderers/nodes/accessors/CameraNode.mjs +63 -0
- package/renderers/nodes/accessors/ModelNode.js +28 -37
- package/renderers/nodes/accessors/ModelNode.mjs +61 -0
- package/renderers/nodes/accessors/ModelViewProjectionNode.js +10 -23
- package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +21 -0
- package/renderers/nodes/accessors/NormalNode.js +35 -45
- package/renderers/nodes/accessors/NormalNode.mjs +61 -0
- package/renderers/nodes/accessors/PositionNode.js +18 -19
- package/renderers/nodes/accessors/PositionNode.mjs +30 -0
- package/renderers/nodes/accessors/UVNode.js +5 -10
- package/renderers/nodes/accessors/UVNode.mjs +13 -0
- package/renderers/nodes/core/AttributeNode.js +5 -14
- package/renderers/nodes/core/AttributeNode.mjs +35 -0
- package/renderers/nodes/core/InputNode.js +4 -14
- package/renderers/nodes/core/InputNode.mjs +31 -0
- package/renderers/nodes/core/Node.js +7 -17
- package/renderers/nodes/core/Node.mjs +34 -0
- package/renderers/nodes/core/NodeAttribute.js +3 -6
- package/renderers/nodes/core/NodeAttribute.mjs +10 -0
- package/renderers/nodes/core/NodeBuilder.js +87 -154
- package/renderers/nodes/core/NodeBuilder.mjs +243 -0
- package/renderers/nodes/core/NodeFrame.js +9 -12
- package/renderers/nodes/core/NodeFrame.mjs +35 -0
- package/renderers/nodes/core/NodeSlot.js +2 -3
- package/renderers/nodes/core/NodeSlot.mjs +10 -0
- package/renderers/nodes/core/NodeUniform.js +4 -9
- package/renderers/nodes/core/NodeUniform.mjs +18 -0
- package/renderers/nodes/core/NodeVary.js +4 -7
- package/renderers/nodes/core/NodeVary.mjs +11 -0
- package/renderers/nodes/core/VaryNode.js +6 -12
- package/renderers/nodes/core/VaryNode.mjs +22 -0
- package/renderers/nodes/core/constants.js +16 -13
- package/renderers/nodes/core/constants.mjs +22 -0
- package/renderers/nodes/inputs/ColorNode.js +5 -11
- package/renderers/nodes/inputs/ColorNode.mjs +11 -0
- package/renderers/nodes/inputs/FloatNode.js +5 -11
- package/renderers/nodes/inputs/FloatNode.mjs +11 -0
- package/renderers/nodes/inputs/Matrix3Node.js +7 -13
- package/renderers/nodes/inputs/Matrix3Node.mjs +12 -0
- package/renderers/nodes/inputs/Matrix4Node.js +7 -13
- package/renderers/nodes/inputs/Matrix4Node.mjs +12 -0
- package/renderers/nodes/inputs/TextureNode.js +7 -15
- package/renderers/nodes/inputs/TextureNode.mjs +20 -0
- package/renderers/nodes/inputs/Vector2Node.js +5 -11
- package/renderers/nodes/inputs/Vector2Node.mjs +11 -0
- package/renderers/nodes/inputs/Vector3Node.js +7 -13
- package/renderers/nodes/inputs/Vector3Node.mjs +12 -0
- package/renderers/nodes/inputs/Vector4Node.js +7 -13
- package/renderers/nodes/inputs/Vector4Node.mjs +12 -0
- package/renderers/nodes/math/MathNode.js +20 -30
- package/renderers/nodes/math/MathNode.mjs +55 -0
- package/renderers/nodes/math/OperatorNode.js +4 -20
- package/renderers/nodes/math/OperatorNode.mjs +42 -0
- package/renderers/nodes/utils/SwitchNode.js +4 -9
- package/renderers/nodes/utils/SwitchNode.mjs +20 -0
- package/renderers/nodes/utils/TimerNode.js +5 -10
- package/renderers/nodes/utils/TimerNode.mjs +14 -0
- package/renderers/webgpu/WebGPU.js +14 -16
- package/renderers/webgpu/WebGPU.mjs +24 -0
- package/renderers/webgpu/WebGPUAttributes.js +16 -23
- package/renderers/webgpu/WebGPUAttributes.mjs +69 -0
- package/renderers/webgpu/WebGPUBackground.js +13 -30
- package/renderers/webgpu/WebGPUBackground.mjs +61 -0
- package/renderers/webgpu/WebGPUBinding.js +4 -7
- package/renderers/webgpu/WebGPUBinding.mjs +14 -0
- package/renderers/webgpu/WebGPUBindings.js +21 -57
- package/renderers/webgpu/WebGPUBindings.mjs +155 -0
- package/renderers/webgpu/WebGPUComputePipelines.js +14 -25
- package/renderers/webgpu/WebGPUComputePipelines.mjs +44 -0
- package/renderers/webgpu/WebGPUGeometries.js +5 -15
- package/renderers/webgpu/WebGPUGeometries.mjs +41 -0
- package/renderers/webgpu/WebGPUInfo.js +3 -8
- package/renderers/webgpu/WebGPUInfo.mjs +46 -0
- package/renderers/webgpu/WebGPUObjects.js +5 -10
- package/renderers/webgpu/WebGPUObjects.mjs +25 -0
- package/renderers/webgpu/WebGPUProperties.js +5 -11
- package/renderers/webgpu/WebGPUProperties.mjs +22 -0
- package/renderers/webgpu/WebGPURenderLists.js +20 -36
- package/renderers/webgpu/WebGPURenderLists.mjs +119 -0
- package/renderers/webgpu/WebGPURenderPipelines.js +260 -387
- package/renderers/webgpu/WebGPURenderPipelines.mjs +545 -0
- package/renderers/webgpu/WebGPURenderer.js +124 -262
- package/renderers/webgpu/WebGPURenderer.mjs +574 -0
- package/renderers/webgpu/WebGPUSampledTexture.js +18 -31
- package/renderers/webgpu/WebGPUSampledTexture.mjs +40 -0
- package/renderers/webgpu/WebGPUSampler.js +7 -12
- package/renderers/webgpu/WebGPUSampler.mjs +15 -0
- package/renderers/webgpu/WebGPUStorageBuffer.js +7 -12
- package/renderers/webgpu/WebGPUStorageBuffer.mjs +15 -0
- package/renderers/webgpu/WebGPUTextureRenderer.js +5 -11
- package/renderers/webgpu/WebGPUTextureRenderer.mjs +23 -0
- package/renderers/webgpu/WebGPUTextureUtils.js +29 -40
- package/renderers/webgpu/WebGPUTextureUtils.mjs +98 -0
- package/renderers/webgpu/WebGPUTextures.js +186 -333
- package/renderers/webgpu/WebGPUTextures.mjs +484 -0
- package/renderers/webgpu/WebGPUUniform.js +25 -51
- package/renderers/webgpu/WebGPUUniform.mjs +81 -0
- package/renderers/webgpu/WebGPUUniformsGroup.js +32 -72
- package/renderers/webgpu/WebGPUUniformsGroup.mjs +176 -0
- package/renderers/webgpu/constants.js +190 -181
- package/renderers/webgpu/constants.mjs +230 -0
- package/renderers/webgpu/nodes/ShaderLib.js +2 -2
- package/renderers/webgpu/nodes/ShaderLib.mjs +42 -0
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +53 -124
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +165 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniform.js +17 -31
- package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +73 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +8 -9
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +15 -0
- package/renderers/webgpu/nodes/WebGPUNodes.js +7 -45
- package/renderers/webgpu/nodes/WebGPUNodes.mjs +40 -0
- package/shaders/ACESFilmicToneMappingShader.js +44 -24
- package/shaders/ACESFilmicToneMappingShader.mjs +48 -0
- package/shaders/AfterimageShader.js +28 -18
- package/shaders/AfterimageShader.mjs +32 -0
- package/shaders/BasicShader.js +9 -7
- package/shaders/BasicShader.mjs +12 -0
- package/shaders/BleachBypassShader.js +31 -15
- package/shaders/BleachBypassShader.mjs +35 -0
- package/shaders/BlendShader.js +26 -19
- package/shaders/BlendShader.mjs +30 -0
- package/shaders/BokehShader.js +98 -36
- package/shaders/BokehShader.mjs +106 -0
- package/shaders/BokehShader2.js +261 -90
- package/shaders/BokehShader2.mjs +269 -0
- package/shaders/BrightnessContrastShader.js +28 -19
- package/shaders/BrightnessContrastShader.mjs +32 -0
- package/shaders/ColorCorrectionShader.js +26 -22
- package/shaders/ColorCorrectionShader.mjs +30 -0
- package/shaders/ColorifyShader.js +24 -16
- package/shaders/ColorifyShader.mjs +28 -0
- package/shaders/ConvolutionShader.js +40 -36
- package/shaders/ConvolutionShader.mjs +55 -0
- package/shaders/CopyShader.js +21 -13
- package/shaders/CopyShader.mjs +25 -0
- package/shaders/DOFMipMapShader.js +28 -21
- package/shaders/DOFMipMapShader.mjs +32 -0
- package/shaders/DepthLimitedBlurShader.js +85 -40
- package/shaders/DepthLimitedBlurShader.mjs +114 -0
- package/shaders/DigitalGlitch.js +74 -46
- package/shaders/DigitalGlitch.mjs +78 -0
- package/shaders/DotScreenShader.js +35 -27
- package/shaders/DotScreenShader.mjs +39 -0
- package/shaders/FXAAShader.js +1094 -19
- package/shaders/FXAAShader.mjs +1098 -0
- package/shaders/FilmShader.js +38 -52
- package/shaders/FilmShader.mjs +42 -0
- package/shaders/FocusShader.js +51 -24
- package/shaders/FocusShader.mjs +55 -0
- package/shaders/FreiChenShader.js +57 -24
- package/shaders/FreiChenShader.mjs +61 -0
- package/shaders/FresnelShader.js +43 -22
- package/shaders/FresnelShader.mjs +47 -0
- package/shaders/GammaCorrectionShader.js +19 -11
- package/shaders/GammaCorrectionShader.mjs +23 -0
- package/shaders/GodRaysShader.js +103 -94
- package/shaders/GodRaysShader.mjs +146 -0
- package/shaders/HalftoneShader.js +208 -65
- package/shaders/HalftoneShader.mjs +212 -0
- package/shaders/HorizontalBlurShader.js +7 -23
- package/shaders/HorizontalBlurShader.mjs +43 -0
- package/shaders/HorizontalTiltShiftShader.js +33 -21
- package/shaders/HorizontalTiltShiftShader.mjs +37 -0
- package/shaders/HueSaturationShader.js +37 -21
- package/shaders/HueSaturationShader.mjs +41 -0
- package/shaders/KaleidoShader.js +30 -22
- package/shaders/KaleidoShader.mjs +34 -0
- package/shaders/LuminosityHighPassShader.js +33 -27
- package/shaders/LuminosityHighPassShader.mjs +37 -0
- package/shaders/LuminosityShader.js +21 -11
- package/shaders/LuminosityShader.mjs +25 -0
- package/shaders/MirrorShader.js +31 -16
- package/shaders/MirrorShader.mjs +35 -0
- package/shaders/NormalMapShader.js +27 -23
- package/shaders/NormalMapShader.mjs +31 -0
- package/shaders/ParallaxShader.js +107 -48
- package/shaders/ParallaxShader.mjs +113 -0
- package/shaders/PixelShader.js +24 -16
- package/shaders/PixelShader.mjs +28 -0
- package/shaders/RGBShiftShader.js +26 -22
- package/shaders/RGBShiftShader.mjs +30 -0
- package/shaders/SAOShader.js +132 -48
- package/shaders/SAOShader.mjs +144 -0
- package/shaders/SMAAShader.js +256 -135
- package/shaders/SMAAShader.mjs +272 -0
- package/shaders/SSAOShader.js +153 -81
- package/shaders/SSAOShader.mjs +172 -0
- package/shaders/SSRShader.js +32 -87
- package/shaders/SSRShader.mjs +324 -0
- package/shaders/SepiaShader.js +25 -15
- package/shaders/SepiaShader.mjs +29 -0
- package/shaders/SobelOperatorShader.js +40 -29
- package/shaders/SobelOperatorShader.mjs +44 -0
- package/shaders/SubsurfaceScatteringShader.js +53 -39
- package/shaders/SubsurfaceScatteringShader.mjs +59 -0
- package/shaders/TechnicolorShader.js +20 -13
- package/shaders/TechnicolorShader.mjs +24 -0
- package/shaders/ToneMapShader.js +44 -28
- package/shaders/ToneMapShader.mjs +48 -0
- package/shaders/ToonShader.js +172 -96
- package/shaders/ToonShader.mjs +188 -0
- package/shaders/TriangleBlurShader.js +32 -23
- package/shaders/TriangleBlurShader.mjs +36 -0
- package/shaders/UnpackDepthRGBAShader.js +22 -14
- package/shaders/UnpackDepthRGBAShader.mjs +26 -0
- package/shaders/VerticalBlurShader.js +7 -23
- package/shaders/VerticalBlurShader.mjs +44 -0
- package/shaders/VerticalTiltShiftShader.js +33 -21
- package/shaders/VerticalTiltShiftShader.mjs +37 -0
- package/shaders/VignetteShader.js +24 -28
- package/shaders/VignetteShader.mjs +28 -0
- package/shaders/VolumeShader.js +174 -77
- package/shaders/VolumeShader.mjs +178 -0
- package/shaders/WaterRefractionShader.js +38 -6
- package/shaders/WaterRefractionShader.mjs +57 -0
- package/shaders/types.js +1 -1
- package/{custom.d.js → shaders/types.mjs} +0 -0
- package/textures/FlakesTexture.js +8 -10
- package/textures/FlakesTexture.mjs +30 -0
- package/types/helpers.js +3 -2
- package/types/helpers.mjs +4 -0
- package/utils/BufferGeometryUtils.js +251 -325
- package/utils/BufferGeometryUtils.mjs +570 -0
- package/utils/GeometryCompressionUtils.js +241 -239
- package/utils/GeometryCompressionUtils.mjs +547 -0
- package/utils/GeometryUtils.js +41 -94
- package/utils/GeometryUtils.mjs +108 -0
- package/utils/RoughnessMipmapper.js +38 -82
- package/utils/RoughnessMipmapper.mjs +213 -0
- package/utils/SceneUtils.js +15 -20
- package/utils/SceneUtils.mjs +36 -0
- package/utils/ShadowMapViewer.js +49 -95
- package/utils/ShadowMapViewer.mjs +114 -0
- package/utils/SkeletonUtils.js +74 -165
- package/utils/SkeletonUtils.mjs +292 -0
- package/utils/UVsDebug.js +32 -62
- package/utils/UVsDebug.mjs +85 -0
- package/utils/WorkerPool.js +13 -33
- package/utils/WorkerPool.mjs +62 -0
- package/webxr/ARButton.js +72 -98
- package/webxr/ARButton.mjs +119 -0
- package/webxr/OculusHandModel.js +18 -37
- package/webxr/OculusHandModel.mjs +71 -0
- package/webxr/OculusHandPointerModel.js +58 -80
- package/webxr/OculusHandPointerModel.mjs +207 -0
- package/webxr/Text2D.js +37 -19
- package/webxr/Text2D.mjs +31 -0
- package/webxr/VRButton.js +59 -90
- package/webxr/VRButton.mjs +105 -0
- package/webxr/XRControllerModelFactory.js +58 -116
- package/webxr/XRControllerModelFactory.mjs +146 -0
- package/webxr/XREstimatedLight.js +39 -66
- package/webxr/XREstimatedLight.mjs +126 -0
- package/webxr/XRHandMeshModel.js +40 -29
- package/webxr/XRHandMeshModel.mjs +73 -0
- package/webxr/XRHandModelFactory.js +28 -31
- package/webxr/XRHandModelFactory.mjs +61 -0
- package/webxr/XRHandPrimitiveModel.js +41 -27
- package/webxr/XRHandPrimitiveModel.mjs +68 -0
- package/BufferGeometryUtils-1a7a235c.js +0 -655
- package/BufferGeometryUtils-971dfde3.js +0 -1
- package/Nodes-4f766d71.js +0 -471
- package/Nodes-9aa16d74.js +0 -1
- package/animation/AnimationClipCreator.cjs.js +0 -1
- package/animation/CCDIKSolver.cjs.js +0 -1
- package/animation/MMDAnimationHelper.cjs.js +0 -1
- package/animation/MMDPhysics.cjs.js +0 -1
- package/cameras/CinematicCamera.cjs.js +0 -1
- package/controls/ArcballControls.cjs.js +0 -1
- package/controls/DeviceOrientationControls.cjs.js +0 -1
- package/controls/DragControls.cjs.js +0 -1
- package/controls/FirstPersonControls.cjs.js +0 -1
- package/controls/FlyControls.cjs.js +0 -1
- package/controls/OrbitControls.cjs.js +0 -1
- package/controls/PointerLockControls.cjs.js +0 -1
- package/controls/TrackballControls.cjs.js +0 -1
- package/controls/TransformControls.cjs.js +0 -1
- package/controls/experimental/CameraControls.cjs.js +0 -1
- package/csm/CSM.cjs.js +0 -1
- package/csm/CSMFrustum.cjs.js +0 -1
- package/csm/CSMHelper.cjs.js +0 -1
- package/csm/CSMShader.cjs.js +0 -1
- package/curves/CurveExtras.cjs.js +0 -1
- package/curves/NURBSCurve.cjs.js +0 -1
- package/curves/NURBSSurface.cjs.js +0 -1
- package/curves/NURBSUtils.cjs.js +0 -1
- package/custom.d.cjs.js +0 -1
- package/deprecated/Geometry.cjs.js +0 -1
- package/effects/AnaglyphEffect.cjs.js +0 -1
- package/effects/AsciiEffect.cjs.js +0 -1
- package/effects/OutlineEffect.cjs.js +0 -1
- package/effects/ParallaxBarrierEffect.cjs.js +0 -1
- package/effects/PeppersGhostEffect.cjs.js +0 -1
- package/effects/StereoEffect.cjs.js +0 -1
- package/environments/RoomEnvironment.cjs.js +0 -1
- package/exporters/ColladaExporter.cjs.js +0 -1
- package/exporters/DRACOExporter.cjs.js +0 -1
- package/exporters/GLTFExporter.cjs.js +0 -1
- package/exporters/MMDExporter.cjs.js +0 -1
- package/exporters/OBJExporter.cjs.js +0 -1
- package/exporters/PLYExporter.cjs.js +0 -1
- package/exporters/STLExporter.cjs.js +0 -1
- package/exporters/USDZExporter.cjs.js +0 -1
- package/geometries/BoxLineGeometry.cjs.js +0 -1
- package/geometries/ConvexGeometry.cjs.js +0 -1
- package/geometries/DecalGeometry.cjs.js +0 -1
- package/geometries/LightningStrike.cjs.js +0 -1
- package/geometries/ParametricGeometries.cjs.js +0 -1
- package/geometries/ParametricGeometry.cjs.js +0 -1
- package/geometries/RoundedBoxGeometry.cjs.js +0 -1
- package/geometries/TeapotGeometry.cjs.js +0 -1
- package/geometries/TextGeometry.cjs.js +0 -1
- package/helpers/LightProbeHelper.cjs.js +0 -1
- package/helpers/PositionalAudioHelper.cjs.js +0 -1
- package/helpers/RectAreaLightHelper.cjs.js +0 -1
- package/helpers/VertexNormalsHelper.cjs.js +0 -1
- package/helpers/VertexTangentsHelper.cjs.js +0 -1
- package/index.cjs.js +0 -1
- package/interactive/InteractiveGroup.cjs.js +0 -1
- package/interactive/InteractiveGroup.d.ts +0 -5
- package/interactive/InteractiveGroup.js +0 -87
- package/interactive/SelectionBox.cjs.js +0 -1
- package/interactive/SelectionHelper.cjs.js +0 -1
- package/libs/MeshoptDecoder.cjs.js +0 -1
- package/libs/MotionControllers.cjs.js +0 -1
- package/lights/LightProbeGenerator.cjs.js +0 -1
- package/lights/RectAreaLightUniformsLib.cjs.js +0 -1
- package/lines/Line2.cjs.js +0 -1
- package/lines/LineGeometry.cjs.js +0 -1
- package/lines/LineMaterial.cjs.js +0 -1
- package/lines/LineSegments2.cjs.js +0 -1
- package/lines/LineSegmentsGeometry.cjs.js +0 -1
- package/lines/Wireframe.cjs.js +0 -1
- package/lines/WireframeGeometry2.cjs.js +0 -1
- package/loaders/3DMLoader.cjs.js +0 -1
- package/loaders/3MFLoader.cjs.js +0 -1
- package/loaders/AMFLoader.cjs.js +0 -1
- package/loaders/AssimpLoader.cjs.js +0 -1
- package/loaders/BVHLoader.cjs.js +0 -1
- package/loaders/BasisTextureLoader.cjs.js +0 -1
- package/loaders/ColladaLoader.cjs.js +0 -1
- package/loaders/DDSLoader.cjs.js +0 -1
- package/loaders/DRACOLoader.cjs.js +0 -1
- package/loaders/EXRLoader.cjs.js +0 -1
- package/loaders/FBXLoader.cjs.js +0 -1
- package/loaders/FontLoader.cjs.js +0 -1
- package/loaders/GCodeLoader.cjs.js +0 -1
- package/loaders/GLTFLoader.cjs.js +0 -1
- package/loaders/HDRCubeTextureLoader.cjs.js +0 -1
- package/loaders/KMZLoader.cjs.js +0 -1
- package/loaders/KTX2Loader.cjs.js +0 -1
- package/loaders/KTXLoader.cjs.js +0 -1
- package/loaders/LDrawLoader.cjs.js +0 -1
- package/loaders/LUT3dlLoader.cjs.js +0 -1
- package/loaders/LUTCubeLoader.cjs.js +0 -1
- package/loaders/LWOLoader.cjs.js +0 -1
- package/loaders/LottieLoader.cjs.js +0 -1
- package/loaders/MD2Loader.cjs.js +0 -1
- package/loaders/MDDLoader.cjs.js +0 -1
- package/loaders/MMDLoader.cjs.js +0 -1
- package/loaders/MTLLoader.cjs.js +0 -1
- package/loaders/NRRDLoader.cjs.js +0 -1
- package/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/loaders/OBJLoader.cjs.js +0 -1
- package/loaders/PCDLoader.cjs.js +0 -1
- package/loaders/PDBLoader.cjs.js +0 -1
- package/loaders/PLYLoader.cjs.js +0 -1
- package/loaders/PRWMLoader.cjs.js +0 -1
- package/loaders/PVRLoader.cjs.js +0 -1
- package/loaders/RGBELoader.cjs.js +0 -1
- package/loaders/RGBMLoader.cjs.js +0 -1
- package/loaders/STLLoader.cjs.js +0 -1
- package/loaders/SVGLoader.cjs.js +0 -1
- package/loaders/TDSLoader.cjs.js +0 -1
- package/loaders/TGALoader.cjs.js +0 -1
- package/loaders/TTFLoader.cjs.js +0 -1
- package/loaders/TiltLoader.cjs.js +0 -1
- package/loaders/VOXLoader.cjs.js +0 -1
- package/loaders/VRMLLoader.cjs.js +0 -1
- package/loaders/VRMLoader.cjs.js +0 -1
- package/loaders/VTKLoader.cjs.js +0 -1
- package/loaders/XLoader.cjs.js +0 -1
- package/loaders/XYZLoader.cjs.js +0 -1
- package/loaders/lwo/IFFParser.cjs.js +0 -1
- package/loaders/lwo/LWO2Parser.cjs.js +0 -1
- package/loaders/lwo/LWO3Parser.cjs.js +0 -1
- package/math/Capsule.cjs.js +0 -1
- package/math/ColorConverter.cjs.js +0 -1
- package/math/ConvexHull.cjs.js +0 -1
- package/math/ImprovedNoise.cjs.js +0 -1
- package/math/Lut.cjs.js +0 -1
- package/math/MeshSurfaceSampler.cjs.js +0 -1
- package/math/OBB.cjs.js +0 -1
- package/math/Octree.cjs.js +0 -1
- package/math/SimplexNoise.cjs.js +0 -1
- package/misc/ConvexObjectBreaker.cjs.js +0 -1
- package/misc/GPUComputationRenderer.cjs.js +0 -1
- package/misc/Gyroscope.cjs.js +0 -1
- package/misc/MD2Character.cjs.js +0 -1
- package/misc/MD2CharacterComplex.cjs.js +0 -1
- package/misc/MorphAnimMesh.cjs.js +0 -1
- package/misc/MorphBlendMesh.cjs.js +0 -1
- package/misc/ProgressiveLightmap.cjs.js +0 -1
- package/misc/RollerCoaster.cjs.js +0 -1
- package/misc/TubePainter.cjs.js +0 -1
- package/misc/Volume.cjs.js +0 -1
- package/misc/VolumeSlice.cjs.js +0 -1
- package/misc/WebGL.cjs.js +0 -1
- package/modifiers/CurveModifier.cjs.js +0 -1
- package/modifiers/EdgeSplitModifier.cjs.js +0 -1
- package/modifiers/SimplifyModifier.cjs.js +0 -1
- package/modifiers/TessellateModifier.cjs.js +0 -1
- package/nodes/Nodes.cjs.js +0 -1
- package/nodes/ShaderNode.cjs.js +0 -1
- package/nodes/accessors/BufferNode.cjs.js +0 -1
- package/nodes/accessors/CameraNode.cjs.js +0 -1
- package/nodes/accessors/CubeTextureNode.cjs.js +0 -1
- package/nodes/accessors/MaterialNode.cjs.js +0 -1
- package/nodes/accessors/MaterialReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ModelNode.cjs.js +0 -1
- package/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/nodes/accessors/NormalNode.cjs.js +0 -1
- package/nodes/accessors/Object3DNode.cjs.js +0 -1
- package/nodes/accessors/PointUVNode.cjs.js +0 -1
- package/nodes/accessors/PositionNode.cjs.js +0 -1
- package/nodes/accessors/ReferenceNode.cjs.js +0 -1
- package/nodes/accessors/ReflectNode.cjs.js +0 -1
- package/nodes/accessors/SkinningNode.cjs.js +0 -1
- package/nodes/accessors/TextureNode.cjs.js +0 -1
- package/nodes/accessors/UVNode.cjs.js +0 -1
- package/nodes/core/ArrayUniformNode.cjs.js +0 -1
- package/nodes/core/AttributeNode.cjs.js +0 -1
- package/nodes/core/BypassNode.cjs.js +0 -1
- package/nodes/core/CodeNode.cjs.js +0 -1
- package/nodes/core/ConstNode.cjs.js +0 -1
- package/nodes/core/ContextNode.cjs.js +0 -1
- package/nodes/core/ExpressionNode.cjs.js +0 -1
- package/nodes/core/FunctionCallNode.cjs.js +0 -1
- package/nodes/core/FunctionNode.cjs.js +0 -1
- package/nodes/core/InputNode.cjs.js +0 -1
- package/nodes/core/Node.cjs.js +0 -1
- package/nodes/core/NodeAttribute.cjs.js +0 -1
- package/nodes/core/NodeBuilder.cjs.js +0 -1
- package/nodes/core/NodeCode.cjs.js +0 -1
- package/nodes/core/NodeFrame.cjs.js +0 -1
- package/nodes/core/NodeFunction.cjs.js +0 -1
- package/nodes/core/NodeFunction.js +0 -17
- package/nodes/core/NodeFunctionInput.cjs.js +0 -1
- package/nodes/core/NodeKeywords.cjs.js +0 -1
- package/nodes/core/NodeParser.cjs.js +0 -1
- package/nodes/core/NodeParser.js +0 -8
- package/nodes/core/NodeUniform.cjs.js +0 -1
- package/nodes/core/NodeUtils.cjs.js +0 -1
- package/nodes/core/NodeVar.cjs.js +0 -1
- package/nodes/core/NodeVary.cjs.js +0 -1
- package/nodes/core/PropertyNode.cjs.js +0 -1
- package/nodes/core/TempNode.cjs.js +0 -1
- package/nodes/core/UniformNode.cjs.js +0 -1
- package/nodes/core/VarNode.cjs.js +0 -1
- package/nodes/core/VaryNode.cjs.js +0 -1
- package/nodes/core/constants.cjs.js +0 -1
- package/nodes/display/ColorSpaceNode.cjs.js +0 -1
- package/nodes/display/NormalMapNode.cjs.js +0 -1
- package/nodes/fog/FogNode.cjs.js +0 -1
- package/nodes/fog/FogRangeNode.cjs.js +0 -1
- package/nodes/functions/BSDFs.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.cjs.js +0 -1
- package/nodes/functions/PhysicalMaterialFunctions.js +0 -57
- package/nodes/lights/LightContextNode.cjs.js +0 -1
- package/nodes/lights/LightNode.cjs.js +0 -1
- package/nodes/lights/LightsNode.cjs.js +0 -1
- package/nodes/loaders/NodeLoader.cjs.js +0 -1
- package/nodes/loaders/NodeMaterialLoader.cjs.js +0 -1
- package/nodes/loaders/NodeObjectLoader.cjs.js +0 -1
- package/nodes/materials/LineBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/Materials.cjs.js +0 -1
- package/nodes/materials/MeshBasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/MeshStandardNodeMaterial.cjs.js +0 -1
- package/nodes/materials/NodeMaterial.cjs.js +0 -1
- package/nodes/materials/PointsNodeMaterial.cjs.js +0 -1
- package/nodes/math/CondNode.cjs.js +0 -1
- package/nodes/math/MathNode.cjs.js +0 -1
- package/nodes/math/OperatorNode.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeFunction.js +0 -101
- package/nodes/parsers/GLSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/GLSLNodeParser.js +0 -13
- package/nodes/parsers/WGSLNodeFunction.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeFunction.js +0 -71
- package/nodes/parsers/WGSLNodeParser.cjs.js +0 -1
- package/nodes/parsers/WGSLNodeParser.js +0 -13
- package/nodes/procedural/CheckerNode.cjs.js +0 -1
- package/nodes/utils/ArrayElementNode.cjs.js +0 -1
- package/nodes/utils/ConvertNode.cjs.js +0 -1
- package/nodes/utils/JoinNode.cjs.js +0 -1
- package/nodes/utils/MatcapUVNode.cjs.js +0 -1
- package/nodes/utils/OscNode.cjs.js +0 -1
- package/nodes/utils/SplitNode.cjs.js +0 -1
- package/nodes/utils/SpriteSheetUVNode.cjs.js +0 -1
- package/nodes/utils/TimerNode.cjs.js +0 -1
- package/objects/GroundProjectedEnv.cjs.js +0 -1
- package/objects/Lensflare.cjs.js +0 -1
- package/objects/LightningStorm.cjs.js +0 -1
- package/objects/MarchingCubes.cjs.js +0 -1
- package/objects/Reflector.cjs.js +0 -1
- package/objects/ReflectorForSSRPass.cjs.js +0 -1
- package/objects/ReflectorRTT.cjs.js +0 -1
- package/objects/Refractor.cjs.js +0 -1
- package/objects/ShadowMesh.cjs.js +0 -1
- package/objects/Sky.cjs.js +0 -1
- package/objects/Water.cjs.js +0 -1
- package/objects/Water2.cjs.js +0 -1
- package/offscreen/jank.cjs.js +0 -1
- package/offscreen/offscreen.cjs.js +0 -1
- package/offscreen/scene.cjs.js +0 -1
- package/physics/AmmoPhysics.cjs.js +0 -1
- package/postprocessing/AdaptiveToneMappingPass.cjs.js +0 -1
- package/postprocessing/AfterimagePass.cjs.js +0 -1
- package/postprocessing/BloomPass.cjs.js +0 -1
- package/postprocessing/BokehPass.cjs.js +0 -1
- package/postprocessing/ClearPass.cjs.js +0 -1
- package/postprocessing/CubeTexturePass.cjs.js +0 -1
- package/postprocessing/DotScreenPass.cjs.js +0 -1
- package/postprocessing/EffectComposer.cjs.js +0 -1
- package/postprocessing/FilmPass.cjs.js +0 -1
- package/postprocessing/GlitchPass.cjs.js +0 -1
- package/postprocessing/HalftonePass.cjs.js +0 -1
- package/postprocessing/LUTPass.cjs.js +0 -1
- package/postprocessing/MaskPass.cjs.js +0 -1
- package/postprocessing/OutlinePass.cjs.js +0 -1
- package/postprocessing/Pass.cjs.js +0 -1
- package/postprocessing/RenderPass.cjs.js +0 -1
- package/postprocessing/RenderPixelatedPass.cjs.js +0 -1
- package/postprocessing/SAOPass.cjs.js +0 -1
- package/postprocessing/SMAAPass.cjs.js +0 -1
- package/postprocessing/SSAARenderPass.cjs.js +0 -1
- package/postprocessing/SSAOPass.cjs.js +0 -1
- package/postprocessing/SSRPass.cjs.js +0 -1
- package/postprocessing/SavePass.cjs.js +0 -1
- package/postprocessing/ShaderPass.cjs.js +0 -1
- package/postprocessing/TAARenderPass.cjs.js +0 -1
- package/postprocessing/TexturePass.cjs.js +0 -1
- package/postprocessing/UnrealBloomPass.cjs.js +0 -1
- package/renderers/CSS2DRenderer.cjs.js +0 -1
- package/renderers/CSS3DRenderer.cjs.js +0 -1
- package/renderers/Projector.cjs.js +0 -1
- package/renderers/SVGRenderer.cjs.js +0 -1
- package/renderers/nodes/accessors/CameraNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelNode.cjs.js +0 -1
- package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/NormalNode.cjs.js +0 -1
- package/renderers/nodes/accessors/PositionNode.cjs.js +0 -1
- package/renderers/nodes/accessors/UVNode.cjs.js +0 -1
- package/renderers/nodes/core/AttributeNode.cjs.js +0 -1
- package/renderers/nodes/core/InputNode.cjs.js +0 -1
- package/renderers/nodes/core/Node.cjs.js +0 -1
- package/renderers/nodes/core/NodeAttribute.cjs.js +0 -1
- package/renderers/nodes/core/NodeBuilder.cjs.js +0 -1
- package/renderers/nodes/core/NodeFrame.cjs.js +0 -1
- package/renderers/nodes/core/NodeSlot.cjs.js +0 -1
- package/renderers/nodes/core/NodeUniform.cjs.js +0 -1
- package/renderers/nodes/core/NodeVary.cjs.js +0 -1
- package/renderers/nodes/core/VaryNode.cjs.js +0 -1
- package/renderers/nodes/core/constants.cjs.js +0 -1
- package/renderers/nodes/inputs/ColorNode.cjs.js +0 -1
- package/renderers/nodes/inputs/FloatNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Matrix4Node.cjs.js +0 -1
- package/renderers/nodes/inputs/TextureNode.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector2Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector3Node.cjs.js +0 -1
- package/renderers/nodes/inputs/Vector4Node.cjs.js +0 -1
- package/renderers/nodes/math/MathNode.cjs.js +0 -1
- package/renderers/nodes/math/OperatorNode.cjs.js +0 -1
- package/renderers/nodes/utils/SwitchNode.cjs.js +0 -1
- package/renderers/nodes/utils/TimerNode.cjs.js +0 -1
- package/renderers/webgpu/WebGPU.cjs.js +0 -1
- package/renderers/webgpu/WebGPUAttributes.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBackground.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBinding.cjs.js +0 -1
- package/renderers/webgpu/WebGPUBindings.cjs.js +0 -1
- package/renderers/webgpu/WebGPUComputePipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPUGeometries.cjs.js +0 -1
- package/renderers/webgpu/WebGPUInfo.cjs.js +0 -1
- package/renderers/webgpu/WebGPUObjects.cjs.js +0 -1
- package/renderers/webgpu/WebGPUProperties.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderLists.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderPipelines.cjs.js +0 -1
- package/renderers/webgpu/WebGPURenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampledTexture.cjs.js +0 -1
- package/renderers/webgpu/WebGPUSampler.cjs.js +0 -1
- package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextureUtils.cjs.js +0 -1
- package/renderers/webgpu/WebGPUTextures.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniform.cjs.js +0 -1
- package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/constants.cjs.js +0 -1
- package/renderers/webgpu/nodes/ShaderLib.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +0 -1
- package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +0 -1
- package/shaders/ACESFilmicToneMappingShader.cjs.js +0 -1
- package/shaders/AfterimageShader.cjs.js +0 -1
- package/shaders/BasicShader.cjs.js +0 -1
- package/shaders/BleachBypassShader.cjs.js +0 -1
- package/shaders/BlendShader.cjs.js +0 -1
- package/shaders/BokehShader.cjs.js +0 -1
- package/shaders/BokehShader2.cjs.js +0 -1
- package/shaders/BrightnessContrastShader.cjs.js +0 -1
- package/shaders/ColorCorrectionShader.cjs.js +0 -1
- package/shaders/ColorifyShader.cjs.js +0 -1
- package/shaders/ConvolutionShader.cjs.js +0 -1
- package/shaders/CopyShader.cjs.js +0 -1
- package/shaders/DOFMipMapShader.cjs.js +0 -1
- package/shaders/DepthLimitedBlurShader.cjs.js +0 -1
- package/shaders/DigitalGlitch.cjs.js +0 -1
- package/shaders/DotScreenShader.cjs.js +0 -1
- package/shaders/FXAAShader.cjs.js +0 -1
- package/shaders/FilmShader.cjs.js +0 -1
- package/shaders/FocusShader.cjs.js +0 -1
- package/shaders/FreiChenShader.cjs.js +0 -1
- package/shaders/FresnelShader.cjs.js +0 -1
- package/shaders/GammaCorrectionShader.cjs.js +0 -1
- package/shaders/GodRaysShader.cjs.js +0 -1
- package/shaders/HalftoneShader.cjs.js +0 -1
- package/shaders/HorizontalBlurShader.cjs.js +0 -1
- package/shaders/HorizontalTiltShiftShader.cjs.js +0 -1
- package/shaders/HueSaturationShader.cjs.js +0 -1
- package/shaders/KaleidoShader.cjs.js +0 -1
- package/shaders/LuminosityHighPassShader.cjs.js +0 -1
- package/shaders/LuminosityShader.cjs.js +0 -1
- package/shaders/MirrorShader.cjs.js +0 -1
- package/shaders/NormalMapShader.cjs.js +0 -1
- package/shaders/ParallaxShader.cjs.js +0 -1
- package/shaders/PixelShader.cjs.js +0 -1
- package/shaders/RGBShiftShader.cjs.js +0 -1
- package/shaders/SAOShader.cjs.js +0 -1
- package/shaders/SMAAShader.cjs.js +0 -1
- package/shaders/SSAOShader.cjs.js +0 -1
- package/shaders/SSRShader.cjs.js +0 -1
- package/shaders/SepiaShader.cjs.js +0 -1
- package/shaders/SobelOperatorShader.cjs.js +0 -1
- package/shaders/SubsurfaceScatteringShader.cjs.js +0 -1
- package/shaders/TechnicolorShader.cjs.js +0 -1
- package/shaders/ToneMapShader.cjs.js +0 -1
- package/shaders/ToonShader.cjs.js +0 -1
- package/shaders/TriangleBlurShader.cjs.js +0 -1
- package/shaders/UnpackDepthRGBAShader.cjs.js +0 -1
- package/shaders/VerticalBlurShader.cjs.js +0 -1
- package/shaders/VerticalTiltShiftShader.cjs.js +0 -1
- package/shaders/VignetteShader.cjs.js +0 -1
- package/shaders/VolumeShader.cjs.js +0 -1
- package/shaders/WaterRefractionShader.cjs.js +0 -1
- package/shaders/index.cjs.js +0 -1
- package/shaders/index.d.ts +0 -54
- package/shaders/index.js +0 -53
- package/shaders/types.cjs.js +0 -1
- package/textures/FlakesTexture.cjs.js +0 -1
- package/types/helpers.cjs.js +0 -1
- package/types/shared.cjs.js +0 -1
- package/types/shared.js +0 -1
- package/types/utils.cjs.js +0 -1
- package/types/utils.js +0 -1
- package/utils/BufferGeometryUtils.cjs.js +0 -1
- package/utils/GeometryCompressionUtils.cjs.js +0 -1
- package/utils/GeometryUtils.cjs.js +0 -1
- package/utils/LDrawUtils.cjs.js +0 -1
- package/utils/LDrawUtils.d.ts +0 -5
- package/utils/LDrawUtils.js +0 -144
- package/utils/RoughnessMipmapper.cjs.js +0 -1
- package/utils/SceneUtils.cjs.js +0 -1
- package/utils/ShadowMapViewer.cjs.js +0 -1
- package/utils/SkeletonUtils.cjs.js +0 -1
- package/utils/UVsDebug.cjs.js +0 -1
- package/utils/WorkerPool.cjs.js +0 -1
- package/webxr/ARButton.cjs.js +0 -1
- package/webxr/OculusHandModel.cjs.js +0 -1
- package/webxr/OculusHandPointerModel.cjs.js +0 -1
- package/webxr/Text2D.cjs.js +0 -1
- package/webxr/VRButton.cjs.js +0 -1
- package/webxr/XRControllerModelFactory.cjs.js +0 -1
- package/webxr/XREstimatedLight.cjs.js +0 -1
- package/webxr/XRHandMeshModel.cjs.js +0 -1
- package/webxr/XRHandModelFactory.cjs.js +0 -1
- package/webxr/XRHandPrimitiveModel.cjs.js +0 -1
|
@@ -1,93 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
4
|
class GLTFExporter {
|
|
5
5
|
constructor() {
|
|
6
|
-
_defineProperty(this, "pluginCallbacks", void 0);
|
|
7
|
-
|
|
8
6
|
this.pluginCallbacks = [];
|
|
9
|
-
this.register(function
|
|
7
|
+
this.register(function(writer) {
|
|
10
8
|
return new GLTFLightExtension(writer);
|
|
11
9
|
});
|
|
12
|
-
this.register(function
|
|
10
|
+
this.register(function(writer) {
|
|
13
11
|
return new GLTFMaterialsUnlitExtension(writer);
|
|
14
12
|
});
|
|
15
|
-
this.register(function
|
|
13
|
+
this.register(function(writer) {
|
|
16
14
|
return new GLTFMaterialsPBRSpecularGlossiness(writer);
|
|
17
15
|
});
|
|
18
|
-
this.register(function
|
|
16
|
+
this.register(function(writer) {
|
|
19
17
|
return new GLTFMaterialsTransmissionExtension(writer);
|
|
20
18
|
});
|
|
21
|
-
this.register(function
|
|
19
|
+
this.register(function(writer) {
|
|
22
20
|
return new GLTFMaterialsVolumeExtension(writer);
|
|
23
21
|
});
|
|
24
22
|
}
|
|
25
|
-
|
|
26
23
|
register(callback) {
|
|
27
24
|
if (this.pluginCallbacks.indexOf(callback) === -1) {
|
|
28
25
|
this.pluginCallbacks.push(callback);
|
|
29
26
|
}
|
|
30
|
-
|
|
31
27
|
return this;
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
unregister(callback) {
|
|
35
30
|
if (this.pluginCallbacks.indexOf(callback) !== -1) {
|
|
36
31
|
this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
|
|
37
32
|
}
|
|
38
|
-
|
|
39
33
|
return this;
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
parse(input, onDone, options) {
|
|
43
36
|
const writer = new GLTFWriter();
|
|
44
37
|
const plugins = [];
|
|
45
|
-
|
|
46
38
|
for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) {
|
|
47
39
|
plugins.push(this.pluginCallbacks[i](writer));
|
|
48
40
|
}
|
|
49
|
-
|
|
50
41
|
writer.setPlugins(plugins);
|
|
51
42
|
writer.write(input, onDone, options);
|
|
52
43
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// Constants
|
|
60
|
-
//------------------------------------------------------------------------------
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
_defineProperty(GLTFExporter, "Utils", {
|
|
64
|
-
insertKeyframe: function (track, time) {
|
|
65
|
-
const tolerance = 0.001; // 1ms
|
|
66
|
-
|
|
67
|
-
const valueSize = track.getValueSize(); // @ts-expect-error
|
|
68
|
-
|
|
69
|
-
const times = new track.TimeBufferType(track.times.length + 1); // @ts-expect-error
|
|
70
|
-
|
|
44
|
+
}
|
|
45
|
+
GLTFExporter.Utils = {
|
|
46
|
+
insertKeyframe: function(track, time) {
|
|
47
|
+
const tolerance = 1e-3;
|
|
48
|
+
const valueSize = track.getValueSize();
|
|
49
|
+
const times = new track.TimeBufferType(track.times.length + 1);
|
|
71
50
|
const values = new track.ValueBufferType(track.values.length + valueSize);
|
|
72
|
-
/**
|
|
73
|
-
* NOTE: createInterpolant does not exist in the type, but it does exist as a property of the class
|
|
74
|
-
* https://github.com/mrdoob/three.js/blob/77480d339d737b7505b335101ffd3cf29a30738d/src/animation/KeyframeTrack.js#L117
|
|
75
|
-
*/
|
|
76
|
-
// @ts-expect-error
|
|
77
|
-
|
|
78
51
|
const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize));
|
|
79
52
|
let index;
|
|
80
|
-
|
|
81
53
|
if (track.times.length === 0) {
|
|
82
54
|
times[0] = time;
|
|
83
|
-
|
|
84
55
|
for (let i = 0; i < valueSize; i++) {
|
|
85
56
|
values[i] = 0;
|
|
86
57
|
}
|
|
87
|
-
|
|
88
58
|
index = 0;
|
|
89
59
|
} else if (time < track.times[0]) {
|
|
90
|
-
if (Math.abs(track.times[0] - time) < tolerance)
|
|
60
|
+
if (Math.abs(track.times[0] - time) < tolerance)
|
|
61
|
+
return 0;
|
|
91
62
|
times[0] = time;
|
|
92
63
|
times.set(track.times, 1);
|
|
93
64
|
values.set(interpolant.evaluate(time), 0);
|
|
@@ -97,7 +68,6 @@ _defineProperty(GLTFExporter, "Utils", {
|
|
|
97
68
|
if (Math.abs(track.times[track.times.length - 1] - time) < tolerance) {
|
|
98
69
|
return track.times.length - 1;
|
|
99
70
|
}
|
|
100
|
-
|
|
101
71
|
times[times.length - 1] = time;
|
|
102
72
|
times.set(track.times, 0);
|
|
103
73
|
values.set(track.values, 0);
|
|
@@ -105,8 +75,8 @@ _defineProperty(GLTFExporter, "Utils", {
|
|
|
105
75
|
index = times.length - 1;
|
|
106
76
|
} else {
|
|
107
77
|
for (let i = 0; i < track.times.length; i++) {
|
|
108
|
-
if (Math.abs(track.times[i] - time) < tolerance)
|
|
109
|
-
|
|
78
|
+
if (Math.abs(track.times[i] - time) < tolerance)
|
|
79
|
+
return i;
|
|
110
80
|
if (track.times[i] < time && track.times[i + 1] > time) {
|
|
111
81
|
times.set(track.times.slice(0, i + 1), 0);
|
|
112
82
|
times[i + 1] = time;
|
|
@@ -119,264 +89,183 @@ _defineProperty(GLTFExporter, "Utils", {
|
|
|
119
89
|
}
|
|
120
90
|
}
|
|
121
91
|
}
|
|
122
|
-
|
|
123
92
|
track.times = times;
|
|
124
93
|
track.values = values;
|
|
125
94
|
return index;
|
|
126
95
|
},
|
|
127
|
-
mergeMorphTargetTracks: function
|
|
96
|
+
mergeMorphTargetTracks: function(clip, root) {
|
|
128
97
|
const tracks = [];
|
|
129
98
|
const mergedTracks = {};
|
|
130
99
|
const sourceTracks = clip.tracks;
|
|
131
|
-
|
|
132
100
|
for (let i = 0; i < sourceTracks.length; ++i) {
|
|
133
101
|
let sourceTrack = sourceTracks[i];
|
|
134
|
-
const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name);
|
|
135
|
-
const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName);
|
|
136
|
-
|
|
137
|
-
if (sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined) {
|
|
138
|
-
// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.
|
|
102
|
+
const sourceTrackBinding = THREE.PropertyBinding.parseTrackName(sourceTrack.name);
|
|
103
|
+
const sourceTrackNode = THREE.PropertyBinding.findNode(root, sourceTrackBinding.nodeName);
|
|
104
|
+
if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) {
|
|
139
105
|
tracks.push(sourceTrack);
|
|
140
106
|
continue;
|
|
141
107
|
}
|
|
142
|
-
|
|
143
|
-
if ( // @ts-expect-error
|
|
144
|
-
sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && // @ts-expect-error
|
|
145
|
-
sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {
|
|
146
|
-
// @ts-expect-error
|
|
108
|
+
if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {
|
|
147
109
|
if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {
|
|
148
|
-
|
|
149
|
-
// affect all targets already.
|
|
150
|
-
throw new Error('THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.');
|
|
110
|
+
throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");
|
|
151
111
|
}
|
|
152
|
-
|
|
153
|
-
console.warn('THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.');
|
|
112
|
+
console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.");
|
|
154
113
|
sourceTrack = sourceTrack.clone();
|
|
155
|
-
sourceTrack.setInterpolation(InterpolateLinear);
|
|
114
|
+
sourceTrack.setInterpolation(THREE.InterpolateLinear);
|
|
156
115
|
}
|
|
157
|
-
|
|
158
116
|
const targetCount = sourceTrackNode.morphTargetInfluences.length;
|
|
159
117
|
const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex];
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
throw new Error('THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex);
|
|
118
|
+
if (targetIndex === void 0) {
|
|
119
|
+
throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex);
|
|
163
120
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (mergedTracks[sourceTrackNode.uuid] === undefined) {
|
|
169
|
-
mergedTrack = sourceTrack.clone(); // @ts-expect-error
|
|
170
|
-
|
|
121
|
+
let mergedTrack;
|
|
122
|
+
if (mergedTracks[sourceTrackNode.uuid] === void 0) {
|
|
123
|
+
mergedTrack = sourceTrack.clone();
|
|
171
124
|
const values = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length);
|
|
172
|
-
|
|
173
125
|
for (let j = 0; j < mergedTrack.times.length; j++) {
|
|
174
126
|
values[j * targetCount + targetIndex] = mergedTrack.values[j];
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
mergedTrack.name = (sourceTrackBinding.nodeName || '') + '.morphTargetInfluences';
|
|
127
|
+
}
|
|
128
|
+
mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences";
|
|
180
129
|
mergedTrack.values = values;
|
|
181
130
|
mergedTracks[sourceTrackNode.uuid] = mergedTrack;
|
|
182
131
|
tracks.push(mergedTrack);
|
|
183
132
|
continue;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
133
|
+
}
|
|
187
134
|
const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1));
|
|
188
|
-
mergedTrack = mergedTracks[sourceTrackNode.uuid];
|
|
189
|
-
// interpolated) value from the source track.
|
|
190
|
-
|
|
135
|
+
mergedTrack = mergedTracks[sourceTrackNode.uuid];
|
|
191
136
|
for (let j = 0; j < mergedTrack.times.length; j++) {
|
|
192
137
|
mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]);
|
|
193
|
-
}
|
|
194
|
-
// new) keyframe to the merged track. Values from the previous loop may
|
|
195
|
-
// be written again, but keyframes are de-duplicated.
|
|
196
|
-
|
|
197
|
-
|
|
138
|
+
}
|
|
198
139
|
for (let j = 0; j < sourceTrack.times.length; j++) {
|
|
199
140
|
const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]);
|
|
200
141
|
mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j];
|
|
201
142
|
}
|
|
202
143
|
}
|
|
203
|
-
|
|
204
144
|
clip.tracks = tracks;
|
|
205
145
|
return clip;
|
|
206
146
|
}
|
|
207
|
-
}
|
|
208
|
-
|
|
147
|
+
};
|
|
209
148
|
const WEBGL_CONSTANTS = {
|
|
210
|
-
POINTS:
|
|
211
|
-
LINES:
|
|
212
|
-
LINE_LOOP:
|
|
213
|
-
LINE_STRIP:
|
|
214
|
-
TRIANGLES:
|
|
215
|
-
TRIANGLE_STRIP:
|
|
216
|
-
TRIANGLE_FAN:
|
|
217
|
-
UNSIGNED_BYTE:
|
|
218
|
-
UNSIGNED_SHORT:
|
|
219
|
-
FLOAT:
|
|
220
|
-
UNSIGNED_INT:
|
|
221
|
-
ARRAY_BUFFER:
|
|
222
|
-
ELEMENT_ARRAY_BUFFER:
|
|
223
|
-
NEAREST:
|
|
224
|
-
LINEAR:
|
|
225
|
-
NEAREST_MIPMAP_NEAREST:
|
|
226
|
-
LINEAR_MIPMAP_NEAREST:
|
|
227
|
-
NEAREST_MIPMAP_LINEAR:
|
|
228
|
-
LINEAR_MIPMAP_LINEAR:
|
|
149
|
+
POINTS: 0,
|
|
150
|
+
LINES: 1,
|
|
151
|
+
LINE_LOOP: 2,
|
|
152
|
+
LINE_STRIP: 3,
|
|
153
|
+
TRIANGLES: 4,
|
|
154
|
+
TRIANGLE_STRIP: 5,
|
|
155
|
+
TRIANGLE_FAN: 6,
|
|
156
|
+
UNSIGNED_BYTE: 5121,
|
|
157
|
+
UNSIGNED_SHORT: 5123,
|
|
158
|
+
FLOAT: 5126,
|
|
159
|
+
UNSIGNED_INT: 5125,
|
|
160
|
+
ARRAY_BUFFER: 34962,
|
|
161
|
+
ELEMENT_ARRAY_BUFFER: 34963,
|
|
162
|
+
NEAREST: 9728,
|
|
163
|
+
LINEAR: 9729,
|
|
164
|
+
NEAREST_MIPMAP_NEAREST: 9984,
|
|
165
|
+
LINEAR_MIPMAP_NEAREST: 9985,
|
|
166
|
+
NEAREST_MIPMAP_LINEAR: 9986,
|
|
167
|
+
LINEAR_MIPMAP_LINEAR: 9987,
|
|
229
168
|
CLAMP_TO_EDGE: 33071,
|
|
230
169
|
MIRRORED_REPEAT: 33648,
|
|
231
170
|
REPEAT: 10497
|
|
232
171
|
};
|
|
233
172
|
const THREE_TO_WEBGL = {};
|
|
234
|
-
THREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS.NEAREST;
|
|
235
|
-
THREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;
|
|
236
|
-
THREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;
|
|
237
|
-
THREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS.LINEAR;
|
|
238
|
-
THREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;
|
|
239
|
-
THREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;
|
|
240
|
-
THREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;
|
|
241
|
-
THREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;
|
|
242
|
-
THREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;
|
|
173
|
+
THREE_TO_WEBGL[THREE.NearestFilter] = WEBGL_CONSTANTS.NEAREST;
|
|
174
|
+
THREE_TO_WEBGL[THREE.NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;
|
|
175
|
+
THREE_TO_WEBGL[THREE.NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;
|
|
176
|
+
THREE_TO_WEBGL[THREE.LinearFilter] = WEBGL_CONSTANTS.LINEAR;
|
|
177
|
+
THREE_TO_WEBGL[THREE.LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;
|
|
178
|
+
THREE_TO_WEBGL[THREE.LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;
|
|
179
|
+
THREE_TO_WEBGL[THREE.ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;
|
|
180
|
+
THREE_TO_WEBGL[THREE.RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;
|
|
181
|
+
THREE_TO_WEBGL[THREE.MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;
|
|
243
182
|
const PATH_PROPERTIES = {
|
|
244
|
-
scale:
|
|
245
|
-
position:
|
|
246
|
-
quaternion:
|
|
247
|
-
morphTargetInfluences:
|
|
248
|
-
};
|
|
249
|
-
// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
|
|
250
|
-
|
|
183
|
+
scale: "scale",
|
|
184
|
+
position: "translation",
|
|
185
|
+
quaternion: "rotation",
|
|
186
|
+
morphTargetInfluences: "weights"
|
|
187
|
+
};
|
|
251
188
|
const GLB_HEADER_BYTES = 12;
|
|
252
|
-
const GLB_HEADER_MAGIC =
|
|
189
|
+
const GLB_HEADER_MAGIC = 1179937895;
|
|
253
190
|
const GLB_VERSION = 2;
|
|
254
191
|
const GLB_CHUNK_PREFIX_BYTES = 8;
|
|
255
|
-
const GLB_CHUNK_TYPE_JSON =
|
|
256
|
-
const GLB_CHUNK_TYPE_BIN =
|
|
257
|
-
/**
|
|
258
|
-
* Writer
|
|
259
|
-
*/
|
|
260
|
-
|
|
192
|
+
const GLB_CHUNK_TYPE_JSON = 1313821514;
|
|
193
|
+
const GLB_CHUNK_TYPE_BIN = 5130562;
|
|
261
194
|
class GLTFWriter {
|
|
262
195
|
constructor() {
|
|
263
|
-
_defineProperty(this, "plugins", void 0);
|
|
264
|
-
|
|
265
|
-
_defineProperty(this, "options", void 0);
|
|
266
|
-
|
|
267
|
-
_defineProperty(this, "pending", void 0);
|
|
268
|
-
|
|
269
|
-
_defineProperty(this, "buffers", void 0);
|
|
270
|
-
|
|
271
|
-
_defineProperty(this, "byteOffset", void 0);
|
|
272
|
-
|
|
273
|
-
_defineProperty(this, "nodeMap", void 0);
|
|
274
|
-
|
|
275
|
-
_defineProperty(this, "skins", void 0);
|
|
276
|
-
|
|
277
|
-
_defineProperty(this, "extensionsUsed", void 0);
|
|
278
|
-
|
|
279
|
-
_defineProperty(this, "uids", void 0);
|
|
280
|
-
|
|
281
|
-
_defineProperty(this, "uid", void 0);
|
|
282
|
-
|
|
283
|
-
_defineProperty(this, "json", void 0);
|
|
284
|
-
|
|
285
|
-
_defineProperty(this, "cache", void 0);
|
|
286
|
-
|
|
287
|
-
_defineProperty(this, "cachedCanvas", void 0);
|
|
288
|
-
|
|
289
196
|
this.plugins = [];
|
|
290
197
|
this.options = {};
|
|
291
198
|
this.pending = [];
|
|
292
199
|
this.buffers = [];
|
|
293
200
|
this.byteOffset = 0;
|
|
294
|
-
this.nodeMap = new Map();
|
|
201
|
+
this.nodeMap = /* @__PURE__ */ new Map();
|
|
295
202
|
this.skins = [];
|
|
296
203
|
this.extensionsUsed = {};
|
|
297
|
-
this.uids = new Map();
|
|
204
|
+
this.uids = /* @__PURE__ */ new Map();
|
|
298
205
|
this.uid = 0;
|
|
299
206
|
this.json = {
|
|
300
207
|
asset: {
|
|
301
|
-
version:
|
|
302
|
-
generator:
|
|
208
|
+
version: "2.0",
|
|
209
|
+
generator: "THREE.GLTFExporter"
|
|
303
210
|
}
|
|
304
211
|
};
|
|
305
212
|
this.cache = {
|
|
306
|
-
meshes: new Map(),
|
|
307
|
-
attributes: new Map(),
|
|
308
|
-
attributesNormalized: new Map(),
|
|
309
|
-
materials: new Map(),
|
|
310
|
-
textures: new Map(),
|
|
311
|
-
images: new Map()
|
|
213
|
+
meshes: /* @__PURE__ */ new Map(),
|
|
214
|
+
attributes: /* @__PURE__ */ new Map(),
|
|
215
|
+
attributesNormalized: /* @__PURE__ */ new Map(),
|
|
216
|
+
materials: /* @__PURE__ */ new Map(),
|
|
217
|
+
textures: /* @__PURE__ */ new Map(),
|
|
218
|
+
images: /* @__PURE__ */ new Map()
|
|
312
219
|
};
|
|
313
220
|
this.cachedCanvas = null;
|
|
314
221
|
}
|
|
315
|
-
|
|
316
222
|
setPlugins(plugins) {
|
|
317
223
|
this.plugins = plugins;
|
|
318
224
|
}
|
|
319
|
-
/**
|
|
320
|
-
* Parse scenes and generate GLTF output
|
|
321
|
-
* @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
|
|
322
|
-
* @param {Function} onDone Callback on completed
|
|
323
|
-
* @param {Object} options options
|
|
324
|
-
*/
|
|
325
|
-
|
|
326
|
-
|
|
327
225
|
write(input, onDone, options) {
|
|
328
|
-
this.options = Object.assign(
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
226
|
+
this.options = Object.assign(
|
|
227
|
+
{},
|
|
228
|
+
{
|
|
229
|
+
binary: false,
|
|
230
|
+
trs: false,
|
|
231
|
+
onlyVisible: true,
|
|
232
|
+
truncateDrawRange: true,
|
|
233
|
+
embedImages: true,
|
|
234
|
+
maxTextureSize: Infinity,
|
|
235
|
+
animations: [],
|
|
236
|
+
includeCustomExtensions: false
|
|
237
|
+
},
|
|
238
|
+
options
|
|
239
|
+
);
|
|
240
|
+
if (this.options.animations !== void 0 && this.options.animations.length > 0) {
|
|
342
241
|
this.options.trs = true;
|
|
343
242
|
}
|
|
344
|
-
|
|
345
243
|
this.processInput(input);
|
|
346
244
|
const writer = this;
|
|
347
245
|
Promise.all(this.pending).then(() => {
|
|
348
246
|
const buffers = writer.buffers;
|
|
349
247
|
const json = writer.json;
|
|
350
|
-
const
|
|
351
|
-
const extensionsUsed = writer.extensionsUsed;
|
|
352
|
-
|
|
353
|
-
const blob = new Blob(buffers, {
|
|
354
|
-
type: 'application/octet-stream'
|
|
355
|
-
}); // Declare extensions.
|
|
356
|
-
|
|
248
|
+
const options2 = writer.options;
|
|
249
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
250
|
+
const blob = new Blob(buffers, { type: "application/octet-stream" });
|
|
357
251
|
const extensionsUsedList = Object.keys(extensionsUsed);
|
|
358
|
-
if (extensionsUsedList.length > 0)
|
|
359
|
-
|
|
360
|
-
if (json.buffers && json.buffers.length > 0)
|
|
361
|
-
|
|
362
|
-
if (
|
|
363
|
-
// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
|
|
252
|
+
if (extensionsUsedList.length > 0)
|
|
253
|
+
json.extensionsUsed = extensionsUsedList;
|
|
254
|
+
if (json.buffers && json.buffers.length > 0)
|
|
255
|
+
json.buffers[0].byteLength = blob.size;
|
|
256
|
+
if (options2.binary) {
|
|
364
257
|
const reader = new window.FileReader();
|
|
365
258
|
reader.readAsArrayBuffer(blob);
|
|
366
|
-
|
|
367
259
|
reader.onloadend = () => {
|
|
368
|
-
if (reader.result !== null && typeof reader.result !==
|
|
369
|
-
// Binary chunk.
|
|
260
|
+
if (reader.result !== null && typeof reader.result !== "string") {
|
|
370
261
|
const binaryChunk = this.getPaddedArrayBuffer(reader.result);
|
|
371
262
|
const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
|
|
372
263
|
binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true);
|
|
373
|
-
binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true);
|
|
374
|
-
|
|
375
|
-
const jsonChunk = this.getPaddedArrayBuffer(this.stringToArrayBuffer(JSON.stringify(json)), 0x20);
|
|
264
|
+
binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true);
|
|
265
|
+
const jsonChunk = this.getPaddedArrayBuffer(this.stringToArrayBuffer(JSON.stringify(json)), 32);
|
|
376
266
|
const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
|
|
377
267
|
jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true);
|
|
378
|
-
jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true);
|
|
379
|
-
|
|
268
|
+
jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true);
|
|
380
269
|
const header = new ArrayBuffer(GLB_HEADER_BYTES);
|
|
381
270
|
const headerView = new DataView(header);
|
|
382
271
|
headerView.setUint32(0, GLB_HEADER_MAGIC, true);
|
|
@@ -384,13 +273,12 @@ class GLTFWriter {
|
|
|
384
273
|
const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
|
|
385
274
|
headerView.setUint32(8, totalByteLength, true);
|
|
386
275
|
const glbBlob = new Blob([header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk], {
|
|
387
|
-
type:
|
|
276
|
+
type: "application/octet-stream"
|
|
388
277
|
});
|
|
389
278
|
const glbReader = new window.FileReader();
|
|
390
279
|
glbReader.readAsArrayBuffer(glbBlob);
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if (glbReader.result !== null && typeof glbReader.result !== 'string') {
|
|
280
|
+
glbReader.onloadend = function() {
|
|
281
|
+
if (glbReader.result !== null && typeof glbReader.result !== "string") {
|
|
394
282
|
onDone(glbReader.result);
|
|
395
283
|
}
|
|
396
284
|
};
|
|
@@ -400,11 +288,9 @@ class GLTFWriter {
|
|
|
400
288
|
if (json.buffers && json.buffers.length > 0) {
|
|
401
289
|
const reader = new window.FileReader();
|
|
402
290
|
reader.readAsDataURL(blob);
|
|
403
|
-
|
|
404
|
-
reader.onloadend = function () {
|
|
291
|
+
reader.onloadend = function() {
|
|
405
292
|
const base64data = reader.result;
|
|
406
|
-
|
|
407
|
-
if (json.buffers !== undefined && base64data !== null) {
|
|
293
|
+
if (json.buffers !== void 0 && base64data !== null) {
|
|
408
294
|
json.buffers[0].uri = base64data;
|
|
409
295
|
onDone(json);
|
|
410
296
|
}
|
|
@@ -415,171 +301,100 @@ class GLTFWriter {
|
|
|
415
301
|
}
|
|
416
302
|
});
|
|
417
303
|
}
|
|
418
|
-
/**
|
|
419
|
-
* Serializes a userData.
|
|
420
|
-
*
|
|
421
|
-
* @param {THREE.Object3D|THREE.Material} object
|
|
422
|
-
* @param {Object} objectDef
|
|
423
|
-
*/
|
|
424
|
-
|
|
425
|
-
|
|
426
304
|
serializeUserData(object, objectDef) {
|
|
427
|
-
if (Object.keys(object.userData).length === 0)
|
|
305
|
+
if (Object.keys(object.userData).length === 0)
|
|
306
|
+
return;
|
|
428
307
|
const options = this.options;
|
|
429
308
|
const extensionsUsed = this.extensionsUsed;
|
|
430
|
-
|
|
431
309
|
try {
|
|
432
310
|
const json = JSON.parse(JSON.stringify(object.userData));
|
|
433
|
-
|
|
434
311
|
if (options.includeCustomExtensions && json.gltfExtensions) {
|
|
435
|
-
if (objectDef.extensions ===
|
|
436
|
-
|
|
312
|
+
if (objectDef.extensions === void 0)
|
|
313
|
+
objectDef.extensions = {};
|
|
437
314
|
for (const extensionName in json.gltfExtensions) {
|
|
438
315
|
objectDef.extensions[extensionName] = json.gltfExtensions[extensionName];
|
|
439
316
|
extensionsUsed[extensionName] = true;
|
|
440
317
|
}
|
|
441
|
-
|
|
442
318
|
delete json.gltfExtensions;
|
|
443
319
|
}
|
|
444
|
-
|
|
445
|
-
|
|
320
|
+
if (Object.keys(json).length > 0)
|
|
321
|
+
objectDef.extras = json;
|
|
446
322
|
} catch (error) {
|
|
447
323
|
if (error instanceof Error) {
|
|
448
|
-
console.warn(
|
|
324
|
+
console.warn(
|
|
325
|
+
"THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message
|
|
326
|
+
);
|
|
449
327
|
}
|
|
450
328
|
}
|
|
451
329
|
}
|
|
452
|
-
/**
|
|
453
|
-
* Assign and return a temporal unique id for an object
|
|
454
|
-
* especially which doesn't have .uuid
|
|
455
|
-
* @param {Object} object
|
|
456
|
-
* @return {Integer}
|
|
457
|
-
*/
|
|
458
|
-
|
|
459
|
-
|
|
460
330
|
getUID(object) {
|
|
461
|
-
if (!this.uids.has(object))
|
|
331
|
+
if (!this.uids.has(object))
|
|
332
|
+
this.uids.set(object, this.uid++);
|
|
462
333
|
return this.uids.get(object);
|
|
463
334
|
}
|
|
464
|
-
/**
|
|
465
|
-
* Checks if normal attribute values are normalized.
|
|
466
|
-
*
|
|
467
|
-
* @param {BufferAttribute} normal
|
|
468
|
-
* @returns {Boolean}
|
|
469
|
-
*/
|
|
470
|
-
|
|
471
|
-
|
|
472
335
|
isNormalizedNormalAttribute(normal) {
|
|
473
336
|
const cache = this.cache;
|
|
474
|
-
if (cache.attributesNormalized.has(normal))
|
|
475
|
-
|
|
476
|
-
|
|
337
|
+
if (cache.attributesNormalized.has(normal))
|
|
338
|
+
return false;
|
|
339
|
+
const v = new THREE.Vector3();
|
|
477
340
|
for (let i = 0, il = normal.count; i < il; i++) {
|
|
478
|
-
|
|
479
|
-
|
|
341
|
+
if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4)
|
|
342
|
+
return false;
|
|
480
343
|
}
|
|
481
|
-
|
|
482
344
|
return true;
|
|
483
345
|
}
|
|
484
|
-
/**
|
|
485
|
-
* Creates normalized normal buffer attribute.
|
|
486
|
-
*
|
|
487
|
-
* @param {BufferAttribute} normal
|
|
488
|
-
* @returns {BufferAttribute}
|
|
489
|
-
*
|
|
490
|
-
*/
|
|
491
|
-
|
|
492
|
-
|
|
493
346
|
createNormalizedNormalAttribute(normal) {
|
|
494
347
|
const cache = this.cache;
|
|
495
|
-
if (cache.attributesNormalized.has(normal))
|
|
348
|
+
if (cache.attributesNormalized.has(normal))
|
|
349
|
+
return cache.attributesNormalized.get(normal);
|
|
496
350
|
const attribute = normal.clone();
|
|
497
|
-
const v = new Vector3();
|
|
498
|
-
|
|
351
|
+
const v = new THREE.Vector3();
|
|
499
352
|
for (let i = 0, il = attribute.count; i < il; i++) {
|
|
500
353
|
v.fromBufferAttribute(attribute, i);
|
|
501
|
-
|
|
502
354
|
if (v.x === 0 && v.y === 0 && v.z === 0) {
|
|
503
|
-
|
|
504
|
-
v.setX(1.0);
|
|
355
|
+
v.setX(1);
|
|
505
356
|
} else {
|
|
506
357
|
v.normalize();
|
|
507
358
|
}
|
|
508
|
-
|
|
509
359
|
attribute.setXYZ(i, v.x, v.y, v.z);
|
|
510
360
|
}
|
|
511
|
-
|
|
512
361
|
cache.attributesNormalized.set(normal, attribute);
|
|
513
362
|
return attribute;
|
|
514
363
|
}
|
|
515
|
-
/**
|
|
516
|
-
* Applies a texture transform, if present, to the map definition. Requires
|
|
517
|
-
* the KHR_texture_transform extension.
|
|
518
|
-
*
|
|
519
|
-
* @param {Object} mapDef
|
|
520
|
-
* @param {THREE.Texture} texture
|
|
521
|
-
*/
|
|
522
|
-
|
|
523
|
-
|
|
524
364
|
applyTextureTransform(mapDef, texture) {
|
|
525
365
|
let didTransform = false;
|
|
526
366
|
const transformDef = {};
|
|
527
|
-
|
|
528
367
|
if (texture.offset.x !== 0 || texture.offset.y !== 0) {
|
|
529
368
|
transformDef.offset = texture.offset.toArray();
|
|
530
369
|
didTransform = true;
|
|
531
370
|
}
|
|
532
|
-
|
|
533
371
|
if (texture.rotation !== 0) {
|
|
534
372
|
transformDef.rotation = texture.rotation;
|
|
535
373
|
didTransform = true;
|
|
536
374
|
}
|
|
537
|
-
|
|
538
375
|
if (texture.repeat.x !== 1 || texture.repeat.y !== 1) {
|
|
539
376
|
transformDef.scale = texture.repeat.toArray();
|
|
540
377
|
didTransform = true;
|
|
541
378
|
}
|
|
542
|
-
|
|
543
379
|
if (didTransform) {
|
|
544
380
|
mapDef.extensions = mapDef.extensions || {};
|
|
545
|
-
mapDef.extensions[
|
|
546
|
-
this.extensionsUsed[
|
|
381
|
+
mapDef.extensions["KHR_texture_transform"] = transformDef;
|
|
382
|
+
this.extensionsUsed["KHR_texture_transform"] = true;
|
|
547
383
|
}
|
|
548
384
|
}
|
|
549
|
-
/**
|
|
550
|
-
* Process a buffer to append to the default one.
|
|
551
|
-
* @param {ArrayBuffer} buffer
|
|
552
|
-
* @return {Integer}
|
|
553
|
-
*/
|
|
554
|
-
|
|
555
|
-
|
|
556
385
|
processBuffer(buffer) {
|
|
557
386
|
const json = this.json;
|
|
558
387
|
const buffers = this.buffers;
|
|
559
|
-
if (!json.buffers)
|
|
560
|
-
byteLength: 0
|
|
561
|
-
}]; // All buffers are merged before export.
|
|
562
|
-
|
|
388
|
+
if (!json.buffers)
|
|
389
|
+
json.buffers = [{ byteLength: 0 }];
|
|
563
390
|
buffers.push(buffer);
|
|
564
391
|
return 0;
|
|
565
392
|
}
|
|
566
|
-
/**
|
|
567
|
-
* Process and generate a BufferView
|
|
568
|
-
* @param {BufferAttribute} attribute
|
|
569
|
-
* @param {number} componentType
|
|
570
|
-
* @param {number} start
|
|
571
|
-
* @param {number} count
|
|
572
|
-
* @param {number} target (Optional) Target usage of the BufferView
|
|
573
|
-
* @return {Object}
|
|
574
|
-
*/
|
|
575
|
-
|
|
576
|
-
|
|
577
393
|
processBufferView(attribute, componentType, start, count, target) {
|
|
578
394
|
const json = this.json;
|
|
579
|
-
if (!json.bufferViews)
|
|
580
|
-
|
|
395
|
+
if (!json.bufferViews)
|
|
396
|
+
json.bufferViews = [];
|
|
581
397
|
let componentSize;
|
|
582
|
-
|
|
583
398
|
if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) {
|
|
584
399
|
componentSize = 1;
|
|
585
400
|
} else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) {
|
|
@@ -587,23 +402,25 @@ class GLTFWriter {
|
|
|
587
402
|
} else {
|
|
588
403
|
componentSize = 4;
|
|
589
404
|
}
|
|
590
|
-
|
|
591
405
|
const byteLength = this.getPaddedBufferSize(count * attribute.itemSize * componentSize);
|
|
592
406
|
const dataView = new DataView(new ArrayBuffer(byteLength));
|
|
593
407
|
let offset = 0;
|
|
594
|
-
|
|
595
408
|
for (let i = start; i < start + count; i++) {
|
|
596
409
|
for (let a = 0; a < attribute.itemSize; a++) {
|
|
597
410
|
let value;
|
|
598
|
-
|
|
599
411
|
if (attribute.itemSize > 4) {
|
|
600
|
-
// no support for interleaved data for itemSize > 4
|
|
601
412
|
value = attribute.array[i * attribute.itemSize + a];
|
|
602
413
|
} else {
|
|
603
|
-
if (a === 0)
|
|
414
|
+
if (a === 0)
|
|
415
|
+
value = attribute.getX(i);
|
|
416
|
+
else if (a === 1)
|
|
417
|
+
value = attribute.getY(i);
|
|
418
|
+
else if (a === 2)
|
|
419
|
+
value = attribute.getZ(i);
|
|
420
|
+
else if (a === 3)
|
|
421
|
+
value = attribute.getW(i);
|
|
604
422
|
}
|
|
605
|
-
|
|
606
|
-
if (value !== undefined) {
|
|
423
|
+
if (value !== void 0) {
|
|
607
424
|
if (componentType === WEBGL_CONSTANTS.FLOAT) {
|
|
608
425
|
dataView.setFloat32(offset, value, true);
|
|
609
426
|
} else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) {
|
|
@@ -614,49 +431,37 @@ class GLTFWriter {
|
|
|
614
431
|
dataView.setUint8(offset, value);
|
|
615
432
|
}
|
|
616
433
|
}
|
|
617
|
-
|
|
618
434
|
offset += componentSize;
|
|
619
435
|
}
|
|
620
436
|
}
|
|
621
|
-
|
|
622
437
|
const bufferViewDef = {
|
|
623
438
|
buffer: this.processBuffer(dataView.buffer),
|
|
624
439
|
byteOffset: this.byteOffset,
|
|
625
|
-
byteLength
|
|
440
|
+
byteLength
|
|
626
441
|
};
|
|
627
|
-
if (target !==
|
|
628
|
-
|
|
442
|
+
if (target !== void 0)
|
|
443
|
+
bufferViewDef.target = target;
|
|
629
444
|
if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) {
|
|
630
|
-
// Only define byteStride for vertex attributes.
|
|
631
445
|
bufferViewDef.byteStride = attribute.itemSize * componentSize;
|
|
632
446
|
}
|
|
633
|
-
|
|
634
447
|
this.byteOffset += byteLength;
|
|
635
|
-
json.bufferViews.push(bufferViewDef);
|
|
636
|
-
|
|
448
|
+
json.bufferViews.push(bufferViewDef);
|
|
637
449
|
const output = {
|
|
638
450
|
id: json.bufferViews.length - 1,
|
|
639
451
|
byteLength: 0
|
|
640
452
|
};
|
|
641
453
|
return output;
|
|
642
454
|
}
|
|
643
|
-
/**
|
|
644
|
-
* Process and generate a BufferView from an image Blob.
|
|
645
|
-
* @param {Blob} blob
|
|
646
|
-
* @return {Promise<Integer>}
|
|
647
|
-
*/
|
|
648
|
-
|
|
649
|
-
|
|
650
455
|
processBufferViewImage(blob) {
|
|
651
456
|
const writer = this;
|
|
652
457
|
const json = writer.json;
|
|
653
|
-
if (!json.bufferViews)
|
|
654
|
-
|
|
458
|
+
if (!json.bufferViews)
|
|
459
|
+
json.bufferViews = [];
|
|
460
|
+
return new Promise((resolve) => {
|
|
655
461
|
const reader = new window.FileReader();
|
|
656
462
|
reader.readAsArrayBuffer(blob);
|
|
657
|
-
|
|
658
463
|
reader.onloadend = () => {
|
|
659
|
-
if (reader.result !== null && typeof reader.result !==
|
|
464
|
+
if (reader.result !== null && typeof reader.result !== "string" && json.bufferViews !== void 0) {
|
|
660
465
|
const buffer = this.getPaddedArrayBuffer(reader.result);
|
|
661
466
|
const bufferViewDef = {
|
|
662
467
|
buffer: writer.processBuffer(buffer),
|
|
@@ -669,28 +474,17 @@ class GLTFWriter {
|
|
|
669
474
|
};
|
|
670
475
|
});
|
|
671
476
|
}
|
|
672
|
-
/**
|
|
673
|
-
* Process attribute to generate an accessor
|
|
674
|
-
* @param {BufferAttribute} attribute Attribute to process
|
|
675
|
-
* @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range
|
|
676
|
-
* @param {Integer} start (Optional)
|
|
677
|
-
* @param {Integer} count (Optional)
|
|
678
|
-
* @return {Integer|null} Index of the processed accessor on the "accessors" array
|
|
679
|
-
*/
|
|
680
|
-
|
|
681
|
-
|
|
682
477
|
processAccessor(attribute, geometry, start, count) {
|
|
683
478
|
const options = this.options;
|
|
684
479
|
const json = this.json;
|
|
685
480
|
const types = {
|
|
686
|
-
1:
|
|
687
|
-
2:
|
|
688
|
-
3:
|
|
689
|
-
4:
|
|
690
|
-
16:
|
|
481
|
+
1: "SCALAR",
|
|
482
|
+
2: "VEC2",
|
|
483
|
+
3: "VEC3",
|
|
484
|
+
4: "VEC4",
|
|
485
|
+
16: "MAT4"
|
|
691
486
|
};
|
|
692
|
-
let componentType;
|
|
693
|
-
|
|
487
|
+
let componentType;
|
|
694
488
|
if (attribute.array.constructor === Float32Array) {
|
|
695
489
|
componentType = WEBGL_CONSTANTS.FLOAT;
|
|
696
490
|
} else if (attribute.array.constructor === Uint32Array) {
|
|
@@ -700,95 +494,80 @@ class GLTFWriter {
|
|
|
700
494
|
} else if (attribute.array.constructor === Uint8Array) {
|
|
701
495
|
componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
|
|
702
496
|
} else {
|
|
703
|
-
throw new Error(
|
|
497
|
+
throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type.");
|
|
704
498
|
}
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
if (count ===
|
|
708
|
-
|
|
709
|
-
if (options.truncateDrawRange && geometry !==
|
|
499
|
+
if (start === void 0)
|
|
500
|
+
start = 0;
|
|
501
|
+
if (count === void 0)
|
|
502
|
+
count = attribute.count;
|
|
503
|
+
if (options.truncateDrawRange && geometry !== void 0 && geometry.index === null) {
|
|
710
504
|
const end = start + count;
|
|
711
505
|
const end2 = geometry.drawRange.count === Infinity ? attribute.count : geometry.drawRange.start + geometry.drawRange.count;
|
|
712
506
|
start = Math.max(start, geometry.drawRange.start);
|
|
713
507
|
count = Math.min(end, end2) - start;
|
|
714
|
-
if (count < 0)
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
508
|
+
if (count < 0)
|
|
509
|
+
count = 0;
|
|
510
|
+
}
|
|
511
|
+
if (count === 0)
|
|
512
|
+
return null;
|
|
719
513
|
const minMax = this.getMinMax(attribute, start, count);
|
|
720
|
-
let bufferViewTarget;
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
if (geometry !== undefined) {
|
|
514
|
+
let bufferViewTarget;
|
|
515
|
+
if (geometry !== void 0) {
|
|
724
516
|
bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;
|
|
725
517
|
}
|
|
726
|
-
|
|
727
|
-
if (bufferViewTarget !== undefined) {
|
|
518
|
+
if (bufferViewTarget !== void 0) {
|
|
728
519
|
const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget);
|
|
729
520
|
const accessorDef = {
|
|
730
521
|
bufferView: bufferView.id,
|
|
731
522
|
byteOffset: bufferView.byteOffset,
|
|
732
|
-
componentType
|
|
733
|
-
count
|
|
523
|
+
componentType,
|
|
524
|
+
count,
|
|
734
525
|
max: minMax.max,
|
|
735
526
|
min: minMax.min,
|
|
736
527
|
type: types[attribute.itemSize]
|
|
737
528
|
};
|
|
738
|
-
if (attribute.normalized)
|
|
739
|
-
|
|
529
|
+
if (attribute.normalized)
|
|
530
|
+
accessorDef.normalized = true;
|
|
531
|
+
if (!json.accessors)
|
|
532
|
+
json.accessors = [];
|
|
740
533
|
return json.accessors.push(accessorDef) - 1;
|
|
741
534
|
}
|
|
742
535
|
}
|
|
743
|
-
/**
|
|
744
|
-
* Process image
|
|
745
|
-
* @param {Image} image to process
|
|
746
|
-
* @param {Integer} format of the image (RGBAFormat)
|
|
747
|
-
* @param {Boolean} flipY before writing out the image
|
|
748
|
-
* @return {Integer} Index of the processed texture in the "images" array
|
|
749
|
-
*/
|
|
750
|
-
|
|
751
|
-
|
|
752
536
|
processImage(image, format, flipY) {
|
|
753
537
|
const writer = this;
|
|
754
538
|
const cache = writer.cache;
|
|
755
539
|
const json = writer.json;
|
|
756
540
|
const options = writer.options;
|
|
757
541
|
const pending = writer.pending;
|
|
758
|
-
if (!cache.images.has(image))
|
|
542
|
+
if (!cache.images.has(image))
|
|
543
|
+
cache.images.set(image, {});
|
|
759
544
|
const cachedImages = cache.images.get(image);
|
|
760
|
-
const mimeType = format === RGBAFormat ?
|
|
761
|
-
const key = mimeType +
|
|
762
|
-
if (cachedImages !==
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
};
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
const canvas = this.cachedCanvas = this.cachedCanvas || document.createElement('canvas');
|
|
545
|
+
const mimeType = format === THREE.RGBAFormat ? "image/png" : "image/jpeg";
|
|
546
|
+
const key = mimeType + ":flipY/" + flipY.toString();
|
|
547
|
+
if (cachedImages !== void 0 && cachedImages[key] !== void 0)
|
|
548
|
+
return cachedImages[key];
|
|
549
|
+
if (!json.images)
|
|
550
|
+
json.images = [];
|
|
551
|
+
const imageDef = { mimeType };
|
|
552
|
+
if (options.embedImages && options.maxTextureSize !== void 0) {
|
|
553
|
+
const canvas = this.cachedCanvas = this.cachedCanvas || document.createElement("canvas");
|
|
770
554
|
canvas.width = Math.min(image.width, options.maxTextureSize);
|
|
771
555
|
canvas.height = Math.min(image.height, options.maxTextureSize);
|
|
772
|
-
const ctx = canvas.getContext(
|
|
773
|
-
|
|
556
|
+
const ctx = canvas.getContext("2d");
|
|
774
557
|
if (flipY) {
|
|
775
|
-
ctx
|
|
776
|
-
ctx
|
|
558
|
+
ctx == null ? void 0 : ctx.translate(0, canvas.height);
|
|
559
|
+
ctx == null ? void 0 : ctx.scale(1, -1);
|
|
777
560
|
}
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
561
|
+
if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) {
|
|
562
|
+
ctx == null ? void 0 : ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
781
563
|
} else {
|
|
782
|
-
if (format !== RGBAFormat) {
|
|
783
|
-
console.error(
|
|
564
|
+
if (format !== THREE.RGBAFormat) {
|
|
565
|
+
console.error("GLTFExporter: Only RGBA format is supported.");
|
|
784
566
|
}
|
|
785
|
-
|
|
786
567
|
if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) {
|
|
787
|
-
console.warn(
|
|
568
|
+
console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image);
|
|
788
569
|
}
|
|
789
|
-
|
|
790
570
|
const data = new Uint8ClampedArray(image.height * image.width * 4);
|
|
791
|
-
|
|
792
571
|
if (image instanceof ImageData) {
|
|
793
572
|
for (let i = 0; i < data.length; i += 4) {
|
|
794
573
|
data[i + 0] = image.data[i + 0];
|
|
@@ -797,43 +576,36 @@ class GLTFWriter {
|
|
|
797
576
|
data[i + 3] = image.data[i + 3];
|
|
798
577
|
}
|
|
799
578
|
}
|
|
800
|
-
|
|
801
|
-
ctx === null || ctx === void 0 ? void 0 : ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);
|
|
579
|
+
ctx == null ? void 0 : ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);
|
|
802
580
|
}
|
|
803
|
-
|
|
804
581
|
if (options.binary) {
|
|
805
|
-
pending.push(
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
582
|
+
pending.push(
|
|
583
|
+
new Promise(function(resolve) {
|
|
584
|
+
canvas.toBlob(function(blob) {
|
|
585
|
+
if (blob !== null) {
|
|
586
|
+
writer.processBufferViewImage(blob).then(function(bufferViewIndex) {
|
|
587
|
+
imageDef.bufferView = bufferViewIndex;
|
|
588
|
+
resolve();
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
}, mimeType);
|
|
592
|
+
})
|
|
593
|
+
);
|
|
816
594
|
} else {
|
|
817
595
|
imageDef.uri = canvas.toDataURL(mimeType);
|
|
818
596
|
}
|
|
819
597
|
} else if (image instanceof Image) {
|
|
820
598
|
imageDef.uri = image.src;
|
|
821
599
|
}
|
|
822
|
-
|
|
823
600
|
const index = json.images.push(imageDef) - 1;
|
|
824
|
-
if (cachedImages !==
|
|
601
|
+
if (cachedImages !== void 0)
|
|
602
|
+
cachedImages[key] = index;
|
|
825
603
|
return index;
|
|
826
604
|
}
|
|
827
|
-
/**
|
|
828
|
-
* Process sampler
|
|
829
|
-
* @param {Texture} map Texture to process
|
|
830
|
-
* @return {Integer} Index of the processed texture in the "samplers" array
|
|
831
|
-
*/
|
|
832
|
-
|
|
833
|
-
|
|
834
605
|
processSampler(map) {
|
|
835
606
|
const json = this.json;
|
|
836
|
-
if (!json.samplers)
|
|
607
|
+
if (!json.samplers)
|
|
608
|
+
json.samplers = [];
|
|
837
609
|
const samplerDef = {
|
|
838
610
|
magFilter: THREE_TO_WEBGL[map.magFilter],
|
|
839
611
|
minFilter: THREE_TO_WEBGL[map.minFilter],
|
|
@@ -842,189 +614,129 @@ class GLTFWriter {
|
|
|
842
614
|
};
|
|
843
615
|
return json.samplers.push(samplerDef) - 1;
|
|
844
616
|
}
|
|
845
|
-
/**
|
|
846
|
-
* Process texture
|
|
847
|
-
* @param {Texture} map Map to process
|
|
848
|
-
* @return {Integer} Index of the processed texture in the "textures" array
|
|
849
|
-
*/
|
|
850
|
-
|
|
851
|
-
|
|
852
617
|
processTexture(map) {
|
|
853
618
|
const cache = this.cache;
|
|
854
619
|
const json = this.json;
|
|
855
|
-
if (cache.textures.has(map))
|
|
856
|
-
|
|
620
|
+
if (cache.textures.has(map))
|
|
621
|
+
return cache.textures.get(map);
|
|
622
|
+
if (!json.textures)
|
|
623
|
+
json.textures = [];
|
|
857
624
|
const textureDef = {
|
|
858
625
|
sampler: this.processSampler(map),
|
|
859
626
|
source: this.processImage(map.image, map.format, map.flipY)
|
|
860
627
|
};
|
|
861
|
-
if (map.name)
|
|
862
|
-
|
|
863
|
-
this._invokeAll(function
|
|
628
|
+
if (map.name)
|
|
629
|
+
textureDef.name = map.name;
|
|
630
|
+
this._invokeAll(function(ext) {
|
|
864
631
|
ext.writeTexture && ext.writeTexture(map, textureDef);
|
|
865
632
|
});
|
|
866
|
-
|
|
867
633
|
const index = json.textures.push(textureDef) - 1;
|
|
868
634
|
cache.textures.set(map, index);
|
|
869
635
|
return index;
|
|
870
636
|
}
|
|
871
|
-
/**
|
|
872
|
-
* Process material
|
|
873
|
-
* @param {THREE.Material} material Material to process
|
|
874
|
-
* @return {Integer|null} Index of the processed material in the "materials" array
|
|
875
|
-
*/
|
|
876
|
-
|
|
877
|
-
|
|
878
637
|
processMaterial(material) {
|
|
879
638
|
const cache = this.cache;
|
|
880
639
|
const json = this.json;
|
|
881
|
-
if (cache.materials.has(material))
|
|
882
|
-
|
|
883
|
-
if (material instanceof ShaderMaterial && material.isShaderMaterial) {
|
|
884
|
-
console.warn(
|
|
640
|
+
if (cache.materials.has(material))
|
|
641
|
+
return cache.materials.get(material);
|
|
642
|
+
if (material instanceof THREE.ShaderMaterial && material.isShaderMaterial) {
|
|
643
|
+
console.warn("GLTFExporter: THREE.ShaderMaterial not supported.");
|
|
885
644
|
return null;
|
|
886
645
|
}
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
if (!(material instanceof MeshStandardMaterial && material.isMeshStandardMaterial && material instanceof MeshBasicMaterial && // @ts-expect-error
|
|
895
|
-
material.isMeshBasicMaterial)) {
|
|
896
|
-
console.warn('GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.');
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
if (material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) {
|
|
900
|
-
// pbrMetallicRoughness.baseColorFactor
|
|
646
|
+
if (!json.materials)
|
|
647
|
+
json.materials = [];
|
|
648
|
+
const materialDef = { pbrMetallicRoughness: {} };
|
|
649
|
+
if (!(material instanceof THREE.MeshStandardMaterial && material.isMeshStandardMaterial && material instanceof THREE.MeshBasicMaterial && material.isMeshBasicMaterial)) {
|
|
650
|
+
console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");
|
|
651
|
+
}
|
|
652
|
+
if (material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) {
|
|
901
653
|
const color = material.color.toArray().concat([material.opacity]);
|
|
902
|
-
|
|
903
654
|
if (!this.equalArray(color, [1, 1, 1, 1])) {
|
|
904
655
|
materialDef.pbrMetallicRoughness.baseColorFactor = color;
|
|
905
656
|
}
|
|
906
657
|
}
|
|
907
|
-
|
|
908
|
-
if (material instanceof MeshStandardMaterial && material.isMeshStandardMaterial) {
|
|
658
|
+
if (material instanceof THREE.MeshStandardMaterial && material.isMeshStandardMaterial) {
|
|
909
659
|
materialDef.pbrMetallicRoughness.metallicFactor = material.metalness;
|
|
910
660
|
materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;
|
|
911
661
|
} else {
|
|
912
662
|
materialDef.pbrMetallicRoughness.metallicFactor = 0.5;
|
|
913
663
|
materialDef.pbrMetallicRoughness.roughnessFactor = 0.5;
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
if (material instanceof MeshStandardMaterial && material.metalnessMap || material instanceof MeshStandardMaterial && material.roughnessMap) {
|
|
664
|
+
}
|
|
665
|
+
if (material instanceof THREE.MeshStandardMaterial && material.metalnessMap || material instanceof THREE.MeshStandardMaterial && material.roughnessMap) {
|
|
918
666
|
if (material.metalnessMap === material.roughnessMap && material.metalnessMap !== null) {
|
|
919
|
-
const metalRoughMapDef = {
|
|
920
|
-
index: this.processTexture(material.metalnessMap)
|
|
921
|
-
};
|
|
667
|
+
const metalRoughMapDef = { index: this.processTexture(material.metalnessMap) };
|
|
922
668
|
this.applyTextureTransform(metalRoughMapDef, material.metalnessMap);
|
|
923
669
|
materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
|
|
924
670
|
} else {
|
|
925
|
-
console.warn(
|
|
671
|
+
console.warn(
|
|
672
|
+
"THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture."
|
|
673
|
+
);
|
|
926
674
|
}
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
if ((material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) && material.map) {
|
|
931
|
-
const baseColorMapDef = {
|
|
932
|
-
index: this.processTexture(material.map)
|
|
933
|
-
};
|
|
675
|
+
}
|
|
676
|
+
if ((material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) && material.map) {
|
|
677
|
+
const baseColorMapDef = { index: this.processTexture(material.map) };
|
|
934
678
|
this.applyTextureTransform(baseColorMapDef, material.map);
|
|
935
679
|
materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
|
|
936
680
|
}
|
|
937
|
-
|
|
938
|
-
if ((material instanceof MeshStandardMaterial || material instanceof MeshPhysicalMaterial) && material.emissive) {
|
|
939
|
-
// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.
|
|
681
|
+
if ((material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshPhysicalMaterial) && material.emissive) {
|
|
940
682
|
const emissive = material.emissive.clone().multiplyScalar(material.emissiveIntensity);
|
|
941
683
|
const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b);
|
|
942
|
-
|
|
943
684
|
if (maxEmissiveComponent > 1) {
|
|
944
685
|
emissive.multiplyScalar(1 / maxEmissiveComponent);
|
|
945
|
-
console.warn(
|
|
686
|
+
console.warn("THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited");
|
|
946
687
|
}
|
|
947
|
-
|
|
948
688
|
if (maxEmissiveComponent > 0) {
|
|
949
689
|
materialDef.emissiveFactor = emissive.toArray();
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
|
|
690
|
+
}
|
|
953
691
|
if (material.emissiveMap) {
|
|
954
|
-
const emissiveMapDef = {
|
|
955
|
-
index: this.processTexture(material.emissiveMap)
|
|
956
|
-
};
|
|
692
|
+
const emissiveMapDef = { index: this.processTexture(material.emissiveMap) };
|
|
957
693
|
this.applyTextureTransform(emissiveMapDef, material.emissiveMap);
|
|
958
694
|
materialDef.emissiveTexture = emissiveMapDef;
|
|
959
695
|
}
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
if ((material instanceof MeshMatcapMaterial || material instanceof MeshNormalMaterial || material instanceof MeshPhongMaterial || material instanceof MeshStandardMaterial || material instanceof MeshToonMaterial) && material.normalMap) {
|
|
964
|
-
const normalMapDef = {
|
|
965
|
-
index: this.processTexture(material.normalMap)
|
|
966
|
-
};
|
|
967
|
-
|
|
696
|
+
}
|
|
697
|
+
if ((material instanceof THREE.MeshMatcapMaterial || material instanceof THREE.MeshNormalMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshToonMaterial) && material.normalMap) {
|
|
698
|
+
const normalMapDef = { index: this.processTexture(material.normalMap) };
|
|
968
699
|
if (material.normalScale && material.normalScale.x !== 1) {
|
|
969
|
-
// glTF normal scale is univariate. Ignore `y`, which may be flipped.
|
|
970
|
-
// Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995
|
|
971
700
|
normalMapDef.scale = material.normalScale.x;
|
|
972
701
|
}
|
|
973
|
-
|
|
974
702
|
this.applyTextureTransform(normalMapDef, material.normalMap);
|
|
975
703
|
materialDef.normalTexture = normalMapDef;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
if ((material instanceof MeshBasicMaterial || material instanceof MeshLambertMaterial || material instanceof MeshPhongMaterial || material instanceof MeshStandardMaterial || material instanceof MeshToonMaterial) && material.aoMap) {
|
|
704
|
+
}
|
|
705
|
+
if ((material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial || material instanceof THREE.MeshStandardMaterial || material instanceof THREE.MeshToonMaterial) && material.aoMap) {
|
|
980
706
|
const occlusionMapDef = {
|
|
981
707
|
index: this.processTexture(material.aoMap),
|
|
982
708
|
texCoord: 1
|
|
983
709
|
};
|
|
984
|
-
|
|
985
|
-
if (material.aoMapIntensity !== 1.0) {
|
|
710
|
+
if (material.aoMapIntensity !== 1) {
|
|
986
711
|
occlusionMapDef.strength = material.aoMapIntensity;
|
|
987
712
|
}
|
|
988
|
-
|
|
989
713
|
this.applyTextureTransform(occlusionMapDef, material.aoMap);
|
|
990
714
|
materialDef.occlusionTexture = occlusionMapDef;
|
|
991
|
-
}
|
|
992
|
-
|
|
993
|
-
|
|
715
|
+
}
|
|
994
716
|
if (material.transparent) {
|
|
995
|
-
materialDef.alphaMode =
|
|
717
|
+
materialDef.alphaMode = "BLEND";
|
|
996
718
|
} else {
|
|
997
|
-
if (material.alphaTest > 0
|
|
998
|
-
materialDef.alphaMode =
|
|
719
|
+
if (material.alphaTest > 0) {
|
|
720
|
+
materialDef.alphaMode = "MASK";
|
|
999
721
|
materialDef.alphaCutoff = material.alphaTest;
|
|
1000
722
|
}
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
if (material.
|
|
1005
|
-
|
|
723
|
+
}
|
|
724
|
+
if (material.side === THREE.DoubleSide)
|
|
725
|
+
materialDef.doubleSided = true;
|
|
726
|
+
if (material.name !== "")
|
|
727
|
+
materialDef.name = material.name;
|
|
1006
728
|
this.serializeUserData(material, materialDef);
|
|
1007
|
-
|
|
1008
|
-
this._invokeAll(function (ext) {
|
|
729
|
+
this._invokeAll(function(ext) {
|
|
1009
730
|
ext.writeMaterial && ext.writeMaterial(material, materialDef);
|
|
1010
731
|
});
|
|
1011
|
-
|
|
1012
732
|
const index = json.materials.push(materialDef) - 1;
|
|
1013
733
|
cache.materials.set(material, index);
|
|
1014
734
|
return index;
|
|
1015
735
|
}
|
|
1016
|
-
/**
|
|
1017
|
-
* Process mesh
|
|
1018
|
-
* @param {THREE.Mesh} mesh Mesh to process
|
|
1019
|
-
* @return {Integer|null} Index of the processed mesh in the "meshes" array
|
|
1020
|
-
*/
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
736
|
processMesh(mesh) {
|
|
1024
737
|
const cache = this.cache;
|
|
1025
738
|
const json = this.json;
|
|
1026
739
|
const meshCacheKeyParts = [mesh.geometry.uuid];
|
|
1027
|
-
|
|
1028
740
|
if (Array.isArray(mesh.material)) {
|
|
1029
741
|
for (let i = 0, l = mesh.material.length; i < l; i++) {
|
|
1030
742
|
meshCacheKeyParts.push(mesh.material[i].uuid);
|
|
@@ -1032,325 +744,245 @@ class GLTFWriter {
|
|
|
1032
744
|
} else {
|
|
1033
745
|
meshCacheKeyParts.push(mesh.material.uuid);
|
|
1034
746
|
}
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
747
|
+
const meshCacheKey = meshCacheKeyParts.join(":");
|
|
748
|
+
if (cache.meshes.has(meshCacheKey))
|
|
749
|
+
return cache.meshes.get(meshCacheKey);
|
|
1038
750
|
const geometry = mesh.geometry;
|
|
1039
|
-
let mode;
|
|
1040
|
-
|
|
1041
|
-
if (mesh instanceof LineSegments && mesh.isLineSegments) {
|
|
751
|
+
let mode;
|
|
752
|
+
if (mesh instanceof THREE.LineSegments && mesh.isLineSegments) {
|
|
1042
753
|
mode = WEBGL_CONSTANTS.LINES;
|
|
1043
|
-
} else if (mesh instanceof LineLoop && mesh.isLineLoop) {
|
|
754
|
+
} else if (mesh instanceof THREE.LineLoop && mesh.isLineLoop) {
|
|
1044
755
|
mode = WEBGL_CONSTANTS.LINE_LOOP;
|
|
1045
|
-
} else if (mesh instanceof Line && mesh.isLine) {
|
|
756
|
+
} else if (mesh instanceof THREE.Line && mesh.isLine) {
|
|
1046
757
|
mode = WEBGL_CONSTANTS.LINE_STRIP;
|
|
1047
|
-
} else if (mesh instanceof Points && mesh.isPoints) {
|
|
758
|
+
} else if (mesh instanceof THREE.Points && mesh.isPoints) {
|
|
1048
759
|
mode = WEBGL_CONSTANTS.POINTS;
|
|
1049
760
|
} else {
|
|
1050
|
-
mode = (mesh.material instanceof MeshBasicMaterial || mesh.material instanceof MeshDepthMaterial || mesh.material instanceof MeshLambertMaterial || mesh.material instanceof MeshNormalMaterial || mesh.material instanceof MeshPhongMaterial || mesh.material instanceof MeshStandardMaterial || mesh.material instanceof MeshToonMaterial || mesh.material instanceof ShaderMaterial) && mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;
|
|
761
|
+
mode = (mesh.material instanceof THREE.MeshBasicMaterial || mesh.material instanceof THREE.MeshDepthMaterial || mesh.material instanceof THREE.MeshLambertMaterial || mesh.material instanceof THREE.MeshNormalMaterial || mesh.material instanceof THREE.MeshPhongMaterial || mesh.material instanceof THREE.MeshStandardMaterial || mesh.material instanceof THREE.MeshToonMaterial || mesh.material instanceof THREE.ShaderMaterial) && mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;
|
|
1051
762
|
}
|
|
1052
|
-
|
|
1053
763
|
if (!geometry.isBufferGeometry) {
|
|
1054
|
-
throw new Error(
|
|
764
|
+
throw new Error("THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.");
|
|
1055
765
|
}
|
|
1056
|
-
|
|
1057
766
|
const meshDef = {};
|
|
1058
767
|
const attributes = {};
|
|
1059
768
|
const primitives = [];
|
|
1060
|
-
const targets = [];
|
|
1061
|
-
|
|
769
|
+
const targets = [];
|
|
1062
770
|
const nameConversion = {
|
|
1063
|
-
uv:
|
|
1064
|
-
uv2:
|
|
1065
|
-
color:
|
|
1066
|
-
skinWeight:
|
|
1067
|
-
skinIndex:
|
|
771
|
+
uv: "TEXCOORD_0",
|
|
772
|
+
uv2: "TEXCOORD_1",
|
|
773
|
+
color: "COLOR_0",
|
|
774
|
+
skinWeight: "WEIGHTS_0",
|
|
775
|
+
skinIndex: "JOINTS_0"
|
|
1068
776
|
};
|
|
1069
|
-
const originalNormal = geometry.getAttribute(
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
} // @QUESTION Detect if .vertexColors = true?
|
|
1075
|
-
// For every attribute create an accessor
|
|
1076
|
-
|
|
1077
|
-
|
|
777
|
+
const originalNormal = geometry.getAttribute("normal");
|
|
778
|
+
if (originalNormal !== void 0 && !(originalNormal instanceof THREE.InterleavedBufferAttribute) && !this.isNormalizedNormalAttribute(originalNormal)) {
|
|
779
|
+
console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.");
|
|
780
|
+
geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal));
|
|
781
|
+
}
|
|
1078
782
|
let modifiedAttribute = null;
|
|
1079
|
-
|
|
1080
783
|
for (let attributeName in geometry.attributes) {
|
|
1081
|
-
|
|
1082
|
-
|
|
784
|
+
if (attributeName.substr(0, 5) === "morph")
|
|
785
|
+
continue;
|
|
1083
786
|
const attribute = geometry.attributes[attributeName];
|
|
1084
|
-
attributeName = nameConversion[attributeName] || attributeName.toUpperCase();
|
|
1085
|
-
// listed in the spec; non-spec attributes are considered custom.
|
|
1086
|
-
|
|
787
|
+
attributeName = nameConversion[attributeName] || attributeName.toUpperCase();
|
|
1087
788
|
const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/;
|
|
1088
|
-
if (!validVertexAttributes.test(attributeName))
|
|
1089
|
-
|
|
789
|
+
if (!validVertexAttributes.test(attributeName))
|
|
790
|
+
attributeName = "_" + attributeName;
|
|
1090
791
|
if (cache.attributes.has(this.getUID(attribute))) {
|
|
1091
792
|
attributes[attributeName] = cache.attributes.get(this.getUID(attribute));
|
|
1092
793
|
continue;
|
|
1093
|
-
}
|
|
1094
|
-
|
|
1095
|
-
|
|
794
|
+
}
|
|
1096
795
|
modifiedAttribute = null;
|
|
1097
796
|
const array = attribute.array;
|
|
1098
|
-
|
|
1099
|
-
if (attributeName === 'JOINTS_0' && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {
|
|
797
|
+
if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {
|
|
1100
798
|
console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.');
|
|
1101
|
-
modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);
|
|
799
|
+
modifiedAttribute = new THREE.BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);
|
|
1102
800
|
}
|
|
1103
|
-
|
|
1104
801
|
const accessor = modifiedAttribute !== null && this.processAccessor(modifiedAttribute || attribute, geometry);
|
|
1105
|
-
|
|
1106
802
|
if (accessor) {
|
|
1107
803
|
attributes[attributeName] = accessor;
|
|
1108
804
|
cache.attributes.set(this.getUID(attribute), accessor);
|
|
1109
805
|
}
|
|
1110
806
|
}
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
if (mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0) {
|
|
807
|
+
if (originalNormal !== void 0)
|
|
808
|
+
geometry.setAttribute("normal", originalNormal);
|
|
809
|
+
if (Object.keys(attributes).length === 0)
|
|
810
|
+
return null;
|
|
811
|
+
if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) {
|
|
1117
812
|
const weights = [];
|
|
1118
813
|
const targetNames = [];
|
|
1119
814
|
const reverseDictionary = {};
|
|
1120
|
-
|
|
1121
|
-
if (mesh.morphTargetDictionary !== undefined) {
|
|
815
|
+
if (mesh.morphTargetDictionary !== void 0) {
|
|
1122
816
|
for (const key in mesh.morphTargetDictionary) {
|
|
1123
817
|
reverseDictionary[mesh.morphTargetDictionary[key]] = key;
|
|
1124
818
|
}
|
|
1125
819
|
}
|
|
1126
|
-
|
|
1127
820
|
for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) {
|
|
1128
821
|
const target = {};
|
|
1129
822
|
let warned = false;
|
|
1130
|
-
|
|
1131
823
|
for (const attributeName in geometry.morphAttributes) {
|
|
1132
|
-
|
|
1133
|
-
// Three.js doesn't support TANGENT yet.
|
|
1134
|
-
if (attributeName !== 'position' && attributeName !== 'normal') {
|
|
824
|
+
if (attributeName !== "position" && attributeName !== "normal") {
|
|
1135
825
|
if (!warned) {
|
|
1136
|
-
console.warn(
|
|
826
|
+
console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported.");
|
|
1137
827
|
warned = true;
|
|
1138
828
|
}
|
|
1139
|
-
|
|
1140
829
|
continue;
|
|
1141
830
|
}
|
|
1142
|
-
|
|
1143
831
|
const attribute = geometry.morphAttributes[attributeName][i];
|
|
1144
|
-
const gltfAttributeName = attributeName.toUpperCase();
|
|
1145
|
-
//
|
|
1146
|
-
// glTF 2.0 Specification:
|
|
1147
|
-
// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets
|
|
1148
|
-
|
|
832
|
+
const gltfAttributeName = attributeName.toUpperCase();
|
|
1149
833
|
const baseAttribute = geometry.attributes[attributeName];
|
|
1150
|
-
|
|
1151
834
|
if (cache.attributes.has(this.getUID(attribute))) {
|
|
1152
835
|
target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute));
|
|
1153
836
|
continue;
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
|
|
837
|
+
}
|
|
1157
838
|
const relativeAttribute = attribute.clone();
|
|
1158
|
-
|
|
1159
839
|
if (!geometry.morphTargetsRelative) {
|
|
1160
840
|
for (let j = 0, jl = attribute.count; j < jl; j++) {
|
|
1161
|
-
relativeAttribute.setXYZ(
|
|
841
|
+
relativeAttribute.setXYZ(
|
|
842
|
+
j,
|
|
843
|
+
attribute.getX(j) - baseAttribute.getX(j),
|
|
844
|
+
attribute.getY(j) - baseAttribute.getY(j),
|
|
845
|
+
attribute.getZ(j) - baseAttribute.getZ(j)
|
|
846
|
+
);
|
|
1162
847
|
}
|
|
1163
848
|
}
|
|
1164
|
-
|
|
1165
849
|
const accessor = this.processAccessor(relativeAttribute, geometry);
|
|
1166
|
-
|
|
1167
|
-
if (accessor != undefined) {
|
|
850
|
+
if (accessor != void 0) {
|
|
1168
851
|
target[gltfAttributeName] = accessor;
|
|
1169
852
|
}
|
|
1170
|
-
|
|
1171
853
|
cache.attributes.set(this.getUID(baseAttribute), target[gltfAttributeName]);
|
|
1172
854
|
}
|
|
1173
|
-
|
|
1174
855
|
targets.push(target);
|
|
1175
856
|
weights.push(mesh.morphTargetInfluences[i]);
|
|
1176
|
-
if (mesh.morphTargetDictionary !==
|
|
857
|
+
if (mesh.morphTargetDictionary !== void 0)
|
|
858
|
+
targetNames.push(reverseDictionary[i]);
|
|
1177
859
|
}
|
|
1178
|
-
|
|
1179
860
|
meshDef.weights = weights;
|
|
1180
|
-
|
|
1181
861
|
if (targetNames.length > 0) {
|
|
1182
862
|
meshDef.extras = {};
|
|
1183
863
|
meshDef.extras.targetNames = targetNames;
|
|
1184
864
|
}
|
|
1185
865
|
}
|
|
1186
|
-
|
|
1187
866
|
const isMultiMaterial = Array.isArray(mesh.material);
|
|
1188
|
-
if (isMultiMaterial && geometry.groups.length === 0)
|
|
867
|
+
if (isMultiMaterial && geometry.groups.length === 0)
|
|
868
|
+
return null;
|
|
1189
869
|
const materials = isMultiMaterial ? mesh.material : [mesh.material];
|
|
1190
|
-
const groups = isMultiMaterial ? geometry.groups : [{
|
|
1191
|
-
materialIndex: 0,
|
|
1192
|
-
start: undefined,
|
|
1193
|
-
count: undefined
|
|
1194
|
-
}];
|
|
1195
|
-
|
|
870
|
+
const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }];
|
|
1196
871
|
for (let i = 0, il = groups.length; i < il; i++) {
|
|
1197
872
|
const primitive = {
|
|
1198
|
-
mode
|
|
1199
|
-
attributes
|
|
873
|
+
mode,
|
|
874
|
+
attributes
|
|
1200
875
|
};
|
|
1201
|
-
|
|
1202
|
-
if (geometry instanceof Object3D || geometry instanceof Material) {
|
|
876
|
+
if (geometry instanceof THREE.Object3D || geometry instanceof THREE.Material) {
|
|
1203
877
|
this.serializeUserData(geometry, primitive);
|
|
1204
878
|
}
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
879
|
+
if (targets.length > 0)
|
|
880
|
+
primitive.targets = targets;
|
|
1208
881
|
if (geometry.index !== null) {
|
|
1209
882
|
let cacheKey = this.getUID(geometry.index);
|
|
1210
|
-
|
|
1211
|
-
if (groups[i].start !== undefined || groups[i].count !== undefined) {
|
|
1212
|
-
// @ts-expect-error
|
|
883
|
+
if (groups[i].start !== void 0 || groups[i].count !== void 0) {
|
|
1213
884
|
cacheKey += `:${groups[i].start}:${groups[i].count}`;
|
|
1214
885
|
}
|
|
1215
|
-
|
|
1216
886
|
if (cache.attributes.has(cacheKey)) {
|
|
1217
887
|
primitive.indices = cache.attributes.get(cacheKey);
|
|
1218
888
|
} else {
|
|
1219
889
|
primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count);
|
|
1220
890
|
cache.attributes.set(cacheKey, primitive.indices);
|
|
1221
891
|
}
|
|
1222
|
-
|
|
1223
|
-
|
|
892
|
+
if (primitive.indices === null)
|
|
893
|
+
delete primitive.indices;
|
|
1224
894
|
}
|
|
1225
|
-
|
|
1226
895
|
const materialIndex = groups[i].materialIndex;
|
|
1227
|
-
|
|
1228
|
-
if (materialIndex !== undefined && Array.isArray(materials)) {
|
|
896
|
+
if (materialIndex !== void 0 && Array.isArray(materials)) {
|
|
1229
897
|
const targetMaterials = materials[materialIndex];
|
|
1230
|
-
|
|
1231
898
|
if (!Array.isArray(targetMaterials)) {
|
|
1232
899
|
const material = this.processMaterial(targetMaterials);
|
|
1233
|
-
if (material !== null)
|
|
900
|
+
if (material !== null)
|
|
901
|
+
primitive.material = material;
|
|
1234
902
|
primitives.push(primitive);
|
|
1235
903
|
}
|
|
1236
904
|
}
|
|
1237
905
|
}
|
|
1238
|
-
|
|
1239
906
|
meshDef.primitives = primitives;
|
|
1240
|
-
if (!json.meshes)
|
|
1241
|
-
|
|
1242
|
-
this._invokeAll(function
|
|
907
|
+
if (!json.meshes)
|
|
908
|
+
json.meshes = [];
|
|
909
|
+
this._invokeAll(function(ext) {
|
|
1243
910
|
ext.writeMesh && ext.writeMesh(mesh, meshDef);
|
|
1244
911
|
});
|
|
1245
|
-
|
|
1246
912
|
const index = json.meshes.push(meshDef) - 1;
|
|
1247
913
|
cache.meshes.set(meshCacheKey, index);
|
|
1248
914
|
return index;
|
|
1249
915
|
}
|
|
1250
|
-
/**
|
|
1251
|
-
* Process camera
|
|
1252
|
-
* @param {THREE.Camera} camera Camera to process
|
|
1253
|
-
* @return {Integer} Index of the processed mesh in the "camera" array
|
|
1254
|
-
*/
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
916
|
processCamera(camera) {
|
|
1258
917
|
const json = this.json;
|
|
1259
|
-
if (!json.cameras)
|
|
1260
|
-
|
|
918
|
+
if (!json.cameras)
|
|
919
|
+
json.cameras = [];
|
|
920
|
+
const isOrtho = camera instanceof THREE.OrthographicCamera && camera.isOrthographicCamera;
|
|
1261
921
|
const cameraDef = {
|
|
1262
|
-
type: isOrtho ?
|
|
922
|
+
type: isOrtho ? "orthographic" : "perspective"
|
|
1263
923
|
};
|
|
1264
|
-
|
|
1265
|
-
if (camera instanceof OrthographicCamera && isOrtho) {
|
|
924
|
+
if (camera instanceof THREE.OrthographicCamera && isOrtho) {
|
|
1266
925
|
cameraDef.orthographic = {
|
|
1267
926
|
xmag: camera.right * 2,
|
|
1268
927
|
ymag: camera.top * 2,
|
|
1269
|
-
zfar: camera.far <= 0 ?
|
|
928
|
+
zfar: camera.far <= 0 ? 1e-3 : camera.far,
|
|
1270
929
|
znear: camera.near < 0 ? 0 : camera.near
|
|
1271
930
|
};
|
|
1272
|
-
} else if (camera instanceof PerspectiveCamera) {
|
|
931
|
+
} else if (camera instanceof THREE.PerspectiveCamera) {
|
|
1273
932
|
cameraDef.perspective = {
|
|
1274
933
|
aspectRatio: camera.aspect,
|
|
1275
|
-
yfov: MathUtils.degToRad(camera.fov),
|
|
1276
|
-
zfar: camera.far <= 0 ?
|
|
934
|
+
yfov: THREE.MathUtils.degToRad(camera.fov),
|
|
935
|
+
zfar: camera.far <= 0 ? 1e-3 : camera.far,
|
|
1277
936
|
znear: camera.near < 0 ? 0 : camera.near
|
|
1278
937
|
};
|
|
1279
|
-
}
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
if (camera.name !== '') cameraDef.name = camera.type;
|
|
938
|
+
}
|
|
939
|
+
if (camera.name !== "")
|
|
940
|
+
cameraDef.name = camera.type;
|
|
1283
941
|
return json.cameras.push(cameraDef) - 1;
|
|
1284
942
|
}
|
|
1285
|
-
/**
|
|
1286
|
-
* Creates glTF animation entry from AnimationClip object.
|
|
1287
|
-
*
|
|
1288
|
-
* Status:
|
|
1289
|
-
* - Only properties listed in PATH_PROPERTIES may be animated.
|
|
1290
|
-
*
|
|
1291
|
-
* @param {THREE.AnimationClip} clip
|
|
1292
|
-
* @param {THREE.Object3D} root
|
|
1293
|
-
* @return {number|null}
|
|
1294
|
-
*/
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
943
|
processAnimation(clip, root) {
|
|
1298
944
|
const json = this.json;
|
|
1299
945
|
const nodeMap = this.nodeMap;
|
|
1300
|
-
if (!json.animations)
|
|
946
|
+
if (!json.animations)
|
|
947
|
+
json.animations = [];
|
|
1301
948
|
clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root);
|
|
1302
949
|
const tracks = clip.tracks;
|
|
1303
950
|
const channels = [];
|
|
1304
951
|
const samplers = [];
|
|
1305
|
-
|
|
1306
952
|
for (let i = 0; i < tracks.length; ++i) {
|
|
1307
953
|
const track = tracks[i];
|
|
1308
|
-
const trackBinding = PropertyBinding.parseTrackName(track.name);
|
|
1309
|
-
let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName);
|
|
954
|
+
const trackBinding = THREE.PropertyBinding.parseTrackName(track.name);
|
|
955
|
+
let trackNode = THREE.PropertyBinding.findNode(root, trackBinding.nodeName);
|
|
1310
956
|
const trackProperty = PATH_PROPERTIES[trackBinding.propertyName];
|
|
1311
|
-
|
|
1312
|
-
if (trackBinding.objectName === 'bones') {
|
|
957
|
+
if (trackBinding.objectName === "bones") {
|
|
1313
958
|
if (trackNode.isSkinnedMesh) {
|
|
1314
959
|
trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex);
|
|
1315
960
|
} else {
|
|
1316
|
-
trackNode =
|
|
961
|
+
trackNode = void 0;
|
|
1317
962
|
}
|
|
1318
963
|
}
|
|
1319
|
-
|
|
1320
964
|
if (!trackNode || !trackProperty) {
|
|
1321
965
|
console.warn('THREE.GLTFExporter: Could not export animation track "%s".', track.name);
|
|
1322
966
|
return null;
|
|
1323
967
|
}
|
|
1324
|
-
|
|
1325
968
|
const inputItemSize = 1;
|
|
1326
969
|
let outputItemSize = track.values.length / track.times.length;
|
|
1327
|
-
|
|
1328
970
|
if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) {
|
|
1329
971
|
outputItemSize /= trackNode.morphTargetInfluences.length;
|
|
1330
972
|
}
|
|
1331
|
-
|
|
1332
|
-
let interpolation; // @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE
|
|
1333
|
-
// Detecting glTF cubic spline interpolant by checking factory method's special property
|
|
1334
|
-
// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return
|
|
1335
|
-
// valid value from .getInterpolation().
|
|
1336
|
-
// @ts-expect-error
|
|
1337
|
-
|
|
973
|
+
let interpolation;
|
|
1338
974
|
if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {
|
|
1339
|
-
interpolation =
|
|
1340
|
-
// (VEC3 * 3: inTangent, splineVertex, and outTangent)
|
|
1341
|
-
// but needs to be stored as VEC3 so dividing by 3 here.
|
|
1342
|
-
|
|
975
|
+
interpolation = "CUBICSPLINE";
|
|
1343
976
|
outputItemSize /= 3;
|
|
1344
|
-
} else if (track.getInterpolation() === InterpolateDiscrete) {
|
|
1345
|
-
interpolation =
|
|
977
|
+
} else if (track.getInterpolation() === THREE.InterpolateDiscrete) {
|
|
978
|
+
interpolation = "STEP";
|
|
1346
979
|
} else {
|
|
1347
|
-
interpolation =
|
|
980
|
+
interpolation = "LINEAR";
|
|
1348
981
|
}
|
|
1349
|
-
|
|
1350
982
|
samplers.push({
|
|
1351
|
-
input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)),
|
|
1352
|
-
output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)),
|
|
1353
|
-
interpolation
|
|
983
|
+
input: this.processAccessor(new THREE.BufferAttribute(track.times, inputItemSize)),
|
|
984
|
+
output: this.processAccessor(new THREE.BufferAttribute(track.values, outputItemSize)),
|
|
985
|
+
interpolation
|
|
1354
986
|
});
|
|
1355
987
|
channels.push({
|
|
1356
988
|
sampler: samplers.length - 1,
|
|
@@ -1360,44 +992,37 @@ class GLTFWriter {
|
|
|
1360
992
|
}
|
|
1361
993
|
});
|
|
1362
994
|
}
|
|
1363
|
-
|
|
1364
995
|
json.animations.push({
|
|
1365
|
-
name: clip.name ||
|
|
1366
|
-
samplers
|
|
1367
|
-
channels
|
|
996
|
+
name: clip.name || "clip_" + json.animations.length,
|
|
997
|
+
samplers,
|
|
998
|
+
channels
|
|
1368
999
|
});
|
|
1369
1000
|
return json.animations.length - 1;
|
|
1370
1001
|
}
|
|
1371
|
-
/**
|
|
1372
|
-
* @param {THREE.Object3D} object
|
|
1373
|
-
* @return {number|null}
|
|
1374
|
-
*/
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
1002
|
processSkin(object) {
|
|
1378
1003
|
const json = this.json;
|
|
1379
1004
|
const nodeMap = this.nodeMap;
|
|
1380
|
-
|
|
1381
|
-
if (json.nodes !== undefined && object instanceof SkinnedMesh) {
|
|
1005
|
+
if (json.nodes !== void 0 && object instanceof THREE.SkinnedMesh) {
|
|
1382
1006
|
const node = json.nodes[nodeMap.get(object)];
|
|
1383
1007
|
const skeleton = object.skeleton;
|
|
1384
|
-
if (skeleton ===
|
|
1008
|
+
if (skeleton === void 0)
|
|
1009
|
+
return null;
|
|
1385
1010
|
const rootJoint = object.skeleton.bones[0];
|
|
1386
|
-
if (rootJoint ===
|
|
1011
|
+
if (rootJoint === void 0)
|
|
1012
|
+
return null;
|
|
1387
1013
|
const joints = [];
|
|
1388
1014
|
const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16);
|
|
1389
|
-
const temporaryBoneInverse = new Matrix4();
|
|
1390
|
-
|
|
1015
|
+
const temporaryBoneInverse = new THREE.Matrix4();
|
|
1391
1016
|
for (let i = 0; i < skeleton.bones.length; ++i) {
|
|
1392
1017
|
joints.push(nodeMap.get(skeleton.bones[i]));
|
|
1393
1018
|
temporaryBoneInverse.copy(skeleton.boneInverses[i]);
|
|
1394
1019
|
temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16);
|
|
1395
1020
|
}
|
|
1396
|
-
|
|
1397
|
-
|
|
1021
|
+
if (json.skins === void 0)
|
|
1022
|
+
json.skins = [];
|
|
1398
1023
|
json.skins.push({
|
|
1399
|
-
inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)),
|
|
1400
|
-
joints
|
|
1024
|
+
inverseBindMatrices: this.processAccessor(new THREE.BufferAttribute(inverseBindMatrices, 16)),
|
|
1025
|
+
joints,
|
|
1401
1026
|
skeleton: nodeMap.get(rootJoint)
|
|
1402
1027
|
});
|
|
1403
1028
|
const skinIndex = node.skin = json.skins.length - 1;
|
|
@@ -1406,33 +1031,23 @@ class GLTFWriter {
|
|
|
1406
1031
|
return null;
|
|
1407
1032
|
}
|
|
1408
1033
|
}
|
|
1409
|
-
/**
|
|
1410
|
-
* Process Object3D node
|
|
1411
|
-
* @param {THREE.Object3D} node Object3D to processNode
|
|
1412
|
-
* @return {Integer} Index of the node in the nodes list
|
|
1413
|
-
*/
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
1034
|
processNode(object) {
|
|
1417
1035
|
const json = this.json;
|
|
1418
1036
|
const options = this.options;
|
|
1419
1037
|
const nodeMap = this.nodeMap;
|
|
1420
|
-
if (!json.nodes)
|
|
1038
|
+
if (!json.nodes)
|
|
1039
|
+
json.nodes = [];
|
|
1421
1040
|
const nodeDef = {};
|
|
1422
|
-
|
|
1423
1041
|
if (options.trs) {
|
|
1424
1042
|
const rotation = object.quaternion.toArray();
|
|
1425
1043
|
const position = object.position.toArray();
|
|
1426
1044
|
const scale = object.scale.toArray();
|
|
1427
|
-
|
|
1428
1045
|
if (!this.equalArray(rotation, [0, 0, 0, 1])) {
|
|
1429
1046
|
nodeDef.rotation = rotation;
|
|
1430
1047
|
}
|
|
1431
|
-
|
|
1432
1048
|
if (!this.equalArray(position, [0, 0, 0])) {
|
|
1433
1049
|
nodeDef.translation = position;
|
|
1434
1050
|
}
|
|
1435
|
-
|
|
1436
1051
|
if (!this.equalArray(scale, [1, 1, 1])) {
|
|
1437
1052
|
nodeDef.scale = scale;
|
|
1438
1053
|
}
|
|
@@ -1440,477 +1055,315 @@ class GLTFWriter {
|
|
|
1440
1055
|
if (object.matrixAutoUpdate) {
|
|
1441
1056
|
object.updateMatrix();
|
|
1442
1057
|
}
|
|
1443
|
-
|
|
1444
1058
|
if (!this.isIdentityMatrix(object.matrix)) {
|
|
1445
1059
|
nodeDef.matrix = object.matrix.elements;
|
|
1446
1060
|
}
|
|
1447
|
-
}
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
if (object.name !== '') nodeDef.name = String(object.name);
|
|
1061
|
+
}
|
|
1062
|
+
if (object.name !== "")
|
|
1063
|
+
nodeDef.name = String(object.name);
|
|
1451
1064
|
this.serializeUserData(object, nodeDef);
|
|
1452
|
-
|
|
1453
|
-
if ((object instanceof Mesh && object.isMesh || object instanceof Line && object.isLine || object instanceof Points && object.isPoints) && object instanceof Mesh) {
|
|
1065
|
+
if ((object instanceof THREE.Mesh && object.isMesh || object instanceof THREE.Line && object.isLine || object instanceof THREE.Points && object.isPoints) && object instanceof THREE.Mesh) {
|
|
1454
1066
|
const meshIndex = this.processMesh(object);
|
|
1455
|
-
if (meshIndex !== null)
|
|
1456
|
-
|
|
1067
|
+
if (meshIndex !== null)
|
|
1068
|
+
nodeDef.mesh = meshIndex;
|
|
1069
|
+
} else if (object instanceof THREE.Camera && object.isCamera) {
|
|
1457
1070
|
nodeDef.camera = this.processCamera(object);
|
|
1458
1071
|
}
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1072
|
+
if (object instanceof THREE.SkinnedMesh && object.isSkinnedMesh)
|
|
1073
|
+
this.skins.push(object);
|
|
1462
1074
|
if (object.children.length > 0) {
|
|
1463
1075
|
const children = [];
|
|
1464
|
-
|
|
1465
1076
|
for (let i = 0, l = object.children.length; i < l; i++) {
|
|
1466
1077
|
const child = object.children[i];
|
|
1467
|
-
|
|
1468
1078
|
if (child.visible || !options.onlyVisible) {
|
|
1469
|
-
const
|
|
1470
|
-
if (
|
|
1079
|
+
const nodeIndex2 = this.processNode(child);
|
|
1080
|
+
if (nodeIndex2 !== null)
|
|
1081
|
+
children.push(nodeIndex2);
|
|
1471
1082
|
}
|
|
1472
1083
|
}
|
|
1473
|
-
|
|
1474
|
-
|
|
1084
|
+
if (children.length > 0)
|
|
1085
|
+
nodeDef.children = children;
|
|
1475
1086
|
}
|
|
1476
|
-
|
|
1477
|
-
this._invokeAll(function (ext) {
|
|
1087
|
+
this._invokeAll(function(ext) {
|
|
1478
1088
|
ext.writeNode && ext.writeNode(object, nodeDef);
|
|
1479
1089
|
});
|
|
1480
|
-
|
|
1481
1090
|
const nodeIndex = json.nodes.push(nodeDef) - 1;
|
|
1482
1091
|
nodeMap.set(object, nodeIndex);
|
|
1483
1092
|
return nodeIndex;
|
|
1484
1093
|
}
|
|
1485
|
-
/**
|
|
1486
|
-
* Process Scene
|
|
1487
|
-
* @param {Scene} node Scene to process
|
|
1488
|
-
*/
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
1094
|
processScene(scene) {
|
|
1492
1095
|
const json = this.json;
|
|
1493
1096
|
const options = this.options;
|
|
1494
|
-
|
|
1495
1097
|
if (!json.scenes) {
|
|
1496
1098
|
json.scenes = [];
|
|
1497
1099
|
json.scene = 0;
|
|
1498
1100
|
}
|
|
1499
|
-
|
|
1500
1101
|
const sceneDef = {};
|
|
1501
|
-
if (scene.name !==
|
|
1102
|
+
if (scene.name !== "")
|
|
1103
|
+
sceneDef.name = scene.name;
|
|
1502
1104
|
json.scenes.push(sceneDef);
|
|
1503
1105
|
const nodes = [];
|
|
1504
|
-
|
|
1505
1106
|
for (let i = 0, l = scene.children.length; i < l; i++) {
|
|
1506
1107
|
const child = scene.children[i];
|
|
1507
|
-
|
|
1508
1108
|
if (child.visible || !options.onlyVisible) {
|
|
1509
1109
|
const nodeIndex = this.processNode(child);
|
|
1510
|
-
if (nodeIndex !== null)
|
|
1110
|
+
if (nodeIndex !== null)
|
|
1111
|
+
nodes.push(nodeIndex);
|
|
1511
1112
|
}
|
|
1512
1113
|
}
|
|
1513
|
-
|
|
1514
|
-
|
|
1114
|
+
if (nodes.length > 0)
|
|
1115
|
+
sceneDef.nodes = nodes;
|
|
1515
1116
|
this.serializeUserData(scene, sceneDef);
|
|
1516
1117
|
}
|
|
1517
|
-
|
|
1518
1118
|
processObjects(objects) {
|
|
1519
|
-
const scene = new Scene();
|
|
1520
|
-
scene.name =
|
|
1521
|
-
|
|
1119
|
+
const scene = new THREE.Scene();
|
|
1120
|
+
scene.name = "AuxScene";
|
|
1522
1121
|
for (let i = 0; i < objects.length; i++) {
|
|
1523
|
-
// We push directly to children instead of calling `add` to prevent
|
|
1524
|
-
// modify the .parent and break its original scene and hierarchy
|
|
1525
1122
|
scene.children.push(objects[i]);
|
|
1526
1123
|
}
|
|
1527
|
-
|
|
1528
1124
|
this.processScene(scene);
|
|
1529
1125
|
}
|
|
1530
|
-
/**
|
|
1531
|
-
* @param {THREE.Object3D|Array<THREE.Object3D>} input
|
|
1532
|
-
*/
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
1126
|
processInput(input) {
|
|
1536
1127
|
const options = this.options;
|
|
1537
1128
|
input = input instanceof Array ? input : [input];
|
|
1538
|
-
|
|
1539
|
-
this._invokeAll(function (ext) {
|
|
1129
|
+
this._invokeAll(function(ext) {
|
|
1540
1130
|
ext.beforeParse && ext.beforeParse(input);
|
|
1541
1131
|
});
|
|
1542
|
-
|
|
1543
1132
|
const objectsWithoutScene = [];
|
|
1544
|
-
|
|
1545
1133
|
for (let i = 0; i < input.length; i++) {
|
|
1546
1134
|
const inputScene = input[i];
|
|
1547
|
-
|
|
1548
|
-
if (inputScene instanceof Scene) {
|
|
1135
|
+
if (inputScene instanceof THREE.Scene) {
|
|
1549
1136
|
this.processScene(inputScene);
|
|
1550
1137
|
} else {
|
|
1551
1138
|
objectsWithoutScene.push(input[i]);
|
|
1552
1139
|
}
|
|
1553
1140
|
}
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1141
|
+
if (objectsWithoutScene.length > 0)
|
|
1142
|
+
this.processObjects(objectsWithoutScene);
|
|
1557
1143
|
for (let i = 0; i < this.skins.length; ++i) {
|
|
1558
1144
|
this.processSkin(this.skins[i]);
|
|
1559
1145
|
}
|
|
1560
|
-
|
|
1561
|
-
for (let i = 0; options.animations !== undefined && i < options.animations.length; ++i) {
|
|
1146
|
+
for (let i = 0; options.animations !== void 0 && i < options.animations.length; ++i) {
|
|
1562
1147
|
this.processAnimation(options.animations[i], input[0]);
|
|
1563
1148
|
}
|
|
1564
|
-
|
|
1565
|
-
this._invokeAll(function (ext) {
|
|
1149
|
+
this._invokeAll(function(ext) {
|
|
1566
1150
|
ext.afterParse && ext.afterParse(input);
|
|
1567
1151
|
});
|
|
1568
1152
|
}
|
|
1569
|
-
|
|
1570
1153
|
_invokeAll(func) {
|
|
1571
1154
|
for (let i = 0, il = this.plugins.length; i < il; i++) {
|
|
1572
1155
|
func(this.plugins[i]);
|
|
1573
1156
|
}
|
|
1574
|
-
}
|
|
1575
|
-
// Utility functions
|
|
1576
|
-
//------------------------------------------------------------------------------
|
|
1577
|
-
|
|
1578
|
-
/**
|
|
1579
|
-
* Compare two arrays
|
|
1580
|
-
* @param {Array} array1 Array 1 to compare
|
|
1581
|
-
* @param {Array} array2 Array 2 to compare
|
|
1582
|
-
* @return {Boolean} Returns true if both arrays are equal
|
|
1583
|
-
*/
|
|
1584
|
-
|
|
1585
|
-
|
|
1157
|
+
}
|
|
1586
1158
|
equalArray(array1, array2) {
|
|
1587
|
-
return array1.length === array2.length && array1.every(function
|
|
1159
|
+
return array1.length === array2.length && array1.every(function(element, index) {
|
|
1588
1160
|
return element === array2[index];
|
|
1589
1161
|
});
|
|
1590
1162
|
}
|
|
1591
|
-
/**
|
|
1592
|
-
* Converts a string to an ArrayBuffer.
|
|
1593
|
-
* @param {string} text
|
|
1594
|
-
* @return {ArrayBuffer}
|
|
1595
|
-
*/
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
1163
|
stringToArrayBuffer(text) {
|
|
1599
|
-
if (window.TextEncoder !==
|
|
1164
|
+
if (window.TextEncoder !== void 0) {
|
|
1600
1165
|
return new TextEncoder().encode(text).buffer;
|
|
1601
1166
|
}
|
|
1602
|
-
|
|
1603
1167
|
const array = new Uint8Array(new ArrayBuffer(text.length));
|
|
1604
|
-
|
|
1605
1168
|
for (let i = 0, il = text.length; i < il; i++) {
|
|
1606
|
-
const value = text.charCodeAt(i);
|
|
1607
|
-
|
|
1608
|
-
array[i] = value > 0xff ? 0x20 : value;
|
|
1169
|
+
const value = text.charCodeAt(i);
|
|
1170
|
+
array[i] = value > 255 ? 32 : value;
|
|
1609
1171
|
}
|
|
1610
|
-
|
|
1611
1172
|
return array.buffer;
|
|
1612
1173
|
}
|
|
1613
|
-
|
|
1614
1174
|
isIdentityMatrix(matrix) {
|
|
1615
1175
|
return this.equalArray(matrix.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
|
1616
1176
|
}
|
|
1617
|
-
|
|
1618
1177
|
getMinMax(attribute, start, count) {
|
|
1619
1178
|
const output = {
|
|
1620
1179
|
min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY),
|
|
1621
1180
|
max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY)
|
|
1622
1181
|
};
|
|
1623
|
-
|
|
1624
1182
|
for (let i = start; i < start + count; i++) {
|
|
1625
1183
|
for (let a = 0; a < attribute.itemSize; a++) {
|
|
1626
1184
|
let value;
|
|
1627
|
-
|
|
1628
1185
|
if (attribute.itemSize > 4) {
|
|
1629
|
-
// no support for interleaved data for itemSize > 4
|
|
1630
1186
|
value = attribute.array[i * attribute.itemSize + a];
|
|
1631
1187
|
} else {
|
|
1632
|
-
if (a === 0)
|
|
1188
|
+
if (a === 0)
|
|
1189
|
+
value = attribute.getX(i);
|
|
1190
|
+
else if (a === 1)
|
|
1191
|
+
value = attribute.getY(i);
|
|
1192
|
+
else if (a === 2)
|
|
1193
|
+
value = attribute.getZ(i);
|
|
1194
|
+
else if (a === 3)
|
|
1195
|
+
value = attribute.getW(i);
|
|
1633
1196
|
}
|
|
1634
|
-
|
|
1635
|
-
if (value !== undefined) {
|
|
1197
|
+
if (value !== void 0) {
|
|
1636
1198
|
output.min[a] = Math.min(output.min[a], value);
|
|
1637
1199
|
output.max[a] = Math.max(output.max[a], value);
|
|
1638
1200
|
}
|
|
1639
1201
|
}
|
|
1640
1202
|
}
|
|
1641
|
-
|
|
1642
1203
|
return output;
|
|
1643
1204
|
}
|
|
1644
|
-
/**
|
|
1645
|
-
* Get the required size + padding for a buffer, rounded to the next 4-byte boundary.
|
|
1646
|
-
* https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment
|
|
1647
|
-
*/
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
1205
|
getPaddedBufferSize(bufferSize) {
|
|
1651
1206
|
return Math.ceil(bufferSize / 4) * 4;
|
|
1652
1207
|
}
|
|
1653
|
-
/**
|
|
1654
|
-
* Returns a buffer aligned to 4-byte boundary.
|
|
1655
|
-
*
|
|
1656
|
-
* @param {ArrayBuffer} arrayBuffer Buffer to pad
|
|
1657
|
-
* @param {Integer} paddingByte (Optional)
|
|
1658
|
-
* @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer
|
|
1659
|
-
*/
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
1208
|
getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) {
|
|
1663
1209
|
const paddedLength = this.getPaddedBufferSize(arrayBuffer.byteLength);
|
|
1664
|
-
|
|
1665
1210
|
if (paddedLength !== arrayBuffer.byteLength) {
|
|
1666
1211
|
const array = new Uint8Array(paddedLength);
|
|
1667
1212
|
array.set(new Uint8Array(arrayBuffer));
|
|
1668
|
-
|
|
1669
1213
|
if (paddingByte !== 0) {
|
|
1670
1214
|
for (let i = arrayBuffer.byteLength; i < paddedLength; i++) {
|
|
1671
1215
|
array[i] = paddingByte;
|
|
1672
1216
|
}
|
|
1673
1217
|
}
|
|
1674
|
-
|
|
1675
1218
|
return array.buffer;
|
|
1676
1219
|
}
|
|
1677
|
-
|
|
1678
1220
|
return arrayBuffer;
|
|
1679
1221
|
}
|
|
1680
|
-
|
|
1681
1222
|
}
|
|
1682
|
-
/**
|
|
1683
|
-
* Punctual Lights Extension
|
|
1684
|
-
*
|
|
1685
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual
|
|
1686
|
-
*/
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
1223
|
class GLTFLightExtension {
|
|
1690
1224
|
constructor(writer) {
|
|
1691
|
-
_defineProperty(this, "writer", void 0);
|
|
1692
|
-
|
|
1693
|
-
_defineProperty(this, "name", void 0);
|
|
1694
|
-
|
|
1695
1225
|
this.writer = writer;
|
|
1696
|
-
this.name =
|
|
1226
|
+
this.name = "KHR_lights_punctual";
|
|
1697
1227
|
}
|
|
1698
|
-
|
|
1699
1228
|
writeNode(light, nodeDef) {
|
|
1700
|
-
if (!light.isLight)
|
|
1701
|
-
|
|
1702
|
-
if (!(light instanceof DirectionalLight && light.isDirectionalLight) &&
|
|
1703
|
-
|
|
1704
|
-
console.warn('THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light);
|
|
1229
|
+
if (!light.isLight)
|
|
1230
|
+
return;
|
|
1231
|
+
if (!(light instanceof THREE.DirectionalLight && light.isDirectionalLight) && !(light instanceof THREE.PointLight && light.isPointLight) && !(light instanceof THREE.SpotLight && light.isSpotLight)) {
|
|
1232
|
+
console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light);
|
|
1705
1233
|
return;
|
|
1706
1234
|
}
|
|
1707
|
-
|
|
1708
1235
|
const writer = this.writer;
|
|
1709
1236
|
const json = writer.json;
|
|
1710
1237
|
const extensionsUsed = writer.extensionsUsed;
|
|
1711
1238
|
const lightDef = {};
|
|
1712
|
-
if (light.name)
|
|
1239
|
+
if (light.name)
|
|
1240
|
+
lightDef.name = light.name;
|
|
1713
1241
|
lightDef.color = light.color.toArray();
|
|
1714
1242
|
lightDef.intensity = light.intensity;
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1243
|
+
if (light instanceof THREE.DirectionalLight && light.isDirectionalLight) {
|
|
1244
|
+
lightDef.type = "directional";
|
|
1245
|
+
} else if (light instanceof THREE.PointLight && light.isPointLight) {
|
|
1246
|
+
lightDef.type = "point";
|
|
1247
|
+
if (light.distance > 0)
|
|
1248
|
+
lightDef.range = light.distance;
|
|
1249
|
+
} else if (light instanceof THREE.SpotLight && light.isSpotLight) {
|
|
1250
|
+
lightDef.type = "spot";
|
|
1251
|
+
if (light.distance > 0)
|
|
1252
|
+
lightDef.range = light.distance;
|
|
1725
1253
|
lightDef.spot = {};
|
|
1726
|
-
lightDef.spot.innerConeAngle = (light.penumbra - 1
|
|
1254
|
+
lightDef.spot.innerConeAngle = (light.penumbra - 1) * light.angle * -1;
|
|
1727
1255
|
lightDef.spot.outerConeAngle = light.angle;
|
|
1728
1256
|
}
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1257
|
+
if (!(light instanceof THREE.DirectionalLight) && light.decay !== void 0 && light.decay !== 2) {
|
|
1258
|
+
console.warn(
|
|
1259
|
+
"THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."
|
|
1260
|
+
);
|
|
1732
1261
|
}
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1262
|
+
if (!(light instanceof THREE.PointLight) && light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) {
|
|
1263
|
+
console.warn(
|
|
1264
|
+
"THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."
|
|
1265
|
+
);
|
|
1736
1266
|
}
|
|
1737
|
-
|
|
1738
1267
|
if (!extensionsUsed[this.name]) {
|
|
1739
1268
|
json.extensions = json.extensions || {};
|
|
1740
|
-
json.extensions[this.name] = {
|
|
1741
|
-
lights: []
|
|
1742
|
-
};
|
|
1269
|
+
json.extensions[this.name] = { lights: [] };
|
|
1743
1270
|
extensionsUsed[this.name] = true;
|
|
1744
1271
|
}
|
|
1745
|
-
|
|
1746
|
-
if (json.extensions !== undefined) {
|
|
1272
|
+
if (json.extensions !== void 0) {
|
|
1747
1273
|
const lights = json.extensions[this.name].lights;
|
|
1748
1274
|
lights.push(lightDef);
|
|
1749
1275
|
nodeDef.extensions = nodeDef.extensions || {};
|
|
1750
|
-
nodeDef.extensions[this.name] = {
|
|
1751
|
-
light: lights.length - 1
|
|
1752
|
-
};
|
|
1276
|
+
nodeDef.extensions[this.name] = { light: lights.length - 1 };
|
|
1753
1277
|
}
|
|
1754
1278
|
}
|
|
1755
|
-
|
|
1756
1279
|
}
|
|
1757
|
-
/**
|
|
1758
|
-
* Unlit Materials Extension
|
|
1759
|
-
*
|
|
1760
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit
|
|
1761
|
-
*/
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
1280
|
class GLTFMaterialsUnlitExtension {
|
|
1765
1281
|
constructor(writer) {
|
|
1766
|
-
_defineProperty(this, "writer", void 0);
|
|
1767
|
-
|
|
1768
|
-
_defineProperty(this, "name", void 0);
|
|
1769
|
-
|
|
1770
1282
|
this.writer = writer;
|
|
1771
|
-
this.name =
|
|
1283
|
+
this.name = "KHR_materials_unlit";
|
|
1772
1284
|
}
|
|
1773
|
-
|
|
1774
1285
|
writeMaterial(material, materialDef) {
|
|
1775
|
-
if (!(material instanceof MeshBasicMaterial &&
|
|
1776
|
-
material.isMeshBasicMaterial)) {
|
|
1286
|
+
if (!(material instanceof THREE.MeshBasicMaterial && material.isMeshBasicMaterial)) {
|
|
1777
1287
|
return;
|
|
1778
1288
|
}
|
|
1779
|
-
|
|
1780
1289
|
const writer = this.writer;
|
|
1781
1290
|
const extensionsUsed = writer.extensionsUsed;
|
|
1782
1291
|
materialDef.extensions = materialDef.extensions || {};
|
|
1783
1292
|
materialDef.extensions[this.name] = {};
|
|
1784
1293
|
extensionsUsed[this.name] = true;
|
|
1785
|
-
materialDef.pbrMetallicRoughness.metallicFactor = 0
|
|
1294
|
+
materialDef.pbrMetallicRoughness.metallicFactor = 0;
|
|
1786
1295
|
materialDef.pbrMetallicRoughness.roughnessFactor = 0.9;
|
|
1787
1296
|
}
|
|
1788
|
-
|
|
1789
1297
|
}
|
|
1790
|
-
/**
|
|
1791
|
-
* Specular-Glossiness Extension
|
|
1792
|
-
*
|
|
1793
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness
|
|
1794
|
-
*/
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
1298
|
class GLTFMaterialsPBRSpecularGlossiness {
|
|
1798
1299
|
constructor(writer) {
|
|
1799
|
-
_defineProperty(this, "writer", void 0);
|
|
1800
|
-
|
|
1801
|
-
_defineProperty(this, "name", void 0);
|
|
1802
|
-
|
|
1803
1300
|
this.writer = writer;
|
|
1804
|
-
this.name =
|
|
1301
|
+
this.name = "KHR_materials_pbrSpecularGlossiness";
|
|
1805
1302
|
}
|
|
1806
|
-
|
|
1807
1303
|
writeMaterial(material, materialDef) {
|
|
1808
|
-
|
|
1809
|
-
|
|
1304
|
+
if (!material.isGLTFSpecularGlossinessMaterial)
|
|
1305
|
+
return;
|
|
1810
1306
|
const writer = this.writer;
|
|
1811
1307
|
const extensionsUsed = writer.extensionsUsed;
|
|
1812
1308
|
const extensionDef = {};
|
|
1813
|
-
|
|
1814
1309
|
if (materialDef.pbrMetallicRoughness.baseColorFactor) {
|
|
1815
1310
|
extensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;
|
|
1816
1311
|
}
|
|
1817
|
-
|
|
1818
|
-
if (material instanceof MeshPhongMaterial) {
|
|
1312
|
+
if (material instanceof THREE.MeshPhongMaterial) {
|
|
1819
1313
|
const specularFactor = [1, 1, 1];
|
|
1820
1314
|
material.specular.toArray(specularFactor, 0);
|
|
1821
1315
|
extensionDef.specularFactor = specularFactor;
|
|
1822
|
-
extensionDef.glossinessFactor =
|
|
1823
|
-
material.glossiness;
|
|
1316
|
+
extensionDef.glossinessFactor = material.glossiness;
|
|
1824
1317
|
}
|
|
1825
|
-
|
|
1826
1318
|
if (materialDef.pbrMetallicRoughness.baseColorTexture) {
|
|
1827
1319
|
extensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;
|
|
1828
1320
|
}
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
const specularMapDef = {
|
|
1832
|
-
index: writer.processTexture(material.specularMap)
|
|
1833
|
-
};
|
|
1321
|
+
if ((material instanceof THREE.MeshBasicMaterial || material instanceof THREE.MeshLambertMaterial || material instanceof THREE.MeshPhongMaterial) && material.specularMap) {
|
|
1322
|
+
const specularMapDef = { index: writer.processTexture(material.specularMap) };
|
|
1834
1323
|
writer.applyTextureTransform(specularMapDef, material.specularMap);
|
|
1835
1324
|
extensionDef.specularGlossinessTexture = specularMapDef;
|
|
1836
1325
|
}
|
|
1837
|
-
|
|
1838
1326
|
materialDef.extensions = materialDef.extensions || {};
|
|
1839
1327
|
materialDef.extensions[this.name] = extensionDef;
|
|
1840
1328
|
extensionsUsed[this.name] = true;
|
|
1841
1329
|
}
|
|
1842
|
-
|
|
1843
1330
|
}
|
|
1844
|
-
/**
|
|
1845
|
-
* Transmission Materials Extension
|
|
1846
|
-
*
|
|
1847
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission
|
|
1848
|
-
*/
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
1331
|
class GLTFMaterialsTransmissionExtension {
|
|
1852
1332
|
constructor(writer) {
|
|
1853
|
-
_defineProperty(this, "writer", void 0);
|
|
1854
|
-
|
|
1855
|
-
_defineProperty(this, "name", void 0);
|
|
1856
|
-
|
|
1857
1333
|
this.writer = writer;
|
|
1858
|
-
this.name =
|
|
1334
|
+
this.name = "KHR_materials_transmission";
|
|
1859
1335
|
}
|
|
1860
|
-
|
|
1861
1336
|
writeMaterial(material, materialDef) {
|
|
1862
|
-
if (!(material instanceof MeshPhysicalMaterial &&
|
|
1863
|
-
material.isMeshPhysicalMaterial) || material.transmission === 0) {
|
|
1337
|
+
if (!(material instanceof THREE.MeshPhysicalMaterial && material.isMeshPhysicalMaterial) || material.transmission === 0) {
|
|
1864
1338
|
return;
|
|
1865
1339
|
}
|
|
1866
|
-
|
|
1867
1340
|
const writer = this.writer;
|
|
1868
1341
|
const extensionsUsed = writer.extensionsUsed;
|
|
1869
1342
|
const extensionDef = {};
|
|
1870
1343
|
extensionDef.transmissionFactor = material.transmission;
|
|
1871
|
-
|
|
1872
1344
|
if (material.transmissionMap) {
|
|
1873
|
-
const transmissionMapDef = {
|
|
1874
|
-
index: writer.processTexture(material.transmissionMap)
|
|
1875
|
-
};
|
|
1345
|
+
const transmissionMapDef = { index: writer.processTexture(material.transmissionMap) };
|
|
1876
1346
|
writer.applyTextureTransform(transmissionMapDef, material.transmissionMap);
|
|
1877
1347
|
extensionDef.transmissionTexture = transmissionMapDef;
|
|
1878
1348
|
}
|
|
1879
|
-
|
|
1880
1349
|
materialDef.extensions = materialDef.extensions || {};
|
|
1881
1350
|
materialDef.extensions[this.name] = extensionDef;
|
|
1882
1351
|
extensionsUsed[this.name] = true;
|
|
1883
1352
|
}
|
|
1884
|
-
|
|
1885
1353
|
}
|
|
1886
|
-
/**
|
|
1887
|
-
* Materials Volume Extension
|
|
1888
|
-
*
|
|
1889
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume
|
|
1890
|
-
*/
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
1354
|
class GLTFMaterialsVolumeExtension {
|
|
1894
1355
|
constructor(writer) {
|
|
1895
|
-
_defineProperty(this, "writer", void 0);
|
|
1896
|
-
|
|
1897
|
-
_defineProperty(this, "name", void 0);
|
|
1898
|
-
|
|
1899
1356
|
this.writer = writer;
|
|
1900
|
-
this.name =
|
|
1357
|
+
this.name = "KHR_materials_volume";
|
|
1901
1358
|
}
|
|
1902
|
-
|
|
1903
1359
|
writeMaterial(material, materialDef) {
|
|
1904
|
-
if (!(material instanceof MeshPhysicalMaterial &&
|
|
1905
|
-
material.isMeshPhysicalMaterial) || material.thickness === 0) {
|
|
1360
|
+
if (!(material instanceof THREE.MeshPhysicalMaterial && material.isMeshPhysicalMaterial) || material.thickness === 0) {
|
|
1906
1361
|
return;
|
|
1907
1362
|
}
|
|
1908
|
-
|
|
1909
1363
|
const writer = this.writer;
|
|
1910
1364
|
const extensionsUsed = writer.extensionsUsed;
|
|
1911
1365
|
const extensionDef = {};
|
|
1912
1366
|
extensionDef.thickness = material.thickness;
|
|
1913
|
-
|
|
1914
1367
|
if (material.thicknessMap) {
|
|
1915
1368
|
const thicknessMapDef = {
|
|
1916
1369
|
index: writer.processTexture(material.thicknessMap)
|
|
@@ -1918,15 +1371,11 @@ class GLTFMaterialsVolumeExtension {
|
|
|
1918
1371
|
writer.applyTextureTransform(thicknessMapDef, material.thicknessMap);
|
|
1919
1372
|
extensionDef.thicknessTexture = thicknessMapDef;
|
|
1920
1373
|
}
|
|
1921
|
-
|
|
1922
1374
|
extensionDef.attenuationDistance = material.attenuationDistance;
|
|
1923
|
-
extensionDef.attenuationColor =
|
|
1924
|
-
material.attenuationTint.toArray();
|
|
1375
|
+
extensionDef.attenuationColor = material.attenuationTint.toArray();
|
|
1925
1376
|
materialDef.extensions = materialDef.extensions || {};
|
|
1926
1377
|
materialDef.extensions[this.name] = extensionDef;
|
|
1927
1378
|
extensionsUsed[this.name] = true;
|
|
1928
1379
|
}
|
|
1929
|
-
|
|
1930
1380
|
}
|
|
1931
|
-
|
|
1932
|
-
export { GLTFExporter };
|
|
1381
|
+
exports.GLTFExporter = GLTFExporter;
|