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/MMDLoader.js
CHANGED
|
@@ -1,331 +1,201 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* - mmd-parser https://github.com/takahirox/mmd-parser
|
|
8
|
-
* - TGALoader
|
|
9
|
-
* - OutlineEffect
|
|
10
|
-
*
|
|
11
|
-
* MMDLoader creates Three.js Objects from MMD resources as
|
|
12
|
-
* PMD, PMX, VMD, and VPD files.
|
|
13
|
-
*
|
|
14
|
-
* PMD/PMX is a model data format, VMD is a motion data format
|
|
15
|
-
* VPD is a posing data format used in MMD(Miku Miku Dance).
|
|
16
|
-
*
|
|
17
|
-
* MMD official site
|
|
18
|
-
* - https://sites.google.com/view/evpvp/
|
|
19
|
-
*
|
|
20
|
-
* PMD, VMD format (in Japanese)
|
|
21
|
-
* - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4
|
|
22
|
-
*
|
|
23
|
-
* PMX format
|
|
24
|
-
* - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f
|
|
25
|
-
*
|
|
26
|
-
* TODO
|
|
27
|
-
* - light motion in vmd support.
|
|
28
|
-
* - SDEF support.
|
|
29
|
-
* - uv/material/bone morphing support.
|
|
30
|
-
* - more precise grant skinning support.
|
|
31
|
-
* - shadow support.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @param {THREE.LoadingManager} manager
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
class MMDLoader extends Loader {
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const THREE = require("three");
|
|
4
|
+
const TGALoader = require("./TGALoader.js");
|
|
5
|
+
const mmdParser = require("mmd-parser");
|
|
6
|
+
class MMDLoader extends THREE.Loader {
|
|
39
7
|
constructor(manager) {
|
|
40
8
|
super(manager);
|
|
41
|
-
this.loader = new FileLoader(this.manager);
|
|
42
|
-
this.parser = null;
|
|
43
|
-
|
|
9
|
+
this.loader = new THREE.FileLoader(this.manager);
|
|
10
|
+
this.parser = null;
|
|
44
11
|
this.meshBuilder = new MeshBuilder(this.manager);
|
|
45
12
|
this.animationBuilder = new AnimationBuilder();
|
|
46
13
|
}
|
|
47
|
-
/**
|
|
48
|
-
* @param {string} animationPath
|
|
49
|
-
* @return {MMDLoader}
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
14
|
setAnimationPath(animationPath) {
|
|
54
15
|
this.animationPath = animationPath;
|
|
55
16
|
return this;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Loads Model file (.pmd or .pmx) as a SkinnedMesh.
|
|
60
|
-
*
|
|
61
|
-
* @param {string} url - url to Model(.pmd or .pmx) file
|
|
62
|
-
* @param {function} onLoad
|
|
63
|
-
* @param {function} onProgress
|
|
64
|
-
* @param {function} onError
|
|
65
|
-
*/
|
|
66
|
-
|
|
67
|
-
|
|
17
|
+
}
|
|
68
18
|
load(url, onLoad, onProgress, onError) {
|
|
69
|
-
const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);
|
|
70
|
-
|
|
19
|
+
const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);
|
|
71
20
|
let resourcePath;
|
|
72
|
-
|
|
73
|
-
if (this.resourcePath !== '') {
|
|
21
|
+
if (this.resourcePath !== "") {
|
|
74
22
|
resourcePath = this.resourcePath;
|
|
75
|
-
} else if (this.path !==
|
|
23
|
+
} else if (this.path !== "") {
|
|
76
24
|
resourcePath = this.path;
|
|
77
25
|
} else {
|
|
78
|
-
resourcePath = LoaderUtils.extractUrlBase(url);
|
|
26
|
+
resourcePath = THREE.LoaderUtils.extractUrlBase(url);
|
|
79
27
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (modelExtension !== 'pmd' && modelExtension !== 'pmx') {
|
|
85
|
-
if (onError) onError(new Error('THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.'));
|
|
28
|
+
const modelExtension = this._extractExtension(url).toLowerCase();
|
|
29
|
+
if (modelExtension !== "pmd" && modelExtension !== "pmx") {
|
|
30
|
+
if (onError)
|
|
31
|
+
onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + "."));
|
|
86
32
|
return;
|
|
87
33
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
34
|
+
this[modelExtension === "pmd" ? "loadPMD" : "loadPMX"](
|
|
35
|
+
url,
|
|
36
|
+
function(data) {
|
|
37
|
+
onLoad(builder.build(data, resourcePath, onProgress, onError));
|
|
38
|
+
},
|
|
39
|
+
onProgress,
|
|
40
|
+
onError
|
|
41
|
+
);
|
|
92
42
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Loads Motion file(s) (.vmd) as a AnimationClip.
|
|
95
|
-
* If two or more files are specified, they'll be merged.
|
|
96
|
-
*
|
|
97
|
-
* @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)
|
|
98
|
-
* @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object
|
|
99
|
-
* @param {function} onLoad
|
|
100
|
-
* @param {function} onProgress
|
|
101
|
-
* @param {function} onError
|
|
102
|
-
*/
|
|
103
|
-
|
|
104
|
-
|
|
105
43
|
loadAnimation(url, object, onLoad, onProgress, onError) {
|
|
106
44
|
const builder = this.animationBuilder;
|
|
107
|
-
this.loadVMD(
|
|
108
|
-
|
|
109
|
-
|
|
45
|
+
this.loadVMD(
|
|
46
|
+
url,
|
|
47
|
+
function(vmd) {
|
|
48
|
+
onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));
|
|
49
|
+
},
|
|
50
|
+
onProgress,
|
|
51
|
+
onError
|
|
52
|
+
);
|
|
110
53
|
}
|
|
111
|
-
/**
|
|
112
|
-
* Loads mode file and motion file(s) as an object containing
|
|
113
|
-
* a SkinnedMesh and a AnimationClip.
|
|
114
|
-
* Tracks of AnimationClip are fitting to the model.
|
|
115
|
-
*
|
|
116
|
-
* @param {string} modelUrl - url to Model(.pmd or .pmx) file
|
|
117
|
-
* @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file
|
|
118
|
-
* @param {function} onLoad
|
|
119
|
-
* @param {function} onProgress
|
|
120
|
-
* @param {function} onError
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
54
|
loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) {
|
|
125
55
|
const scope = this;
|
|
126
|
-
this.load(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
56
|
+
this.load(
|
|
57
|
+
modelUrl,
|
|
58
|
+
function(mesh) {
|
|
59
|
+
scope.loadAnimation(
|
|
60
|
+
vmdUrl,
|
|
61
|
+
mesh,
|
|
62
|
+
function(animation) {
|
|
63
|
+
onLoad({
|
|
64
|
+
mesh,
|
|
65
|
+
animation
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
onProgress,
|
|
69
|
+
onError
|
|
70
|
+
);
|
|
71
|
+
},
|
|
72
|
+
onProgress,
|
|
73
|
+
onError
|
|
74
|
+
);
|
|
75
|
+
}
|
|
146
76
|
loadPMD(url, onLoad, onProgress, onError) {
|
|
147
77
|
const parser = this._getParser();
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
78
|
+
this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
|
|
79
|
+
url,
|
|
80
|
+
function(buffer) {
|
|
81
|
+
onLoad(parser.parsePmd(buffer, true));
|
|
82
|
+
},
|
|
83
|
+
onProgress,
|
|
84
|
+
onError
|
|
85
|
+
);
|
|
152
86
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Loads .pmx file as an Object.
|
|
155
|
-
*
|
|
156
|
-
* @param {string} url - url to .pmx file
|
|
157
|
-
* @param {function} onLoad
|
|
158
|
-
* @param {function} onProgress
|
|
159
|
-
* @param {function} onError
|
|
160
|
-
*/
|
|
161
|
-
|
|
162
|
-
|
|
163
87
|
loadPMX(url, onLoad, onProgress, onError) {
|
|
164
88
|
const parser = this._getParser();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
89
|
+
this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
|
|
90
|
+
url,
|
|
91
|
+
function(buffer) {
|
|
92
|
+
onLoad(parser.parsePmx(buffer, true));
|
|
93
|
+
},
|
|
94
|
+
onProgress,
|
|
95
|
+
onError
|
|
96
|
+
);
|
|
169
97
|
}
|
|
170
|
-
/**
|
|
171
|
-
* Loads .vmd file as an Object. If two or more files are specified
|
|
172
|
-
* they'll be merged.
|
|
173
|
-
*
|
|
174
|
-
* @param {string|Array<string>} url - url(s) to .vmd file(s)
|
|
175
|
-
* @param {function} onLoad
|
|
176
|
-
* @param {function} onProgress
|
|
177
|
-
* @param {function} onError
|
|
178
|
-
*/
|
|
179
|
-
|
|
180
|
-
|
|
181
98
|
loadVMD(url, onLoad, onProgress, onError) {
|
|
182
99
|
const urls = Array.isArray(url) ? url : [url];
|
|
183
100
|
const vmds = [];
|
|
184
101
|
const vmdNum = urls.length;
|
|
185
|
-
|
|
186
102
|
const parser = this._getParser();
|
|
187
|
-
|
|
188
|
-
this.loader.setMimeType(undefined).setPath(this.animationPath).setResponseType('arraybuffer').setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
|
|
189
|
-
|
|
103
|
+
this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
|
|
190
104
|
for (let i = 0, il = urls.length; i < il; i++) {
|
|
191
|
-
this.loader.load(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
105
|
+
this.loader.load(
|
|
106
|
+
urls[i],
|
|
107
|
+
function(buffer) {
|
|
108
|
+
vmds.push(parser.parseVmd(buffer, true));
|
|
109
|
+
if (vmds.length === vmdNum)
|
|
110
|
+
onLoad(parser.mergeVmds(vmds));
|
|
111
|
+
},
|
|
112
|
+
onProgress,
|
|
113
|
+
onError
|
|
114
|
+
);
|
|
195
115
|
}
|
|
196
116
|
}
|
|
197
|
-
/**
|
|
198
|
-
* Loads .vpd file as an Object.
|
|
199
|
-
*
|
|
200
|
-
* @param {string} url - url to .vpd file
|
|
201
|
-
* @param {boolean} isUnicode
|
|
202
|
-
* @param {function} onLoad
|
|
203
|
-
* @param {function} onProgress
|
|
204
|
-
* @param {function} onError
|
|
205
|
-
*/
|
|
206
|
-
|
|
207
|
-
|
|
208
117
|
loadVPD(url, isUnicode, onLoad, onProgress, onError) {
|
|
209
118
|
const parser = this._getParser();
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
119
|
+
this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
|
|
120
|
+
url,
|
|
121
|
+
function(text) {
|
|
122
|
+
onLoad(parser.parseVpd(text, true));
|
|
123
|
+
},
|
|
124
|
+
onProgress,
|
|
125
|
+
onError
|
|
126
|
+
);
|
|
127
|
+
}
|
|
217
128
|
_extractExtension(url) {
|
|
218
|
-
const index = url.lastIndexOf(
|
|
219
|
-
return index < 0 ?
|
|
129
|
+
const index = url.lastIndexOf(".");
|
|
130
|
+
return index < 0 ? "" : url.slice(index + 1);
|
|
220
131
|
}
|
|
221
|
-
|
|
222
132
|
_getParser() {
|
|
223
133
|
if (this.parser === null) {
|
|
224
|
-
this.parser = new Parser();
|
|
134
|
+
this.parser = new mmdParser.Parser();
|
|
225
135
|
}
|
|
226
|
-
|
|
227
136
|
return this.parser;
|
|
228
137
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
*/
|
|
244
|
-
|
|
138
|
+
}
|
|
139
|
+
const DEFAULT_TOON_TEXTURES = [
|
|
140
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
|
|
141
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==",
|
|
142
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC",
|
|
143
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==",
|
|
144
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==",
|
|
145
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=",
|
|
146
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=",
|
|
147
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
|
|
148
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
|
|
149
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
|
|
150
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII="
|
|
151
|
+
];
|
|
245
152
|
class MeshBuilder {
|
|
246
153
|
constructor(manager) {
|
|
247
|
-
this.crossOrigin =
|
|
154
|
+
this.crossOrigin = "anonymous";
|
|
248
155
|
this.geometryBuilder = new GeometryBuilder();
|
|
249
156
|
this.materialBuilder = new MaterialBuilder(manager);
|
|
250
157
|
}
|
|
251
|
-
/**
|
|
252
|
-
* @param {string} crossOrigin
|
|
253
|
-
* @return {MeshBuilder}
|
|
254
|
-
*/
|
|
255
|
-
|
|
256
|
-
|
|
257
158
|
setCrossOrigin(crossOrigin) {
|
|
258
159
|
this.crossOrigin = crossOrigin;
|
|
259
160
|
return this;
|
|
260
161
|
}
|
|
261
|
-
/**
|
|
262
|
-
* @param {Object} data - parsed PMD/PMX data
|
|
263
|
-
* @param {string} resourcePath
|
|
264
|
-
* @param {function} onProgress
|
|
265
|
-
* @param {function} onError
|
|
266
|
-
* @return {SkinnedMesh}
|
|
267
|
-
*/
|
|
268
|
-
|
|
269
|
-
|
|
270
162
|
build(data, resourcePath, onProgress, onError) {
|
|
271
163
|
const geometry = this.geometryBuilder.build(data);
|
|
272
164
|
const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError);
|
|
273
|
-
const mesh = new SkinnedMesh(geometry, material);
|
|
274
|
-
const skeleton = new Skeleton(initBones(mesh));
|
|
275
|
-
mesh.bind(skeleton);
|
|
276
|
-
|
|
165
|
+
const mesh = new THREE.SkinnedMesh(geometry, material);
|
|
166
|
+
const skeleton = new THREE.Skeleton(initBones(mesh));
|
|
167
|
+
mesh.bind(skeleton);
|
|
277
168
|
return mesh;
|
|
278
169
|
}
|
|
279
|
-
|
|
280
|
-
} // TODO: Try to remove this function
|
|
281
|
-
|
|
282
|
-
|
|
170
|
+
}
|
|
283
171
|
function initBones(mesh) {
|
|
284
172
|
const geometry = mesh.geometry;
|
|
285
173
|
const bones = [];
|
|
286
|
-
|
|
287
|
-
if (geometry && geometry.bones !== undefined) {
|
|
288
|
-
// first, create array of 'Bone' objects from geometry data
|
|
174
|
+
if (geometry && geometry.bones !== void 0) {
|
|
289
175
|
for (let i = 0, il = geometry.bones.length; i < il; i++) {
|
|
290
|
-
const gbone = geometry.bones[i];
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
bones.push(bone); // apply values
|
|
294
|
-
|
|
176
|
+
const gbone = geometry.bones[i];
|
|
177
|
+
const bone = new THREE.Bone();
|
|
178
|
+
bones.push(bone);
|
|
295
179
|
bone.name = gbone.name;
|
|
296
180
|
bone.position.fromArray(gbone.pos);
|
|
297
181
|
bone.quaternion.fromArray(gbone.rotq);
|
|
298
|
-
if (gbone.scl !==
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
182
|
+
if (gbone.scl !== void 0)
|
|
183
|
+
bone.scale.fromArray(gbone.scl);
|
|
184
|
+
}
|
|
302
185
|
for (let i = 0, il = geometry.bones.length; i < il; i++) {
|
|
303
186
|
const gbone = geometry.bones[i];
|
|
304
|
-
|
|
305
|
-
if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== undefined) {
|
|
306
|
-
// subsequent bones in the hierarchy
|
|
187
|
+
if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {
|
|
307
188
|
bones[gbone.parent].add(bones[i]);
|
|
308
189
|
} else {
|
|
309
|
-
// topmost bone, immediate child of the skinned mesh
|
|
310
190
|
mesh.add(bones[i]);
|
|
311
191
|
}
|
|
312
192
|
}
|
|
313
|
-
}
|
|
314
|
-
// let's update the corresponding matrices
|
|
315
|
-
|
|
316
|
-
|
|
193
|
+
}
|
|
317
194
|
mesh.updateMatrixWorld(true);
|
|
318
195
|
return bones;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
|
|
196
|
+
}
|
|
322
197
|
class GeometryBuilder {
|
|
323
|
-
/**
|
|
324
|
-
* @param {Object} data - parsed PMD/PMX data
|
|
325
|
-
* @return {BufferGeometry}
|
|
326
|
-
*/
|
|
327
198
|
build(data) {
|
|
328
|
-
// for geometry
|
|
329
199
|
const positions = [];
|
|
330
200
|
const uvs = [];
|
|
331
201
|
const normals = [];
|
|
@@ -339,45 +209,33 @@ class GeometryBuilder {
|
|
|
339
209
|
const iks = [];
|
|
340
210
|
const grants = [];
|
|
341
211
|
const rigidBodies = [];
|
|
342
|
-
const constraints = [];
|
|
343
|
-
|
|
212
|
+
const constraints = [];
|
|
344
213
|
let offset = 0;
|
|
345
|
-
const boneTypeTable = {};
|
|
346
|
-
|
|
214
|
+
const boneTypeTable = {};
|
|
347
215
|
for (let i = 0; i < data.metadata.vertexCount; i++) {
|
|
348
216
|
const v = data.vertices[i];
|
|
349
|
-
|
|
350
217
|
for (let j = 0, jl = v.position.length; j < jl; j++) {
|
|
351
218
|
positions.push(v.position[j]);
|
|
352
219
|
}
|
|
353
|
-
|
|
354
220
|
for (let j = 0, jl = v.normal.length; j < jl; j++) {
|
|
355
221
|
normals.push(v.normal[j]);
|
|
356
222
|
}
|
|
357
|
-
|
|
358
223
|
for (let j = 0, jl = v.uv.length; j < jl; j++) {
|
|
359
224
|
uvs.push(v.uv[j]);
|
|
360
225
|
}
|
|
361
|
-
|
|
362
226
|
for (let j = 0; j < 4; j++) {
|
|
363
|
-
skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0
|
|
227
|
+
skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0);
|
|
364
228
|
}
|
|
365
|
-
|
|
366
229
|
for (let j = 0; j < 4; j++) {
|
|
367
|
-
skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0
|
|
230
|
+
skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0);
|
|
368
231
|
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
|
|
232
|
+
}
|
|
372
233
|
for (let i = 0; i < data.metadata.faceCount; i++) {
|
|
373
234
|
const face = data.faces[i];
|
|
374
|
-
|
|
375
235
|
for (let j = 0, jl = face.indices.length; j < jl; j++) {
|
|
376
236
|
indices.push(face.indices[j]);
|
|
377
237
|
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
|
|
238
|
+
}
|
|
381
239
|
for (let i = 0; i < data.metadata.materialCount; i++) {
|
|
382
240
|
const material = data.materials[i];
|
|
383
241
|
groups.push({
|
|
@@ -385,17 +243,13 @@ class GeometryBuilder {
|
|
|
385
243
|
count: material.faceCount * 3
|
|
386
244
|
});
|
|
387
245
|
offset += material.faceCount;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
246
|
+
}
|
|
391
247
|
for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
|
|
392
248
|
const body = data.rigidBodies[i];
|
|
393
|
-
let value = boneTypeTable[body.boneIndex];
|
|
394
|
-
|
|
395
|
-
value = value === undefined ? body.type : Math.max(body.type, value);
|
|
249
|
+
let value = boneTypeTable[body.boneIndex];
|
|
250
|
+
value = value === void 0 ? body.type : Math.max(body.type, value);
|
|
396
251
|
boneTypeTable[body.boneIndex] = value;
|
|
397
252
|
}
|
|
398
|
-
|
|
399
253
|
for (let i = 0; i < data.metadata.boneCount; i++) {
|
|
400
254
|
const boneData = data.bones[i];
|
|
401
255
|
const bone = {
|
|
@@ -406,21 +260,16 @@ class GeometryBuilder {
|
|
|
406
260
|
pos: boneData.position.slice(0, 3),
|
|
407
261
|
rotq: [0, 0, 0, 1],
|
|
408
262
|
scl: [1, 1, 1],
|
|
409
|
-
rigidBodyType: boneTypeTable[i] !==
|
|
263
|
+
rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1
|
|
410
264
|
};
|
|
411
|
-
|
|
412
265
|
if (bone.parent !== -1) {
|
|
413
266
|
bone.pos[0] -= data.bones[bone.parent].position[0];
|
|
414
267
|
bone.pos[1] -= data.bones[bone.parent].position[1];
|
|
415
268
|
bone.pos[2] -= data.bones[bone.parent].position[2];
|
|
416
269
|
}
|
|
417
|
-
|
|
418
270
|
bones.push(bone);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
if (data.metadata.format === 'pmd') {
|
|
271
|
+
}
|
|
272
|
+
if (data.metadata.format === "pmd") {
|
|
424
273
|
for (let i = 0; i < data.metadata.ikCount; i++) {
|
|
425
274
|
const ik = data.iks[i];
|
|
426
275
|
const param = {
|
|
@@ -430,25 +279,22 @@ class GeometryBuilder {
|
|
|
430
279
|
maxAngle: ik.maxAngle * 4,
|
|
431
280
|
links: []
|
|
432
281
|
};
|
|
433
|
-
|
|
434
282
|
for (let j = 0, jl = ik.links.length; j < jl; j++) {
|
|
435
283
|
const link = {};
|
|
436
284
|
link.index = ik.links[j].index;
|
|
437
285
|
link.enabled = true;
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
link.limitation = new Vector3(1.0, 0.0, 0.0);
|
|
286
|
+
if (data.bones[link.index].name.indexOf("\u3072\u3056") >= 0) {
|
|
287
|
+
link.limitation = new THREE.Vector3(1, 0, 0);
|
|
441
288
|
}
|
|
442
|
-
|
|
443
289
|
param.links.push(link);
|
|
444
290
|
}
|
|
445
|
-
|
|
446
291
|
iks.push(param);
|
|
447
292
|
}
|
|
448
293
|
} else {
|
|
449
294
|
for (let i = 0; i < data.metadata.boneCount; i++) {
|
|
450
295
|
const ik = data.bones[i].ik;
|
|
451
|
-
if (ik ===
|
|
296
|
+
if (ik === void 0)
|
|
297
|
+
continue;
|
|
452
298
|
const param = {
|
|
453
299
|
target: i,
|
|
454
300
|
effector: ik.effector,
|
|
@@ -456,48 +302,47 @@ class GeometryBuilder {
|
|
|
456
302
|
maxAngle: ik.maxAngle,
|
|
457
303
|
links: []
|
|
458
304
|
};
|
|
459
|
-
|
|
460
305
|
for (let j = 0, jl = ik.links.length; j < jl; j++) {
|
|
461
306
|
const link = {};
|
|
462
307
|
link.index = ik.links[j].index;
|
|
463
308
|
link.enabled = true;
|
|
464
|
-
|
|
465
309
|
if (ik.links[j].angleLimitation === 1) {
|
|
466
|
-
// Revert if rotationMin/Max doesn't work well
|
|
467
|
-
// link.limitation = new Vector3( 1.0, 0.0, 0.0 );
|
|
468
310
|
const rotationMin = ik.links[j].lowerLimitationAngle;
|
|
469
|
-
const rotationMax = ik.links[j].upperLimitationAngle;
|
|
470
|
-
// MMDParser doesn't convert. It's a MMDParser's bug
|
|
471
|
-
|
|
311
|
+
const rotationMax = ik.links[j].upperLimitationAngle;
|
|
472
312
|
const tmp1 = -rotationMax[0];
|
|
473
313
|
const tmp2 = -rotationMax[1];
|
|
474
314
|
rotationMax[0] = -rotationMin[0];
|
|
475
315
|
rotationMax[1] = -rotationMin[1];
|
|
476
316
|
rotationMin[0] = tmp1;
|
|
477
317
|
rotationMin[1] = tmp2;
|
|
478
|
-
link.rotationMin = new Vector3().fromArray(rotationMin);
|
|
479
|
-
link.rotationMax = new Vector3().fromArray(rotationMax);
|
|
318
|
+
link.rotationMin = new THREE.Vector3().fromArray(rotationMin);
|
|
319
|
+
link.rotationMax = new THREE.Vector3().fromArray(rotationMax);
|
|
480
320
|
}
|
|
481
|
-
|
|
482
321
|
param.links.push(link);
|
|
483
322
|
}
|
|
484
|
-
|
|
485
|
-
iks.push(param); // Save the reference even from bone data for efficiently
|
|
486
|
-
// simulating PMX animation system
|
|
487
|
-
|
|
323
|
+
iks.push(param);
|
|
488
324
|
bones[i].ik = param;
|
|
489
325
|
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
326
|
+
}
|
|
327
|
+
if (data.metadata.format === "pmx") {
|
|
328
|
+
let traverse = function(entry) {
|
|
329
|
+
if (entry.param) {
|
|
330
|
+
grants.push(entry.param);
|
|
331
|
+
bones[entry.param.index].grant = entry.param;
|
|
332
|
+
}
|
|
333
|
+
entry.visited = true;
|
|
334
|
+
for (let i = 0, il = entry.children.length; i < il; i++) {
|
|
335
|
+
const child = entry.children[i];
|
|
336
|
+
if (!child.visited)
|
|
337
|
+
traverse(child);
|
|
338
|
+
}
|
|
339
|
+
};
|
|
495
340
|
const grantEntryMap = {};
|
|
496
|
-
|
|
497
341
|
for (let i = 0; i < data.metadata.boneCount; i++) {
|
|
498
342
|
const boneData = data.bones[i];
|
|
499
343
|
const grant = boneData.grant;
|
|
500
|
-
if (grant ===
|
|
344
|
+
if (grant === void 0)
|
|
345
|
+
continue;
|
|
501
346
|
const param = {
|
|
502
347
|
index: i,
|
|
503
348
|
parentIndex: grant.parentIndex,
|
|
@@ -507,122 +352,74 @@ class GeometryBuilder {
|
|
|
507
352
|
affectPosition: grant.affectPosition,
|
|
508
353
|
transformationClass: boneData.transformationClass
|
|
509
354
|
};
|
|
510
|
-
grantEntryMap[i] = {
|
|
511
|
-
parent: null,
|
|
512
|
-
children: [],
|
|
513
|
-
param: param,
|
|
514
|
-
visited: false
|
|
515
|
-
};
|
|
355
|
+
grantEntryMap[i] = { parent: null, children: [], param, visited: false };
|
|
516
356
|
}
|
|
517
|
-
|
|
518
|
-
const rootEntry = {
|
|
519
|
-
parent: null,
|
|
520
|
-
children: [],
|
|
521
|
-
param: null,
|
|
522
|
-
visited: false
|
|
523
|
-
}; // Build a tree representing grant hierarchy
|
|
524
|
-
|
|
357
|
+
const rootEntry = { parent: null, children: [], param: null, visited: false };
|
|
525
358
|
for (const boneIndex in grantEntryMap) {
|
|
526
359
|
const grantEntry = grantEntryMap[boneIndex];
|
|
527
360
|
const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry;
|
|
528
361
|
grantEntry.parent = parentGrantEntry;
|
|
529
362
|
parentGrantEntry.children.push(grantEntry);
|
|
530
|
-
} // Sort grant parameters from parents to children because
|
|
531
|
-
// grant uses parent's transform that parent's grant is already applied
|
|
532
|
-
// so grant should be applied in order from parents to children
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
function traverse(entry) {
|
|
536
|
-
if (entry.param) {
|
|
537
|
-
grants.push(entry.param); // Save the reference even from bone data for efficiently
|
|
538
|
-
// simulating PMX animation system
|
|
539
|
-
|
|
540
|
-
bones[entry.param.index].grant = entry.param;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
entry.visited = true;
|
|
544
|
-
|
|
545
|
-
for (let i = 0, il = entry.children.length; i < il; i++) {
|
|
546
|
-
const child = entry.children[i]; // Cut off a loop if exists. (Is a grant loop invalid?)
|
|
547
|
-
|
|
548
|
-
if (!child.visited) traverse(child);
|
|
549
|
-
}
|
|
550
363
|
}
|
|
551
|
-
|
|
552
364
|
traverse(rootEntry);
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
|
|
365
|
+
}
|
|
556
366
|
function updateAttributes(attribute, morph, ratio) {
|
|
557
367
|
for (let i = 0; i < morph.elementCount; i++) {
|
|
558
368
|
const element = morph.elements[i];
|
|
559
369
|
let index;
|
|
560
|
-
|
|
561
|
-
if (data.metadata.format === 'pmd') {
|
|
370
|
+
if (data.metadata.format === "pmd") {
|
|
562
371
|
index = data.morphs[0].elements[element.index].index;
|
|
563
372
|
} else {
|
|
564
373
|
index = element.index;
|
|
565
374
|
}
|
|
566
|
-
|
|
567
375
|
attribute.array[index * 3 + 0] += element.position[0] * ratio;
|
|
568
376
|
attribute.array[index * 3 + 1] += element.position[1] * ratio;
|
|
569
377
|
attribute.array[index * 3 + 2] += element.position[2] * ratio;
|
|
570
378
|
}
|
|
571
379
|
}
|
|
572
|
-
|
|
573
380
|
for (let i = 0; i < data.metadata.morphCount; i++) {
|
|
574
381
|
const morph = data.morphs[i];
|
|
575
|
-
const params = {
|
|
576
|
-
|
|
577
|
-
};
|
|
578
|
-
const attribute = new Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
|
|
382
|
+
const params = { name: morph.name };
|
|
383
|
+
const attribute = new THREE.Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
|
|
579
384
|
attribute.name = morph.name;
|
|
580
|
-
|
|
581
385
|
for (let j = 0; j < data.metadata.vertexCount * 3; j++) {
|
|
582
386
|
attribute.array[j] = positions[j];
|
|
583
387
|
}
|
|
584
|
-
|
|
585
|
-
if (data.metadata.format === 'pmd') {
|
|
388
|
+
if (data.metadata.format === "pmd") {
|
|
586
389
|
if (i !== 0) {
|
|
587
|
-
updateAttributes(attribute, morph, 1
|
|
390
|
+
updateAttributes(attribute, morph, 1);
|
|
588
391
|
}
|
|
589
392
|
} else {
|
|
590
393
|
if (morph.type === 0) {
|
|
591
|
-
// group
|
|
592
394
|
for (let j = 0; j < morph.elementCount; j++) {
|
|
593
395
|
const morph2 = data.morphs[morph.elements[j].index];
|
|
594
396
|
const ratio = morph.elements[j].ratio;
|
|
595
|
-
|
|
596
397
|
if (morph2.type === 1) {
|
|
597
398
|
updateAttributes(attribute, morph2, ratio);
|
|
399
|
+
} else {
|
|
598
400
|
}
|
|
599
401
|
}
|
|
600
402
|
} else if (morph.type === 1) {
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
} else if (morph.type ===
|
|
403
|
+
updateAttributes(attribute, morph, 1);
|
|
404
|
+
} else if (morph.type === 2) {
|
|
405
|
+
} else if (morph.type === 3) {
|
|
406
|
+
} else if (morph.type === 4) {
|
|
407
|
+
} else if (morph.type === 5) {
|
|
408
|
+
} else if (morph.type === 6) {
|
|
409
|
+
} else if (morph.type === 7) {
|
|
410
|
+
} else if (morph.type === 8) {
|
|
411
|
+
}
|
|
604
412
|
}
|
|
605
|
-
|
|
606
413
|
morphTargets.push(params);
|
|
607
414
|
morphPositions.push(attribute);
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
|
|
415
|
+
}
|
|
611
416
|
for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
|
|
612
417
|
const rigidBody = data.rigidBodies[i];
|
|
613
418
|
const params = {};
|
|
614
|
-
|
|
615
419
|
for (const key in rigidBody) {
|
|
616
420
|
params[key] = rigidBody[key];
|
|
617
421
|
}
|
|
618
|
-
|
|
619
|
-
* RigidBody position parameter in PMX seems global position
|
|
620
|
-
* while the one in PMD seems offset from corresponding bone.
|
|
621
|
-
* So unify being offset.
|
|
622
|
-
*/
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
if (data.metadata.format === 'pmx') {
|
|
422
|
+
if (data.metadata.format === "pmx") {
|
|
626
423
|
if (params.boneIndex !== -1) {
|
|
627
424
|
const bone = data.bones[params.boneIndex];
|
|
628
425
|
params.position[0] -= bone.position[0];
|
|
@@ -630,250 +427,168 @@ class GeometryBuilder {
|
|
|
630
427
|
params.position[2] -= bone.position[2];
|
|
631
428
|
}
|
|
632
429
|
}
|
|
633
|
-
|
|
634
430
|
rigidBodies.push(params);
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
|
|
431
|
+
}
|
|
638
432
|
for (let i = 0; i < data.metadata.constraintCount; i++) {
|
|
639
433
|
const constraint = data.constraints[i];
|
|
640
434
|
const params = {};
|
|
641
|
-
|
|
642
435
|
for (const key in constraint) {
|
|
643
436
|
params[key] = constraint[key];
|
|
644
437
|
}
|
|
645
|
-
|
|
646
438
|
const bodyA = rigidBodies[params.rigidBodyIndex1];
|
|
647
|
-
const bodyB = rigidBodies[params.rigidBodyIndex2];
|
|
648
|
-
|
|
439
|
+
const bodyB = rigidBodies[params.rigidBodyIndex2];
|
|
649
440
|
if (bodyA.type !== 0 && bodyB.type === 2) {
|
|
650
441
|
if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) {
|
|
651
442
|
bodyB.type = 1;
|
|
652
443
|
}
|
|
653
444
|
}
|
|
654
|
-
|
|
655
445
|
constraints.push(params);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
geometry.setAttribute(
|
|
661
|
-
geometry.setAttribute(
|
|
662
|
-
geometry.setAttribute(
|
|
663
|
-
geometry.setAttribute('skinIndex', new Uint16BufferAttribute(skinIndices, 4));
|
|
664
|
-
geometry.setAttribute('skinWeight', new Float32BufferAttribute(skinWeights, 4));
|
|
446
|
+
}
|
|
447
|
+
const geometry = new THREE.BufferGeometry();
|
|
448
|
+
geometry.setAttribute("position", new THREE.Float32BufferAttribute(positions, 3));
|
|
449
|
+
geometry.setAttribute("normal", new THREE.Float32BufferAttribute(normals, 3));
|
|
450
|
+
geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
|
|
451
|
+
geometry.setAttribute("skinIndex", new THREE.Uint16BufferAttribute(skinIndices, 4));
|
|
452
|
+
geometry.setAttribute("skinWeight", new THREE.Float32BufferAttribute(skinWeights, 4));
|
|
665
453
|
geometry.setIndex(indices);
|
|
666
|
-
|
|
667
454
|
for (let i = 0, il = groups.length; i < il; i++) {
|
|
668
455
|
geometry.addGroup(groups[i].offset, groups[i].count, i);
|
|
669
456
|
}
|
|
670
|
-
|
|
671
457
|
geometry.bones = bones;
|
|
672
458
|
geometry.morphTargets = morphTargets;
|
|
673
459
|
geometry.morphAttributes.position = morphPositions;
|
|
674
460
|
geometry.morphTargetsRelative = false;
|
|
675
461
|
geometry.userData.MMD = {
|
|
676
|
-
bones
|
|
677
|
-
iks
|
|
678
|
-
grants
|
|
679
|
-
rigidBodies
|
|
680
|
-
constraints
|
|
462
|
+
bones,
|
|
463
|
+
iks,
|
|
464
|
+
grants,
|
|
465
|
+
rigidBodies,
|
|
466
|
+
constraints,
|
|
681
467
|
format: data.metadata.format
|
|
682
468
|
};
|
|
683
469
|
geometry.computeBoundingSphere();
|
|
684
470
|
return geometry;
|
|
685
471
|
}
|
|
686
|
-
|
|
687
|
-
} //
|
|
688
|
-
|
|
689
|
-
/**
|
|
690
|
-
* @param {THREE.LoadingManager} manager
|
|
691
|
-
*/
|
|
692
|
-
|
|
693
|
-
|
|
472
|
+
}
|
|
694
473
|
class MaterialBuilder {
|
|
695
474
|
constructor(manager) {
|
|
696
475
|
this.manager = manager;
|
|
697
|
-
this.textureLoader = new TextureLoader(this.manager);
|
|
698
|
-
this.tgaLoader = null;
|
|
699
|
-
|
|
700
|
-
this.
|
|
701
|
-
this.resourcePath = undefined;
|
|
476
|
+
this.textureLoader = new THREE.TextureLoader(this.manager);
|
|
477
|
+
this.tgaLoader = null;
|
|
478
|
+
this.crossOrigin = "anonymous";
|
|
479
|
+
this.resourcePath = void 0;
|
|
702
480
|
}
|
|
703
|
-
/**
|
|
704
|
-
* @param {string} crossOrigin
|
|
705
|
-
* @return {MaterialBuilder}
|
|
706
|
-
*/
|
|
707
|
-
|
|
708
|
-
|
|
709
481
|
setCrossOrigin(crossOrigin) {
|
|
710
482
|
this.crossOrigin = crossOrigin;
|
|
711
483
|
return this;
|
|
712
484
|
}
|
|
713
|
-
/**
|
|
714
|
-
* @param {string} resourcePath
|
|
715
|
-
* @return {MaterialBuilder}
|
|
716
|
-
*/
|
|
717
|
-
|
|
718
|
-
|
|
719
485
|
setResourcePath(resourcePath) {
|
|
720
486
|
this.resourcePath = resourcePath;
|
|
721
487
|
return this;
|
|
722
488
|
}
|
|
723
|
-
|
|
724
|
-
* @param {Object} data - parsed PMD/PMX data
|
|
725
|
-
* @param {BufferGeometry} geometry - some properties are dependend on geometry
|
|
726
|
-
* @param {function} onProgress
|
|
727
|
-
* @param {function} onError
|
|
728
|
-
* @return {Array<MeshToonMaterial>}
|
|
729
|
-
*/
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
build(data, geometry
|
|
733
|
-
/*, onProgress, onError */
|
|
734
|
-
) {
|
|
489
|
+
build(data, geometry) {
|
|
735
490
|
const materials = [];
|
|
736
491
|
const textures = {};
|
|
737
|
-
this.textureLoader.setCrossOrigin(this.crossOrigin);
|
|
738
|
-
|
|
492
|
+
this.textureLoader.setCrossOrigin(this.crossOrigin);
|
|
739
493
|
for (let i = 0; i < data.metadata.materialCount; i++) {
|
|
740
494
|
const material = data.materials[i];
|
|
741
|
-
const params = {
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
/*
|
|
746
|
-
* Color
|
|
747
|
-
*
|
|
748
|
-
* MMD MeshToonMaterial
|
|
749
|
-
* diffuse - color
|
|
750
|
-
* ambient - emissive * a
|
|
751
|
-
* (a = 1.0 without map texture or 0.2 with map texture)
|
|
752
|
-
*
|
|
753
|
-
* MeshToonMaterial doesn't have ambient. Set it to emissive instead.
|
|
754
|
-
* It'll be too bright if material has map texture so using coef 0.2.
|
|
755
|
-
*/
|
|
756
|
-
|
|
757
|
-
params.color = new Color().fromArray(material.diffuse);
|
|
495
|
+
const params = { userData: {} };
|
|
496
|
+
if (material.name !== void 0)
|
|
497
|
+
params.name = material.name;
|
|
498
|
+
params.color = new THREE.Color().fromArray(material.diffuse);
|
|
758
499
|
params.opacity = material.diffuse[3];
|
|
759
|
-
params.emissive = new Color().fromArray(material.ambient);
|
|
760
|
-
params.transparent = params.opacity !== 1
|
|
761
|
-
|
|
500
|
+
params.emissive = new THREE.Color().fromArray(material.ambient);
|
|
501
|
+
params.transparent = params.opacity !== 1;
|
|
762
502
|
params.skinning = geometry.bones.length > 0 ? true : false;
|
|
763
503
|
params.morphTargets = geometry.morphTargets.length > 0 ? true : false;
|
|
764
|
-
params.fog = true;
|
|
765
|
-
|
|
766
|
-
params.
|
|
767
|
-
params.
|
|
768
|
-
params.
|
|
769
|
-
params.
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
if (data.metadata.format === 'pmx' && (material.flag & 0x1) === 1) {
|
|
773
|
-
params.side = DoubleSide;
|
|
504
|
+
params.fog = true;
|
|
505
|
+
params.blending = THREE.CustomBlending;
|
|
506
|
+
params.blendSrc = THREE.SrcAlphaFactor;
|
|
507
|
+
params.blendDst = THREE.OneMinusSrcAlphaFactor;
|
|
508
|
+
params.blendSrcAlpha = THREE.SrcAlphaFactor;
|
|
509
|
+
params.blendDstAlpha = THREE.DstAlphaFactor;
|
|
510
|
+
if (data.metadata.format === "pmx" && (material.flag & 1) === 1) {
|
|
511
|
+
params.side = THREE.DoubleSide;
|
|
774
512
|
} else {
|
|
775
|
-
params.side = params.opacity === 1
|
|
513
|
+
params.side = params.opacity === 1 ? THREE.FrontSide : THREE.DoubleSide;
|
|
776
514
|
}
|
|
777
|
-
|
|
778
|
-
if (data.metadata.format === 'pmd') {
|
|
779
|
-
// map, envMap
|
|
515
|
+
if (data.metadata.format === "pmd") {
|
|
780
516
|
if (material.fileName) {
|
|
781
517
|
const fileName = material.fileName;
|
|
782
|
-
const fileNames = fileName.split(
|
|
783
|
-
// fileNames[ 1 ]: envMapFileName( optional )
|
|
784
|
-
|
|
518
|
+
const fileNames = fileName.split("*");
|
|
785
519
|
params.map = this._loadTexture(fileNames[0], textures);
|
|
786
|
-
|
|
787
520
|
if (fileNames.length > 1) {
|
|
788
521
|
const extension = fileNames[1].slice(-4).toLowerCase();
|
|
789
522
|
params.envMap = this._loadTexture(fileNames[1], textures);
|
|
790
|
-
params.combine = extension ===
|
|
523
|
+
params.combine = extension === ".sph" ? THREE.MultiplyOperation : THREE.AddOperation;
|
|
791
524
|
}
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
const toonFileName = material.toonIndex === -1 ? 'toon00.bmp' : data.toonTextures[material.toonIndex].fileName;
|
|
525
|
+
}
|
|
526
|
+
const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data.toonTextures[material.toonIndex].fileName;
|
|
796
527
|
params.gradientMap = this._loadTexture(toonFileName, textures, {
|
|
797
528
|
isToonTexture: true,
|
|
798
529
|
isDefaultToonTexture: this._isDefaultToonTexture(toonFileName)
|
|
799
|
-
});
|
|
800
|
-
|
|
530
|
+
});
|
|
801
531
|
params.userData.outlineParameters = {
|
|
802
|
-
thickness: material.edgeFlag === 1 ?
|
|
532
|
+
thickness: material.edgeFlag === 1 ? 3e-3 : 0,
|
|
803
533
|
color: [0, 0, 0],
|
|
804
|
-
alpha: 1
|
|
534
|
+
alpha: 1,
|
|
805
535
|
visible: material.edgeFlag === 1
|
|
806
536
|
};
|
|
807
537
|
} else {
|
|
808
|
-
// map
|
|
809
538
|
if (material.textureIndex !== -1) {
|
|
810
539
|
params.map = this._loadTexture(data.textures[material.textureIndex], textures);
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
|
|
540
|
+
}
|
|
814
541
|
if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) {
|
|
815
542
|
params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures);
|
|
816
|
-
params.combine = material.envFlag === 1 ? MultiplyOperation : AddOperation;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
|
|
543
|
+
params.combine = material.envFlag === 1 ? THREE.MultiplyOperation : THREE.AddOperation;
|
|
544
|
+
}
|
|
820
545
|
let toonFileName, isDefaultToon;
|
|
821
|
-
|
|
822
546
|
if (material.toonIndex === -1 || material.toonFlag !== 0) {
|
|
823
|
-
toonFileName =
|
|
547
|
+
toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp";
|
|
824
548
|
isDefaultToon = true;
|
|
825
549
|
} else {
|
|
826
550
|
toonFileName = data.textures[material.toonIndex];
|
|
827
551
|
isDefaultToon = false;
|
|
828
552
|
}
|
|
829
|
-
|
|
830
553
|
params.gradientMap = this._loadTexture(toonFileName, textures, {
|
|
831
554
|
isToonTexture: true,
|
|
832
555
|
isDefaultToonTexture: isDefaultToon
|
|
833
|
-
});
|
|
834
|
-
|
|
556
|
+
});
|
|
835
557
|
params.userData.outlineParameters = {
|
|
836
558
|
thickness: material.edgeSize / 300,
|
|
837
|
-
// TODO: better calculation?
|
|
838
559
|
color: material.edgeColor.slice(0, 3),
|
|
839
560
|
alpha: material.edgeColor[3],
|
|
840
|
-
visible: (material.flag &
|
|
561
|
+
visible: (material.flag & 16) !== 0 && material.edgeSize > 0
|
|
841
562
|
};
|
|
842
563
|
}
|
|
843
|
-
|
|
844
|
-
if (params.map !== undefined) {
|
|
564
|
+
if (params.map !== void 0) {
|
|
845
565
|
if (!params.transparent) {
|
|
846
566
|
this._checkImageTransparency(params.map, geometry, i);
|
|
847
567
|
}
|
|
848
|
-
|
|
849
568
|
params.emissive.multiplyScalar(0.2);
|
|
850
569
|
}
|
|
851
|
-
|
|
852
|
-
materials.push(new MeshToonMaterial(params));
|
|
570
|
+
materials.push(new THREE.MeshToonMaterial(params));
|
|
853
571
|
}
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
// set transparent true if alpha morph is defined.
|
|
857
|
-
function checkAlphaMorph(elements, materials) {
|
|
572
|
+
if (data.metadata.format === "pmx") {
|
|
573
|
+
let checkAlphaMorph = function(elements, materials2) {
|
|
858
574
|
for (let i = 0, il = elements.length; i < il; i++) {
|
|
859
575
|
const element = elements[i];
|
|
860
|
-
if (element.index === -1)
|
|
861
|
-
|
|
862
|
-
|
|
576
|
+
if (element.index === -1)
|
|
577
|
+
continue;
|
|
578
|
+
const material = materials2[element.index];
|
|
863
579
|
if (material.opacity !== element.diffuse[3]) {
|
|
864
580
|
material.transparent = true;
|
|
865
581
|
}
|
|
866
582
|
}
|
|
867
|
-
}
|
|
868
|
-
|
|
583
|
+
};
|
|
869
584
|
for (let i = 0, il = data.morphs.length; i < il; i++) {
|
|
870
585
|
const morph = data.morphs[i];
|
|
871
586
|
const elements = morph.elements;
|
|
872
|
-
|
|
873
587
|
if (morph.type === 0) {
|
|
874
588
|
for (let j = 0, jl = elements.length; j < jl; j++) {
|
|
875
589
|
const morph2 = data.morphs[elements[j].index];
|
|
876
|
-
if (morph2.type !== 8)
|
|
590
|
+
if (morph2.type !== 8)
|
|
591
|
+
continue;
|
|
877
592
|
checkAlphaMorph(morph2.elements, materials);
|
|
878
593
|
}
|
|
879
594
|
} else if (morph.type === 8) {
|
|
@@ -881,227 +596,175 @@ class MaterialBuilder {
|
|
|
881
596
|
}
|
|
882
597
|
}
|
|
883
598
|
}
|
|
884
|
-
|
|
885
599
|
return materials;
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
|
|
600
|
+
}
|
|
889
601
|
_getTGALoader() {
|
|
890
602
|
if (this.tgaLoader === null) {
|
|
891
|
-
if (TGALoader ===
|
|
892
|
-
throw new Error(
|
|
603
|
+
if (TGALoader.TGALoader === void 0) {
|
|
604
|
+
throw new Error("THREE.MMDLoader: Import TGALoader");
|
|
893
605
|
}
|
|
894
|
-
|
|
895
|
-
this.tgaLoader = new TGALoader(this.manager);
|
|
606
|
+
this.tgaLoader = new TGALoader.TGALoader(this.manager);
|
|
896
607
|
}
|
|
897
|
-
|
|
898
608
|
return this.tgaLoader;
|
|
899
609
|
}
|
|
900
|
-
|
|
901
610
|
_isDefaultToonTexture(name) {
|
|
902
|
-
if (name.length !== 10)
|
|
611
|
+
if (name.length !== 10)
|
|
612
|
+
return false;
|
|
903
613
|
return /toon(10|0[0-9])\.bmp/.test(name);
|
|
904
614
|
}
|
|
905
|
-
|
|
906
615
|
_loadTexture(filePath, textures, params, onProgress, onError) {
|
|
907
616
|
params = params || {};
|
|
908
617
|
const scope = this;
|
|
909
618
|
let fullPath;
|
|
910
|
-
|
|
911
619
|
if (params.isDefaultToonTexture === true) {
|
|
912
620
|
let index;
|
|
913
|
-
|
|
914
621
|
try {
|
|
915
622
|
index = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]);
|
|
916
623
|
} catch (e) {
|
|
917
|
-
console.warn(
|
|
624
|
+
console.warn(
|
|
625
|
+
"THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."
|
|
626
|
+
);
|
|
918
627
|
index = 0;
|
|
919
628
|
}
|
|
920
|
-
|
|
921
629
|
fullPath = DEFAULT_TOON_TEXTURES[index];
|
|
922
630
|
} else {
|
|
923
631
|
fullPath = this.resourcePath + filePath;
|
|
924
632
|
}
|
|
925
|
-
|
|
926
|
-
|
|
633
|
+
if (textures[fullPath] !== void 0)
|
|
634
|
+
return textures[fullPath];
|
|
927
635
|
let loader = this.manager.getHandler(fullPath);
|
|
928
|
-
|
|
929
636
|
if (loader === null) {
|
|
930
|
-
loader = filePath.slice(-4).toLowerCase() ===
|
|
637
|
+
loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader;
|
|
931
638
|
}
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
t.
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
delete texture.readyCallbacks;
|
|
952
|
-
}, onProgress, onError);
|
|
639
|
+
const texture = loader.load(
|
|
640
|
+
fullPath,
|
|
641
|
+
function(t) {
|
|
642
|
+
if (params.isToonTexture === true) {
|
|
643
|
+
t.image = scope._getRotatedImage(t.image);
|
|
644
|
+
t.magFilter = THREE.NearestFilter;
|
|
645
|
+
t.minFilter = THREE.NearestFilter;
|
|
646
|
+
}
|
|
647
|
+
t.flipY = false;
|
|
648
|
+
t.wrapS = THREE.RepeatWrapping;
|
|
649
|
+
t.wrapT = THREE.RepeatWrapping;
|
|
650
|
+
for (let i = 0; i < texture.readyCallbacks.length; i++) {
|
|
651
|
+
texture.readyCallbacks[i](texture);
|
|
652
|
+
}
|
|
653
|
+
delete texture.readyCallbacks;
|
|
654
|
+
},
|
|
655
|
+
onProgress,
|
|
656
|
+
onError
|
|
657
|
+
);
|
|
953
658
|
texture.readyCallbacks = [];
|
|
954
659
|
textures[fullPath] = texture;
|
|
955
660
|
return texture;
|
|
956
661
|
}
|
|
957
|
-
|
|
958
662
|
_getRotatedImage(image) {
|
|
959
|
-
const canvas = document.createElement(
|
|
960
|
-
const context = canvas.getContext(
|
|
663
|
+
const canvas = document.createElement("canvas");
|
|
664
|
+
const context = canvas.getContext("2d");
|
|
961
665
|
const width = image.width;
|
|
962
666
|
const height = image.height;
|
|
963
667
|
canvas.width = width;
|
|
964
668
|
canvas.height = height;
|
|
965
669
|
context.clearRect(0, 0, width, height);
|
|
966
|
-
context.translate(width / 2
|
|
967
|
-
context.rotate(0.5 * Math.PI);
|
|
968
|
-
|
|
969
|
-
context.translate(-width / 2.0, -height / 2.0);
|
|
670
|
+
context.translate(width / 2, height / 2);
|
|
671
|
+
context.rotate(0.5 * Math.PI);
|
|
672
|
+
context.translate(-width / 2, -height / 2);
|
|
970
673
|
context.drawImage(image, 0, 0);
|
|
971
674
|
return context.getImageData(0, 0, width, height);
|
|
972
|
-
}
|
|
973
|
-
|
|
974
|
-
|
|
675
|
+
}
|
|
975
676
|
_checkImageTransparency(map, geometry, groupIndex) {
|
|
976
|
-
map.readyCallbacks.push(function
|
|
977
|
-
// Is there any efficient ways?
|
|
677
|
+
map.readyCallbacks.push(function(texture) {
|
|
978
678
|
function createImageData(image) {
|
|
979
|
-
const canvas = document.createElement(
|
|
679
|
+
const canvas = document.createElement("canvas");
|
|
980
680
|
canvas.width = image.width;
|
|
981
681
|
canvas.height = image.height;
|
|
982
|
-
const context = canvas.getContext(
|
|
682
|
+
const context = canvas.getContext("2d");
|
|
983
683
|
context.drawImage(image, 0, 0);
|
|
984
684
|
return context.getImageData(0, 0, canvas.width, canvas.height);
|
|
985
685
|
}
|
|
986
|
-
|
|
987
686
|
function detectImageTransparency(image, uvs, indices) {
|
|
988
687
|
const width = image.width;
|
|
989
688
|
const height = image.height;
|
|
990
689
|
const data = image.data;
|
|
991
690
|
const threshold = 253;
|
|
992
|
-
if (data.length / (width * height) !== 4)
|
|
993
|
-
|
|
691
|
+
if (data.length / (width * height) !== 4)
|
|
692
|
+
return false;
|
|
994
693
|
for (let i = 0; i < indices.length; i += 3) {
|
|
995
|
-
const centerUV = {
|
|
996
|
-
x: 0.0,
|
|
997
|
-
y: 0.0
|
|
998
|
-
};
|
|
999
|
-
|
|
694
|
+
const centerUV = { x: 0, y: 0 };
|
|
1000
695
|
for (let j = 0; j < 3; j++) {
|
|
1001
696
|
const index = indices[i * 3 + j];
|
|
1002
|
-
const uv = {
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
};
|
|
1006
|
-
if (getAlphaByUv(image, uv) < threshold) return true;
|
|
697
|
+
const uv = { x: uvs[index * 2 + 0], y: uvs[index * 2 + 1] };
|
|
698
|
+
if (getAlphaByUv(image, uv) < threshold)
|
|
699
|
+
return true;
|
|
1007
700
|
centerUV.x += uv.x;
|
|
1008
701
|
centerUV.y += uv.y;
|
|
1009
702
|
}
|
|
1010
|
-
|
|
1011
703
|
centerUV.x /= 3;
|
|
1012
704
|
centerUV.y /= 3;
|
|
1013
|
-
if (getAlphaByUv(image, centerUV) < threshold)
|
|
705
|
+
if (getAlphaByUv(image, centerUV) < threshold)
|
|
706
|
+
return true;
|
|
1014
707
|
}
|
|
1015
|
-
|
|
1016
708
|
return false;
|
|
1017
709
|
}
|
|
1018
|
-
/*
|
|
1019
|
-
* This method expects
|
|
1020
|
-
* texture.flipY = false
|
|
1021
|
-
* texture.wrapS = RepeatWrapping
|
|
1022
|
-
* texture.wrapT = RepeatWrapping
|
|
1023
|
-
* TODO: more precise
|
|
1024
|
-
*/
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
710
|
function getAlphaByUv(image, uv) {
|
|
1028
711
|
const width = image.width;
|
|
1029
712
|
const height = image.height;
|
|
1030
713
|
let x = Math.round(uv.x * width) % width;
|
|
1031
714
|
let y = Math.round(uv.y * height) % height;
|
|
1032
|
-
if (x < 0)
|
|
1033
|
-
|
|
715
|
+
if (x < 0)
|
|
716
|
+
x += width;
|
|
717
|
+
if (y < 0)
|
|
718
|
+
y += height;
|
|
1034
719
|
const index = y * width + x;
|
|
1035
720
|
return image.data[index * 4 + 3];
|
|
1036
721
|
}
|
|
1037
|
-
|
|
1038
|
-
const imageData = texture.image.data !== undefined ? texture.image : createImageData(texture.image);
|
|
722
|
+
const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image);
|
|
1039
723
|
const group = geometry.groups[groupIndex];
|
|
1040
|
-
|
|
1041
|
-
|
|
724
|
+
if (detectImageTransparency(
|
|
725
|
+
imageData,
|
|
726
|
+
geometry.attributes.uv.array,
|
|
727
|
+
geometry.index.array.slice(group.start, group.start + group.count)
|
|
728
|
+
)) {
|
|
1042
729
|
map.transparent = true;
|
|
1043
730
|
}
|
|
1044
731
|
});
|
|
1045
732
|
}
|
|
1046
|
-
|
|
1047
|
-
} //
|
|
1048
|
-
|
|
1049
|
-
|
|
733
|
+
}
|
|
1050
734
|
class AnimationBuilder {
|
|
1051
|
-
/**
|
|
1052
|
-
* @param {Object} vmd - parsed VMD data
|
|
1053
|
-
* @param {SkinnedMesh} mesh - tracks will be fitting to mesh
|
|
1054
|
-
* @return {AnimationClip}
|
|
1055
|
-
*/
|
|
1056
735
|
build(vmd, mesh) {
|
|
1057
|
-
// combine skeletal and morph animations
|
|
1058
736
|
const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks;
|
|
1059
737
|
const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks;
|
|
1060
|
-
|
|
1061
738
|
for (let i = 0, il = tracks2.length; i < il; i++) {
|
|
1062
739
|
tracks.push(tracks2[i]);
|
|
1063
740
|
}
|
|
1064
|
-
|
|
1065
|
-
return new AnimationClip('', -1, tracks);
|
|
741
|
+
return new THREE.AnimationClip("", -1, tracks);
|
|
1066
742
|
}
|
|
1067
|
-
/**
|
|
1068
|
-
* @param {Object} vmd - parsed VMD data
|
|
1069
|
-
* @param {SkinnedMesh} mesh - tracks will be fitting to mesh
|
|
1070
|
-
* @return {AnimationClip}
|
|
1071
|
-
*/
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
743
|
buildSkeletalAnimation(vmd, mesh) {
|
|
1075
744
|
function pushInterpolation(array, interpolation, index) {
|
|
1076
|
-
array.push(interpolation[index + 0] / 127);
|
|
1077
|
-
|
|
1078
|
-
array.push(interpolation[index +
|
|
1079
|
-
|
|
1080
|
-
array.push(interpolation[index + 4] / 127); // y1
|
|
1081
|
-
|
|
1082
|
-
array.push(interpolation[index + 12] / 127); // y2
|
|
745
|
+
array.push(interpolation[index + 0] / 127);
|
|
746
|
+
array.push(interpolation[index + 8] / 127);
|
|
747
|
+
array.push(interpolation[index + 4] / 127);
|
|
748
|
+
array.push(interpolation[index + 12] / 127);
|
|
1083
749
|
}
|
|
1084
|
-
|
|
1085
750
|
const tracks = [];
|
|
1086
751
|
const motions = {};
|
|
1087
752
|
const bones = mesh.skeleton.bones;
|
|
1088
753
|
const boneNameDictionary = {};
|
|
1089
|
-
|
|
1090
754
|
for (let i = 0, il = bones.length; i < il; i++) {
|
|
1091
755
|
boneNameDictionary[bones[i].name] = true;
|
|
1092
756
|
}
|
|
1093
|
-
|
|
1094
757
|
for (let i = 0; i < vmd.metadata.motionCount; i++) {
|
|
1095
758
|
const motion = vmd.motions[i];
|
|
1096
759
|
const boneName = motion.boneName;
|
|
1097
|
-
if (boneNameDictionary[boneName] ===
|
|
760
|
+
if (boneNameDictionary[boneName] === void 0)
|
|
761
|
+
continue;
|
|
1098
762
|
motions[boneName] = motions[boneName] || [];
|
|
1099
763
|
motions[boneName].push(motion);
|
|
1100
764
|
}
|
|
1101
|
-
|
|
1102
765
|
for (const key in motions) {
|
|
1103
766
|
const array = motions[key];
|
|
1104
|
-
array.sort(function
|
|
767
|
+
array.sort(function(a, b) {
|
|
1105
768
|
return a.frameNum - b.frameNum;
|
|
1106
769
|
});
|
|
1107
770
|
const times = [];
|
|
@@ -1110,100 +773,75 @@ class AnimationBuilder {
|
|
|
1110
773
|
const pInterpolations = [];
|
|
1111
774
|
const rInterpolations = [];
|
|
1112
775
|
const basePosition = mesh.skeleton.getBoneByName(key).position.toArray();
|
|
1113
|
-
|
|
1114
776
|
for (let i = 0, il = array.length; i < il; i++) {
|
|
1115
777
|
const time = array[i].frameNum / 30;
|
|
1116
778
|
const position = array[i].position;
|
|
1117
779
|
const rotation = array[i].rotation;
|
|
1118
780
|
const interpolation = array[i].interpolation;
|
|
1119
781
|
times.push(time);
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
782
|
+
for (let j = 0; j < 3; j++)
|
|
783
|
+
positions.push(basePosition[j] + position[j]);
|
|
784
|
+
for (let j = 0; j < 4; j++)
|
|
785
|
+
rotations.push(rotation[j]);
|
|
786
|
+
for (let j = 0; j < 3; j++)
|
|
787
|
+
pushInterpolation(pInterpolations, interpolation, j);
|
|
1127
788
|
pushInterpolation(rInterpolations, interpolation, 3);
|
|
1128
789
|
}
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
tracks.push(
|
|
1132
|
-
|
|
790
|
+
const targetName = ".bones[" + key + "]";
|
|
791
|
+
tracks.push(this._createTrack(targetName + ".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
|
|
792
|
+
tracks.push(
|
|
793
|
+
this._createTrack(targetName + ".quaternion", THREE.QuaternionKeyframeTrack, times, rotations, rInterpolations)
|
|
794
|
+
);
|
|
1133
795
|
}
|
|
1134
|
-
|
|
1135
|
-
return new AnimationClip('', -1, tracks);
|
|
796
|
+
return new THREE.AnimationClip("", -1, tracks);
|
|
1136
797
|
}
|
|
1137
|
-
/**
|
|
1138
|
-
* @param {Object} vmd - parsed VMD data
|
|
1139
|
-
* @param {SkinnedMesh} mesh - tracks will be fitting to mesh
|
|
1140
|
-
* @return {AnimationClip}
|
|
1141
|
-
*/
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
798
|
buildMorphAnimation(vmd, mesh) {
|
|
1145
799
|
const tracks = [];
|
|
1146
800
|
const morphs = {};
|
|
1147
801
|
const morphTargetDictionary = mesh.morphTargetDictionary;
|
|
1148
|
-
|
|
1149
802
|
for (let i = 0; i < vmd.metadata.morphCount; i++) {
|
|
1150
803
|
const morph = vmd.morphs[i];
|
|
1151
804
|
const morphName = morph.morphName;
|
|
1152
|
-
if (morphTargetDictionary[morphName] ===
|
|
805
|
+
if (morphTargetDictionary[morphName] === void 0)
|
|
806
|
+
continue;
|
|
1153
807
|
morphs[morphName] = morphs[morphName] || [];
|
|
1154
808
|
morphs[morphName].push(morph);
|
|
1155
809
|
}
|
|
1156
|
-
|
|
1157
810
|
for (const key in morphs) {
|
|
1158
811
|
const array = morphs[key];
|
|
1159
|
-
array.sort(function
|
|
812
|
+
array.sort(function(a, b) {
|
|
1160
813
|
return a.frameNum - b.frameNum;
|
|
1161
814
|
});
|
|
1162
815
|
const times = [];
|
|
1163
816
|
const values = [];
|
|
1164
|
-
|
|
1165
817
|
for (let i = 0, il = array.length; i < il; i++) {
|
|
1166
818
|
times.push(array[i].frameNum / 30);
|
|
1167
819
|
values.push(array[i].weight);
|
|
1168
820
|
}
|
|
1169
|
-
|
|
1170
|
-
tracks.push(new NumberKeyframeTrack('.morphTargetInfluences[' + morphTargetDictionary[key] + ']', times, values));
|
|
821
|
+
tracks.push(new THREE.NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key] + "]", times, values));
|
|
1171
822
|
}
|
|
1172
|
-
|
|
1173
|
-
return new AnimationClip('', -1, tracks);
|
|
823
|
+
return new THREE.AnimationClip("", -1, tracks);
|
|
1174
824
|
}
|
|
1175
|
-
/**
|
|
1176
|
-
* @param {Object} vmd - parsed VMD data
|
|
1177
|
-
* @return {AnimationClip}
|
|
1178
|
-
*/
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
825
|
buildCameraAnimation(vmd) {
|
|
1182
826
|
function pushVector3(array, vec) {
|
|
1183
827
|
array.push(vec.x);
|
|
1184
828
|
array.push(vec.y);
|
|
1185
829
|
array.push(vec.z);
|
|
1186
830
|
}
|
|
1187
|
-
|
|
1188
831
|
function pushQuaternion(array, q) {
|
|
1189
832
|
array.push(q.x);
|
|
1190
833
|
array.push(q.y);
|
|
1191
834
|
array.push(q.z);
|
|
1192
835
|
array.push(q.w);
|
|
1193
836
|
}
|
|
1194
|
-
|
|
1195
837
|
function pushInterpolation(array, interpolation, index) {
|
|
1196
|
-
array.push(interpolation[index * 4 + 0] / 127);
|
|
1197
|
-
|
|
1198
|
-
array.push(interpolation[index * 4 +
|
|
1199
|
-
|
|
1200
|
-
array.push(interpolation[index * 4 + 2] / 127); // y1
|
|
1201
|
-
|
|
1202
|
-
array.push(interpolation[index * 4 + 3] / 127); // y2
|
|
838
|
+
array.push(interpolation[index * 4 + 0] / 127);
|
|
839
|
+
array.push(interpolation[index * 4 + 1] / 127);
|
|
840
|
+
array.push(interpolation[index * 4 + 2] / 127);
|
|
841
|
+
array.push(interpolation[index * 4 + 3] / 127);
|
|
1203
842
|
}
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
cameras.sort(function (a, b) {
|
|
843
|
+
const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice();
|
|
844
|
+
cameras.sort(function(a, b) {
|
|
1207
845
|
return a.frameNum - b.frameNum;
|
|
1208
846
|
});
|
|
1209
847
|
const times = [];
|
|
@@ -1215,11 +853,10 @@ class AnimationBuilder {
|
|
|
1215
853
|
const qInterpolations = [];
|
|
1216
854
|
const pInterpolations = [];
|
|
1217
855
|
const fInterpolations = [];
|
|
1218
|
-
const quaternion = new Quaternion();
|
|
1219
|
-
const euler = new Euler();
|
|
1220
|
-
const position = new Vector3();
|
|
1221
|
-
const center = new Vector3();
|
|
1222
|
-
|
|
856
|
+
const quaternion = new THREE.Quaternion();
|
|
857
|
+
const euler = new THREE.Euler();
|
|
858
|
+
const position = new THREE.Vector3();
|
|
859
|
+
const center = new THREE.Vector3();
|
|
1223
860
|
for (let i = 0, il = cameras.length; i < il; i++) {
|
|
1224
861
|
const motion = cameras[i];
|
|
1225
862
|
const time = motion.frameNum / 30;
|
|
@@ -1239,36 +876,23 @@ class AnimationBuilder {
|
|
|
1239
876
|
pushQuaternion(quaternions, quaternion);
|
|
1240
877
|
pushVector3(positions, position);
|
|
1241
878
|
fovs.push(fov);
|
|
1242
|
-
|
|
1243
879
|
for (let j = 0; j < 3; j++) {
|
|
1244
880
|
pushInterpolation(cInterpolations, interpolation, j);
|
|
1245
881
|
}
|
|
1246
|
-
|
|
1247
|
-
pushInterpolation(qInterpolations, interpolation, 3); // use the same parameter for x, y, z axis.
|
|
1248
|
-
|
|
882
|
+
pushInterpolation(qInterpolations, interpolation, 3);
|
|
1249
883
|
for (let j = 0; j < 3; j++) {
|
|
1250
884
|
pushInterpolation(pInterpolations, interpolation, 4);
|
|
1251
885
|
}
|
|
1252
|
-
|
|
1253
886
|
pushInterpolation(fInterpolations, interpolation, 5);
|
|
1254
887
|
}
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
tracks.push(this._createTrack(
|
|
1259
|
-
tracks.push(this._createTrack(
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
return new AnimationClip('', -1, tracks);
|
|
1263
|
-
} // private method
|
|
1264
|
-
|
|
1265
|
-
|
|
888
|
+
const tracks = [];
|
|
889
|
+
tracks.push(this._createTrack("target.position", THREE.VectorKeyframeTrack, times, centers, cInterpolations));
|
|
890
|
+
tracks.push(this._createTrack(".quaternion", THREE.QuaternionKeyframeTrack, times, quaternions, qInterpolations));
|
|
891
|
+
tracks.push(this._createTrack(".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
|
|
892
|
+
tracks.push(this._createTrack(".fov", THREE.NumberKeyframeTrack, times, fovs, fInterpolations));
|
|
893
|
+
return new THREE.AnimationClip("", -1, tracks);
|
|
894
|
+
}
|
|
1266
895
|
_createTrack(node, typedKeyframeTrack, times, values, interpolations) {
|
|
1267
|
-
/*
|
|
1268
|
-
* optimizes here not to let KeyframeTrackPrototype optimize
|
|
1269
|
-
* because KeyframeTrackPrototype optimizes times and values but
|
|
1270
|
-
* doesn't optimize interpolations.
|
|
1271
|
-
*/
|
|
1272
896
|
if (times.length > 2) {
|
|
1273
897
|
times = times.slice();
|
|
1274
898
|
values = values.slice();
|
|
@@ -1276,7 +900,6 @@ class AnimationBuilder {
|
|
|
1276
900
|
const stride = values.length / times.length;
|
|
1277
901
|
const interpolateStride = interpolations.length / times.length;
|
|
1278
902
|
let index = 1;
|
|
1279
|
-
|
|
1280
903
|
for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) {
|
|
1281
904
|
for (let i = 0; i < stride; i++) {
|
|
1282
905
|
if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) {
|
|
@@ -1284,151 +907,92 @@ class AnimationBuilder {
|
|
|
1284
907
|
break;
|
|
1285
908
|
}
|
|
1286
909
|
}
|
|
1287
|
-
|
|
1288
910
|
if (aheadIndex > index) {
|
|
1289
911
|
times[index] = times[aheadIndex];
|
|
1290
|
-
|
|
1291
912
|
for (let i = 0; i < stride; i++) {
|
|
1292
913
|
values[index * stride + i] = values[aheadIndex * stride + i];
|
|
1293
914
|
}
|
|
1294
|
-
|
|
1295
915
|
for (let i = 0; i < interpolateStride; i++) {
|
|
1296
916
|
interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i];
|
|
1297
917
|
}
|
|
1298
918
|
}
|
|
1299
919
|
}
|
|
1300
|
-
|
|
1301
920
|
times.length = index + 1;
|
|
1302
921
|
values.length = (index + 1) * stride;
|
|
1303
922
|
interpolations.length = (index + 1) * interpolateStride;
|
|
1304
923
|
}
|
|
1305
|
-
|
|
1306
924
|
const track = new typedKeyframeTrack(node, times, values);
|
|
1307
|
-
|
|
1308
925
|
track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) {
|
|
1309
|
-
return new CubicBezierInterpolation(
|
|
926
|
+
return new CubicBezierInterpolation(
|
|
927
|
+
this.times,
|
|
928
|
+
this.values,
|
|
929
|
+
this.getValueSize(),
|
|
930
|
+
result,
|
|
931
|
+
new Float32Array(interpolations)
|
|
932
|
+
);
|
|
1310
933
|
};
|
|
1311
|
-
|
|
1312
934
|
return track;
|
|
1313
935
|
}
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
class CubicBezierInterpolation extends Interpolant {
|
|
936
|
+
}
|
|
937
|
+
class CubicBezierInterpolation extends THREE.Interpolant {
|
|
1319
938
|
constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) {
|
|
1320
939
|
super(parameterPositions, sampleValues, sampleSize, resultBuffer);
|
|
1321
940
|
this.interpolationParams = params;
|
|
1322
941
|
}
|
|
1323
|
-
|
|
1324
942
|
interpolate_(i1, t0, t, t1) {
|
|
1325
943
|
const result = this.resultBuffer;
|
|
1326
944
|
const values = this.sampleValues;
|
|
1327
945
|
const stride = this.valueSize;
|
|
1328
946
|
const params = this.interpolationParams;
|
|
1329
947
|
const offset1 = i1 * stride;
|
|
1330
|
-
const offset0 = offset1 - stride;
|
|
1331
|
-
|
|
1332
|
-
// '1.5' is for precision loss. times are Float32 in Three.js Animation system.
|
|
1333
|
-
|
|
1334
|
-
const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0.0 : (t - t0) / (t1 - t0);
|
|
1335
|
-
|
|
948
|
+
const offset0 = offset1 - stride;
|
|
949
|
+
const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0);
|
|
1336
950
|
if (stride === 4) {
|
|
1337
|
-
// Quaternion
|
|
1338
951
|
const x1 = params[i1 * 4 + 0];
|
|
1339
952
|
const x2 = params[i1 * 4 + 1];
|
|
1340
953
|
const y1 = params[i1 * 4 + 2];
|
|
1341
954
|
const y2 = params[i1 * 4 + 3];
|
|
1342
|
-
|
|
1343
955
|
const ratio = this._calculate(x1, x2, y1, y2, weight1);
|
|
1344
|
-
|
|
1345
|
-
Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
|
|
956
|
+
THREE.Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
|
|
1346
957
|
} else if (stride === 3) {
|
|
1347
|
-
// Vector3
|
|
1348
958
|
for (let i = 0; i !== stride; ++i) {
|
|
1349
959
|
const x1 = params[i1 * 12 + i * 4 + 0];
|
|
1350
960
|
const x2 = params[i1 * 12 + i * 4 + 1];
|
|
1351
961
|
const y1 = params[i1 * 12 + i * 4 + 2];
|
|
1352
962
|
const y2 = params[i1 * 12 + i * 4 + 3];
|
|
1353
|
-
|
|
1354
963
|
const ratio = this._calculate(x1, x2, y1, y2, weight1);
|
|
1355
|
-
|
|
1356
964
|
result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio;
|
|
1357
965
|
}
|
|
1358
966
|
} else {
|
|
1359
|
-
// Number
|
|
1360
967
|
const x1 = params[i1 * 4 + 0];
|
|
1361
968
|
const x2 = params[i1 * 4 + 1];
|
|
1362
969
|
const y1 = params[i1 * 4 + 2];
|
|
1363
970
|
const y2 = params[i1 * 4 + 3];
|
|
1364
|
-
|
|
1365
971
|
const ratio = this._calculate(x1, x2, y1, y2, weight1);
|
|
1366
|
-
|
|
1367
972
|
result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio;
|
|
1368
973
|
}
|
|
1369
|
-
|
|
1370
974
|
return result;
|
|
1371
975
|
}
|
|
1372
|
-
|
|
1373
976
|
_calculate(x1, x2, y1, y2, x) {
|
|
1374
|
-
/*
|
|
1375
|
-
* Cubic Bezier curves
|
|
1376
|
-
* https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves
|
|
1377
|
-
*
|
|
1378
|
-
* B(t) = ( 1 - t ) ^ 3 * P0
|
|
1379
|
-
* + 3 * ( 1 - t ) ^ 2 * t * P1
|
|
1380
|
-
* + 3 * ( 1 - t ) * t^2 * P2
|
|
1381
|
-
* + t ^ 3 * P3
|
|
1382
|
-
* ( 0 <= t <= 1 )
|
|
1383
|
-
*
|
|
1384
|
-
* MMD uses Cubic Bezier curves for bone and camera animation interpolation.
|
|
1385
|
-
* http://d.hatena.ne.jp/edvakf/20111016/1318716097
|
|
1386
|
-
*
|
|
1387
|
-
* x = ( 1 - t ) ^ 3 * x0
|
|
1388
|
-
* + 3 * ( 1 - t ) ^ 2 * t * x1
|
|
1389
|
-
* + 3 * ( 1 - t ) * t^2 * x2
|
|
1390
|
-
* + t ^ 3 * x3
|
|
1391
|
-
* y = ( 1 - t ) ^ 3 * y0
|
|
1392
|
-
* + 3 * ( 1 - t ) ^ 2 * t * y1
|
|
1393
|
-
* + 3 * ( 1 - t ) * t^2 * y2
|
|
1394
|
-
* + t ^ 3 * y3
|
|
1395
|
-
* ( x0 = 0, y0 = 0 )
|
|
1396
|
-
* ( x3 = 1, y3 = 1 )
|
|
1397
|
-
* ( 0 <= t, x1, x2, y1, y2 <= 1 )
|
|
1398
|
-
*
|
|
1399
|
-
* Here solves this equation with Bisection method,
|
|
1400
|
-
* https://en.wikipedia.org/wiki/Bisection_method
|
|
1401
|
-
* gets t, and then calculate y.
|
|
1402
|
-
*
|
|
1403
|
-
* f(t) = 3 * ( 1 - t ) ^ 2 * t * x1
|
|
1404
|
-
* + 3 * ( 1 - t ) * t^2 * x2
|
|
1405
|
-
* + t ^ 3 - x = 0
|
|
1406
|
-
*
|
|
1407
|
-
* (Another option: Newton's method
|
|
1408
|
-
* https://en.wikipedia.org/wiki/Newton%27s_method)
|
|
1409
|
-
*/
|
|
1410
977
|
let c = 0.5;
|
|
1411
978
|
let t = c;
|
|
1412
|
-
let s = 1
|
|
979
|
+
let s = 1 - t;
|
|
1413
980
|
const loop = 15;
|
|
1414
981
|
const eps = 1e-5;
|
|
1415
982
|
const math = Math;
|
|
1416
983
|
let sst3, stt3, ttt;
|
|
1417
|
-
|
|
1418
984
|
for (let i = 0; i < loop; i++) {
|
|
1419
|
-
sst3 = 3
|
|
1420
|
-
stt3 = 3
|
|
985
|
+
sst3 = 3 * s * s * t;
|
|
986
|
+
stt3 = 3 * s * t * t;
|
|
1421
987
|
ttt = t * t * t;
|
|
1422
988
|
const ft = sst3 * x1 + stt3 * x2 + ttt - x;
|
|
1423
|
-
if (math.abs(ft) < eps)
|
|
1424
|
-
|
|
989
|
+
if (math.abs(ft) < eps)
|
|
990
|
+
break;
|
|
991
|
+
c /= 2;
|
|
1425
992
|
t += ft < 0 ? c : -c;
|
|
1426
|
-
s = 1
|
|
993
|
+
s = 1 - t;
|
|
1427
994
|
}
|
|
1428
|
-
|
|
1429
995
|
return sst3 * y1 + stt3 * y2 + ttt;
|
|
1430
996
|
}
|
|
1431
|
-
|
|
1432
997
|
}
|
|
1433
|
-
|
|
1434
|
-
export { MMDLoader };
|
|
998
|
+
exports.MMDLoader = MMDLoader;
|