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
package/loaders/GLTFLoader.js
CHANGED
|
@@ -1,157 +1,146 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
|
+
class GLTFLoader extends THREE.Loader {
|
|
4
5
|
constructor(manager) {
|
|
5
6
|
super(manager);
|
|
6
7
|
this.dracoLoader = null;
|
|
7
8
|
this.ktx2Loader = null;
|
|
8
9
|
this.meshoptDecoder = null;
|
|
9
10
|
this.pluginCallbacks = [];
|
|
10
|
-
this.register(function
|
|
11
|
+
this.register(function(parser) {
|
|
11
12
|
return new GLTFMaterialsClearcoatExtension(parser);
|
|
12
13
|
});
|
|
13
|
-
this.register(function
|
|
14
|
+
this.register(function(parser) {
|
|
14
15
|
return new GLTFTextureBasisUExtension(parser);
|
|
15
16
|
});
|
|
16
|
-
this.register(function
|
|
17
|
+
this.register(function(parser) {
|
|
17
18
|
return new GLTFTextureWebPExtension(parser);
|
|
18
19
|
});
|
|
19
|
-
this.register(function
|
|
20
|
+
this.register(function(parser) {
|
|
20
21
|
return new GLTFMaterialsSheenExtension(parser);
|
|
21
22
|
});
|
|
22
|
-
this.register(function
|
|
23
|
+
this.register(function(parser) {
|
|
23
24
|
return new GLTFMaterialsTransmissionExtension(parser);
|
|
24
25
|
});
|
|
25
|
-
this.register(function
|
|
26
|
+
this.register(function(parser) {
|
|
26
27
|
return new GLTFMaterialsVolumeExtension(parser);
|
|
27
28
|
});
|
|
28
|
-
this.register(function
|
|
29
|
+
this.register(function(parser) {
|
|
29
30
|
return new GLTFMaterialsIorExtension(parser);
|
|
30
31
|
});
|
|
31
|
-
this.register(function
|
|
32
|
+
this.register(function(parser) {
|
|
32
33
|
return new GLTFMaterialsSpecularExtension(parser);
|
|
33
34
|
});
|
|
34
|
-
this.register(function
|
|
35
|
+
this.register(function(parser) {
|
|
35
36
|
return new GLTFLightsExtension(parser);
|
|
36
37
|
});
|
|
37
|
-
this.register(function
|
|
38
|
+
this.register(function(parser) {
|
|
38
39
|
return new GLTFMeshoptCompression(parser);
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
|
-
|
|
42
42
|
load(url, onLoad, onProgress, onError) {
|
|
43
43
|
const scope = this;
|
|
44
44
|
let resourcePath;
|
|
45
|
-
|
|
46
|
-
if (this.resourcePath !== '') {
|
|
45
|
+
if (this.resourcePath !== "") {
|
|
47
46
|
resourcePath = this.resourcePath;
|
|
48
|
-
} else if (this.path !==
|
|
47
|
+
} else if (this.path !== "") {
|
|
49
48
|
resourcePath = this.path;
|
|
50
49
|
} else {
|
|
51
|
-
resourcePath = LoaderUtils.extractUrlBase(url);
|
|
52
|
-
}
|
|
53
|
-
// the model is fully loaded. This means the count of items loaded will
|
|
54
|
-
// be incorrect, but ensures manager.onLoad() does not fire early.
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
resourcePath = THREE.LoaderUtils.extractUrlBase(url);
|
|
51
|
+
}
|
|
57
52
|
this.manager.itemStart(url);
|
|
58
|
-
|
|
59
|
-
const _onError = function (e) {
|
|
53
|
+
const _onError = function(e) {
|
|
60
54
|
if (onError) {
|
|
61
55
|
onError(e);
|
|
62
56
|
} else {
|
|
63
57
|
console.error(e);
|
|
64
58
|
}
|
|
65
|
-
|
|
66
59
|
scope.manager.itemError(url);
|
|
67
60
|
scope.manager.itemEnd(url);
|
|
68
61
|
};
|
|
69
|
-
|
|
70
|
-
const loader = new FileLoader(this.manager);
|
|
62
|
+
const loader = new THREE.FileLoader(this.manager);
|
|
71
63
|
loader.setPath(this.path);
|
|
72
|
-
loader.setResponseType(
|
|
64
|
+
loader.setResponseType("arraybuffer");
|
|
73
65
|
loader.setRequestHeader(this.requestHeader);
|
|
74
66
|
loader.setWithCredentials(this.withCredentials);
|
|
75
|
-
loader.load(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
scope.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
67
|
+
loader.load(
|
|
68
|
+
url,
|
|
69
|
+
function(data) {
|
|
70
|
+
try {
|
|
71
|
+
scope.parse(
|
|
72
|
+
data,
|
|
73
|
+
resourcePath,
|
|
74
|
+
function(gltf) {
|
|
75
|
+
onLoad(gltf);
|
|
76
|
+
scope.manager.itemEnd(url);
|
|
77
|
+
},
|
|
78
|
+
_onError
|
|
79
|
+
);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
_onError(e);
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
onProgress,
|
|
85
|
+
_onError
|
|
86
|
+
);
|
|
85
87
|
}
|
|
86
|
-
|
|
87
88
|
setDRACOLoader(dracoLoader) {
|
|
88
89
|
this.dracoLoader = dracoLoader;
|
|
89
90
|
return this;
|
|
90
91
|
}
|
|
91
|
-
|
|
92
92
|
setDDSLoader() {
|
|
93
93
|
throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".');
|
|
94
94
|
}
|
|
95
|
-
|
|
96
95
|
setKTX2Loader(ktx2Loader) {
|
|
97
96
|
this.ktx2Loader = ktx2Loader;
|
|
98
97
|
return this;
|
|
99
98
|
}
|
|
100
|
-
|
|
101
99
|
setMeshoptDecoder(meshoptDecoder) {
|
|
102
100
|
this.meshoptDecoder = meshoptDecoder;
|
|
103
101
|
return this;
|
|
104
102
|
}
|
|
105
|
-
|
|
106
103
|
register(callback) {
|
|
107
104
|
if (this.pluginCallbacks.indexOf(callback) === -1) {
|
|
108
105
|
this.pluginCallbacks.push(callback);
|
|
109
106
|
}
|
|
110
|
-
|
|
111
107
|
return this;
|
|
112
108
|
}
|
|
113
|
-
|
|
114
109
|
unregister(callback) {
|
|
115
110
|
if (this.pluginCallbacks.indexOf(callback) !== -1) {
|
|
116
111
|
this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
|
|
117
112
|
}
|
|
118
|
-
|
|
119
113
|
return this;
|
|
120
114
|
}
|
|
121
|
-
|
|
122
115
|
parse(data, path, onLoad, onError) {
|
|
123
116
|
let content;
|
|
124
117
|
const extensions = {};
|
|
125
118
|
const plugins = {};
|
|
126
|
-
|
|
127
|
-
if (typeof data === 'string') {
|
|
119
|
+
if (typeof data === "string") {
|
|
128
120
|
content = data;
|
|
129
121
|
} else {
|
|
130
|
-
const magic = LoaderUtils.decodeText(new Uint8Array(data, 0, 4));
|
|
131
|
-
|
|
122
|
+
const magic = THREE.LoaderUtils.decodeText(new Uint8Array(data, 0, 4));
|
|
132
123
|
if (magic === BINARY_EXTENSION_HEADER_MAGIC) {
|
|
133
124
|
try {
|
|
134
125
|
extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data);
|
|
135
126
|
} catch (error) {
|
|
136
|
-
if (onError)
|
|
127
|
+
if (onError)
|
|
128
|
+
onError(error);
|
|
137
129
|
return;
|
|
138
130
|
}
|
|
139
|
-
|
|
140
131
|
content = extensions[EXTENSIONS.KHR_BINARY_GLTF].content;
|
|
141
132
|
} else {
|
|
142
|
-
content = LoaderUtils.decodeText(new Uint8Array(data));
|
|
133
|
+
content = THREE.LoaderUtils.decodeText(new Uint8Array(data));
|
|
143
134
|
}
|
|
144
135
|
}
|
|
145
|
-
|
|
146
136
|
const json = JSON.parse(content);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
137
|
+
if (json.asset === void 0 || json.asset.version[0] < 2) {
|
|
138
|
+
if (onError)
|
|
139
|
+
onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
|
|
150
140
|
return;
|
|
151
141
|
}
|
|
152
|
-
|
|
153
142
|
const parser = new GLTFParser(json, {
|
|
154
|
-
path: path || this.resourcePath ||
|
|
143
|
+
path: path || this.resourcePath || "",
|
|
155
144
|
crossOrigin: this.crossOrigin,
|
|
156
145
|
requestHeader: this.requestHeader,
|
|
157
146
|
manager: this.manager,
|
|
@@ -159,664 +148,474 @@ class GLTFLoader extends Loader {
|
|
|
159
148
|
meshoptDecoder: this.meshoptDecoder
|
|
160
149
|
});
|
|
161
150
|
parser.fileLoader.setRequestHeader(this.requestHeader);
|
|
162
|
-
|
|
163
151
|
for (let i = 0; i < this.pluginCallbacks.length; i++) {
|
|
164
152
|
const plugin = this.pluginCallbacks[i](parser);
|
|
165
|
-
plugins[plugin.name] = plugin;
|
|
166
|
-
// in addUnknownExtensionsToUserData().
|
|
167
|
-
// Remove this workaround if we move all the existing
|
|
168
|
-
// extension handlers to plugin system
|
|
169
|
-
|
|
153
|
+
plugins[plugin.name] = plugin;
|
|
170
154
|
extensions[plugin.name] = true;
|
|
171
155
|
}
|
|
172
|
-
|
|
173
156
|
if (json.extensionsUsed) {
|
|
174
157
|
for (let i = 0; i < json.extensionsUsed.length; ++i) {
|
|
175
158
|
const extensionName = json.extensionsUsed[i];
|
|
176
159
|
const extensionsRequired = json.extensionsRequired || [];
|
|
177
|
-
|
|
178
160
|
switch (extensionName) {
|
|
179
161
|
case EXTENSIONS.KHR_MATERIALS_UNLIT:
|
|
180
162
|
extensions[extensionName] = new GLTFMaterialsUnlitExtension();
|
|
181
163
|
break;
|
|
182
|
-
|
|
183
164
|
case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:
|
|
184
165
|
extensions[extensionName] = new GLTFMaterialsPbrSpecularGlossinessExtension();
|
|
185
166
|
break;
|
|
186
|
-
|
|
187
167
|
case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:
|
|
188
168
|
extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);
|
|
189
169
|
break;
|
|
190
|
-
|
|
191
170
|
case EXTENSIONS.KHR_TEXTURE_TRANSFORM:
|
|
192
171
|
extensions[extensionName] = new GLTFTextureTransformExtension();
|
|
193
172
|
break;
|
|
194
|
-
|
|
195
173
|
case EXTENSIONS.KHR_MESH_QUANTIZATION:
|
|
196
174
|
extensions[extensionName] = new GLTFMeshQuantizationExtension();
|
|
197
175
|
break;
|
|
198
|
-
|
|
199
176
|
default:
|
|
200
|
-
if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] ===
|
|
177
|
+
if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) {
|
|
201
178
|
console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".');
|
|
202
179
|
}
|
|
203
|
-
|
|
204
180
|
}
|
|
205
181
|
}
|
|
206
182
|
}
|
|
207
|
-
|
|
208
183
|
parser.setExtensions(extensions);
|
|
209
184
|
parser.setPlugins(plugins);
|
|
210
185
|
parser.parse(onLoad, onError);
|
|
211
186
|
}
|
|
212
|
-
|
|
213
187
|
parseAsync(data, path) {
|
|
214
188
|
const scope = this;
|
|
215
|
-
return new Promise(function
|
|
189
|
+
return new Promise(function(resolve, reject) {
|
|
216
190
|
scope.parse(data, path, resolve, reject);
|
|
217
191
|
});
|
|
218
192
|
}
|
|
219
|
-
|
|
220
193
|
}
|
|
221
|
-
/* GLTFREGISTRY */
|
|
222
|
-
|
|
223
|
-
|
|
224
194
|
function GLTFRegistry() {
|
|
225
195
|
let objects = {};
|
|
226
196
|
return {
|
|
227
|
-
get: function
|
|
197
|
+
get: function(key) {
|
|
228
198
|
return objects[key];
|
|
229
199
|
},
|
|
230
|
-
add: function
|
|
200
|
+
add: function(key, object) {
|
|
231
201
|
objects[key] = object;
|
|
232
202
|
},
|
|
233
|
-
remove: function
|
|
203
|
+
remove: function(key) {
|
|
234
204
|
delete objects[key];
|
|
235
205
|
},
|
|
236
|
-
removeAll: function
|
|
206
|
+
removeAll: function() {
|
|
237
207
|
objects = {};
|
|
238
208
|
}
|
|
239
209
|
};
|
|
240
210
|
}
|
|
241
|
-
/*********************************/
|
|
242
|
-
|
|
243
|
-
/********** EXTENSIONS ***********/
|
|
244
|
-
|
|
245
|
-
/*********************************/
|
|
246
|
-
|
|
247
|
-
|
|
248
211
|
const EXTENSIONS = {
|
|
249
|
-
KHR_BINARY_GLTF:
|
|
250
|
-
KHR_DRACO_MESH_COMPRESSION:
|
|
251
|
-
KHR_LIGHTS_PUNCTUAL:
|
|
252
|
-
KHR_MATERIALS_CLEARCOAT:
|
|
253
|
-
KHR_MATERIALS_IOR:
|
|
254
|
-
KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:
|
|
255
|
-
KHR_MATERIALS_SHEEN:
|
|
256
|
-
KHR_MATERIALS_SPECULAR:
|
|
257
|
-
KHR_MATERIALS_TRANSMISSION:
|
|
258
|
-
KHR_MATERIALS_UNLIT:
|
|
259
|
-
KHR_MATERIALS_VOLUME:
|
|
260
|
-
KHR_TEXTURE_BASISU:
|
|
261
|
-
KHR_TEXTURE_TRANSFORM:
|
|
262
|
-
KHR_MESH_QUANTIZATION:
|
|
263
|
-
EXT_TEXTURE_WEBP:
|
|
264
|
-
EXT_MESHOPT_COMPRESSION:
|
|
212
|
+
KHR_BINARY_GLTF: "KHR_binary_glTF",
|
|
213
|
+
KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression",
|
|
214
|
+
KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual",
|
|
215
|
+
KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat",
|
|
216
|
+
KHR_MATERIALS_IOR: "KHR_materials_ior",
|
|
217
|
+
KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: "KHR_materials_pbrSpecularGlossiness",
|
|
218
|
+
KHR_MATERIALS_SHEEN: "KHR_materials_sheen",
|
|
219
|
+
KHR_MATERIALS_SPECULAR: "KHR_materials_specular",
|
|
220
|
+
KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission",
|
|
221
|
+
KHR_MATERIALS_UNLIT: "KHR_materials_unlit",
|
|
222
|
+
KHR_MATERIALS_VOLUME: "KHR_materials_volume",
|
|
223
|
+
KHR_TEXTURE_BASISU: "KHR_texture_basisu",
|
|
224
|
+
KHR_TEXTURE_TRANSFORM: "KHR_texture_transform",
|
|
225
|
+
KHR_MESH_QUANTIZATION: "KHR_mesh_quantization",
|
|
226
|
+
EXT_TEXTURE_WEBP: "EXT_texture_webp",
|
|
227
|
+
EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression"
|
|
265
228
|
};
|
|
266
|
-
/**
|
|
267
|
-
* Punctual Lights Extension
|
|
268
|
-
*
|
|
269
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual
|
|
270
|
-
*/
|
|
271
|
-
|
|
272
229
|
class GLTFLightsExtension {
|
|
273
230
|
constructor(parser) {
|
|
274
231
|
this.parser = parser;
|
|
275
|
-
this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
|
|
276
|
-
|
|
277
|
-
this.cache = {
|
|
278
|
-
refs: {},
|
|
279
|
-
uses: {}
|
|
280
|
-
};
|
|
232
|
+
this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
|
|
233
|
+
this.cache = { refs: {}, uses: {} };
|
|
281
234
|
}
|
|
282
|
-
|
|
283
235
|
_markDefs() {
|
|
284
236
|
const parser = this.parser;
|
|
285
237
|
const nodeDefs = this.parser.json.nodes || [];
|
|
286
|
-
|
|
287
238
|
for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
|
|
288
239
|
const nodeDef = nodeDefs[nodeIndex];
|
|
289
|
-
|
|
290
|
-
if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== undefined) {
|
|
240
|
+
if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) {
|
|
291
241
|
parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);
|
|
292
242
|
}
|
|
293
243
|
}
|
|
294
244
|
}
|
|
295
|
-
|
|
296
245
|
_loadLight(lightIndex) {
|
|
297
246
|
const parser = this.parser;
|
|
298
|
-
const cacheKey =
|
|
247
|
+
const cacheKey = "light:" + lightIndex;
|
|
299
248
|
let dependency = parser.cache.get(cacheKey);
|
|
300
|
-
if (dependency)
|
|
249
|
+
if (dependency)
|
|
250
|
+
return dependency;
|
|
301
251
|
const json = parser.json;
|
|
302
252
|
const extensions = json.extensions && json.extensions[this.name] || {};
|
|
303
253
|
const lightDefs = extensions.lights || [];
|
|
304
254
|
const lightDef = lightDefs[lightIndex];
|
|
305
255
|
let lightNode;
|
|
306
|
-
const color = new Color(
|
|
307
|
-
if (lightDef.color !==
|
|
308
|
-
|
|
309
|
-
|
|
256
|
+
const color = new THREE.Color(16777215);
|
|
257
|
+
if (lightDef.color !== void 0)
|
|
258
|
+
color.fromArray(lightDef.color);
|
|
259
|
+
const range = lightDef.range !== void 0 ? lightDef.range : 0;
|
|
310
260
|
switch (lightDef.type) {
|
|
311
|
-
case
|
|
312
|
-
lightNode = new DirectionalLight(color);
|
|
261
|
+
case "directional":
|
|
262
|
+
lightNode = new THREE.DirectionalLight(color);
|
|
313
263
|
lightNode.target.position.set(0, 0, -1);
|
|
314
264
|
lightNode.add(lightNode.target);
|
|
315
265
|
break;
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
lightNode = new PointLight(color);
|
|
266
|
+
case "point":
|
|
267
|
+
lightNode = new THREE.PointLight(color);
|
|
319
268
|
lightNode.distance = range;
|
|
320
269
|
break;
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
lightNode =
|
|
324
|
-
lightNode.distance = range; // Handle spotlight properties.
|
|
325
|
-
|
|
270
|
+
case "spot":
|
|
271
|
+
lightNode = new THREE.SpotLight(color);
|
|
272
|
+
lightNode.distance = range;
|
|
326
273
|
lightDef.spot = lightDef.spot || {};
|
|
327
|
-
lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !==
|
|
328
|
-
lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !==
|
|
274
|
+
lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0;
|
|
275
|
+
lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4;
|
|
329
276
|
lightNode.angle = lightDef.spot.outerConeAngle;
|
|
330
|
-
lightNode.penumbra = 1
|
|
277
|
+
lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;
|
|
331
278
|
lightNode.target.position.set(0, 0, -1);
|
|
332
279
|
lightNode.add(lightNode.target);
|
|
333
280
|
break;
|
|
334
|
-
|
|
335
281
|
default:
|
|
336
|
-
throw new Error(
|
|
337
|
-
}
|
|
338
|
-
// here, because node-level parsing will only override position if explicitly specified.
|
|
339
|
-
|
|
340
|
-
|
|
282
|
+
throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type);
|
|
283
|
+
}
|
|
341
284
|
lightNode.position.set(0, 0, 0);
|
|
342
285
|
lightNode.decay = 2;
|
|
343
|
-
if (lightDef.intensity !==
|
|
344
|
-
|
|
286
|
+
if (lightDef.intensity !== void 0)
|
|
287
|
+
lightNode.intensity = lightDef.intensity;
|
|
288
|
+
lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex);
|
|
345
289
|
dependency = Promise.resolve(lightNode);
|
|
346
290
|
parser.cache.add(cacheKey, dependency);
|
|
347
291
|
return dependency;
|
|
348
292
|
}
|
|
349
|
-
|
|
350
293
|
createNodeAttachment(nodeIndex) {
|
|
351
|
-
const
|
|
294
|
+
const self2 = this;
|
|
352
295
|
const parser = this.parser;
|
|
353
296
|
const json = parser.json;
|
|
354
297
|
const nodeDef = json.nodes[nodeIndex];
|
|
355
298
|
const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};
|
|
356
299
|
const lightIndex = lightDef.light;
|
|
357
|
-
if (lightIndex ===
|
|
358
|
-
|
|
359
|
-
|
|
300
|
+
if (lightIndex === void 0)
|
|
301
|
+
return null;
|
|
302
|
+
return this._loadLight(lightIndex).then(function(light) {
|
|
303
|
+
return parser._getNodeRef(self2.cache, lightIndex, light);
|
|
360
304
|
});
|
|
361
305
|
}
|
|
362
|
-
|
|
363
306
|
}
|
|
364
|
-
/**
|
|
365
|
-
* Unlit Materials Extension
|
|
366
|
-
*
|
|
367
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit
|
|
368
|
-
*/
|
|
369
|
-
|
|
370
|
-
|
|
371
307
|
class GLTFMaterialsUnlitExtension {
|
|
372
308
|
constructor() {
|
|
373
309
|
this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;
|
|
374
310
|
}
|
|
375
|
-
|
|
376
311
|
getMaterialType() {
|
|
377
|
-
return MeshBasicMaterial;
|
|
312
|
+
return THREE.MeshBasicMaterial;
|
|
378
313
|
}
|
|
379
|
-
|
|
380
314
|
extendParams(materialParams, materialDef, parser) {
|
|
381
315
|
const pending = [];
|
|
382
|
-
materialParams.color = new Color(1
|
|
383
|
-
materialParams.opacity = 1
|
|
316
|
+
materialParams.color = new THREE.Color(1, 1, 1);
|
|
317
|
+
materialParams.opacity = 1;
|
|
384
318
|
const metallicRoughness = materialDef.pbrMetallicRoughness;
|
|
385
|
-
|
|
386
319
|
if (metallicRoughness) {
|
|
387
320
|
if (Array.isArray(metallicRoughness.baseColorFactor)) {
|
|
388
321
|
const array = metallicRoughness.baseColorFactor;
|
|
389
322
|
materialParams.color.fromArray(array);
|
|
390
323
|
materialParams.opacity = array[3];
|
|
391
324
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture));
|
|
325
|
+
if (metallicRoughness.baseColorTexture !== void 0) {
|
|
326
|
+
pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture));
|
|
395
327
|
}
|
|
396
328
|
}
|
|
397
|
-
|
|
398
329
|
return Promise.all(pending);
|
|
399
330
|
}
|
|
400
|
-
|
|
401
331
|
}
|
|
402
|
-
/**
|
|
403
|
-
* Clearcoat Materials Extension
|
|
404
|
-
*
|
|
405
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
|
|
406
|
-
*/
|
|
407
|
-
|
|
408
|
-
|
|
409
332
|
class GLTFMaterialsClearcoatExtension {
|
|
410
333
|
constructor(parser) {
|
|
411
334
|
this.parser = parser;
|
|
412
335
|
this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;
|
|
413
336
|
}
|
|
414
|
-
|
|
415
337
|
getMaterialType(materialIndex) {
|
|
416
338
|
const parser = this.parser;
|
|
417
339
|
const materialDef = parser.json.materials[materialIndex];
|
|
418
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
419
|
-
|
|
340
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
341
|
+
return null;
|
|
342
|
+
return THREE.MeshPhysicalMaterial;
|
|
420
343
|
}
|
|
421
|
-
|
|
422
344
|
extendMaterialParams(materialIndex, materialParams) {
|
|
423
345
|
const parser = this.parser;
|
|
424
346
|
const materialDef = parser.json.materials[materialIndex];
|
|
425
|
-
|
|
426
347
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
427
348
|
return Promise.resolve();
|
|
428
349
|
}
|
|
429
|
-
|
|
430
350
|
const pending = [];
|
|
431
351
|
const extension = materialDef.extensions[this.name];
|
|
432
|
-
|
|
433
|
-
if (extension.clearcoatFactor !== undefined) {
|
|
352
|
+
if (extension.clearcoatFactor !== void 0) {
|
|
434
353
|
materialParams.clearcoat = extension.clearcoatFactor;
|
|
435
354
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
pending.push(parser.assignTexture(materialParams, 'clearcoatMap', extension.clearcoatTexture));
|
|
355
|
+
if (extension.clearcoatTexture !== void 0) {
|
|
356
|
+
pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture));
|
|
439
357
|
}
|
|
440
|
-
|
|
441
|
-
if (extension.clearcoatRoughnessFactor !== undefined) {
|
|
358
|
+
if (extension.clearcoatRoughnessFactor !== void 0) {
|
|
442
359
|
materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;
|
|
443
360
|
}
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
pending.push(parser.assignTexture(materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture));
|
|
361
|
+
if (extension.clearcoatRoughnessTexture !== void 0) {
|
|
362
|
+
pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture));
|
|
447
363
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
if (extension.clearcoatNormalTexture.scale !== undefined) {
|
|
364
|
+
if (extension.clearcoatNormalTexture !== void 0) {
|
|
365
|
+
pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture));
|
|
366
|
+
if (extension.clearcoatNormalTexture.scale !== void 0) {
|
|
453
367
|
const scale = extension.clearcoatNormalTexture.scale;
|
|
454
|
-
materialParams.clearcoatNormalScale = new Vector2(scale, scale);
|
|
368
|
+
materialParams.clearcoatNormalScale = new THREE.Vector2(scale, scale);
|
|
455
369
|
}
|
|
456
370
|
}
|
|
457
|
-
|
|
458
371
|
return Promise.all(pending);
|
|
459
372
|
}
|
|
460
|
-
|
|
461
373
|
}
|
|
462
|
-
/**
|
|
463
|
-
* Sheen Materials Extension
|
|
464
|
-
*
|
|
465
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen
|
|
466
|
-
*/
|
|
467
|
-
|
|
468
|
-
|
|
469
374
|
class GLTFMaterialsSheenExtension {
|
|
470
375
|
constructor(parser) {
|
|
471
376
|
this.parser = parser;
|
|
472
377
|
this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
|
|
473
378
|
}
|
|
474
|
-
|
|
475
379
|
getMaterialType(materialIndex) {
|
|
476
380
|
const parser = this.parser;
|
|
477
381
|
const materialDef = parser.json.materials[materialIndex];
|
|
478
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
479
|
-
|
|
382
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
383
|
+
return null;
|
|
384
|
+
return THREE.MeshPhysicalMaterial;
|
|
480
385
|
}
|
|
481
|
-
|
|
482
386
|
extendMaterialParams(materialIndex, materialParams) {
|
|
483
387
|
const parser = this.parser;
|
|
484
388
|
const materialDef = parser.json.materials[materialIndex];
|
|
485
|
-
|
|
486
389
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
487
390
|
return Promise.resolve();
|
|
488
391
|
}
|
|
489
|
-
|
|
490
392
|
const pending = [];
|
|
491
|
-
materialParams.sheenColor = new Color(0, 0, 0);
|
|
393
|
+
materialParams.sheenColor = new THREE.Color(0, 0, 0);
|
|
492
394
|
materialParams.sheenRoughness = 0;
|
|
493
395
|
materialParams.sheen = 1;
|
|
494
396
|
const extension = materialDef.extensions[this.name];
|
|
495
|
-
|
|
496
|
-
if (extension.sheenColorFactor !== undefined) {
|
|
397
|
+
if (extension.sheenColorFactor !== void 0) {
|
|
497
398
|
materialParams.sheenColor.fromArray(extension.sheenColorFactor);
|
|
498
399
|
}
|
|
499
|
-
|
|
500
|
-
if (extension.sheenRoughnessFactor !== undefined) {
|
|
400
|
+
if (extension.sheenRoughnessFactor !== void 0) {
|
|
501
401
|
materialParams.sheenRoughness = extension.sheenRoughnessFactor;
|
|
502
402
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
pending.push(parser.assignTexture(materialParams, 'sheenColorMap', extension.sheenColorTexture));
|
|
403
|
+
if (extension.sheenColorTexture !== void 0) {
|
|
404
|
+
pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture));
|
|
506
405
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
pending.push(parser.assignTexture(materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture));
|
|
406
|
+
if (extension.sheenRoughnessTexture !== void 0) {
|
|
407
|
+
pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture));
|
|
510
408
|
}
|
|
511
|
-
|
|
512
409
|
return Promise.all(pending);
|
|
513
410
|
}
|
|
514
|
-
|
|
515
411
|
}
|
|
516
|
-
/**
|
|
517
|
-
* Transmission Materials Extension
|
|
518
|
-
*
|
|
519
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission
|
|
520
|
-
* Draft: https://github.com/KhronosGroup/glTF/pull/1698
|
|
521
|
-
*/
|
|
522
|
-
|
|
523
|
-
|
|
524
412
|
class GLTFMaterialsTransmissionExtension {
|
|
525
413
|
constructor(parser) {
|
|
526
414
|
this.parser = parser;
|
|
527
415
|
this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;
|
|
528
416
|
}
|
|
529
|
-
|
|
530
417
|
getMaterialType(materialIndex) {
|
|
531
418
|
const parser = this.parser;
|
|
532
419
|
const materialDef = parser.json.materials[materialIndex];
|
|
533
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
534
|
-
|
|
420
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
421
|
+
return null;
|
|
422
|
+
return THREE.MeshPhysicalMaterial;
|
|
535
423
|
}
|
|
536
|
-
|
|
537
424
|
extendMaterialParams(materialIndex, materialParams) {
|
|
538
425
|
const parser = this.parser;
|
|
539
426
|
const materialDef = parser.json.materials[materialIndex];
|
|
540
|
-
|
|
541
427
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
542
428
|
return Promise.resolve();
|
|
543
429
|
}
|
|
544
|
-
|
|
545
430
|
const pending = [];
|
|
546
431
|
const extension = materialDef.extensions[this.name];
|
|
547
|
-
|
|
548
|
-
if (extension.transmissionFactor !== undefined) {
|
|
432
|
+
if (extension.transmissionFactor !== void 0) {
|
|
549
433
|
materialParams.transmission = extension.transmissionFactor;
|
|
550
434
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
pending.push(parser.assignTexture(materialParams, 'transmissionMap', extension.transmissionTexture));
|
|
435
|
+
if (extension.transmissionTexture !== void 0) {
|
|
436
|
+
pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture));
|
|
554
437
|
}
|
|
555
|
-
|
|
556
438
|
return Promise.all(pending);
|
|
557
439
|
}
|
|
558
|
-
|
|
559
440
|
}
|
|
560
|
-
/**
|
|
561
|
-
* Materials Volume Extension
|
|
562
|
-
*
|
|
563
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume
|
|
564
|
-
*/
|
|
565
|
-
|
|
566
|
-
|
|
567
441
|
class GLTFMaterialsVolumeExtension {
|
|
568
442
|
constructor(parser) {
|
|
569
443
|
this.parser = parser;
|
|
570
444
|
this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;
|
|
571
445
|
}
|
|
572
|
-
|
|
573
446
|
getMaterialType(materialIndex) {
|
|
574
447
|
const parser = this.parser;
|
|
575
448
|
const materialDef = parser.json.materials[materialIndex];
|
|
576
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
577
|
-
|
|
449
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
450
|
+
return null;
|
|
451
|
+
return THREE.MeshPhysicalMaterial;
|
|
578
452
|
}
|
|
579
|
-
|
|
580
453
|
extendMaterialParams(materialIndex, materialParams) {
|
|
581
454
|
const parser = this.parser;
|
|
582
455
|
const materialDef = parser.json.materials[materialIndex];
|
|
583
|
-
|
|
584
456
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
585
457
|
return Promise.resolve();
|
|
586
458
|
}
|
|
587
|
-
|
|
588
459
|
const pending = [];
|
|
589
460
|
const extension = materialDef.extensions[this.name];
|
|
590
|
-
materialParams.thickness = extension.thicknessFactor !==
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
pending.push(parser.assignTexture(materialParams, 'thicknessMap', extension.thicknessTexture));
|
|
461
|
+
materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0;
|
|
462
|
+
if (extension.thicknessTexture !== void 0) {
|
|
463
|
+
pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture));
|
|
594
464
|
}
|
|
595
|
-
|
|
596
465
|
materialParams.attenuationDistance = extension.attenuationDistance || 0;
|
|
597
466
|
const colorArray = extension.attenuationColor || [1, 1, 1];
|
|
598
|
-
materialParams.attenuationColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
|
|
467
|
+
materialParams.attenuationColor = new THREE.Color(colorArray[0], colorArray[1], colorArray[2]);
|
|
599
468
|
return Promise.all(pending);
|
|
600
469
|
}
|
|
601
|
-
|
|
602
470
|
}
|
|
603
|
-
/**
|
|
604
|
-
* Materials ior Extension
|
|
605
|
-
*
|
|
606
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior
|
|
607
|
-
*/
|
|
608
|
-
|
|
609
|
-
|
|
610
471
|
class GLTFMaterialsIorExtension {
|
|
611
472
|
constructor(parser) {
|
|
612
473
|
this.parser = parser;
|
|
613
474
|
this.name = EXTENSIONS.KHR_MATERIALS_IOR;
|
|
614
475
|
}
|
|
615
|
-
|
|
616
476
|
getMaterialType(materialIndex) {
|
|
617
477
|
const parser = this.parser;
|
|
618
478
|
const materialDef = parser.json.materials[materialIndex];
|
|
619
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
620
|
-
|
|
479
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
480
|
+
return null;
|
|
481
|
+
return THREE.MeshPhysicalMaterial;
|
|
621
482
|
}
|
|
622
|
-
|
|
623
483
|
extendMaterialParams(materialIndex, materialParams) {
|
|
624
484
|
const parser = this.parser;
|
|
625
485
|
const materialDef = parser.json.materials[materialIndex];
|
|
626
|
-
|
|
627
486
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
628
487
|
return Promise.resolve();
|
|
629
488
|
}
|
|
630
|
-
|
|
631
489
|
const extension = materialDef.extensions[this.name];
|
|
632
|
-
materialParams.ior = extension.ior !==
|
|
490
|
+
materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5;
|
|
633
491
|
return Promise.resolve();
|
|
634
492
|
}
|
|
635
|
-
|
|
636
493
|
}
|
|
637
|
-
/**
|
|
638
|
-
* Materials specular Extension
|
|
639
|
-
*
|
|
640
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular
|
|
641
|
-
*/
|
|
642
|
-
|
|
643
|
-
|
|
644
494
|
class GLTFMaterialsSpecularExtension {
|
|
645
495
|
constructor(parser) {
|
|
646
496
|
this.parser = parser;
|
|
647
497
|
this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;
|
|
648
498
|
}
|
|
649
|
-
|
|
650
499
|
getMaterialType(materialIndex) {
|
|
651
500
|
const parser = this.parser;
|
|
652
501
|
const materialDef = parser.json.materials[materialIndex];
|
|
653
|
-
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
654
|
-
|
|
502
|
+
if (!materialDef.extensions || !materialDef.extensions[this.name])
|
|
503
|
+
return null;
|
|
504
|
+
return THREE.MeshPhysicalMaterial;
|
|
655
505
|
}
|
|
656
|
-
|
|
657
506
|
extendMaterialParams(materialIndex, materialParams) {
|
|
658
507
|
const parser = this.parser;
|
|
659
508
|
const materialDef = parser.json.materials[materialIndex];
|
|
660
|
-
|
|
661
509
|
if (!materialDef.extensions || !materialDef.extensions[this.name]) {
|
|
662
510
|
return Promise.resolve();
|
|
663
511
|
}
|
|
664
|
-
|
|
665
512
|
const pending = [];
|
|
666
513
|
const extension = materialDef.extensions[this.name];
|
|
667
|
-
materialParams.specularIntensity = extension.specularFactor !==
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
pending.push(parser.assignTexture(materialParams, 'specularIntensityMap', extension.specularTexture));
|
|
514
|
+
materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1;
|
|
515
|
+
if (extension.specularTexture !== void 0) {
|
|
516
|
+
pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture));
|
|
671
517
|
}
|
|
672
|
-
|
|
673
518
|
const colorArray = extension.specularColorFactor || [1, 1, 1];
|
|
674
|
-
materialParams.specularColor = new Color(colorArray[0], colorArray[1], colorArray[2]);
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
519
|
+
materialParams.specularColor = new THREE.Color(colorArray[0], colorArray[1], colorArray[2]);
|
|
520
|
+
if (extension.specularColorTexture !== void 0) {
|
|
521
|
+
pending.push(
|
|
522
|
+
parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture).then(function(texture) {
|
|
523
|
+
texture.encoding = THREE.sRGBEncoding;
|
|
524
|
+
})
|
|
525
|
+
);
|
|
526
|
+
}
|
|
682
527
|
return Promise.all(pending);
|
|
683
528
|
}
|
|
684
|
-
|
|
685
529
|
}
|
|
686
|
-
/**
|
|
687
|
-
* BasisU Texture Extension
|
|
688
|
-
*
|
|
689
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu
|
|
690
|
-
*/
|
|
691
|
-
|
|
692
|
-
|
|
693
530
|
class GLTFTextureBasisUExtension {
|
|
694
531
|
constructor(parser) {
|
|
695
532
|
this.parser = parser;
|
|
696
533
|
this.name = EXTENSIONS.KHR_TEXTURE_BASISU;
|
|
697
534
|
}
|
|
698
|
-
|
|
699
535
|
loadTexture(textureIndex) {
|
|
700
536
|
const parser = this.parser;
|
|
701
537
|
const json = parser.json;
|
|
702
538
|
const textureDef = json.textures[textureIndex];
|
|
703
|
-
|
|
704
539
|
if (!textureDef.extensions || !textureDef.extensions[this.name]) {
|
|
705
540
|
return null;
|
|
706
541
|
}
|
|
707
|
-
|
|
708
542
|
const extension = textureDef.extensions[this.name];
|
|
709
543
|
const source = json.images[extension.source];
|
|
710
544
|
const loader = parser.options.ktx2Loader;
|
|
711
|
-
|
|
712
545
|
if (!loader) {
|
|
713
546
|
if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
|
|
714
|
-
throw new Error(
|
|
547
|
+
throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
|
|
715
548
|
} else {
|
|
716
|
-
// Assumes that the extension is optional and that a fallback texture is present
|
|
717
549
|
return null;
|
|
718
550
|
}
|
|
719
551
|
}
|
|
720
|
-
|
|
721
552
|
return parser.loadTextureImage(textureIndex, source, loader);
|
|
722
553
|
}
|
|
723
|
-
|
|
724
554
|
}
|
|
725
|
-
/**
|
|
726
|
-
* WebP Texture Extension
|
|
727
|
-
*
|
|
728
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp
|
|
729
|
-
*/
|
|
730
|
-
|
|
731
|
-
|
|
732
555
|
class GLTFTextureWebPExtension {
|
|
733
556
|
constructor(parser) {
|
|
734
557
|
this.parser = parser;
|
|
735
558
|
this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
|
|
736
559
|
this.isSupported = null;
|
|
737
560
|
}
|
|
738
|
-
|
|
739
561
|
loadTexture(textureIndex) {
|
|
740
562
|
const name = this.name;
|
|
741
563
|
const parser = this.parser;
|
|
742
564
|
const json = parser.json;
|
|
743
565
|
const textureDef = json.textures[textureIndex];
|
|
744
|
-
|
|
745
566
|
if (!textureDef.extensions || !textureDef.extensions[name]) {
|
|
746
567
|
return null;
|
|
747
568
|
}
|
|
748
|
-
|
|
749
569
|
const extension = textureDef.extensions[name];
|
|
750
570
|
const source = json.images[extension.source];
|
|
751
571
|
let loader = parser.textureLoader;
|
|
752
|
-
|
|
753
572
|
if (source.uri) {
|
|
754
573
|
const handler = parser.options.manager.getHandler(source.uri);
|
|
755
|
-
if (handler !== null)
|
|
574
|
+
if (handler !== null)
|
|
575
|
+
loader = handler;
|
|
756
576
|
}
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
577
|
+
return this.detectSupport().then(function(isSupported) {
|
|
578
|
+
if (isSupported)
|
|
579
|
+
return parser.loadTextureImage(textureIndex, source, loader);
|
|
761
580
|
if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
|
|
762
|
-
throw new Error(
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
|
|
581
|
+
throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
|
|
582
|
+
}
|
|
766
583
|
return parser.loadTexture(textureIndex);
|
|
767
584
|
});
|
|
768
585
|
}
|
|
769
|
-
|
|
770
586
|
detectSupport() {
|
|
771
587
|
if (!this.isSupported) {
|
|
772
|
-
this.isSupported = new Promise(function
|
|
773
|
-
const image = new Image();
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
|
|
777
|
-
|
|
778
|
-
image.onload = image.onerror = function () {
|
|
588
|
+
this.isSupported = new Promise(function(resolve) {
|
|
589
|
+
const image = new Image();
|
|
590
|
+
image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA";
|
|
591
|
+
image.onload = image.onerror = function() {
|
|
779
592
|
resolve(image.height === 1);
|
|
780
593
|
};
|
|
781
594
|
});
|
|
782
595
|
}
|
|
783
|
-
|
|
784
596
|
return this.isSupported;
|
|
785
597
|
}
|
|
786
|
-
|
|
787
598
|
}
|
|
788
|
-
/**
|
|
789
|
-
* meshopt BufferView Compression Extension
|
|
790
|
-
*
|
|
791
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression
|
|
792
|
-
*/
|
|
793
|
-
|
|
794
|
-
|
|
795
599
|
class GLTFMeshoptCompression {
|
|
796
600
|
constructor(parser) {
|
|
797
601
|
this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;
|
|
798
602
|
this.parser = parser;
|
|
799
603
|
}
|
|
800
|
-
|
|
801
604
|
loadBufferView(index) {
|
|
802
605
|
const json = this.parser.json;
|
|
803
606
|
const bufferView = json.bufferViews[index];
|
|
804
|
-
|
|
805
607
|
if (bufferView.extensions && bufferView.extensions[this.name]) {
|
|
806
608
|
const extensionDef = bufferView.extensions[this.name];
|
|
807
|
-
const buffer = this.parser.getDependency(
|
|
609
|
+
const buffer = this.parser.getDependency("buffer", extensionDef.buffer);
|
|
808
610
|
const decoder = this.parser.options.meshoptDecoder;
|
|
809
|
-
|
|
810
611
|
if (!decoder || !decoder.supported) {
|
|
811
612
|
if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
|
|
812
|
-
throw new Error(
|
|
613
|
+
throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
|
|
813
614
|
} else {
|
|
814
|
-
// Assumes that the extension is optional and that fallback buffer data is present
|
|
815
615
|
return null;
|
|
816
616
|
}
|
|
817
617
|
}
|
|
818
|
-
|
|
819
|
-
return Promise.all([buffer, decoder.ready]).then(function (res) {
|
|
618
|
+
return Promise.all([buffer, decoder.ready]).then(function(res) {
|
|
820
619
|
const byteOffset = extensionDef.byteOffset || 0;
|
|
821
620
|
const byteLength = extensionDef.byteLength || 0;
|
|
822
621
|
const count = extensionDef.count;
|
|
@@ -830,18 +629,10 @@ class GLTFMeshoptCompression {
|
|
|
830
629
|
return null;
|
|
831
630
|
}
|
|
832
631
|
}
|
|
833
|
-
|
|
834
632
|
}
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
const BINARY_EXTENSION_HEADER_MAGIC = 'glTF';
|
|
633
|
+
const BINARY_EXTENSION_HEADER_MAGIC = "glTF";
|
|
839
634
|
const BINARY_EXTENSION_HEADER_LENGTH = 12;
|
|
840
|
-
const BINARY_EXTENSION_CHUNK_TYPES = {
|
|
841
|
-
JSON: 0x4e4f534a,
|
|
842
|
-
BIN: 0x004e4942
|
|
843
|
-
};
|
|
844
|
-
|
|
635
|
+
const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 };
|
|
845
636
|
class GLTFBinaryExtension {
|
|
846
637
|
constructor(data) {
|
|
847
638
|
this.name = EXTENSIONS.KHR_BINARY_GLTF;
|
|
@@ -849,64 +640,47 @@ class GLTFBinaryExtension {
|
|
|
849
640
|
this.body = null;
|
|
850
641
|
const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);
|
|
851
642
|
this.header = {
|
|
852
|
-
magic: LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),
|
|
643
|
+
magic: THREE.LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),
|
|
853
644
|
version: headerView.getUint32(4, true),
|
|
854
645
|
length: headerView.getUint32(8, true)
|
|
855
646
|
};
|
|
856
|
-
|
|
857
647
|
if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {
|
|
858
|
-
throw new Error(
|
|
859
|
-
} else if (this.header.version < 2
|
|
860
|
-
throw new Error(
|
|
648
|
+
throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
|
|
649
|
+
} else if (this.header.version < 2) {
|
|
650
|
+
throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
|
|
861
651
|
}
|
|
862
|
-
|
|
863
652
|
const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;
|
|
864
653
|
const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);
|
|
865
654
|
let chunkIndex = 0;
|
|
866
|
-
|
|
867
655
|
while (chunkIndex < chunkContentsLength) {
|
|
868
656
|
const chunkLength = chunkView.getUint32(chunkIndex, true);
|
|
869
657
|
chunkIndex += 4;
|
|
870
658
|
const chunkType = chunkView.getUint32(chunkIndex, true);
|
|
871
659
|
chunkIndex += 4;
|
|
872
|
-
|
|
873
660
|
if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {
|
|
874
661
|
const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);
|
|
875
|
-
this.content = LoaderUtils.decodeText(contentArray);
|
|
662
|
+
this.content = THREE.LoaderUtils.decodeText(contentArray);
|
|
876
663
|
} else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {
|
|
877
664
|
const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
|
|
878
665
|
this.body = data.slice(byteOffset, byteOffset + chunkLength);
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
|
|
666
|
+
}
|
|
882
667
|
chunkIndex += chunkLength;
|
|
883
668
|
}
|
|
884
|
-
|
|
885
669
|
if (this.content === null) {
|
|
886
|
-
throw new Error(
|
|
670
|
+
throw new Error("THREE.GLTFLoader: JSON content not found.");
|
|
887
671
|
}
|
|
888
672
|
}
|
|
889
|
-
|
|
890
673
|
}
|
|
891
|
-
/**
|
|
892
|
-
* DRACO Mesh Compression Extension
|
|
893
|
-
*
|
|
894
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression
|
|
895
|
-
*/
|
|
896
|
-
|
|
897
|
-
|
|
898
674
|
class GLTFDracoMeshCompressionExtension {
|
|
899
675
|
constructor(json, dracoLoader) {
|
|
900
676
|
if (!dracoLoader) {
|
|
901
|
-
throw new Error(
|
|
677
|
+
throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
|
|
902
678
|
}
|
|
903
|
-
|
|
904
679
|
this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;
|
|
905
680
|
this.json = json;
|
|
906
681
|
this.dracoLoader = dracoLoader;
|
|
907
682
|
this.dracoLoader.preload();
|
|
908
683
|
}
|
|
909
|
-
|
|
910
684
|
decodePrimitive(primitive, parser) {
|
|
911
685
|
const json = this.json;
|
|
912
686
|
const dracoLoader = this.dracoLoader;
|
|
@@ -915,168 +689,154 @@ class GLTFDracoMeshCompressionExtension {
|
|
|
915
689
|
const threeAttributeMap = {};
|
|
916
690
|
const attributeNormalizedMap = {};
|
|
917
691
|
const attributeTypeMap = {};
|
|
918
|
-
|
|
919
692
|
for (const attributeName in gltfAttributeMap) {
|
|
920
693
|
const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
|
|
921
694
|
threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];
|
|
922
695
|
}
|
|
923
|
-
|
|
924
696
|
for (const attributeName in primitive.attributes) {
|
|
925
697
|
const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
|
|
926
|
-
|
|
927
|
-
if (gltfAttributeMap[attributeName] !== undefined) {
|
|
698
|
+
if (gltfAttributeMap[attributeName] !== void 0) {
|
|
928
699
|
const accessorDef = json.accessors[primitive.attributes[attributeName]];
|
|
929
700
|
const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
|
|
930
701
|
attributeTypeMap[threeAttributeName] = componentType;
|
|
931
702
|
attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true;
|
|
932
703
|
}
|
|
933
704
|
}
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
const
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
705
|
+
return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) {
|
|
706
|
+
return new Promise(function(resolve) {
|
|
707
|
+
dracoLoader.decodeDracoFile(
|
|
708
|
+
bufferView,
|
|
709
|
+
function(geometry) {
|
|
710
|
+
for (const attributeName in geometry.attributes) {
|
|
711
|
+
const attribute = geometry.attributes[attributeName];
|
|
712
|
+
const normalized = attributeNormalizedMap[attributeName];
|
|
713
|
+
if (normalized !== void 0)
|
|
714
|
+
attribute.normalized = normalized;
|
|
715
|
+
}
|
|
716
|
+
resolve(geometry);
|
|
717
|
+
},
|
|
718
|
+
threeAttributeMap,
|
|
719
|
+
attributeTypeMap
|
|
720
|
+
);
|
|
946
721
|
});
|
|
947
722
|
});
|
|
948
723
|
}
|
|
949
|
-
|
|
950
724
|
}
|
|
951
|
-
/**
|
|
952
|
-
* Texture Transform Extension
|
|
953
|
-
*
|
|
954
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform
|
|
955
|
-
*/
|
|
956
|
-
|
|
957
|
-
|
|
958
725
|
class GLTFTextureTransformExtension {
|
|
959
726
|
constructor() {
|
|
960
727
|
this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;
|
|
961
728
|
}
|
|
962
|
-
|
|
963
729
|
extendTexture(texture, transform) {
|
|
964
|
-
if (transform.texCoord !==
|
|
730
|
+
if (transform.texCoord !== void 0) {
|
|
965
731
|
console.warn('THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.');
|
|
966
732
|
}
|
|
967
|
-
|
|
968
|
-
if (transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined) {
|
|
969
|
-
// See https://github.com/mrdoob/three.js/issues/21819.
|
|
733
|
+
if (transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) {
|
|
970
734
|
return texture;
|
|
971
735
|
}
|
|
972
|
-
|
|
973
736
|
texture = texture.clone();
|
|
974
|
-
|
|
975
|
-
if (transform.offset !== undefined) {
|
|
737
|
+
if (transform.offset !== void 0) {
|
|
976
738
|
texture.offset.fromArray(transform.offset);
|
|
977
739
|
}
|
|
978
|
-
|
|
979
|
-
if (transform.rotation !== undefined) {
|
|
740
|
+
if (transform.rotation !== void 0) {
|
|
980
741
|
texture.rotation = transform.rotation;
|
|
981
742
|
}
|
|
982
|
-
|
|
983
|
-
if (transform.scale !== undefined) {
|
|
743
|
+
if (transform.scale !== void 0) {
|
|
984
744
|
texture.repeat.fromArray(transform.scale);
|
|
985
745
|
}
|
|
986
|
-
|
|
987
746
|
texture.needsUpdate = true;
|
|
988
747
|
return texture;
|
|
989
748
|
}
|
|
990
|
-
|
|
991
749
|
}
|
|
992
|
-
|
|
993
|
-
* Specular-Glossiness Extension
|
|
994
|
-
*
|
|
995
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness
|
|
996
|
-
*/
|
|
997
|
-
|
|
998
|
-
/**
|
|
999
|
-
* A sub class of StandardMaterial with some of the functionality
|
|
1000
|
-
* changed via the `onBeforeCompile` callback
|
|
1001
|
-
* @pailhead
|
|
1002
|
-
*/
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
class GLTFMeshStandardSGMaterial extends MeshStandardMaterial {
|
|
750
|
+
class GLTFMeshStandardSGMaterial extends THREE.MeshStandardMaterial {
|
|
1006
751
|
constructor(params) {
|
|
1007
752
|
super();
|
|
1008
|
-
this.isGLTFSpecularGlossinessMaterial = true;
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
const
|
|
1013
|
-
|
|
1014
|
-
|
|
753
|
+
this.isGLTFSpecularGlossinessMaterial = true;
|
|
754
|
+
const specularMapParsFragmentChunk = ["#ifdef USE_SPECULARMAP", " uniform sampler2D specularMap;", "#endif"].join(
|
|
755
|
+
"\n"
|
|
756
|
+
);
|
|
757
|
+
const glossinessMapParsFragmentChunk = [
|
|
758
|
+
"#ifdef USE_GLOSSINESSMAP",
|
|
759
|
+
" uniform sampler2D glossinessMap;",
|
|
760
|
+
"#endif"
|
|
761
|
+
].join("\n");
|
|
762
|
+
const specularMapFragmentChunk = [
|
|
763
|
+
"vec3 specularFactor = specular;",
|
|
764
|
+
"#ifdef USE_SPECULARMAP",
|
|
765
|
+
" vec4 texelSpecular = texture2D( specularMap, vUv );",
|
|
766
|
+
" // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture",
|
|
767
|
+
" specularFactor *= texelSpecular.rgb;",
|
|
768
|
+
"#endif"
|
|
769
|
+
].join("\n");
|
|
770
|
+
const glossinessMapFragmentChunk = [
|
|
771
|
+
"float glossinessFactor = glossiness;",
|
|
772
|
+
"#ifdef USE_GLOSSINESSMAP",
|
|
773
|
+
" vec4 texelGlossiness = texture2D( glossinessMap, vUv );",
|
|
774
|
+
" // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture",
|
|
775
|
+
" glossinessFactor *= texelGlossiness.a;",
|
|
776
|
+
"#endif"
|
|
777
|
+
].join("\n");
|
|
778
|
+
const lightPhysicalFragmentChunk = [
|
|
779
|
+
"PhysicalMaterial material;",
|
|
780
|
+
"material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );",
|
|
781
|
+
"vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );",
|
|
782
|
+
"float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );",
|
|
783
|
+
"material.roughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.",
|
|
784
|
+
"material.roughness += geometryRoughness;",
|
|
785
|
+
"material.roughness = min( material.roughness, 1.0 );",
|
|
786
|
+
"material.specularColor = specularFactor;"
|
|
787
|
+
].join("\n");
|
|
1015
788
|
const uniforms = {
|
|
1016
|
-
specular: {
|
|
1017
|
-
|
|
1018
|
-
},
|
|
1019
|
-
|
|
1020
|
-
value: 1
|
|
1021
|
-
},
|
|
1022
|
-
specularMap: {
|
|
1023
|
-
value: null
|
|
1024
|
-
},
|
|
1025
|
-
glossinessMap: {
|
|
1026
|
-
value: null
|
|
1027
|
-
}
|
|
789
|
+
specular: { value: new THREE.Color().setHex(16777215) },
|
|
790
|
+
glossiness: { value: 1 },
|
|
791
|
+
specularMap: { value: null },
|
|
792
|
+
glossinessMap: { value: null }
|
|
1028
793
|
};
|
|
1029
794
|
this._extraUniforms = uniforms;
|
|
1030
|
-
|
|
1031
|
-
this.onBeforeCompile = function (shader) {
|
|
795
|
+
this.onBeforeCompile = function(shader) {
|
|
1032
796
|
for (const uniformName in uniforms) {
|
|
1033
797
|
shader.uniforms[uniformName] = uniforms[uniformName];
|
|
1034
798
|
}
|
|
1035
|
-
|
|
1036
|
-
shader.fragmentShader = shader.fragmentShader.replace('uniform float roughness;', 'uniform vec3 specular;').replace('uniform float metalness;', 'uniform float glossiness;').replace('#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk).replace('#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk).replace('#include <roughnessmap_fragment>', specularMapFragmentChunk).replace('#include <metalnessmap_fragment>', glossinessMapFragmentChunk).replace('#include <lights_physical_fragment>', lightPhysicalFragmentChunk);
|
|
799
|
+
shader.fragmentShader = shader.fragmentShader.replace("uniform float roughness;", "uniform vec3 specular;").replace("uniform float metalness;", "uniform float glossiness;").replace("#include <roughnessmap_pars_fragment>", specularMapParsFragmentChunk).replace("#include <metalnessmap_pars_fragment>", glossinessMapParsFragmentChunk).replace("#include <roughnessmap_fragment>", specularMapFragmentChunk).replace("#include <metalnessmap_fragment>", glossinessMapFragmentChunk).replace("#include <lights_physical_fragment>", lightPhysicalFragmentChunk);
|
|
1037
800
|
};
|
|
1038
|
-
|
|
1039
801
|
Object.defineProperties(this, {
|
|
1040
802
|
specular: {
|
|
1041
|
-
get: function
|
|
803
|
+
get: function() {
|
|
1042
804
|
return uniforms.specular.value;
|
|
1043
805
|
},
|
|
1044
|
-
set: function
|
|
806
|
+
set: function(v) {
|
|
1045
807
|
uniforms.specular.value = v;
|
|
1046
808
|
}
|
|
1047
809
|
},
|
|
1048
810
|
specularMap: {
|
|
1049
|
-
get: function
|
|
811
|
+
get: function() {
|
|
1050
812
|
return uniforms.specularMap.value;
|
|
1051
813
|
},
|
|
1052
|
-
set: function
|
|
814
|
+
set: function(v) {
|
|
1053
815
|
uniforms.specularMap.value = v;
|
|
1054
|
-
|
|
1055
816
|
if (v) {
|
|
1056
|
-
this.defines.USE_SPECULARMAP =
|
|
817
|
+
this.defines.USE_SPECULARMAP = "";
|
|
1057
818
|
} else {
|
|
1058
819
|
delete this.defines.USE_SPECULARMAP;
|
|
1059
820
|
}
|
|
1060
821
|
}
|
|
1061
822
|
},
|
|
1062
823
|
glossiness: {
|
|
1063
|
-
get: function
|
|
824
|
+
get: function() {
|
|
1064
825
|
return uniforms.glossiness.value;
|
|
1065
826
|
},
|
|
1066
|
-
set: function
|
|
827
|
+
set: function(v) {
|
|
1067
828
|
uniforms.glossiness.value = v;
|
|
1068
829
|
}
|
|
1069
830
|
},
|
|
1070
831
|
glossinessMap: {
|
|
1071
|
-
get: function
|
|
832
|
+
get: function() {
|
|
1072
833
|
return uniforms.glossinessMap.value;
|
|
1073
834
|
},
|
|
1074
|
-
set: function
|
|
835
|
+
set: function(v) {
|
|
1075
836
|
uniforms.glossinessMap.value = v;
|
|
1076
|
-
|
|
1077
837
|
if (v) {
|
|
1078
|
-
this.defines.USE_GLOSSINESSMAP =
|
|
1079
|
-
this.defines.USE_UV =
|
|
838
|
+
this.defines.USE_GLOSSINESSMAP = "";
|
|
839
|
+
this.defines.USE_UV = "";
|
|
1080
840
|
} else {
|
|
1081
841
|
delete this.defines.USE_GLOSSINESSMAP;
|
|
1082
842
|
delete this.defines.USE_UV;
|
|
@@ -1090,7 +850,6 @@ class GLTFMeshStandardSGMaterial extends MeshStandardMaterial {
|
|
|
1090
850
|
delete this.roughnessMap;
|
|
1091
851
|
this.setValues(params);
|
|
1092
852
|
}
|
|
1093
|
-
|
|
1094
853
|
copy(source) {
|
|
1095
854
|
super.copy(source);
|
|
1096
855
|
this.specularMap = source.specularMap;
|
|
@@ -1103,132 +862,118 @@ class GLTFMeshStandardSGMaterial extends MeshStandardMaterial {
|
|
|
1103
862
|
delete this.roughnessMap;
|
|
1104
863
|
return this;
|
|
1105
864
|
}
|
|
1106
|
-
|
|
1107
865
|
}
|
|
1108
|
-
|
|
1109
866
|
class GLTFMaterialsPbrSpecularGlossinessExtension {
|
|
1110
867
|
constructor() {
|
|
1111
868
|
this.name = EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;
|
|
1112
|
-
this.specularGlossinessParams = [
|
|
869
|
+
this.specularGlossinessParams = [
|
|
870
|
+
"color",
|
|
871
|
+
"map",
|
|
872
|
+
"lightMap",
|
|
873
|
+
"lightMapIntensity",
|
|
874
|
+
"aoMap",
|
|
875
|
+
"aoMapIntensity",
|
|
876
|
+
"emissive",
|
|
877
|
+
"emissiveIntensity",
|
|
878
|
+
"emissiveMap",
|
|
879
|
+
"bumpMap",
|
|
880
|
+
"bumpScale",
|
|
881
|
+
"normalMap",
|
|
882
|
+
"normalMapType",
|
|
883
|
+
"displacementMap",
|
|
884
|
+
"displacementScale",
|
|
885
|
+
"displacementBias",
|
|
886
|
+
"specularMap",
|
|
887
|
+
"specular",
|
|
888
|
+
"glossinessMap",
|
|
889
|
+
"glossiness",
|
|
890
|
+
"alphaMap",
|
|
891
|
+
"envMap",
|
|
892
|
+
"envMapIntensity",
|
|
893
|
+
"refractionRatio"
|
|
894
|
+
];
|
|
1113
895
|
}
|
|
1114
|
-
|
|
1115
896
|
getMaterialType() {
|
|
1116
897
|
return GLTFMeshStandardSGMaterial;
|
|
1117
898
|
}
|
|
1118
|
-
|
|
1119
899
|
extendParams(materialParams, materialDef, parser) {
|
|
1120
900
|
const pbrSpecularGlossiness = materialDef.extensions[this.name];
|
|
1121
|
-
materialParams.color = new Color(1
|
|
1122
|
-
materialParams.opacity = 1
|
|
901
|
+
materialParams.color = new THREE.Color(1, 1, 1);
|
|
902
|
+
materialParams.opacity = 1;
|
|
1123
903
|
const pending = [];
|
|
1124
|
-
|
|
1125
904
|
if (Array.isArray(pbrSpecularGlossiness.diffuseFactor)) {
|
|
1126
905
|
const array = pbrSpecularGlossiness.diffuseFactor;
|
|
1127
906
|
materialParams.color.fromArray(array);
|
|
1128
907
|
materialParams.opacity = array[3];
|
|
1129
908
|
}
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
pending.push(parser.assignTexture(materialParams, 'map', pbrSpecularGlossiness.diffuseTexture));
|
|
909
|
+
if (pbrSpecularGlossiness.diffuseTexture !== void 0) {
|
|
910
|
+
pending.push(parser.assignTexture(materialParams, "map", pbrSpecularGlossiness.diffuseTexture));
|
|
1133
911
|
}
|
|
1134
|
-
|
|
1135
|
-
materialParams.
|
|
1136
|
-
materialParams.
|
|
1137
|
-
materialParams.specular = new Color(1.0, 1.0, 1.0);
|
|
1138
|
-
|
|
912
|
+
materialParams.emissive = new THREE.Color(0, 0, 0);
|
|
913
|
+
materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== void 0 ? pbrSpecularGlossiness.glossinessFactor : 1;
|
|
914
|
+
materialParams.specular = new THREE.Color(1, 1, 1);
|
|
1139
915
|
if (Array.isArray(pbrSpecularGlossiness.specularFactor)) {
|
|
1140
916
|
materialParams.specular.fromArray(pbrSpecularGlossiness.specularFactor);
|
|
1141
917
|
}
|
|
1142
|
-
|
|
1143
|
-
if (pbrSpecularGlossiness.specularGlossinessTexture !== undefined) {
|
|
918
|
+
if (pbrSpecularGlossiness.specularGlossinessTexture !== void 0) {
|
|
1144
919
|
const specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;
|
|
1145
|
-
pending.push(parser.assignTexture(materialParams,
|
|
1146
|
-
pending.push(parser.assignTexture(materialParams,
|
|
920
|
+
pending.push(parser.assignTexture(materialParams, "glossinessMap", specGlossMapDef));
|
|
921
|
+
pending.push(parser.assignTexture(materialParams, "specularMap", specGlossMapDef));
|
|
1147
922
|
}
|
|
1148
|
-
|
|
1149
923
|
return Promise.all(pending);
|
|
1150
924
|
}
|
|
1151
|
-
|
|
1152
925
|
createMaterial(materialParams) {
|
|
1153
926
|
const material = new GLTFMeshStandardSGMaterial(materialParams);
|
|
1154
927
|
material.fog = true;
|
|
1155
928
|
material.color = materialParams.color;
|
|
1156
|
-
material.map = materialParams.map ===
|
|
929
|
+
material.map = materialParams.map === void 0 ? null : materialParams.map;
|
|
1157
930
|
material.lightMap = null;
|
|
1158
|
-
material.lightMapIntensity = 1
|
|
1159
|
-
material.aoMap = materialParams.aoMap ===
|
|
1160
|
-
material.aoMapIntensity = 1
|
|
931
|
+
material.lightMapIntensity = 1;
|
|
932
|
+
material.aoMap = materialParams.aoMap === void 0 ? null : materialParams.aoMap;
|
|
933
|
+
material.aoMapIntensity = 1;
|
|
1161
934
|
material.emissive = materialParams.emissive;
|
|
1162
|
-
material.emissiveIntensity = 1
|
|
1163
|
-
material.emissiveMap = materialParams.emissiveMap ===
|
|
1164
|
-
material.bumpMap = materialParams.bumpMap ===
|
|
935
|
+
material.emissiveIntensity = 1;
|
|
936
|
+
material.emissiveMap = materialParams.emissiveMap === void 0 ? null : materialParams.emissiveMap;
|
|
937
|
+
material.bumpMap = materialParams.bumpMap === void 0 ? null : materialParams.bumpMap;
|
|
1165
938
|
material.bumpScale = 1;
|
|
1166
|
-
material.normalMap = materialParams.normalMap ===
|
|
1167
|
-
material.normalMapType = TangentSpaceNormalMap;
|
|
1168
|
-
if (materialParams.normalScale)
|
|
939
|
+
material.normalMap = materialParams.normalMap === void 0 ? null : materialParams.normalMap;
|
|
940
|
+
material.normalMapType = THREE.TangentSpaceNormalMap;
|
|
941
|
+
if (materialParams.normalScale)
|
|
942
|
+
material.normalScale = materialParams.normalScale;
|
|
1169
943
|
material.displacementMap = null;
|
|
1170
944
|
material.displacementScale = 1;
|
|
1171
945
|
material.displacementBias = 0;
|
|
1172
|
-
material.specularMap = materialParams.specularMap ===
|
|
946
|
+
material.specularMap = materialParams.specularMap === void 0 ? null : materialParams.specularMap;
|
|
1173
947
|
material.specular = materialParams.specular;
|
|
1174
|
-
material.glossinessMap = materialParams.glossinessMap ===
|
|
948
|
+
material.glossinessMap = materialParams.glossinessMap === void 0 ? null : materialParams.glossinessMap;
|
|
1175
949
|
material.glossiness = materialParams.glossiness;
|
|
1176
950
|
material.alphaMap = null;
|
|
1177
|
-
material.envMap = materialParams.envMap ===
|
|
1178
|
-
material.envMapIntensity = 1
|
|
951
|
+
material.envMap = materialParams.envMap === void 0 ? null : materialParams.envMap;
|
|
952
|
+
material.envMapIntensity = 1;
|
|
1179
953
|
material.refractionRatio = 0.98;
|
|
1180
954
|
return material;
|
|
1181
955
|
}
|
|
1182
|
-
|
|
1183
956
|
}
|
|
1184
|
-
/**
|
|
1185
|
-
* Mesh Quantization Extension
|
|
1186
|
-
*
|
|
1187
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization
|
|
1188
|
-
*/
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
957
|
class GLTFMeshQuantizationExtension {
|
|
1192
958
|
constructor() {
|
|
1193
959
|
this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;
|
|
1194
960
|
}
|
|
1195
|
-
|
|
1196
961
|
}
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
/********** INTERPOLATION ********/
|
|
1200
|
-
|
|
1201
|
-
/*********************************/
|
|
1202
|
-
// Spline Interpolation
|
|
1203
|
-
// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
class GLTFCubicSplineInterpolant extends Interpolant {
|
|
962
|
+
class GLTFCubicSplineInterpolant extends THREE.Interpolant {
|
|
1207
963
|
constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
|
|
1208
964
|
super(parameterPositions, sampleValues, sampleSize, resultBuffer);
|
|
1209
965
|
}
|
|
1210
|
-
|
|
1211
966
|
copySampleValue_(index) {
|
|
1212
|
-
|
|
1213
|
-
// CUBICSPLINE values layout in interpolate_() function below.
|
|
1214
|
-
const result = this.resultBuffer,
|
|
1215
|
-
values = this.sampleValues,
|
|
1216
|
-
valueSize = this.valueSize,
|
|
1217
|
-
offset = index * valueSize * 3 + valueSize;
|
|
1218
|
-
|
|
967
|
+
const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize;
|
|
1219
968
|
for (let i = 0; i !== valueSize; i++) {
|
|
1220
969
|
result[i] = values[offset + i];
|
|
1221
970
|
}
|
|
1222
|
-
|
|
1223
971
|
return result;
|
|
1224
972
|
}
|
|
1225
|
-
|
|
1226
973
|
}
|
|
1227
|
-
|
|
1228
974
|
GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
|
|
1229
975
|
GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;
|
|
1230
|
-
|
|
1231
|
-
GLTFCubicSplineInterpolant.prototype.interpolate_ = function (i1, t0, t, t1) {
|
|
976
|
+
GLTFCubicSplineInterpolant.prototype.interpolate_ = function(i1, t0, t, t1) {
|
|
1232
977
|
const result = this.resultBuffer;
|
|
1233
978
|
const values = this.sampleValues;
|
|
1234
979
|
const stride = this.valueSize;
|
|
@@ -1243,48 +988,26 @@ GLTFCubicSplineInterpolant.prototype.interpolate_ = function (i1, t0, t, t1) {
|
|
|
1243
988
|
const s2 = -2 * ppp + 3 * pp;
|
|
1244
989
|
const s3 = ppp - pp;
|
|
1245
990
|
const s0 = 1 - s2;
|
|
1246
|
-
const s1 = s3 - pp + p;
|
|
1247
|
-
// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]
|
|
1248
|
-
|
|
991
|
+
const s1 = s3 - pp + p;
|
|
1249
992
|
for (let i = 0; i !== stride; i++) {
|
|
1250
|
-
const p0 = values[offset0 + i + stride];
|
|
1251
|
-
|
|
1252
|
-
const
|
|
1253
|
-
|
|
1254
|
-
const p1 = values[offset1 + i + stride]; // splineVertex_k+1
|
|
1255
|
-
|
|
1256
|
-
const m1 = values[offset1 + i] * td; // inTangent_k+1 * (t_k+1 - t_k)
|
|
1257
|
-
|
|
993
|
+
const p0 = values[offset0 + i + stride];
|
|
994
|
+
const m0 = values[offset0 + i + stride2] * td;
|
|
995
|
+
const p1 = values[offset1 + i + stride];
|
|
996
|
+
const m1 = values[offset1 + i] * td;
|
|
1258
997
|
result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;
|
|
1259
998
|
}
|
|
1260
|
-
|
|
1261
999
|
return result;
|
|
1262
1000
|
};
|
|
1263
|
-
|
|
1264
|
-
const _q = new Quaternion();
|
|
1265
|
-
|
|
1001
|
+
const _q = new THREE.Quaternion();
|
|
1266
1002
|
class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
|
|
1267
1003
|
interpolate_(i1, t0, t, t1) {
|
|
1268
1004
|
const result = super.interpolate_(i1, t0, t, t1);
|
|
1269
|
-
|
|
1270
1005
|
_q.fromArray(result).normalize().toArray(result);
|
|
1271
|
-
|
|
1272
1006
|
return result;
|
|
1273
1007
|
}
|
|
1274
|
-
|
|
1275
1008
|
}
|
|
1276
|
-
/*********************************/
|
|
1277
|
-
|
|
1278
|
-
/********** INTERNALS ************/
|
|
1279
|
-
|
|
1280
|
-
/*********************************/
|
|
1281
|
-
|
|
1282
|
-
/* CONSTANTS */
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
1009
|
const WEBGL_CONSTANTS = {
|
|
1286
1010
|
FLOAT: 5126,
|
|
1287
|
-
//FLOAT_MAT2: 35674,
|
|
1288
1011
|
FLOAT_MAT3: 35675,
|
|
1289
1012
|
FLOAT_MAT4: 35676,
|
|
1290
1013
|
FLOAT_VEC2: 35664,
|
|
@@ -1312,17 +1035,17 @@ const WEBGL_COMPONENT_TYPES = {
|
|
|
1312
1035
|
5126: Float32Array
|
|
1313
1036
|
};
|
|
1314
1037
|
const WEBGL_FILTERS = {
|
|
1315
|
-
9728: NearestFilter,
|
|
1316
|
-
9729: LinearFilter,
|
|
1317
|
-
9984: NearestMipmapNearestFilter,
|
|
1318
|
-
9985: LinearMipmapNearestFilter,
|
|
1319
|
-
9986: NearestMipmapLinearFilter,
|
|
1320
|
-
9987: LinearMipmapLinearFilter
|
|
1038
|
+
9728: THREE.NearestFilter,
|
|
1039
|
+
9729: THREE.LinearFilter,
|
|
1040
|
+
9984: THREE.NearestMipmapNearestFilter,
|
|
1041
|
+
9985: THREE.LinearMipmapNearestFilter,
|
|
1042
|
+
9986: THREE.NearestMipmapLinearFilter,
|
|
1043
|
+
9987: THREE.LinearMipmapLinearFilter
|
|
1321
1044
|
};
|
|
1322
1045
|
const WEBGL_WRAPPINGS = {
|
|
1323
|
-
33071: ClampToEdgeWrapping,
|
|
1324
|
-
33648: MirroredRepeatWrapping,
|
|
1325
|
-
10497: RepeatWrapping
|
|
1046
|
+
33071: THREE.ClampToEdgeWrapping,
|
|
1047
|
+
33648: THREE.MirroredRepeatWrapping,
|
|
1048
|
+
10497: THREE.RepeatWrapping
|
|
1326
1049
|
};
|
|
1327
1050
|
const WEBGL_TYPE_SIZES = {
|
|
1328
1051
|
SCALAR: 1,
|
|
@@ -1334,848 +1057,621 @@ const WEBGL_TYPE_SIZES = {
|
|
|
1334
1057
|
MAT4: 16
|
|
1335
1058
|
};
|
|
1336
1059
|
const ATTRIBUTES = {
|
|
1337
|
-
POSITION:
|
|
1338
|
-
NORMAL:
|
|
1339
|
-
TANGENT:
|
|
1340
|
-
TEXCOORD_0:
|
|
1341
|
-
TEXCOORD_1:
|
|
1342
|
-
COLOR_0:
|
|
1343
|
-
WEIGHTS_0:
|
|
1344
|
-
JOINTS_0:
|
|
1060
|
+
POSITION: "position",
|
|
1061
|
+
NORMAL: "normal",
|
|
1062
|
+
TANGENT: "tangent",
|
|
1063
|
+
TEXCOORD_0: "uv",
|
|
1064
|
+
TEXCOORD_1: "uv2",
|
|
1065
|
+
COLOR_0: "color",
|
|
1066
|
+
WEIGHTS_0: "skinWeight",
|
|
1067
|
+
JOINTS_0: "skinIndex"
|
|
1345
1068
|
};
|
|
1346
1069
|
const PATH_PROPERTIES = {
|
|
1347
|
-
scale:
|
|
1348
|
-
translation:
|
|
1349
|
-
rotation:
|
|
1350
|
-
weights:
|
|
1070
|
+
scale: "scale",
|
|
1071
|
+
translation: "position",
|
|
1072
|
+
rotation: "quaternion",
|
|
1073
|
+
weights: "morphTargetInfluences"
|
|
1351
1074
|
};
|
|
1352
1075
|
const INTERPOLATION = {
|
|
1353
|
-
CUBICSPLINE:
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
LINEAR: InterpolateLinear,
|
|
1357
|
-
STEP: InterpolateDiscrete
|
|
1076
|
+
CUBICSPLINE: void 0,
|
|
1077
|
+
LINEAR: THREE.InterpolateLinear,
|
|
1078
|
+
STEP: THREE.InterpolateDiscrete
|
|
1358
1079
|
};
|
|
1359
1080
|
const ALPHA_MODES = {
|
|
1360
|
-
OPAQUE:
|
|
1361
|
-
MASK:
|
|
1362
|
-
BLEND:
|
|
1081
|
+
OPAQUE: "OPAQUE",
|
|
1082
|
+
MASK: "MASK",
|
|
1083
|
+
BLEND: "BLEND"
|
|
1363
1084
|
};
|
|
1364
|
-
/**
|
|
1365
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material
|
|
1366
|
-
*/
|
|
1367
|
-
|
|
1368
1085
|
function createDefaultMaterial(cache) {
|
|
1369
|
-
if (cache[
|
|
1370
|
-
cache[
|
|
1371
|
-
color:
|
|
1372
|
-
emissive:
|
|
1086
|
+
if (cache["DefaultMaterial"] === void 0) {
|
|
1087
|
+
cache["DefaultMaterial"] = new THREE.MeshStandardMaterial({
|
|
1088
|
+
color: 16777215,
|
|
1089
|
+
emissive: 0,
|
|
1373
1090
|
metalness: 1,
|
|
1374
1091
|
roughness: 1,
|
|
1375
1092
|
transparent: false,
|
|
1376
1093
|
depthTest: true,
|
|
1377
|
-
side: FrontSide
|
|
1094
|
+
side: THREE.FrontSide
|
|
1378
1095
|
});
|
|
1379
1096
|
}
|
|
1380
|
-
|
|
1381
|
-
return cache['DefaultMaterial'];
|
|
1097
|
+
return cache["DefaultMaterial"];
|
|
1382
1098
|
}
|
|
1383
|
-
|
|
1384
1099
|
function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {
|
|
1385
|
-
// Add unknown glTF extensions to an object's userData.
|
|
1386
1100
|
for (const name in objectDef.extensions) {
|
|
1387
|
-
if (knownExtensions[name] ===
|
|
1101
|
+
if (knownExtensions[name] === void 0) {
|
|
1388
1102
|
object.userData.gltfExtensions = object.userData.gltfExtensions || {};
|
|
1389
1103
|
object.userData.gltfExtensions[name] = objectDef.extensions[name];
|
|
1390
1104
|
}
|
|
1391
1105
|
}
|
|
1392
1106
|
}
|
|
1393
|
-
/**
|
|
1394
|
-
* @param {Object3D|Material|BufferGeometry} object
|
|
1395
|
-
* @param {GLTF.definition} gltfDef
|
|
1396
|
-
*/
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
1107
|
function assignExtrasToUserData(object, gltfDef) {
|
|
1400
|
-
if (gltfDef.extras !==
|
|
1401
|
-
if (typeof gltfDef.extras ===
|
|
1108
|
+
if (gltfDef.extras !== void 0) {
|
|
1109
|
+
if (typeof gltfDef.extras === "object") {
|
|
1402
1110
|
Object.assign(object.userData, gltfDef.extras);
|
|
1403
1111
|
} else {
|
|
1404
|
-
console.warn(
|
|
1112
|
+
console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras);
|
|
1405
1113
|
}
|
|
1406
1114
|
}
|
|
1407
1115
|
}
|
|
1408
|
-
/**
|
|
1409
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets
|
|
1410
|
-
*
|
|
1411
|
-
* @param {BufferGeometry} geometry
|
|
1412
|
-
* @param {Array<GLTF.Target>} targets
|
|
1413
|
-
* @param {GLTFParser} parser
|
|
1414
|
-
* @return {Promise<BufferGeometry>}
|
|
1415
|
-
*/
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
1116
|
function addMorphTargets(geometry, targets, parser) {
|
|
1419
1117
|
let hasMorphPosition = false;
|
|
1420
1118
|
let hasMorphNormal = false;
|
|
1421
|
-
|
|
1422
1119
|
for (let i = 0, il = targets.length; i < il; i++) {
|
|
1423
1120
|
const target = targets[i];
|
|
1424
|
-
if (target.POSITION !==
|
|
1425
|
-
|
|
1426
|
-
if (
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1121
|
+
if (target.POSITION !== void 0)
|
|
1122
|
+
hasMorphPosition = true;
|
|
1123
|
+
if (target.NORMAL !== void 0)
|
|
1124
|
+
hasMorphNormal = true;
|
|
1125
|
+
if (hasMorphPosition && hasMorphNormal)
|
|
1126
|
+
break;
|
|
1127
|
+
}
|
|
1128
|
+
if (!hasMorphPosition && !hasMorphNormal)
|
|
1129
|
+
return Promise.resolve(geometry);
|
|
1430
1130
|
const pendingPositionAccessors = [];
|
|
1431
1131
|
const pendingNormalAccessors = [];
|
|
1432
|
-
|
|
1433
1132
|
for (let i = 0, il = targets.length; i < il; i++) {
|
|
1434
1133
|
const target = targets[i];
|
|
1435
|
-
|
|
1436
1134
|
if (hasMorphPosition) {
|
|
1437
|
-
const pendingAccessor = target.POSITION !==
|
|
1135
|
+
const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position;
|
|
1438
1136
|
pendingPositionAccessors.push(pendingAccessor);
|
|
1439
1137
|
}
|
|
1440
|
-
|
|
1441
1138
|
if (hasMorphNormal) {
|
|
1442
|
-
const pendingAccessor = target.NORMAL !==
|
|
1139
|
+
const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal;
|
|
1443
1140
|
pendingNormalAccessors.push(pendingAccessor);
|
|
1444
1141
|
}
|
|
1445
1142
|
}
|
|
1446
|
-
|
|
1447
|
-
return Promise.all([Promise.all(pendingPositionAccessors), Promise.all(pendingNormalAccessors)]).then(function (accessors) {
|
|
1143
|
+
return Promise.all([Promise.all(pendingPositionAccessors), Promise.all(pendingNormalAccessors)]).then(function(accessors) {
|
|
1448
1144
|
const morphPositions = accessors[0];
|
|
1449
1145
|
const morphNormals = accessors[1];
|
|
1450
|
-
if (hasMorphPosition)
|
|
1451
|
-
|
|
1146
|
+
if (hasMorphPosition)
|
|
1147
|
+
geometry.morphAttributes.position = morphPositions;
|
|
1148
|
+
if (hasMorphNormal)
|
|
1149
|
+
geometry.morphAttributes.normal = morphNormals;
|
|
1452
1150
|
geometry.morphTargetsRelative = true;
|
|
1453
1151
|
return geometry;
|
|
1454
1152
|
});
|
|
1455
1153
|
}
|
|
1456
|
-
/**
|
|
1457
|
-
* @param {Mesh} mesh
|
|
1458
|
-
* @param {GLTF.Mesh} meshDef
|
|
1459
|
-
*/
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
1154
|
function updateMorphTargets(mesh, meshDef) {
|
|
1463
1155
|
mesh.updateMorphTargets();
|
|
1464
|
-
|
|
1465
|
-
if (meshDef.weights !== undefined) {
|
|
1156
|
+
if (meshDef.weights !== void 0) {
|
|
1466
1157
|
for (let i = 0, il = meshDef.weights.length; i < il; i++) {
|
|
1467
1158
|
mesh.morphTargetInfluences[i] = meshDef.weights[i];
|
|
1468
1159
|
}
|
|
1469
|
-
}
|
|
1470
|
-
|
|
1471
|
-
|
|
1160
|
+
}
|
|
1472
1161
|
if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {
|
|
1473
1162
|
const targetNames = meshDef.extras.targetNames;
|
|
1474
|
-
|
|
1475
1163
|
if (mesh.morphTargetInfluences.length === targetNames.length) {
|
|
1476
1164
|
mesh.morphTargetDictionary = {};
|
|
1477
|
-
|
|
1478
1165
|
for (let i = 0, il = targetNames.length; i < il; i++) {
|
|
1479
1166
|
mesh.morphTargetDictionary[targetNames[i]] = i;
|
|
1480
1167
|
}
|
|
1481
1168
|
} else {
|
|
1482
|
-
console.warn(
|
|
1169
|
+
console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
|
|
1483
1170
|
}
|
|
1484
1171
|
}
|
|
1485
1172
|
}
|
|
1486
|
-
|
|
1487
1173
|
function createPrimitiveKey(primitiveDef) {
|
|
1488
1174
|
const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
|
|
1489
1175
|
let geometryKey;
|
|
1490
|
-
|
|
1491
1176
|
if (dracoExtension) {
|
|
1492
|
-
geometryKey =
|
|
1177
|
+
geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes);
|
|
1493
1178
|
} else {
|
|
1494
|
-
geometryKey = primitiveDef.indices +
|
|
1179
|
+
geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode;
|
|
1495
1180
|
}
|
|
1496
|
-
|
|
1497
1181
|
return geometryKey;
|
|
1498
1182
|
}
|
|
1499
|
-
|
|
1500
1183
|
function createAttributesKey(attributes) {
|
|
1501
|
-
let attributesKey =
|
|
1184
|
+
let attributesKey = "";
|
|
1502
1185
|
const keys = Object.keys(attributes).sort();
|
|
1503
|
-
|
|
1504
1186
|
for (let i = 0, il = keys.length; i < il; i++) {
|
|
1505
|
-
attributesKey += keys[i] +
|
|
1187
|
+
attributesKey += keys[i] + ":" + attributes[keys[i]] + ";";
|
|
1506
1188
|
}
|
|
1507
|
-
|
|
1508
1189
|
return attributesKey;
|
|
1509
1190
|
}
|
|
1510
|
-
|
|
1511
1191
|
function getNormalizedComponentScale(constructor) {
|
|
1512
|
-
// Reference:
|
|
1513
|
-
// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
|
|
1514
1192
|
switch (constructor) {
|
|
1515
1193
|
case Int8Array:
|
|
1516
1194
|
return 1 / 127;
|
|
1517
|
-
|
|
1518
1195
|
case Uint8Array:
|
|
1519
1196
|
return 1 / 255;
|
|
1520
|
-
|
|
1521
1197
|
case Int16Array:
|
|
1522
1198
|
return 1 / 32767;
|
|
1523
|
-
|
|
1524
1199
|
case Uint16Array:
|
|
1525
1200
|
return 1 / 65535;
|
|
1526
|
-
|
|
1527
1201
|
default:
|
|
1528
|
-
throw new Error(
|
|
1202
|
+
throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
|
|
1529
1203
|
}
|
|
1530
1204
|
}
|
|
1531
|
-
/* GLTF PARSER */
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
1205
|
class GLTFParser {
|
|
1535
1206
|
constructor(json = {}, options = {}) {
|
|
1536
1207
|
this.json = json;
|
|
1537
1208
|
this.extensions = {};
|
|
1538
1209
|
this.plugins = {};
|
|
1539
|
-
this.options = options;
|
|
1540
|
-
|
|
1541
|
-
this.
|
|
1542
|
-
|
|
1543
|
-
this.
|
|
1544
|
-
|
|
1545
|
-
this.
|
|
1546
|
-
|
|
1547
|
-
this.
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
};
|
|
1551
|
-
this.cameraCache = {
|
|
1552
|
-
refs: {},
|
|
1553
|
-
uses: {}
|
|
1554
|
-
};
|
|
1555
|
-
this.lightCache = {
|
|
1556
|
-
refs: {},
|
|
1557
|
-
uses: {}
|
|
1558
|
-
};
|
|
1559
|
-
this.textureCache = {}; // Track node names, to ensure no duplicates
|
|
1560
|
-
|
|
1561
|
-
this.nodeNamesUsed = {}; // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the
|
|
1562
|
-
// expensive work of uploading a texture to the GPU off the main thread.
|
|
1563
|
-
|
|
1564
|
-
if (typeof createImageBitmap !== 'undefined' && /Firefox|^((?!chrome|android).)*safari/i.test(navigator.userAgent) === false) {
|
|
1565
|
-
this.textureLoader = new ImageBitmapLoader(this.options.manager);
|
|
1210
|
+
this.options = options;
|
|
1211
|
+
this.cache = new GLTFRegistry();
|
|
1212
|
+
this.associations = /* @__PURE__ */ new Map();
|
|
1213
|
+
this.primitiveCache = {};
|
|
1214
|
+
this.meshCache = { refs: {}, uses: {} };
|
|
1215
|
+
this.cameraCache = { refs: {}, uses: {} };
|
|
1216
|
+
this.lightCache = { refs: {}, uses: {} };
|
|
1217
|
+
this.textureCache = {};
|
|
1218
|
+
this.nodeNamesUsed = {};
|
|
1219
|
+
if (typeof createImageBitmap !== "undefined" && /Firefox|^((?!chrome|android).)*safari/i.test(navigator.userAgent) === false) {
|
|
1220
|
+
this.textureLoader = new THREE.ImageBitmapLoader(this.options.manager);
|
|
1566
1221
|
} else {
|
|
1567
|
-
this.textureLoader = new TextureLoader(this.options.manager);
|
|
1222
|
+
this.textureLoader = new THREE.TextureLoader(this.options.manager);
|
|
1568
1223
|
}
|
|
1569
|
-
|
|
1570
1224
|
this.textureLoader.setCrossOrigin(this.options.crossOrigin);
|
|
1571
1225
|
this.textureLoader.setRequestHeader(this.options.requestHeader);
|
|
1572
|
-
this.fileLoader = new FileLoader(this.options.manager);
|
|
1573
|
-
this.fileLoader.setResponseType(
|
|
1574
|
-
|
|
1575
|
-
if (this.options.crossOrigin === 'use-credentials') {
|
|
1226
|
+
this.fileLoader = new THREE.FileLoader(this.options.manager);
|
|
1227
|
+
this.fileLoader.setResponseType("arraybuffer");
|
|
1228
|
+
if (this.options.crossOrigin === "use-credentials") {
|
|
1576
1229
|
this.fileLoader.setWithCredentials(true);
|
|
1577
1230
|
}
|
|
1578
1231
|
}
|
|
1579
|
-
|
|
1580
1232
|
setExtensions(extensions) {
|
|
1581
1233
|
this.extensions = extensions;
|
|
1582
1234
|
}
|
|
1583
|
-
|
|
1584
1235
|
setPlugins(plugins) {
|
|
1585
1236
|
this.plugins = plugins;
|
|
1586
1237
|
}
|
|
1587
|
-
|
|
1588
1238
|
parse(onLoad, onError) {
|
|
1589
1239
|
const parser = this;
|
|
1590
1240
|
const json = this.json;
|
|
1591
|
-
const extensions = this.extensions;
|
|
1592
|
-
|
|
1593
|
-
this.
|
|
1594
|
-
|
|
1595
|
-
this._invokeAll(function (ext) {
|
|
1241
|
+
const extensions = this.extensions;
|
|
1242
|
+
this.cache.removeAll();
|
|
1243
|
+
this._invokeAll(function(ext) {
|
|
1596
1244
|
return ext._markDefs && ext._markDefs();
|
|
1597
1245
|
});
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1246
|
+
Promise.all(
|
|
1247
|
+
this._invokeAll(function(ext) {
|
|
1248
|
+
return ext.beforeRoot && ext.beforeRoot();
|
|
1249
|
+
})
|
|
1250
|
+
).then(function() {
|
|
1251
|
+
return Promise.all([
|
|
1252
|
+
parser.getDependencies("scene"),
|
|
1253
|
+
parser.getDependencies("animation"),
|
|
1254
|
+
parser.getDependencies("camera")
|
|
1255
|
+
]);
|
|
1256
|
+
}).then(function(dependencies) {
|
|
1604
1257
|
const result = {
|
|
1605
1258
|
scene: dependencies[0][json.scene || 0],
|
|
1606
1259
|
scenes: dependencies[0],
|
|
1607
1260
|
animations: dependencies[1],
|
|
1608
1261
|
cameras: dependencies[2],
|
|
1609
1262
|
asset: json.asset,
|
|
1610
|
-
parser
|
|
1263
|
+
parser,
|
|
1611
1264
|
userData: {}
|
|
1612
1265
|
};
|
|
1613
1266
|
addUnknownExtensionsToUserData(extensions, result, json);
|
|
1614
1267
|
assignExtrasToUserData(result, json);
|
|
1615
|
-
Promise.all(
|
|
1616
|
-
|
|
1617
|
-
|
|
1268
|
+
Promise.all(
|
|
1269
|
+
parser._invokeAll(function(ext) {
|
|
1270
|
+
return ext.afterRoot && ext.afterRoot(result);
|
|
1271
|
+
})
|
|
1272
|
+
).then(function() {
|
|
1618
1273
|
onLoad(result);
|
|
1619
1274
|
});
|
|
1620
1275
|
}).catch(onError);
|
|
1621
1276
|
}
|
|
1622
|
-
/**
|
|
1623
|
-
* Marks the special nodes/meshes in json for efficient parse.
|
|
1624
|
-
*/
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
1277
|
_markDefs() {
|
|
1628
1278
|
const nodeDefs = this.json.nodes || [];
|
|
1629
1279
|
const skinDefs = this.json.skins || [];
|
|
1630
|
-
const meshDefs = this.json.meshes || [];
|
|
1631
|
-
// Object3D. Use the skins' joint references to mark bones.
|
|
1632
|
-
|
|
1280
|
+
const meshDefs = this.json.meshes || [];
|
|
1633
1281
|
for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {
|
|
1634
1282
|
const joints = skinDefs[skinIndex].joints;
|
|
1635
|
-
|
|
1636
1283
|
for (let i = 0, il = joints.length; i < il; i++) {
|
|
1637
1284
|
nodeDefs[joints[i]].isBone = true;
|
|
1638
1285
|
}
|
|
1639
|
-
}
|
|
1640
|
-
// as well as skeleton joints.
|
|
1641
|
-
|
|
1642
|
-
|
|
1286
|
+
}
|
|
1643
1287
|
for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
|
|
1644
1288
|
const nodeDef = nodeDefs[nodeIndex];
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
// a SkinnedMesh or Mesh. Use the node's mesh reference
|
|
1649
|
-
// to mark SkinnedMesh if node has skin.
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
if (nodeDef.skin !== undefined) {
|
|
1289
|
+
if (nodeDef.mesh !== void 0) {
|
|
1290
|
+
this._addNodeRef(this.meshCache, nodeDef.mesh);
|
|
1291
|
+
if (nodeDef.skin !== void 0) {
|
|
1653
1292
|
meshDefs[nodeDef.mesh].isSkinnedMesh = true;
|
|
1654
1293
|
}
|
|
1655
1294
|
}
|
|
1656
|
-
|
|
1657
|
-
if (nodeDef.camera !== undefined) {
|
|
1295
|
+
if (nodeDef.camera !== void 0) {
|
|
1658
1296
|
this._addNodeRef(this.cameraCache, nodeDef.camera);
|
|
1659
1297
|
}
|
|
1660
1298
|
}
|
|
1661
1299
|
}
|
|
1662
|
-
/**
|
|
1663
|
-
* Counts references to shared node / Object3D resources. These resources
|
|
1664
|
-
* can be reused, or "instantiated", at multiple nodes in the scene
|
|
1665
|
-
* hierarchy. Mesh, Camera, and Light instances are instantiated and must
|
|
1666
|
-
* be marked. Non-scenegraph resources (like Materials, Geometries, and
|
|
1667
|
-
* Textures) can be reused directly and are not marked here.
|
|
1668
|
-
*
|
|
1669
|
-
* Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
|
|
1670
|
-
*/
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
1300
|
_addNodeRef(cache, index) {
|
|
1674
|
-
if (index ===
|
|
1675
|
-
|
|
1676
|
-
if (cache.refs[index] ===
|
|
1301
|
+
if (index === void 0)
|
|
1302
|
+
return;
|
|
1303
|
+
if (cache.refs[index] === void 0) {
|
|
1677
1304
|
cache.refs[index] = cache.uses[index] = 0;
|
|
1678
1305
|
}
|
|
1679
|
-
|
|
1680
1306
|
cache.refs[index]++;
|
|
1681
1307
|
}
|
|
1682
|
-
/** Returns a reference to a shared resource, cloning it if necessary. */
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
1308
|
_getNodeRef(cache, index, object) {
|
|
1686
|
-
if (cache.refs[index] <= 1)
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1309
|
+
if (cache.refs[index] <= 1)
|
|
1310
|
+
return object;
|
|
1311
|
+
const ref = object.clone();
|
|
1690
1312
|
const updateMappings = (original, clone) => {
|
|
1691
1313
|
const mappings = this.associations.get(original);
|
|
1692
|
-
|
|
1693
1314
|
if (mappings != null) {
|
|
1694
1315
|
this.associations.set(clone, mappings);
|
|
1695
1316
|
}
|
|
1696
|
-
|
|
1697
1317
|
for (const [i, child] of original.children.entries()) {
|
|
1698
1318
|
updateMappings(child, clone.children[i]);
|
|
1699
1319
|
}
|
|
1700
1320
|
};
|
|
1701
|
-
|
|
1702
1321
|
updateMappings(object, ref);
|
|
1703
|
-
ref.name +=
|
|
1322
|
+
ref.name += "_instance_" + cache.uses[index]++;
|
|
1704
1323
|
return ref;
|
|
1705
1324
|
}
|
|
1706
|
-
|
|
1707
1325
|
_invokeOne(func) {
|
|
1708
1326
|
const extensions = Object.values(this.plugins);
|
|
1709
1327
|
extensions.push(this);
|
|
1710
|
-
|
|
1711
1328
|
for (let i = 0; i < extensions.length; i++) {
|
|
1712
1329
|
const result = func(extensions[i]);
|
|
1713
|
-
if (result)
|
|
1330
|
+
if (result)
|
|
1331
|
+
return result;
|
|
1714
1332
|
}
|
|
1715
|
-
|
|
1716
1333
|
return null;
|
|
1717
1334
|
}
|
|
1718
|
-
|
|
1719
1335
|
_invokeAll(func) {
|
|
1720
1336
|
const extensions = Object.values(this.plugins);
|
|
1721
1337
|
extensions.unshift(this);
|
|
1722
1338
|
const pending = [];
|
|
1723
|
-
|
|
1724
1339
|
for (let i = 0; i < extensions.length; i++) {
|
|
1725
1340
|
const result = func(extensions[i]);
|
|
1726
|
-
if (result)
|
|
1341
|
+
if (result)
|
|
1342
|
+
pending.push(result);
|
|
1727
1343
|
}
|
|
1728
|
-
|
|
1729
1344
|
return pending;
|
|
1730
1345
|
}
|
|
1731
|
-
/**
|
|
1732
|
-
* Requests the specified dependency asynchronously, with caching.
|
|
1733
|
-
* @param {string} type
|
|
1734
|
-
* @param {number} index
|
|
1735
|
-
* @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
|
|
1736
|
-
*/
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
1346
|
getDependency(type, index) {
|
|
1740
|
-
const cacheKey = type +
|
|
1347
|
+
const cacheKey = type + ":" + index;
|
|
1741
1348
|
let dependency = this.cache.get(cacheKey);
|
|
1742
|
-
|
|
1743
1349
|
if (!dependency) {
|
|
1744
1350
|
switch (type) {
|
|
1745
|
-
case
|
|
1351
|
+
case "scene":
|
|
1746
1352
|
dependency = this.loadScene(index);
|
|
1747
1353
|
break;
|
|
1748
|
-
|
|
1749
|
-
case 'node':
|
|
1354
|
+
case "node":
|
|
1750
1355
|
dependency = this.loadNode(index);
|
|
1751
1356
|
break;
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
dependency = this._invokeOne(function (ext) {
|
|
1357
|
+
case "mesh":
|
|
1358
|
+
dependency = this._invokeOne(function(ext) {
|
|
1755
1359
|
return ext.loadMesh && ext.loadMesh(index);
|
|
1756
1360
|
});
|
|
1757
1361
|
break;
|
|
1758
|
-
|
|
1759
|
-
case 'accessor':
|
|
1362
|
+
case "accessor":
|
|
1760
1363
|
dependency = this.loadAccessor(index);
|
|
1761
1364
|
break;
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
dependency = this._invokeOne(function (ext) {
|
|
1365
|
+
case "bufferView":
|
|
1366
|
+
dependency = this._invokeOne(function(ext) {
|
|
1765
1367
|
return ext.loadBufferView && ext.loadBufferView(index);
|
|
1766
1368
|
});
|
|
1767
1369
|
break;
|
|
1768
|
-
|
|
1769
|
-
case 'buffer':
|
|
1370
|
+
case "buffer":
|
|
1770
1371
|
dependency = this.loadBuffer(index);
|
|
1771
1372
|
break;
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
dependency = this._invokeOne(function (ext) {
|
|
1373
|
+
case "material":
|
|
1374
|
+
dependency = this._invokeOne(function(ext) {
|
|
1775
1375
|
return ext.loadMaterial && ext.loadMaterial(index);
|
|
1776
1376
|
});
|
|
1777
1377
|
break;
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
dependency = this._invokeOne(function (ext) {
|
|
1378
|
+
case "texture":
|
|
1379
|
+
dependency = this._invokeOne(function(ext) {
|
|
1781
1380
|
return ext.loadTexture && ext.loadTexture(index);
|
|
1782
1381
|
});
|
|
1783
1382
|
break;
|
|
1784
|
-
|
|
1785
|
-
case 'skin':
|
|
1383
|
+
case "skin":
|
|
1786
1384
|
dependency = this.loadSkin(index);
|
|
1787
1385
|
break;
|
|
1788
|
-
|
|
1789
|
-
case 'animation':
|
|
1386
|
+
case "animation":
|
|
1790
1387
|
dependency = this.loadAnimation(index);
|
|
1791
1388
|
break;
|
|
1792
|
-
|
|
1793
|
-
case 'camera':
|
|
1389
|
+
case "camera":
|
|
1794
1390
|
dependency = this.loadCamera(index);
|
|
1795
1391
|
break;
|
|
1796
|
-
|
|
1797
1392
|
default:
|
|
1798
|
-
throw new Error(
|
|
1393
|
+
throw new Error("Unknown type: " + type);
|
|
1799
1394
|
}
|
|
1800
|
-
|
|
1801
1395
|
this.cache.add(cacheKey, dependency);
|
|
1802
1396
|
}
|
|
1803
|
-
|
|
1804
1397
|
return dependency;
|
|
1805
1398
|
}
|
|
1806
|
-
/**
|
|
1807
|
-
* Requests all dependencies of the specified type asynchronously, with caching.
|
|
1808
|
-
* @param {string} type
|
|
1809
|
-
* @return {Promise<Array<Object>>}
|
|
1810
|
-
*/
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
1399
|
getDependencies(type) {
|
|
1814
1400
|
let dependencies = this.cache.get(type);
|
|
1815
|
-
|
|
1816
1401
|
if (!dependencies) {
|
|
1817
1402
|
const parser = this;
|
|
1818
|
-
const defs = this.json[type + (type ===
|
|
1819
|
-
dependencies = Promise.all(
|
|
1820
|
-
|
|
1821
|
-
|
|
1403
|
+
const defs = this.json[type + (type === "mesh" ? "es" : "s")] || [];
|
|
1404
|
+
dependencies = Promise.all(
|
|
1405
|
+
defs.map(function(def, index) {
|
|
1406
|
+
return parser.getDependency(type, index);
|
|
1407
|
+
})
|
|
1408
|
+
);
|
|
1822
1409
|
this.cache.add(type, dependencies);
|
|
1823
1410
|
}
|
|
1824
|
-
|
|
1825
1411
|
return dependencies;
|
|
1826
1412
|
}
|
|
1827
|
-
/**
|
|
1828
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
|
|
1829
|
-
* @param {number} bufferIndex
|
|
1830
|
-
* @return {Promise<ArrayBuffer>}
|
|
1831
|
-
*/
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
1413
|
loadBuffer(bufferIndex) {
|
|
1835
1414
|
const bufferDef = this.json.buffers[bufferIndex];
|
|
1836
1415
|
const loader = this.fileLoader;
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
if (bufferDef.uri === undefined && bufferIndex === 0) {
|
|
1416
|
+
if (bufferDef.type && bufferDef.type !== "arraybuffer") {
|
|
1417
|
+
throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported.");
|
|
1418
|
+
}
|
|
1419
|
+
if (bufferDef.uri === void 0 && bufferIndex === 0) {
|
|
1844
1420
|
return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);
|
|
1845
1421
|
}
|
|
1846
|
-
|
|
1847
1422
|
const options = this.options;
|
|
1848
|
-
return new Promise(function
|
|
1849
|
-
loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve,
|
|
1423
|
+
return new Promise(function(resolve, reject) {
|
|
1424
|
+
loader.load(THREE.LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() {
|
|
1850
1425
|
reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".'));
|
|
1851
1426
|
});
|
|
1852
1427
|
});
|
|
1853
1428
|
}
|
|
1854
|
-
/**
|
|
1855
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
|
|
1856
|
-
* @param {number} bufferViewIndex
|
|
1857
|
-
* @return {Promise<ArrayBuffer>}
|
|
1858
|
-
*/
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
1429
|
loadBufferView(bufferViewIndex) {
|
|
1862
1430
|
const bufferViewDef = this.json.bufferViews[bufferViewIndex];
|
|
1863
|
-
return this.getDependency(
|
|
1431
|
+
return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) {
|
|
1864
1432
|
const byteLength = bufferViewDef.byteLength || 0;
|
|
1865
1433
|
const byteOffset = bufferViewDef.byteOffset || 0;
|
|
1866
1434
|
return buffer.slice(byteOffset, byteOffset + byteLength);
|
|
1867
1435
|
});
|
|
1868
1436
|
}
|
|
1869
|
-
/**
|
|
1870
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
|
|
1871
|
-
* @param {number} accessorIndex
|
|
1872
|
-
* @return {Promise<BufferAttribute|InterleavedBufferAttribute>}
|
|
1873
|
-
*/
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
1437
|
loadAccessor(accessorIndex) {
|
|
1877
1438
|
const parser = this;
|
|
1878
1439
|
const json = this.json;
|
|
1879
1440
|
const accessorDef = this.json.accessors[accessorIndex];
|
|
1880
|
-
|
|
1881
|
-
if (accessorDef.bufferView === undefined && accessorDef.sparse === undefined) {
|
|
1882
|
-
// Ignore empty accessors, which may be used to declare runtime
|
|
1883
|
-
// information about attributes coming from another source (e.g. Draco
|
|
1884
|
-
// compression extension).
|
|
1441
|
+
if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) {
|
|
1885
1442
|
return Promise.resolve(null);
|
|
1886
1443
|
}
|
|
1887
|
-
|
|
1888
1444
|
const pendingBufferViews = [];
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
pendingBufferViews.push(this.getDependency('bufferView', accessorDef.bufferView));
|
|
1445
|
+
if (accessorDef.bufferView !== void 0) {
|
|
1446
|
+
pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView));
|
|
1892
1447
|
} else {
|
|
1893
1448
|
pendingBufferViews.push(null);
|
|
1894
1449
|
}
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
pendingBufferViews.push(this.getDependency(
|
|
1898
|
-
pendingBufferViews.push(this.getDependency('bufferView', accessorDef.sparse.values.bufferView));
|
|
1450
|
+
if (accessorDef.sparse !== void 0) {
|
|
1451
|
+
pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView));
|
|
1452
|
+
pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView));
|
|
1899
1453
|
}
|
|
1900
|
-
|
|
1901
|
-
return Promise.all(pendingBufferViews).then(function (bufferViews) {
|
|
1454
|
+
return Promise.all(pendingBufferViews).then(function(bufferViews) {
|
|
1902
1455
|
const bufferView = bufferViews[0];
|
|
1903
1456
|
const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
|
|
1904
|
-
const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
|
|
1905
|
-
|
|
1457
|
+
const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
|
|
1906
1458
|
const elementBytes = TypedArray.BYTES_PER_ELEMENT;
|
|
1907
1459
|
const itemBytes = elementBytes * itemSize;
|
|
1908
1460
|
const byteOffset = accessorDef.byteOffset || 0;
|
|
1909
|
-
const byteStride = accessorDef.bufferView !==
|
|
1461
|
+
const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0;
|
|
1910
1462
|
const normalized = accessorDef.normalized === true;
|
|
1911
|
-
let array, bufferAttribute;
|
|
1912
|
-
|
|
1463
|
+
let array, bufferAttribute;
|
|
1913
1464
|
if (byteStride && byteStride !== itemBytes) {
|
|
1914
|
-
// Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer
|
|
1915
|
-
// This makes sure that IBA.count reflects accessor.count properly
|
|
1916
1465
|
const ibSlice = Math.floor(byteOffset / byteStride);
|
|
1917
|
-
const ibCacheKey =
|
|
1466
|
+
const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count;
|
|
1918
1467
|
let ib = parser.cache.get(ibCacheKey);
|
|
1919
|
-
|
|
1920
1468
|
if (!ib) {
|
|
1921
|
-
array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);
|
|
1922
|
-
|
|
1923
|
-
ib = new InterleavedBuffer(array, byteStride / elementBytes);
|
|
1469
|
+
array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);
|
|
1470
|
+
ib = new THREE.InterleavedBuffer(array, byteStride / elementBytes);
|
|
1924
1471
|
parser.cache.add(ibCacheKey, ib);
|
|
1925
1472
|
}
|
|
1926
|
-
|
|
1927
|
-
|
|
1473
|
+
bufferAttribute = new THREE.InterleavedBufferAttribute(
|
|
1474
|
+
ib,
|
|
1475
|
+
itemSize,
|
|
1476
|
+
byteOffset % byteStride / elementBytes,
|
|
1477
|
+
normalized
|
|
1478
|
+
);
|
|
1928
1479
|
} else {
|
|
1929
1480
|
if (bufferView === null) {
|
|
1930
1481
|
array = new TypedArray(accessorDef.count * itemSize);
|
|
1931
1482
|
} else {
|
|
1932
1483
|
array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);
|
|
1933
1484
|
}
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
if (accessorDef.sparse !== undefined) {
|
|
1485
|
+
bufferAttribute = new THREE.BufferAttribute(array, itemSize, normalized);
|
|
1486
|
+
}
|
|
1487
|
+
if (accessorDef.sparse !== void 0) {
|
|
1940
1488
|
const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;
|
|
1941
1489
|
const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];
|
|
1942
1490
|
const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;
|
|
1943
1491
|
const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;
|
|
1944
|
-
const sparseIndices = new TypedArrayIndices(
|
|
1492
|
+
const sparseIndices = new TypedArrayIndices(
|
|
1493
|
+
bufferViews[1],
|
|
1494
|
+
byteOffsetIndices,
|
|
1495
|
+
accessorDef.sparse.count * itemSizeIndices
|
|
1496
|
+
);
|
|
1945
1497
|
const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);
|
|
1946
|
-
|
|
1947
1498
|
if (bufferView !== null) {
|
|
1948
|
-
|
|
1949
|
-
|
|
1499
|
+
bufferAttribute = new THREE.BufferAttribute(
|
|
1500
|
+
bufferAttribute.array.slice(),
|
|
1501
|
+
bufferAttribute.itemSize,
|
|
1502
|
+
bufferAttribute.normalized
|
|
1503
|
+
);
|
|
1950
1504
|
}
|
|
1951
|
-
|
|
1952
1505
|
for (let i = 0, il = sparseIndices.length; i < il; i++) {
|
|
1953
1506
|
const index = sparseIndices[i];
|
|
1954
1507
|
bufferAttribute.setX(index, sparseValues[i * itemSize]);
|
|
1955
|
-
if (itemSize >= 2)
|
|
1956
|
-
|
|
1957
|
-
if (itemSize >=
|
|
1958
|
-
|
|
1508
|
+
if (itemSize >= 2)
|
|
1509
|
+
bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);
|
|
1510
|
+
if (itemSize >= 3)
|
|
1511
|
+
bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);
|
|
1512
|
+
if (itemSize >= 4)
|
|
1513
|
+
bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);
|
|
1514
|
+
if (itemSize >= 5)
|
|
1515
|
+
throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
|
|
1959
1516
|
}
|
|
1960
1517
|
}
|
|
1961
|
-
|
|
1962
1518
|
return bufferAttribute;
|
|
1963
1519
|
});
|
|
1964
1520
|
}
|
|
1965
|
-
/**
|
|
1966
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
|
|
1967
|
-
* @param {number} textureIndex
|
|
1968
|
-
* @return {Promise<THREE.Texture>}
|
|
1969
|
-
*/
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
1521
|
loadTexture(textureIndex) {
|
|
1973
1522
|
const json = this.json;
|
|
1974
1523
|
const options = this.options;
|
|
1975
1524
|
const textureDef = json.textures[textureIndex];
|
|
1976
1525
|
const source = json.images[textureDef.source];
|
|
1977
1526
|
let loader = this.textureLoader;
|
|
1978
|
-
|
|
1979
1527
|
if (source.uri) {
|
|
1980
1528
|
const handler = options.manager.getHandler(source.uri);
|
|
1981
|
-
if (handler !== null)
|
|
1529
|
+
if (handler !== null)
|
|
1530
|
+
loader = handler;
|
|
1982
1531
|
}
|
|
1983
|
-
|
|
1984
1532
|
return this.loadTextureImage(textureIndex, source, loader);
|
|
1985
1533
|
}
|
|
1986
|
-
|
|
1987
1534
|
loadTextureImage(textureIndex, source, loader) {
|
|
1988
1535
|
const parser = this;
|
|
1989
1536
|
const json = this.json;
|
|
1990
1537
|
const options = this.options;
|
|
1991
1538
|
const textureDef = json.textures[textureIndex];
|
|
1992
|
-
const cacheKey = (source.uri || source.bufferView) +
|
|
1993
|
-
|
|
1539
|
+
const cacheKey = (source.uri || source.bufferView) + ":" + textureDef.sampler;
|
|
1994
1540
|
if (this.textureCache[cacheKey]) {
|
|
1995
|
-
// See https://github.com/mrdoob/three.js/issues/21559.
|
|
1996
1541
|
return this.textureCache[cacheKey];
|
|
1997
1542
|
}
|
|
1998
|
-
|
|
1999
1543
|
const URL = self.URL || self.webkitURL;
|
|
2000
|
-
let sourceURI = source.uri ||
|
|
1544
|
+
let sourceURI = source.uri || "";
|
|
2001
1545
|
let isObjectURL = false;
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
// Load binary image data from bufferView, if provided.
|
|
2005
|
-
sourceURI = parser.getDependency('bufferView', source.bufferView).then(function (bufferView) {
|
|
1546
|
+
if (source.bufferView !== void 0) {
|
|
1547
|
+
sourceURI = parser.getDependency("bufferView", source.bufferView).then(function(bufferView) {
|
|
2006
1548
|
isObjectURL = true;
|
|
2007
|
-
const blob = new Blob([bufferView], {
|
|
2008
|
-
type: source.mimeType
|
|
2009
|
-
});
|
|
1549
|
+
const blob = new Blob([bufferView], { type: source.mimeType });
|
|
2010
1550
|
sourceURI = URL.createObjectURL(blob);
|
|
2011
1551
|
return sourceURI;
|
|
2012
1552
|
});
|
|
2013
|
-
} else if (source.uri ===
|
|
2014
|
-
throw new Error(
|
|
1553
|
+
} else if (source.uri === void 0) {
|
|
1554
|
+
throw new Error("THREE.GLTFLoader: Image " + textureIndex + " is missing URI and bufferView");
|
|
2015
1555
|
}
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
return new Promise(function (resolve, reject) {
|
|
1556
|
+
const promise = Promise.resolve(sourceURI).then(function(sourceURI2) {
|
|
1557
|
+
return new Promise(function(resolve, reject) {
|
|
2019
1558
|
let onLoad = resolve;
|
|
2020
|
-
|
|
2021
1559
|
if (loader.isImageBitmapLoader === true) {
|
|
2022
|
-
onLoad = function
|
|
2023
|
-
const texture = new Texture(imageBitmap);
|
|
1560
|
+
onLoad = function(imageBitmap) {
|
|
1561
|
+
const texture = new THREE.Texture(imageBitmap);
|
|
2024
1562
|
texture.needsUpdate = true;
|
|
2025
1563
|
resolve(texture);
|
|
2026
1564
|
};
|
|
2027
1565
|
}
|
|
2028
|
-
|
|
2029
|
-
loader.load(LoaderUtils.resolveURL(sourceURI, options.path), onLoad, undefined, reject);
|
|
1566
|
+
loader.load(THREE.LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject);
|
|
2030
1567
|
});
|
|
2031
|
-
}).then(function
|
|
2032
|
-
// Clean up resources and configure Texture.
|
|
1568
|
+
}).then(function(texture) {
|
|
2033
1569
|
if (isObjectURL === true) {
|
|
2034
1570
|
URL.revokeObjectURL(sourceURI);
|
|
2035
1571
|
}
|
|
2036
|
-
|
|
2037
1572
|
texture.flipY = false;
|
|
2038
|
-
if (textureDef.name)
|
|
1573
|
+
if (textureDef.name)
|
|
1574
|
+
texture.name = textureDef.name;
|
|
2039
1575
|
const samplers = json.samplers || {};
|
|
2040
1576
|
const sampler = samplers[textureDef.sampler] || {};
|
|
2041
|
-
texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;
|
|
2042
|
-
texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;
|
|
2043
|
-
texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;
|
|
2044
|
-
texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;
|
|
2045
|
-
parser.associations.set(texture, {
|
|
2046
|
-
textures: textureIndex
|
|
2047
|
-
});
|
|
1577
|
+
texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || THREE.LinearFilter;
|
|
1578
|
+
texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || THREE.LinearMipmapLinearFilter;
|
|
1579
|
+
texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || THREE.RepeatWrapping;
|
|
1580
|
+
texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || THREE.RepeatWrapping;
|
|
1581
|
+
parser.associations.set(texture, { textures: textureIndex });
|
|
2048
1582
|
return texture;
|
|
2049
|
-
}).catch(function
|
|
1583
|
+
}).catch(function() {
|
|
2050
1584
|
console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI);
|
|
2051
1585
|
return null;
|
|
2052
1586
|
});
|
|
2053
1587
|
this.textureCache[cacheKey] = promise;
|
|
2054
1588
|
return promise;
|
|
2055
1589
|
}
|
|
2056
|
-
/**
|
|
2057
|
-
* Asynchronously assigns a texture to the given material parameters.
|
|
2058
|
-
* @param {Object} materialParams
|
|
2059
|
-
* @param {string} mapName
|
|
2060
|
-
* @param {Object} mapDef
|
|
2061
|
-
* @return {Promise<Texture>}
|
|
2062
|
-
*/
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
1590
|
assignTexture(materialParams, mapName, mapDef) {
|
|
2066
1591
|
const parser = this;
|
|
2067
|
-
return this.getDependency(
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
1592
|
+
return this.getDependency("texture", mapDef.index).then(function(texture) {
|
|
1593
|
+
if (mapDef.texCoord !== void 0 && mapDef.texCoord != 0 && !(mapName === "aoMap" && mapDef.texCoord == 1)) {
|
|
1594
|
+
console.warn(
|
|
1595
|
+
"THREE.GLTFLoader: Custom UV set " + mapDef.texCoord + " for texture " + mapName + " not yet supported."
|
|
1596
|
+
);
|
|
2072
1597
|
}
|
|
2073
|
-
|
|
2074
1598
|
if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {
|
|
2075
|
-
const transform = mapDef.extensions !==
|
|
2076
|
-
|
|
1599
|
+
const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0;
|
|
2077
1600
|
if (transform) {
|
|
2078
1601
|
const gltfReference = parser.associations.get(texture);
|
|
2079
1602
|
texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);
|
|
2080
1603
|
parser.associations.set(texture, gltfReference);
|
|
2081
1604
|
}
|
|
2082
1605
|
}
|
|
2083
|
-
|
|
2084
1606
|
materialParams[mapName] = texture;
|
|
2085
1607
|
return texture;
|
|
2086
1608
|
});
|
|
2087
1609
|
}
|
|
2088
|
-
/**
|
|
2089
|
-
* Assigns final material to a Mesh, Line, or Points instance. The instance
|
|
2090
|
-
* already has a material (generated from the glTF material options alone)
|
|
2091
|
-
* but reuse of the same glTF material may require multiple threejs materials
|
|
2092
|
-
* to accommodate different primitive types, defines, etc. New materials will
|
|
2093
|
-
* be created if necessary, and reused from a cache.
|
|
2094
|
-
* @param {Object3D} mesh Mesh, Line, or Points instance.
|
|
2095
|
-
*/
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
1610
|
assignFinalMaterial(mesh) {
|
|
2099
1611
|
const geometry = mesh.geometry;
|
|
2100
1612
|
let material = mesh.material;
|
|
2101
|
-
const useDerivativeTangents = geometry.attributes.tangent ===
|
|
2102
|
-
const useVertexColors = geometry.attributes.color !==
|
|
2103
|
-
const useFlatShading = geometry.attributes.normal ===
|
|
2104
|
-
|
|
1613
|
+
const useDerivativeTangents = geometry.attributes.tangent === void 0;
|
|
1614
|
+
const useVertexColors = geometry.attributes.color !== void 0;
|
|
1615
|
+
const useFlatShading = geometry.attributes.normal === void 0;
|
|
2105
1616
|
if (mesh.isPoints) {
|
|
2106
|
-
const cacheKey =
|
|
1617
|
+
const cacheKey = "PointsMaterial:" + material.uuid;
|
|
2107
1618
|
let pointsMaterial = this.cache.get(cacheKey);
|
|
2108
|
-
|
|
2109
1619
|
if (!pointsMaterial) {
|
|
2110
|
-
pointsMaterial = new PointsMaterial();
|
|
2111
|
-
Material.prototype.copy.call(pointsMaterial, material);
|
|
1620
|
+
pointsMaterial = new THREE.PointsMaterial();
|
|
1621
|
+
THREE.Material.prototype.copy.call(pointsMaterial, material);
|
|
2112
1622
|
pointsMaterial.color.copy(material.color);
|
|
2113
1623
|
pointsMaterial.map = material.map;
|
|
2114
|
-
pointsMaterial.sizeAttenuation = false;
|
|
2115
|
-
|
|
1624
|
+
pointsMaterial.sizeAttenuation = false;
|
|
2116
1625
|
this.cache.add(cacheKey, pointsMaterial);
|
|
2117
1626
|
}
|
|
2118
|
-
|
|
2119
1627
|
material = pointsMaterial;
|
|
2120
1628
|
} else if (mesh.isLine) {
|
|
2121
|
-
const cacheKey =
|
|
1629
|
+
const cacheKey = "LineBasicMaterial:" + material.uuid;
|
|
2122
1630
|
let lineMaterial = this.cache.get(cacheKey);
|
|
2123
|
-
|
|
2124
1631
|
if (!lineMaterial) {
|
|
2125
|
-
lineMaterial = new LineBasicMaterial();
|
|
2126
|
-
Material.prototype.copy.call(lineMaterial, material);
|
|
1632
|
+
lineMaterial = new THREE.LineBasicMaterial();
|
|
1633
|
+
THREE.Material.prototype.copy.call(lineMaterial, material);
|
|
2127
1634
|
lineMaterial.color.copy(material.color);
|
|
2128
1635
|
this.cache.add(cacheKey, lineMaterial);
|
|
2129
1636
|
}
|
|
2130
|
-
|
|
2131
1637
|
material = lineMaterial;
|
|
2132
|
-
}
|
|
2133
|
-
|
|
2134
|
-
|
|
1638
|
+
}
|
|
2135
1639
|
if (useDerivativeTangents || useVertexColors || useFlatShading) {
|
|
2136
|
-
let cacheKey =
|
|
2137
|
-
if (material.isGLTFSpecularGlossinessMaterial)
|
|
2138
|
-
|
|
2139
|
-
if (
|
|
2140
|
-
|
|
1640
|
+
let cacheKey = "ClonedMaterial:" + material.uuid + ":";
|
|
1641
|
+
if (material.isGLTFSpecularGlossinessMaterial)
|
|
1642
|
+
cacheKey += "specular-glossiness:";
|
|
1643
|
+
if (useDerivativeTangents)
|
|
1644
|
+
cacheKey += "derivative-tangents:";
|
|
1645
|
+
if (useVertexColors)
|
|
1646
|
+
cacheKey += "vertex-colors:";
|
|
1647
|
+
if (useFlatShading)
|
|
1648
|
+
cacheKey += "flat-shading:";
|
|
2141
1649
|
let cachedMaterial = this.cache.get(cacheKey);
|
|
2142
|
-
|
|
2143
1650
|
if (!cachedMaterial) {
|
|
2144
1651
|
cachedMaterial = material.clone();
|
|
2145
|
-
if (useVertexColors)
|
|
2146
|
-
|
|
2147
|
-
|
|
1652
|
+
if (useVertexColors)
|
|
1653
|
+
cachedMaterial.vertexColors = true;
|
|
1654
|
+
if (useFlatShading)
|
|
1655
|
+
cachedMaterial.flatShading = true;
|
|
2148
1656
|
if (useDerivativeTangents) {
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
if (cachedMaterial.clearcoatNormalScale)
|
|
1657
|
+
if (cachedMaterial.normalScale)
|
|
1658
|
+
cachedMaterial.normalScale.y *= -1;
|
|
1659
|
+
if (cachedMaterial.clearcoatNormalScale)
|
|
1660
|
+
cachedMaterial.clearcoatNormalScale.y *= -1;
|
|
2152
1661
|
}
|
|
2153
|
-
|
|
2154
1662
|
this.cache.add(cacheKey, cachedMaterial);
|
|
2155
1663
|
this.associations.set(cachedMaterial, this.associations.get(material));
|
|
2156
1664
|
}
|
|
2157
|
-
|
|
2158
1665
|
material = cachedMaterial;
|
|
2159
|
-
} // workarounds for mesh and geometry
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
if (material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined) {
|
|
2163
|
-
geometry.setAttribute('uv2', geometry.attributes.uv);
|
|
2164
1666
|
}
|
|
2165
|
-
|
|
1667
|
+
if (material.aoMap && geometry.attributes.uv2 === void 0 && geometry.attributes.uv !== void 0) {
|
|
1668
|
+
geometry.setAttribute("uv2", geometry.attributes.uv);
|
|
1669
|
+
}
|
|
2166
1670
|
mesh.material = material;
|
|
2167
1671
|
}
|
|
2168
|
-
|
|
2169
1672
|
getMaterialType() {
|
|
2170
|
-
return MeshStandardMaterial;
|
|
2171
|
-
}
|
|
2172
|
-
/**
|
|
2173
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
|
|
2174
|
-
* @param {number} materialIndex
|
|
2175
|
-
* @return {Promise<Material>}
|
|
2176
|
-
*/
|
|
2177
|
-
|
|
2178
|
-
|
|
1673
|
+
return THREE.MeshStandardMaterial;
|
|
1674
|
+
}
|
|
2179
1675
|
loadMaterial(materialIndex) {
|
|
2180
1676
|
const parser = this;
|
|
2181
1677
|
const json = this.json;
|
|
@@ -2185,7 +1681,6 @@ class GLTFParser {
|
|
|
2185
1681
|
const materialParams = {};
|
|
2186
1682
|
const materialExtensions = materialDef.extensions || {};
|
|
2187
1683
|
const pending = [];
|
|
2188
|
-
|
|
2189
1684
|
if (materialExtensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) {
|
|
2190
1685
|
const sgExtension = extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];
|
|
2191
1686
|
materialType = sgExtension.getMaterialType();
|
|
@@ -2195,178 +1690,125 @@ class GLTFParser {
|
|
|
2195
1690
|
materialType = kmuExtension.getMaterialType();
|
|
2196
1691
|
pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));
|
|
2197
1692
|
} else {
|
|
2198
|
-
// Specification:
|
|
2199
|
-
// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material
|
|
2200
1693
|
const metallicRoughness = materialDef.pbrMetallicRoughness || {};
|
|
2201
|
-
materialParams.color = new Color(1
|
|
2202
|
-
materialParams.opacity = 1
|
|
2203
|
-
|
|
1694
|
+
materialParams.color = new THREE.Color(1, 1, 1);
|
|
1695
|
+
materialParams.opacity = 1;
|
|
2204
1696
|
if (Array.isArray(metallicRoughness.baseColorFactor)) {
|
|
2205
1697
|
const array = metallicRoughness.baseColorFactor;
|
|
2206
1698
|
materialParams.color.fromArray(array);
|
|
2207
1699
|
materialParams.opacity = array[3];
|
|
2208
1700
|
}
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture));
|
|
1701
|
+
if (metallicRoughness.baseColorTexture !== void 0) {
|
|
1702
|
+
pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture));
|
|
2212
1703
|
}
|
|
2213
|
-
|
|
2214
|
-
materialParams.
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
pending.push(parser.assignTexture(materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture));
|
|
2219
|
-
pending.push(parser.assignTexture(materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture));
|
|
1704
|
+
materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1;
|
|
1705
|
+
materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1;
|
|
1706
|
+
if (metallicRoughness.metallicRoughnessTexture !== void 0) {
|
|
1707
|
+
pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture));
|
|
1708
|
+
pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture));
|
|
2220
1709
|
}
|
|
2221
|
-
|
|
2222
|
-
materialType = this._invokeOne(function (ext) {
|
|
1710
|
+
materialType = this._invokeOne(function(ext) {
|
|
2223
1711
|
return ext.getMaterialType && ext.getMaterialType(materialIndex);
|
|
2224
1712
|
});
|
|
2225
|
-
pending.push(
|
|
2226
|
-
|
|
2227
|
-
|
|
1713
|
+
pending.push(
|
|
1714
|
+
Promise.all(
|
|
1715
|
+
this._invokeAll(function(ext) {
|
|
1716
|
+
return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams);
|
|
1717
|
+
})
|
|
1718
|
+
)
|
|
1719
|
+
);
|
|
2228
1720
|
}
|
|
2229
|
-
|
|
2230
1721
|
if (materialDef.doubleSided === true) {
|
|
2231
|
-
materialParams.side = DoubleSide;
|
|
1722
|
+
materialParams.side = THREE.DoubleSide;
|
|
2232
1723
|
}
|
|
2233
|
-
|
|
2234
1724
|
const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;
|
|
2235
|
-
|
|
2236
1725
|
if (alphaMode === ALPHA_MODES.BLEND) {
|
|
2237
|
-
materialParams.transparent = true;
|
|
2238
|
-
|
|
1726
|
+
materialParams.transparent = true;
|
|
2239
1727
|
materialParams.depthWrite = false;
|
|
2240
1728
|
} else {
|
|
2241
1729
|
materialParams.transparent = false;
|
|
2242
|
-
|
|
2243
1730
|
if (alphaMode === ALPHA_MODES.MASK) {
|
|
2244
|
-
materialParams.alphaTest = materialDef.alphaCutoff !==
|
|
1731
|
+
materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5;
|
|
2245
1732
|
}
|
|
2246
1733
|
}
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
if (materialDef.normalTexture.scale !== undefined) {
|
|
1734
|
+
if (materialDef.normalTexture !== void 0 && materialType !== THREE.MeshBasicMaterial) {
|
|
1735
|
+
pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture));
|
|
1736
|
+
materialParams.normalScale = new THREE.Vector2(1, 1);
|
|
1737
|
+
if (materialDef.normalTexture.scale !== void 0) {
|
|
2253
1738
|
const scale = materialDef.normalTexture.scale;
|
|
2254
1739
|
materialParams.normalScale.set(scale, scale);
|
|
2255
1740
|
}
|
|
2256
1741
|
}
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
if (materialDef.occlusionTexture.strength !== undefined) {
|
|
1742
|
+
if (materialDef.occlusionTexture !== void 0 && materialType !== THREE.MeshBasicMaterial) {
|
|
1743
|
+
pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture));
|
|
1744
|
+
if (materialDef.occlusionTexture.strength !== void 0) {
|
|
2262
1745
|
materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;
|
|
2263
1746
|
}
|
|
2264
1747
|
}
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
materialParams.emissive = new Color().fromArray(materialDef.emissiveFactor);
|
|
1748
|
+
if (materialDef.emissiveFactor !== void 0 && materialType !== THREE.MeshBasicMaterial) {
|
|
1749
|
+
materialParams.emissive = new THREE.Color().fromArray(materialDef.emissiveFactor);
|
|
2268
1750
|
}
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
pending.push(parser.assignTexture(materialParams, 'emissiveMap', materialDef.emissiveTexture));
|
|
1751
|
+
if (materialDef.emissiveTexture !== void 0 && materialType !== THREE.MeshBasicMaterial) {
|
|
1752
|
+
pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture));
|
|
2272
1753
|
}
|
|
2273
|
-
|
|
2274
|
-
return Promise.all(pending).then(function () {
|
|
1754
|
+
return Promise.all(pending).then(function() {
|
|
2275
1755
|
let material;
|
|
2276
|
-
|
|
2277
1756
|
if (materialType === GLTFMeshStandardSGMaterial) {
|
|
2278
1757
|
material = extensions[EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(materialParams);
|
|
2279
1758
|
} else {
|
|
2280
1759
|
material = new materialType(materialParams);
|
|
2281
1760
|
}
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
if (material.emissiveMap)
|
|
1761
|
+
if (materialDef.name)
|
|
1762
|
+
material.name = materialDef.name;
|
|
1763
|
+
if (material.map)
|
|
1764
|
+
material.map.encoding = THREE.sRGBEncoding;
|
|
1765
|
+
if (material.emissiveMap)
|
|
1766
|
+
material.emissiveMap.encoding = THREE.sRGBEncoding;
|
|
2287
1767
|
assignExtrasToUserData(material, materialDef);
|
|
2288
|
-
parser.associations.set(material, {
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef);
|
|
1768
|
+
parser.associations.set(material, { materials: materialIndex });
|
|
1769
|
+
if (materialDef.extensions)
|
|
1770
|
+
addUnknownExtensionsToUserData(extensions, material, materialDef);
|
|
2292
1771
|
return material;
|
|
2293
1772
|
});
|
|
2294
1773
|
}
|
|
2295
|
-
/** When Object3D instances are targeted by animation, they need unique names. */
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
1774
|
createUniqueName(originalName) {
|
|
2299
|
-
const sanitizedName = PropertyBinding.sanitizeNodeName(originalName ||
|
|
1775
|
+
const sanitizedName = THREE.PropertyBinding.sanitizeNodeName(originalName || "");
|
|
2300
1776
|
let name = sanitizedName;
|
|
2301
|
-
|
|
2302
1777
|
for (let i = 1; this.nodeNamesUsed[name]; ++i) {
|
|
2303
|
-
name = sanitizedName +
|
|
1778
|
+
name = sanitizedName + "_" + i;
|
|
2304
1779
|
}
|
|
2305
|
-
|
|
2306
1780
|
this.nodeNamesUsed[name] = true;
|
|
2307
1781
|
return name;
|
|
2308
1782
|
}
|
|
2309
|
-
/**
|
|
2310
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
|
|
2311
|
-
*
|
|
2312
|
-
* Creates BufferGeometries from primitives.
|
|
2313
|
-
*
|
|
2314
|
-
* @param {Array<GLTF.Primitive>} primitives
|
|
2315
|
-
* @return {Promise<Array<BufferGeometry>>}
|
|
2316
|
-
*/
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
1783
|
loadGeometries(primitives) {
|
|
2320
1784
|
const parser = this;
|
|
2321
1785
|
const extensions = this.extensions;
|
|
2322
1786
|
const cache = this.primitiveCache;
|
|
2323
|
-
|
|
2324
1787
|
function createDracoPrimitive(primitive) {
|
|
2325
|
-
return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function
|
|
1788
|
+
return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) {
|
|
2326
1789
|
return addPrimitiveAttributes(geometry, primitive, parser);
|
|
2327
1790
|
});
|
|
2328
1791
|
}
|
|
2329
|
-
|
|
2330
1792
|
const pending = [];
|
|
2331
|
-
|
|
2332
1793
|
for (let i = 0, il = primitives.length; i < il; i++) {
|
|
2333
1794
|
const primitive = primitives[i];
|
|
2334
|
-
const cacheKey = createPrimitiveKey(primitive);
|
|
2335
|
-
|
|
1795
|
+
const cacheKey = createPrimitiveKey(primitive);
|
|
2336
1796
|
const cached = cache[cacheKey];
|
|
2337
|
-
|
|
2338
1797
|
if (cached) {
|
|
2339
|
-
// Use the cached geometry if it exists
|
|
2340
1798
|
pending.push(cached.promise);
|
|
2341
1799
|
} else {
|
|
2342
1800
|
let geometryPromise;
|
|
2343
|
-
|
|
2344
1801
|
if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {
|
|
2345
|
-
// Use DRACO geometry if available
|
|
2346
1802
|
geometryPromise = createDracoPrimitive(primitive);
|
|
2347
1803
|
} else {
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
cache[cacheKey] = {
|
|
2354
|
-
primitive: primitive,
|
|
2355
|
-
promise: geometryPromise
|
|
2356
|
-
};
|
|
1804
|
+
geometryPromise = addPrimitiveAttributes(new THREE.BufferGeometry(), primitive, parser);
|
|
1805
|
+
}
|
|
1806
|
+
cache[cacheKey] = { primitive, promise: geometryPromise };
|
|
2357
1807
|
pending.push(geometryPromise);
|
|
2358
1808
|
}
|
|
2359
1809
|
}
|
|
2360
|
-
|
|
2361
1810
|
return Promise.all(pending);
|
|
2362
1811
|
}
|
|
2363
|
-
/**
|
|
2364
|
-
* Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
|
|
2365
|
-
* @param {number} meshIndex
|
|
2366
|
-
* @return {Promise<Group|Mesh|SkinnedMesh>}
|
|
2367
|
-
*/
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
1812
|
loadMesh(meshIndex) {
|
|
2371
1813
|
const parser = this;
|
|
2372
1814
|
const json = this.json;
|
|
@@ -2374,142 +1816,102 @@ class GLTFParser {
|
|
|
2374
1816
|
const meshDef = json.meshes[meshIndex];
|
|
2375
1817
|
const primitives = meshDef.primitives;
|
|
2376
1818
|
const pending = [];
|
|
2377
|
-
|
|
2378
1819
|
for (let i = 0, il = primitives.length; i < il; i++) {
|
|
2379
|
-
const material = primitives[i].material ===
|
|
1820
|
+
const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material);
|
|
2380
1821
|
pending.push(material);
|
|
2381
1822
|
}
|
|
2382
|
-
|
|
2383
1823
|
pending.push(parser.loadGeometries(primitives));
|
|
2384
|
-
return Promise.all(pending).then(function
|
|
1824
|
+
return Promise.all(pending).then(function(results) {
|
|
2385
1825
|
const materials = results.slice(0, results.length - 1);
|
|
2386
1826
|
const geometries = results[results.length - 1];
|
|
2387
1827
|
const meshes = [];
|
|
2388
|
-
|
|
2389
1828
|
for (let i = 0, il = geometries.length; i < il; i++) {
|
|
2390
1829
|
const geometry = geometries[i];
|
|
2391
|
-
const primitive = primitives[i];
|
|
2392
|
-
|
|
1830
|
+
const primitive = primitives[i];
|
|
2393
1831
|
let mesh;
|
|
2394
1832
|
const material = materials[i];
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
// .isSkinnedMesh isn't in glTF spec. See ._markDefs()
|
|
2398
|
-
mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);
|
|
2399
|
-
|
|
1833
|
+
if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) {
|
|
1834
|
+
mesh = meshDef.isSkinnedMesh === true ? new THREE.SkinnedMesh(geometry, material) : new THREE.Mesh(geometry, material);
|
|
2400
1835
|
if (mesh.isSkinnedMesh === true && !mesh.geometry.attributes.skinWeight.normalized) {
|
|
2401
|
-
// we normalize floating point skin weight array to fix malformed assets (see #15319)
|
|
2402
|
-
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
|
|
2403
1836
|
mesh.normalizeSkinWeights();
|
|
2404
1837
|
}
|
|
2405
|
-
|
|
2406
1838
|
if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {
|
|
2407
|
-
mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode);
|
|
1839
|
+
mesh.geometry = toTrianglesDrawMode(mesh.geometry, THREE.TriangleStripDrawMode);
|
|
2408
1840
|
} else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {
|
|
2409
|
-
mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode);
|
|
1841
|
+
mesh.geometry = toTrianglesDrawMode(mesh.geometry, THREE.TriangleFanDrawMode);
|
|
2410
1842
|
}
|
|
2411
1843
|
} else if (primitive.mode === WEBGL_CONSTANTS.LINES) {
|
|
2412
|
-
mesh = new LineSegments(geometry, material);
|
|
1844
|
+
mesh = new THREE.LineSegments(geometry, material);
|
|
2413
1845
|
} else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {
|
|
2414
|
-
mesh = new Line(geometry, material);
|
|
1846
|
+
mesh = new THREE.Line(geometry, material);
|
|
2415
1847
|
} else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {
|
|
2416
|
-
mesh = new LineLoop(geometry, material);
|
|
1848
|
+
mesh = new THREE.LineLoop(geometry, material);
|
|
2417
1849
|
} else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {
|
|
2418
|
-
mesh = new Points(geometry, material);
|
|
1850
|
+
mesh = new THREE.Points(geometry, material);
|
|
2419
1851
|
} else {
|
|
2420
|
-
throw new Error(
|
|
1852
|
+
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode);
|
|
2421
1853
|
}
|
|
2422
|
-
|
|
2423
1854
|
if (Object.keys(mesh.geometry.morphAttributes).length > 0) {
|
|
2424
1855
|
updateMorphTargets(mesh, meshDef);
|
|
2425
1856
|
}
|
|
2426
|
-
|
|
2427
|
-
mesh.name = parser.createUniqueName(meshDef.name || 'mesh_' + meshIndex);
|
|
1857
|
+
mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex);
|
|
2428
1858
|
assignExtrasToUserData(mesh, meshDef);
|
|
2429
|
-
if (primitive.extensions)
|
|
1859
|
+
if (primitive.extensions)
|
|
1860
|
+
addUnknownExtensionsToUserData(extensions, mesh, primitive);
|
|
2430
1861
|
parser.assignFinalMaterial(mesh);
|
|
2431
1862
|
meshes.push(mesh);
|
|
2432
1863
|
}
|
|
2433
|
-
|
|
2434
1864
|
for (let i = 0, il = meshes.length; i < il; i++) {
|
|
2435
1865
|
parser.associations.set(meshes[i], {
|
|
2436
1866
|
meshes: meshIndex,
|
|
2437
1867
|
primitives: i
|
|
2438
1868
|
});
|
|
2439
1869
|
}
|
|
2440
|
-
|
|
2441
1870
|
if (meshes.length === 1) {
|
|
2442
1871
|
return meshes[0];
|
|
2443
1872
|
}
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
parser.associations.set(group, {
|
|
2447
|
-
meshes: meshIndex
|
|
2448
|
-
});
|
|
2449
|
-
|
|
1873
|
+
const group = new THREE.Group();
|
|
1874
|
+
parser.associations.set(group, { meshes: meshIndex });
|
|
2450
1875
|
for (let i = 0, il = meshes.length; i < il; i++) {
|
|
2451
1876
|
group.add(meshes[i]);
|
|
2452
1877
|
}
|
|
2453
|
-
|
|
2454
1878
|
return group;
|
|
2455
1879
|
});
|
|
2456
1880
|
}
|
|
2457
|
-
/**
|
|
2458
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
|
|
2459
|
-
* @param {number} cameraIndex
|
|
2460
|
-
* @return {Promise<THREE.Camera>}
|
|
2461
|
-
*/
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
1881
|
loadCamera(cameraIndex) {
|
|
2465
1882
|
let camera;
|
|
2466
1883
|
const cameraDef = this.json.cameras[cameraIndex];
|
|
2467
1884
|
const params = cameraDef[cameraDef.type];
|
|
2468
|
-
|
|
2469
1885
|
if (!params) {
|
|
2470
|
-
console.warn(
|
|
1886
|
+
console.warn("THREE.GLTFLoader: Missing camera parameters.");
|
|
2471
1887
|
return;
|
|
2472
1888
|
}
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
if (cameraDef.
|
|
1889
|
+
if (cameraDef.type === "perspective") {
|
|
1890
|
+
camera = new THREE.PerspectiveCamera(
|
|
1891
|
+
THREE.MathUtils.radToDeg(params.yfov),
|
|
1892
|
+
params.aspectRatio || 1,
|
|
1893
|
+
params.znear || 1,
|
|
1894
|
+
params.zfar || 2e6
|
|
1895
|
+
);
|
|
1896
|
+
} else if (cameraDef.type === "orthographic") {
|
|
1897
|
+
camera = new THREE.OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar);
|
|
1898
|
+
}
|
|
1899
|
+
if (cameraDef.name)
|
|
1900
|
+
camera.name = this.createUniqueName(cameraDef.name);
|
|
2481
1901
|
assignExtrasToUserData(camera, cameraDef);
|
|
2482
1902
|
return Promise.resolve(camera);
|
|
2483
1903
|
}
|
|
2484
|
-
/**
|
|
2485
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
|
|
2486
|
-
* @param {number} skinIndex
|
|
2487
|
-
* @return {Promise<Object>}
|
|
2488
|
-
*/
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
1904
|
loadSkin(skinIndex) {
|
|
2492
1905
|
const skinDef = this.json.skins[skinIndex];
|
|
2493
|
-
const skinEntry = {
|
|
2494
|
-
|
|
2495
|
-
};
|
|
2496
|
-
|
|
2497
|
-
if (skinDef.inverseBindMatrices === undefined) {
|
|
1906
|
+
const skinEntry = { joints: skinDef.joints };
|
|
1907
|
+
if (skinDef.inverseBindMatrices === void 0) {
|
|
2498
1908
|
return Promise.resolve(skinEntry);
|
|
2499
1909
|
}
|
|
2500
|
-
|
|
2501
|
-
return this.getDependency('accessor', skinDef.inverseBindMatrices).then(function (accessor) {
|
|
1910
|
+
return this.getDependency("accessor", skinDef.inverseBindMatrices).then(function(accessor) {
|
|
2502
1911
|
skinEntry.inverseBindMatrices = accessor;
|
|
2503
1912
|
return skinEntry;
|
|
2504
1913
|
});
|
|
2505
1914
|
}
|
|
2506
|
-
/**
|
|
2507
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
|
|
2508
|
-
* @param {number} animationIndex
|
|
2509
|
-
* @return {Promise<AnimationClip>}
|
|
2510
|
-
*/
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
1915
|
loadAnimation(animationIndex) {
|
|
2514
1916
|
const json = this.json;
|
|
2515
1917
|
const animationDef = json.animations[animationIndex];
|
|
@@ -2518,63 +1920,61 @@ class GLTFParser {
|
|
|
2518
1920
|
const pendingOutputAccessors = [];
|
|
2519
1921
|
const pendingSamplers = [];
|
|
2520
1922
|
const pendingTargets = [];
|
|
2521
|
-
|
|
2522
1923
|
for (let i = 0, il = animationDef.channels.length; i < il; i++) {
|
|
2523
1924
|
const channel = animationDef.channels[i];
|
|
2524
1925
|
const sampler = animationDef.samplers[channel.sampler];
|
|
2525
1926
|
const target = channel.target;
|
|
2526
|
-
const name = target.node !==
|
|
2527
|
-
|
|
2528
|
-
const
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
pendingOutputAccessors.push(this.getDependency('accessor', output));
|
|
1927
|
+
const name = target.node !== void 0 ? target.node : target.id;
|
|
1928
|
+
const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input;
|
|
1929
|
+
const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output;
|
|
1930
|
+
pendingNodes.push(this.getDependency("node", name));
|
|
1931
|
+
pendingInputAccessors.push(this.getDependency("accessor", input));
|
|
1932
|
+
pendingOutputAccessors.push(this.getDependency("accessor", output));
|
|
2533
1933
|
pendingSamplers.push(sampler);
|
|
2534
1934
|
pendingTargets.push(target);
|
|
2535
1935
|
}
|
|
2536
|
-
|
|
2537
|
-
|
|
1936
|
+
return Promise.all([
|
|
1937
|
+
Promise.all(pendingNodes),
|
|
1938
|
+
Promise.all(pendingInputAccessors),
|
|
1939
|
+
Promise.all(pendingOutputAccessors),
|
|
1940
|
+
Promise.all(pendingSamplers),
|
|
1941
|
+
Promise.all(pendingTargets)
|
|
1942
|
+
]).then(function(dependencies) {
|
|
2538
1943
|
const nodes = dependencies[0];
|
|
2539
1944
|
const inputAccessors = dependencies[1];
|
|
2540
1945
|
const outputAccessors = dependencies[2];
|
|
2541
1946
|
const samplers = dependencies[3];
|
|
2542
1947
|
const targets = dependencies[4];
|
|
2543
1948
|
const tracks = [];
|
|
2544
|
-
|
|
2545
1949
|
for (let i = 0, il = nodes.length; i < il; i++) {
|
|
2546
1950
|
const node = nodes[i];
|
|
2547
1951
|
const inputAccessor = inputAccessors[i];
|
|
2548
1952
|
const outputAccessor = outputAccessors[i];
|
|
2549
1953
|
const sampler = samplers[i];
|
|
2550
1954
|
const target = targets[i];
|
|
2551
|
-
if (node ===
|
|
1955
|
+
if (node === void 0)
|
|
1956
|
+
continue;
|
|
2552
1957
|
node.updateMatrix();
|
|
2553
1958
|
node.matrixAutoUpdate = true;
|
|
2554
1959
|
let TypedKeyframeTrack;
|
|
2555
|
-
|
|
2556
1960
|
switch (PATH_PROPERTIES[target.path]) {
|
|
2557
1961
|
case PATH_PROPERTIES.weights:
|
|
2558
|
-
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
1962
|
+
TypedKeyframeTrack = THREE.NumberKeyframeTrack;
|
|
2559
1963
|
break;
|
|
2560
|
-
|
|
2561
1964
|
case PATH_PROPERTIES.rotation:
|
|
2562
|
-
TypedKeyframeTrack = QuaternionKeyframeTrack;
|
|
1965
|
+
TypedKeyframeTrack = THREE.QuaternionKeyframeTrack;
|
|
2563
1966
|
break;
|
|
2564
|
-
|
|
2565
1967
|
case PATH_PROPERTIES.position:
|
|
2566
1968
|
case PATH_PROPERTIES.scale:
|
|
2567
1969
|
default:
|
|
2568
|
-
TypedKeyframeTrack = VectorKeyframeTrack;
|
|
1970
|
+
TypedKeyframeTrack = THREE.VectorKeyframeTrack;
|
|
2569
1971
|
break;
|
|
2570
1972
|
}
|
|
2571
|
-
|
|
2572
1973
|
const targetName = node.name ? node.name : node.uuid;
|
|
2573
|
-
const interpolation = sampler.interpolation !==
|
|
1974
|
+
const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : THREE.InterpolateLinear;
|
|
2574
1975
|
const targetNames = [];
|
|
2575
|
-
|
|
2576
1976
|
if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {
|
|
2577
|
-
node.traverse(function
|
|
1977
|
+
node.traverse(function(object) {
|
|
2578
1978
|
if (object.morphTargetInfluences) {
|
|
2579
1979
|
targetNames.push(object.name ? object.name : object.uuid);
|
|
2580
1980
|
}
|
|
@@ -2582,427 +1982,318 @@ class GLTFParser {
|
|
|
2582
1982
|
} else {
|
|
2583
1983
|
targetNames.push(targetName);
|
|
2584
1984
|
}
|
|
2585
|
-
|
|
2586
1985
|
let outputArray = outputAccessor.array;
|
|
2587
|
-
|
|
2588
1986
|
if (outputAccessor.normalized) {
|
|
2589
1987
|
const scale = getNormalizedComponentScale(outputArray.constructor);
|
|
2590
1988
|
const scaled = new Float32Array(outputArray.length);
|
|
2591
|
-
|
|
2592
1989
|
for (let j = 0, jl = outputArray.length; j < jl; j++) {
|
|
2593
1990
|
scaled[j] = outputArray[j] * scale;
|
|
2594
1991
|
}
|
|
2595
|
-
|
|
2596
1992
|
outputArray = scaled;
|
|
2597
1993
|
}
|
|
2598
|
-
|
|
2599
1994
|
for (let j = 0, jl = targetNames.length; j < jl; j++) {
|
|
2600
|
-
const track = new TypedKeyframeTrack(
|
|
2601
|
-
|
|
2602
|
-
|
|
1995
|
+
const track = new TypedKeyframeTrack(
|
|
1996
|
+
targetNames[j] + "." + PATH_PROPERTIES[target.path],
|
|
1997
|
+
inputAccessor.array,
|
|
1998
|
+
outputArray,
|
|
1999
|
+
interpolation
|
|
2000
|
+
);
|
|
2001
|
+
if (sampler.interpolation === "CUBICSPLINE") {
|
|
2603
2002
|
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {
|
|
2604
|
-
|
|
2605
|
-
// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
|
|
2606
|
-
// must be divided by three to get the interpolant's sampleSize argument.
|
|
2607
|
-
const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
2003
|
+
const interpolantType = this instanceof THREE.QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
2608
2004
|
return new interpolantType(this.times, this.values, this.getValueSize() / 3, result);
|
|
2609
|
-
};
|
|
2610
|
-
|
|
2611
|
-
|
|
2005
|
+
};
|
|
2612
2006
|
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
2613
2007
|
}
|
|
2614
|
-
|
|
2615
2008
|
tracks.push(track);
|
|
2616
2009
|
}
|
|
2617
2010
|
}
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
return new AnimationClip(name, undefined, tracks);
|
|
2011
|
+
const name = animationDef.name ? animationDef.name : "animation_" + animationIndex;
|
|
2012
|
+
return new THREE.AnimationClip(name, void 0, tracks);
|
|
2621
2013
|
});
|
|
2622
2014
|
}
|
|
2623
|
-
|
|
2624
2015
|
createNodeMesh(nodeIndex) {
|
|
2625
2016
|
const json = this.json;
|
|
2626
2017
|
const parser = this;
|
|
2627
2018
|
const nodeDef = json.nodes[nodeIndex];
|
|
2628
|
-
if (nodeDef.mesh ===
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2019
|
+
if (nodeDef.mesh === void 0)
|
|
2020
|
+
return null;
|
|
2021
|
+
return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) {
|
|
2022
|
+
const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);
|
|
2023
|
+
if (nodeDef.weights !== void 0) {
|
|
2024
|
+
node.traverse(function(o) {
|
|
2025
|
+
if (!o.isMesh)
|
|
2026
|
+
return;
|
|
2637
2027
|
for (let i = 0, il = nodeDef.weights.length; i < il; i++) {
|
|
2638
2028
|
o.morphTargetInfluences[i] = nodeDef.weights[i];
|
|
2639
2029
|
}
|
|
2640
2030
|
});
|
|
2641
2031
|
}
|
|
2642
|
-
|
|
2643
2032
|
return node;
|
|
2644
2033
|
});
|
|
2645
2034
|
}
|
|
2646
|
-
/**
|
|
2647
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
|
|
2648
|
-
* @param {number} nodeIndex
|
|
2649
|
-
* @return {Promise<Object3D>}
|
|
2650
|
-
*/
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
2035
|
loadNode(nodeIndex) {
|
|
2654
2036
|
const json = this.json;
|
|
2655
2037
|
const extensions = this.extensions;
|
|
2656
2038
|
const parser = this;
|
|
2657
|
-
const nodeDef = json.nodes[nodeIndex];
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
return function () {
|
|
2039
|
+
const nodeDef = json.nodes[nodeIndex];
|
|
2040
|
+
const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : "";
|
|
2041
|
+
return function() {
|
|
2661
2042
|
const pending = [];
|
|
2662
|
-
|
|
2663
|
-
const meshPromise = parser._invokeOne(function (ext) {
|
|
2043
|
+
const meshPromise = parser._invokeOne(function(ext) {
|
|
2664
2044
|
return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);
|
|
2665
2045
|
});
|
|
2666
|
-
|
|
2667
2046
|
if (meshPromise) {
|
|
2668
2047
|
pending.push(meshPromise);
|
|
2669
2048
|
}
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2049
|
+
if (nodeDef.camera !== void 0) {
|
|
2050
|
+
pending.push(
|
|
2051
|
+
parser.getDependency("camera", nodeDef.camera).then(function(camera) {
|
|
2052
|
+
return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera);
|
|
2053
|
+
})
|
|
2054
|
+
);
|
|
2675
2055
|
}
|
|
2676
|
-
|
|
2677
|
-
parser._invokeAll(function (ext) {
|
|
2056
|
+
parser._invokeAll(function(ext) {
|
|
2678
2057
|
return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex);
|
|
2679
|
-
}).forEach(function
|
|
2058
|
+
}).forEach(function(promise) {
|
|
2680
2059
|
pending.push(promise);
|
|
2681
2060
|
});
|
|
2682
|
-
|
|
2683
2061
|
return Promise.all(pending);
|
|
2684
|
-
}().then(function
|
|
2685
|
-
let node;
|
|
2686
|
-
|
|
2062
|
+
}().then(function(objects) {
|
|
2063
|
+
let node;
|
|
2687
2064
|
if (nodeDef.isBone === true) {
|
|
2688
|
-
node = new Bone();
|
|
2065
|
+
node = new THREE.Bone();
|
|
2689
2066
|
} else if (objects.length > 1) {
|
|
2690
|
-
node = new Group();
|
|
2067
|
+
node = new THREE.Group();
|
|
2691
2068
|
} else if (objects.length === 1) {
|
|
2692
2069
|
node = objects[0];
|
|
2693
2070
|
} else {
|
|
2694
|
-
node = new Object3D();
|
|
2071
|
+
node = new THREE.Object3D();
|
|
2695
2072
|
}
|
|
2696
|
-
|
|
2697
2073
|
if (node !== objects[0]) {
|
|
2698
2074
|
for (let i = 0, il = objects.length; i < il; i++) {
|
|
2699
2075
|
node.add(objects[i]);
|
|
2700
2076
|
}
|
|
2701
2077
|
}
|
|
2702
|
-
|
|
2703
2078
|
if (nodeDef.name) {
|
|
2704
2079
|
node.userData.name = nodeDef.name;
|
|
2705
2080
|
node.name = nodeName;
|
|
2706
2081
|
}
|
|
2707
|
-
|
|
2708
2082
|
assignExtrasToUserData(node, nodeDef);
|
|
2709
|
-
if (nodeDef.extensions)
|
|
2710
|
-
|
|
2711
|
-
if (nodeDef.matrix !==
|
|
2712
|
-
const matrix = new Matrix4();
|
|
2083
|
+
if (nodeDef.extensions)
|
|
2084
|
+
addUnknownExtensionsToUserData(extensions, node, nodeDef);
|
|
2085
|
+
if (nodeDef.matrix !== void 0) {
|
|
2086
|
+
const matrix = new THREE.Matrix4();
|
|
2713
2087
|
matrix.fromArray(nodeDef.matrix);
|
|
2714
2088
|
node.applyMatrix4(matrix);
|
|
2715
2089
|
} else {
|
|
2716
|
-
if (nodeDef.translation !==
|
|
2090
|
+
if (nodeDef.translation !== void 0) {
|
|
2717
2091
|
node.position.fromArray(nodeDef.translation);
|
|
2718
2092
|
}
|
|
2719
|
-
|
|
2720
|
-
if (nodeDef.rotation !== undefined) {
|
|
2093
|
+
if (nodeDef.rotation !== void 0) {
|
|
2721
2094
|
node.quaternion.fromArray(nodeDef.rotation);
|
|
2722
2095
|
}
|
|
2723
|
-
|
|
2724
|
-
if (nodeDef.scale !== undefined) {
|
|
2096
|
+
if (nodeDef.scale !== void 0) {
|
|
2725
2097
|
node.scale.fromArray(nodeDef.scale);
|
|
2726
2098
|
}
|
|
2727
2099
|
}
|
|
2728
|
-
|
|
2729
2100
|
if (!parser.associations.has(node)) {
|
|
2730
2101
|
parser.associations.set(node, {});
|
|
2731
2102
|
}
|
|
2732
|
-
|
|
2733
2103
|
parser.associations.get(node).nodes = nodeIndex;
|
|
2734
2104
|
return node;
|
|
2735
2105
|
});
|
|
2736
2106
|
}
|
|
2737
|
-
/**
|
|
2738
|
-
* Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
|
|
2739
|
-
* @param {number} sceneIndex
|
|
2740
|
-
* @return {Promise<Group>}
|
|
2741
|
-
*/
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
2107
|
loadScene(sceneIndex) {
|
|
2745
2108
|
const json = this.json;
|
|
2746
2109
|
const extensions = this.extensions;
|
|
2747
2110
|
const sceneDef = this.json.scenes[sceneIndex];
|
|
2748
|
-
const parser = this;
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name);
|
|
2111
|
+
const parser = this;
|
|
2112
|
+
const scene = new THREE.Group();
|
|
2113
|
+
if (sceneDef.name)
|
|
2114
|
+
scene.name = parser.createUniqueName(sceneDef.name);
|
|
2753
2115
|
assignExtrasToUserData(scene, sceneDef);
|
|
2754
|
-
if (sceneDef.extensions)
|
|
2116
|
+
if (sceneDef.extensions)
|
|
2117
|
+
addUnknownExtensionsToUserData(extensions, scene, sceneDef);
|
|
2755
2118
|
const nodeIds = sceneDef.nodes || [];
|
|
2756
2119
|
const pending = [];
|
|
2757
|
-
|
|
2758
2120
|
for (let i = 0, il = nodeIds.length; i < il; i++) {
|
|
2759
2121
|
pending.push(buildNodeHierarchy(nodeIds[i], scene, json, parser));
|
|
2760
2122
|
}
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
// didn't make it into the scene.
|
|
2765
|
-
const reduceAssociations = node => {
|
|
2766
|
-
const reducedAssociations = new Map();
|
|
2767
|
-
|
|
2123
|
+
return Promise.all(pending).then(function() {
|
|
2124
|
+
const reduceAssociations = (node) => {
|
|
2125
|
+
const reducedAssociations = /* @__PURE__ */ new Map();
|
|
2768
2126
|
for (const [key, value] of parser.associations) {
|
|
2769
|
-
if (key instanceof Material || key instanceof Texture) {
|
|
2127
|
+
if (key instanceof THREE.Material || key instanceof THREE.Texture) {
|
|
2770
2128
|
reducedAssociations.set(key, value);
|
|
2771
2129
|
}
|
|
2772
2130
|
}
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
const mappings = parser.associations.get(node);
|
|
2776
|
-
|
|
2131
|
+
node.traverse((node2) => {
|
|
2132
|
+
const mappings = parser.associations.get(node2);
|
|
2777
2133
|
if (mappings != null) {
|
|
2778
|
-
reducedAssociations.set(
|
|
2134
|
+
reducedAssociations.set(node2, mappings);
|
|
2779
2135
|
}
|
|
2780
2136
|
});
|
|
2781
2137
|
return reducedAssociations;
|
|
2782
2138
|
};
|
|
2783
|
-
|
|
2784
2139
|
parser.associations = reduceAssociations(scene);
|
|
2785
2140
|
return scene;
|
|
2786
2141
|
});
|
|
2787
2142
|
}
|
|
2788
|
-
|
|
2789
2143
|
}
|
|
2790
|
-
|
|
2791
2144
|
function buildNodeHierarchy(nodeId, parentObject, json, parser) {
|
|
2792
2145
|
const nodeDef = json.nodes[nodeId];
|
|
2793
|
-
return parser.getDependency(
|
|
2794
|
-
if (nodeDef.skin ===
|
|
2795
|
-
|
|
2146
|
+
return parser.getDependency("node", nodeId).then(function(node) {
|
|
2147
|
+
if (nodeDef.skin === void 0)
|
|
2148
|
+
return node;
|
|
2796
2149
|
let skinEntry;
|
|
2797
|
-
return parser.getDependency(
|
|
2150
|
+
return parser.getDependency("skin", nodeDef.skin).then(function(skin) {
|
|
2798
2151
|
skinEntry = skin;
|
|
2799
2152
|
const pendingJoints = [];
|
|
2800
|
-
|
|
2801
2153
|
for (let i = 0, il = skinEntry.joints.length; i < il; i++) {
|
|
2802
|
-
pendingJoints.push(parser.getDependency(
|
|
2154
|
+
pendingJoints.push(parser.getDependency("node", skinEntry.joints[i]));
|
|
2803
2155
|
}
|
|
2804
|
-
|
|
2805
2156
|
return Promise.all(pendingJoints);
|
|
2806
|
-
}).then(function
|
|
2807
|
-
node.traverse(function
|
|
2808
|
-
if (!mesh.isMesh)
|
|
2157
|
+
}).then(function(jointNodes) {
|
|
2158
|
+
node.traverse(function(mesh) {
|
|
2159
|
+
if (!mesh.isMesh)
|
|
2160
|
+
return;
|
|
2809
2161
|
const bones = [];
|
|
2810
2162
|
const boneInverses = [];
|
|
2811
|
-
|
|
2812
2163
|
for (let j = 0, jl = jointNodes.length; j < jl; j++) {
|
|
2813
2164
|
const jointNode = jointNodes[j];
|
|
2814
|
-
|
|
2815
2165
|
if (jointNode) {
|
|
2816
2166
|
bones.push(jointNode);
|
|
2817
|
-
const mat = new Matrix4();
|
|
2818
|
-
|
|
2819
|
-
if (skinEntry.inverseBindMatrices !== undefined) {
|
|
2167
|
+
const mat = new THREE.Matrix4();
|
|
2168
|
+
if (skinEntry.inverseBindMatrices !== void 0) {
|
|
2820
2169
|
mat.fromArray(skinEntry.inverseBindMatrices.array, j * 16);
|
|
2821
2170
|
}
|
|
2822
|
-
|
|
2823
2171
|
boneInverses.push(mat);
|
|
2824
2172
|
} else {
|
|
2825
2173
|
console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[j]);
|
|
2826
2174
|
}
|
|
2827
2175
|
}
|
|
2828
|
-
|
|
2829
|
-
mesh.bind(new Skeleton(bones, boneInverses), mesh.matrixWorld);
|
|
2176
|
+
mesh.bind(new THREE.Skeleton(bones, boneInverses), mesh.matrixWorld);
|
|
2830
2177
|
});
|
|
2831
2178
|
return node;
|
|
2832
2179
|
});
|
|
2833
|
-
}).then(function
|
|
2834
|
-
// build node hierachy
|
|
2180
|
+
}).then(function(node) {
|
|
2835
2181
|
parentObject.add(node);
|
|
2836
2182
|
const pending = [];
|
|
2837
|
-
|
|
2838
2183
|
if (nodeDef.children) {
|
|
2839
2184
|
const children = nodeDef.children;
|
|
2840
|
-
|
|
2841
2185
|
for (let i = 0, il = children.length; i < il; i++) {
|
|
2842
2186
|
const child = children[i];
|
|
2843
2187
|
pending.push(buildNodeHierarchy(child, node, json, parser));
|
|
2844
2188
|
}
|
|
2845
2189
|
}
|
|
2846
|
-
|
|
2847
2190
|
return Promise.all(pending);
|
|
2848
2191
|
});
|
|
2849
2192
|
}
|
|
2850
|
-
/**
|
|
2851
|
-
* @param {BufferGeometry} geometry
|
|
2852
|
-
* @param {GLTF.Primitive} primitiveDef
|
|
2853
|
-
* @param {GLTFParser} parser
|
|
2854
|
-
*/
|
|
2855
|
-
|
|
2856
|
-
|
|
2857
2193
|
function computeBounds(geometry, primitiveDef, parser) {
|
|
2858
2194
|
const attributes = primitiveDef.attributes;
|
|
2859
|
-
const box = new Box3();
|
|
2860
|
-
|
|
2861
|
-
if (attributes.POSITION !== undefined) {
|
|
2195
|
+
const box = new THREE.Box3();
|
|
2196
|
+
if (attributes.POSITION !== void 0) {
|
|
2862
2197
|
const accessor = parser.json.accessors[attributes.POSITION];
|
|
2863
2198
|
const min = accessor.min;
|
|
2864
|
-
const max = accessor.max;
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2]));
|
|
2868
|
-
|
|
2199
|
+
const max = accessor.max;
|
|
2200
|
+
if (min !== void 0 && max !== void 0) {
|
|
2201
|
+
box.set(new THREE.Vector3(min[0], min[1], min[2]), new THREE.Vector3(max[0], max[1], max[2]));
|
|
2869
2202
|
if (accessor.normalized) {
|
|
2870
2203
|
const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
|
|
2871
2204
|
box.min.multiplyScalar(boxScale);
|
|
2872
2205
|
box.max.multiplyScalar(boxScale);
|
|
2873
2206
|
}
|
|
2874
2207
|
} else {
|
|
2875
|
-
console.warn(
|
|
2208
|
+
console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
|
|
2876
2209
|
return;
|
|
2877
2210
|
}
|
|
2878
2211
|
} else {
|
|
2879
2212
|
return;
|
|
2880
2213
|
}
|
|
2881
|
-
|
|
2882
2214
|
const targets = primitiveDef.targets;
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
const
|
|
2886
|
-
const vector = new Vector3();
|
|
2887
|
-
|
|
2215
|
+
if (targets !== void 0) {
|
|
2216
|
+
const maxDisplacement = new THREE.Vector3();
|
|
2217
|
+
const vector = new THREE.Vector3();
|
|
2888
2218
|
for (let i = 0, il = targets.length; i < il; i++) {
|
|
2889
2219
|
const target = targets[i];
|
|
2890
|
-
|
|
2891
|
-
if (target.POSITION !== undefined) {
|
|
2220
|
+
if (target.POSITION !== void 0) {
|
|
2892
2221
|
const accessor = parser.json.accessors[target.POSITION];
|
|
2893
2222
|
const min = accessor.min;
|
|
2894
|
-
const max = accessor.max;
|
|
2895
|
-
|
|
2896
|
-
if (min !== undefined && max !== undefined) {
|
|
2897
|
-
// we need to get max of absolute components because target weight is [-1,1]
|
|
2223
|
+
const max = accessor.max;
|
|
2224
|
+
if (min !== void 0 && max !== void 0) {
|
|
2898
2225
|
vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));
|
|
2899
2226
|
vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));
|
|
2900
2227
|
vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));
|
|
2901
|
-
|
|
2902
2228
|
if (accessor.normalized) {
|
|
2903
2229
|
const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
|
|
2904
2230
|
vector.multiplyScalar(boxScale);
|
|
2905
|
-
}
|
|
2906
|
-
// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets
|
|
2907
|
-
// are used to implement key-frame animations and as such only two are active at a time - this results in very large
|
|
2908
|
-
// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.
|
|
2909
|
-
|
|
2910
|
-
|
|
2231
|
+
}
|
|
2911
2232
|
maxDisplacement.max(vector);
|
|
2912
2233
|
} else {
|
|
2913
|
-
console.warn(
|
|
2234
|
+
console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
|
|
2914
2235
|
}
|
|
2915
2236
|
}
|
|
2916
|
-
}
|
|
2917
|
-
|
|
2918
|
-
|
|
2237
|
+
}
|
|
2919
2238
|
box.expandByVector(maxDisplacement);
|
|
2920
2239
|
}
|
|
2921
|
-
|
|
2922
2240
|
geometry.boundingBox = box;
|
|
2923
|
-
const sphere = new Sphere();
|
|
2241
|
+
const sphere = new THREE.Sphere();
|
|
2924
2242
|
box.getCenter(sphere.center);
|
|
2925
2243
|
sphere.radius = box.min.distanceTo(box.max) / 2;
|
|
2926
2244
|
geometry.boundingSphere = sphere;
|
|
2927
2245
|
}
|
|
2928
|
-
/**
|
|
2929
|
-
* @param {BufferGeometry} geometry
|
|
2930
|
-
* @param {GLTF.Primitive} primitiveDef
|
|
2931
|
-
* @param {GLTFParser} parser
|
|
2932
|
-
* @return {Promise<BufferGeometry>}
|
|
2933
|
-
*/
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
2246
|
function addPrimitiveAttributes(geometry, primitiveDef, parser) {
|
|
2937
2247
|
const attributes = primitiveDef.attributes;
|
|
2938
2248
|
const pending = [];
|
|
2939
|
-
|
|
2940
2249
|
function assignAttributeAccessor(accessorIndex, attributeName) {
|
|
2941
|
-
return parser.getDependency(
|
|
2250
|
+
return parser.getDependency("accessor", accessorIndex).then(function(accessor) {
|
|
2942
2251
|
geometry.setAttribute(attributeName, accessor);
|
|
2943
2252
|
});
|
|
2944
2253
|
}
|
|
2945
|
-
|
|
2946
2254
|
for (const gltfAttributeName in attributes) {
|
|
2947
|
-
const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();
|
|
2948
|
-
|
|
2949
|
-
|
|
2255
|
+
const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();
|
|
2256
|
+
if (threeAttributeName in geometry.attributes)
|
|
2257
|
+
continue;
|
|
2950
2258
|
pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName));
|
|
2951
2259
|
}
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
geometry.setIndex(accessor);
|
|
2260
|
+
if (primitiveDef.indices !== void 0 && !geometry.index) {
|
|
2261
|
+
const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) {
|
|
2262
|
+
geometry.setIndex(accessor2);
|
|
2956
2263
|
});
|
|
2957
2264
|
pending.push(accessor);
|
|
2958
2265
|
}
|
|
2959
|
-
|
|
2960
2266
|
assignExtrasToUserData(geometry, primitiveDef);
|
|
2961
2267
|
computeBounds(geometry, primitiveDef, parser);
|
|
2962
|
-
return Promise.all(pending).then(function
|
|
2963
|
-
return primitiveDef.targets !==
|
|
2268
|
+
return Promise.all(pending).then(function() {
|
|
2269
|
+
return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;
|
|
2964
2270
|
});
|
|
2965
2271
|
}
|
|
2966
|
-
/**
|
|
2967
|
-
* @param {BufferGeometry} geometry
|
|
2968
|
-
* @param {Number} drawMode
|
|
2969
|
-
* @return {BufferGeometry}
|
|
2970
|
-
*/
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
2272
|
function toTrianglesDrawMode(geometry, drawMode) {
|
|
2974
|
-
let index = geometry.getIndex();
|
|
2975
|
-
|
|
2273
|
+
let index = geometry.getIndex();
|
|
2976
2274
|
if (index === null) {
|
|
2977
2275
|
const indices = [];
|
|
2978
|
-
const position = geometry.getAttribute(
|
|
2979
|
-
|
|
2980
|
-
if (position !== undefined) {
|
|
2276
|
+
const position = geometry.getAttribute("position");
|
|
2277
|
+
if (position !== void 0) {
|
|
2981
2278
|
for (let i = 0; i < position.count; i++) {
|
|
2982
2279
|
indices.push(i);
|
|
2983
2280
|
}
|
|
2984
|
-
|
|
2985
2281
|
geometry.setIndex(indices);
|
|
2986
2282
|
index = geometry.getIndex();
|
|
2987
2283
|
} else {
|
|
2988
|
-
console.error(
|
|
2284
|
+
console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.");
|
|
2989
2285
|
return geometry;
|
|
2990
2286
|
}
|
|
2991
|
-
}
|
|
2992
|
-
|
|
2993
|
-
|
|
2287
|
+
}
|
|
2994
2288
|
const numberOfTriangles = index.count - 2;
|
|
2995
2289
|
const newIndices = [];
|
|
2996
|
-
|
|
2997
|
-
if (drawMode === TriangleFanDrawMode) {
|
|
2998
|
-
// gl.TRIANGLE_FAN
|
|
2290
|
+
if (drawMode === THREE.TriangleFanDrawMode) {
|
|
2999
2291
|
for (let i = 1; i <= numberOfTriangles; i++) {
|
|
3000
2292
|
newIndices.push(index.getX(0));
|
|
3001
2293
|
newIndices.push(index.getX(i));
|
|
3002
2294
|
newIndices.push(index.getX(i + 1));
|
|
3003
2295
|
}
|
|
3004
2296
|
} else {
|
|
3005
|
-
// gl.TRIANGLE_STRIP
|
|
3006
2297
|
for (let i = 0; i < numberOfTriangles; i++) {
|
|
3007
2298
|
if (i % 2 === 0) {
|
|
3008
2299
|
newIndices.push(index.getX(i));
|
|
@@ -3015,15 +2306,11 @@ function toTrianglesDrawMode(geometry, drawMode) {
|
|
|
3015
2306
|
}
|
|
3016
2307
|
}
|
|
3017
2308
|
}
|
|
3018
|
-
|
|
3019
2309
|
if (newIndices.length / 3 !== numberOfTriangles) {
|
|
3020
|
-
console.error(
|
|
3021
|
-
}
|
|
3022
|
-
|
|
3023
|
-
|
|
2310
|
+
console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
|
|
2311
|
+
}
|
|
3024
2312
|
const newGeometry = geometry.clone();
|
|
3025
2313
|
newGeometry.setIndex(newIndices);
|
|
3026
2314
|
return newGeometry;
|
|
3027
2315
|
}
|
|
3028
|
-
|
|
3029
|
-
export { GLTFLoader };
|
|
2316
|
+
exports.GLTFLoader = GLTFLoader;
|