three-stdlib 2.22.8 → 2.22.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (629) hide show
  1. package/dist/animation/AnimationClipCreator.js +49 -50
  2. package/dist/animation/AnimationClipCreator.mjs +49 -50
  3. package/dist/animation/CCDIKSolver.d.ts +9 -4
  4. package/dist/animation/CCDIKSolver.js +193 -148
  5. package/dist/animation/CCDIKSolver.mjs +194 -149
  6. package/dist/animation/MMDAnimationHelper.js +613 -515
  7. package/dist/animation/MMDAnimationHelper.mjs +613 -515
  8. package/dist/animation/MMDPhysics.d.ts +6 -1
  9. package/dist/animation/MMDPhysics.js +728 -718
  10. package/dist/animation/MMDPhysics.mjs +729 -719
  11. package/dist/cameras/CinematicCamera.d.ts +2 -2
  12. package/dist/controls/ArcballControls.d.ts +1 -1
  13. package/dist/controls/ArcballControls.js +38 -44
  14. package/dist/controls/ArcballControls.mjs +39 -45
  15. package/dist/controls/DeviceOrientationControls.js +2 -1
  16. package/dist/controls/DeviceOrientationControls.mjs +2 -1
  17. package/dist/controls/FirstPersonControls.d.ts +1 -1
  18. package/dist/controls/FirstPersonControls.js +1 -1
  19. package/dist/controls/FirstPersonControls.mjs +1 -1
  20. package/dist/controls/PointerLockControls.js +2 -2
  21. package/dist/controls/PointerLockControls.mjs +2 -2
  22. package/dist/controls/TransformControls.d.ts +1 -1
  23. package/dist/controls/experimental/CameraControls.d.ts +1 -1
  24. package/dist/csm/CSM.js +4 -4
  25. package/dist/csm/CSM.mjs +4 -4
  26. package/dist/csm/CSMFrustum.js +1 -1
  27. package/dist/csm/CSMFrustum.mjs +1 -1
  28. package/dist/csm/CSMShader.js +14 -10
  29. package/dist/csm/CSMShader.mjs +14 -10
  30. package/dist/curves/CurveExtras.js +52 -62
  31. package/dist/curves/CurveExtras.mjs +53 -63
  32. package/dist/curves/NURBSUtils.d.ts +18 -20
  33. package/dist/curves/NURBSUtils.js +17 -17
  34. package/dist/curves/NURBSUtils.mjs +17 -17
  35. package/dist/deprecated/Geometry.js +26 -26
  36. package/dist/deprecated/Geometry.mjs +27 -27
  37. package/dist/effects/AnaglyphEffect.js +95 -114
  38. package/dist/effects/AnaglyphEffect.mjs +95 -114
  39. package/dist/effects/AsciiEffect.js +144 -162
  40. package/dist/effects/AsciiEffect.mjs +144 -162
  41. package/dist/effects/OutlineEffect.js +253 -276
  42. package/dist/effects/OutlineEffect.mjs +253 -276
  43. package/dist/effects/ParallaxBarrierEffect.js +61 -60
  44. package/dist/effects/ParallaxBarrierEffect.mjs +61 -60
  45. package/dist/effects/PeppersGhostEffect.js +84 -81
  46. package/dist/effects/PeppersGhostEffect.mjs +84 -81
  47. package/dist/effects/StereoEffect.js +31 -28
  48. package/dist/effects/StereoEffect.mjs +31 -28
  49. package/dist/environments/RoomEnvironment.d.ts +6 -5
  50. package/dist/exporters/GLTFExporter.d.ts +109 -441
  51. package/dist/exporters/GLTFExporter.js +912 -581
  52. package/dist/exporters/GLTFExporter.mjs +912 -581
  53. package/dist/geometries/ConvexGeometry.js +0 -3
  54. package/dist/geometries/ConvexGeometry.mjs +0 -3
  55. package/dist/geometries/LightningStrike.d.ts +3 -3
  56. package/dist/geometries/LightningStrike.js +80 -75
  57. package/dist/geometries/LightningStrike.mjs +80 -75
  58. package/dist/geometries/ParametricGeometries.js +75 -74
  59. package/dist/geometries/ParametricGeometries.mjs +75 -74
  60. package/dist/geometries/RoundedBoxGeometry.js +1 -1
  61. package/dist/geometries/RoundedBoxGeometry.mjs +1 -1
  62. package/dist/geometries/TextGeometry.d.ts +1 -1
  63. package/dist/helpers/RectAreaLightHelper.d.ts +4 -3
  64. package/dist/helpers/RectAreaLightHelper.js +2 -2
  65. package/dist/helpers/RectAreaLightHelper.mjs +2 -2
  66. package/dist/helpers/VertexNormalsHelper.d.ts +3 -0
  67. package/dist/helpers/VertexNormalsHelper.js +15 -22
  68. package/dist/helpers/VertexNormalsHelper.mjs +16 -23
  69. package/dist/helpers/VertexTangentsHelper.d.ts +3 -0
  70. package/dist/helpers/VertexTangentsHelper.js +12 -14
  71. package/dist/helpers/VertexTangentsHelper.mjs +12 -14
  72. package/dist/index.d.ts +1 -66
  73. package/dist/index.js +5 -370
  74. package/dist/index.mjs +9 -374
  75. package/dist/interactive/InteractiveGroup.js +1 -1
  76. package/dist/interactive/InteractiveGroup.mjs +1 -1
  77. package/dist/interactive/SelectionBox.js +122 -125
  78. package/dist/interactive/SelectionBox.mjs +122 -125
  79. package/dist/interactive/SelectionHelper.js +45 -48
  80. package/dist/interactive/SelectionHelper.mjs +45 -48
  81. package/dist/libs/MeshoptDecoder.d.ts +1 -1
  82. package/dist/libs/MotionControllers.d.ts +15 -14
  83. package/dist/libs/MotionControllers.js +10 -10
  84. package/dist/libs/MotionControllers.mjs +10 -10
  85. package/dist/lights/LightProbeGenerator.js +43 -43
  86. package/dist/lights/LightProbeGenerator.mjs +43 -43
  87. package/dist/lights/RectAreaLightUniformsLib.js +9 -5
  88. package/dist/lights/RectAreaLightUniformsLib.mjs +9 -5
  89. package/dist/lines/LineMaterial.js +271 -271
  90. package/dist/lines/LineMaterial.mjs +272 -272
  91. package/dist/lines/LineSegments2.js +12 -12
  92. package/dist/lines/LineSegments2.mjs +12 -12
  93. package/dist/lines/LineSegmentsGeometry.js +2 -2
  94. package/dist/lines/LineSegmentsGeometry.mjs +2 -2
  95. package/dist/lines/Wireframe.js +2 -2
  96. package/dist/lines/Wireframe.mjs +2 -2
  97. package/dist/loaders/3DMLoader.d.ts +2 -1
  98. package/dist/loaders/3MFLoader.d.ts +2 -1
  99. package/dist/loaders/AMFLoader.d.ts +2 -1
  100. package/dist/loaders/AssimpLoader.d.ts +20 -0
  101. package/dist/loaders/AssimpLoader.js +520 -482
  102. package/dist/loaders/AssimpLoader.mjs +520 -482
  103. package/dist/loaders/BVHLoader.d.ts +2 -1
  104. package/dist/loaders/BasisTextureLoader.d.ts +2 -1
  105. package/dist/loaders/BasisTextureLoader.js +23 -14
  106. package/dist/loaders/BasisTextureLoader.mjs +24 -15
  107. package/dist/loaders/ColladaLoader.d.ts +2 -1
  108. package/dist/loaders/DRACOLoader.d.ts +2 -1
  109. package/dist/loaders/FBXLoader.d.ts +2 -1
  110. package/dist/loaders/FBXLoader.js +2 -2
  111. package/dist/loaders/FBXLoader.mjs +2 -2
  112. package/dist/loaders/FontLoader.d.ts +4 -4
  113. package/dist/loaders/FontLoader.js +2 -1
  114. package/dist/loaders/FontLoader.mjs +2 -1
  115. package/dist/loaders/GCodeLoader.d.ts +2 -1
  116. package/dist/loaders/GLTFLoader.d.ts +11 -9
  117. package/dist/loaders/GLTFLoader.js +2 -2
  118. package/dist/loaders/GLTFLoader.mjs +2 -2
  119. package/dist/loaders/HDRCubeTextureLoader.d.ts +2 -1
  120. package/dist/loaders/KMZLoader.d.ts +2 -1
  121. package/dist/loaders/KTX2Loader.js +34 -15
  122. package/dist/loaders/KTX2Loader.mjs +35 -16
  123. package/dist/loaders/LDrawLoader.d.ts +2 -1
  124. package/dist/loaders/LDrawLoader.js +3 -3
  125. package/dist/loaders/LDrawLoader.mjs +3 -3
  126. package/dist/loaders/LUT3dlLoader.d.ts +3 -2
  127. package/dist/loaders/LUTCubeLoader.d.ts +3 -2
  128. package/dist/loaders/LWOLoader.d.ts +2 -1
  129. package/dist/loaders/LottieLoader.d.ts +2 -1
  130. package/dist/loaders/MD2Loader.d.ts +2 -1
  131. package/dist/loaders/MDDLoader.d.ts +2 -1
  132. package/dist/loaders/MMDLoader.d.ts +2 -1
  133. package/dist/loaders/MTLLoader.d.ts +2 -1
  134. package/dist/loaders/OBJLoader.d.ts +2 -1
  135. package/dist/loaders/OBJLoader.js +5 -5
  136. package/dist/loaders/OBJLoader.mjs +5 -5
  137. package/dist/loaders/PCDLoader.d.ts +2 -1
  138. package/dist/loaders/PDBLoader.d.ts +2 -1
  139. package/dist/loaders/PLYLoader.d.ts +2 -1
  140. package/dist/loaders/PRWMLoader.d.ts +2 -1
  141. package/dist/loaders/RGBMLoader.js +924 -918
  142. package/dist/loaders/RGBMLoader.mjs +924 -918
  143. package/dist/loaders/STLLoader.d.ts +2 -1
  144. package/dist/loaders/SVGLoader.d.ts +2 -1
  145. package/dist/loaders/TDSLoader.d.ts +2 -1
  146. package/dist/loaders/TTFLoader.d.ts +2 -1
  147. package/dist/loaders/TiltLoader.d.ts +2 -1
  148. package/dist/loaders/TiltLoader.js +3 -1
  149. package/dist/loaders/TiltLoader.mjs +3 -1
  150. package/dist/loaders/VOXLoader.d.ts +4 -2
  151. package/dist/loaders/VRMLLoader.d.ts +2 -1
  152. package/dist/loaders/VRMLoader.d.ts +20 -0
  153. package/dist/loaders/VTKLoader.d.ts +2 -1
  154. package/dist/loaders/XLoader.d.ts +20 -0
  155. package/dist/loaders/XLoader.js +1 -1
  156. package/dist/loaders/XLoader.mjs +1 -1
  157. package/dist/loaders/XYZLoader.d.ts +2 -1
  158. package/dist/loaders/lwo/IFFParser.js +104 -110
  159. package/dist/loaders/lwo/IFFParser.mjs +104 -110
  160. package/dist/loaders/lwo/LWO2Parser.js +18 -33
  161. package/dist/loaders/lwo/LWO2Parser.mjs +18 -33
  162. package/dist/loaders/lwo/LWO3Parser.js +17 -33
  163. package/dist/loaders/lwo/LWO3Parser.mjs +17 -33
  164. package/dist/math/Capsule.d.ts +1 -1
  165. package/dist/math/Capsule.js +90 -92
  166. package/dist/math/Capsule.mjs +90 -92
  167. package/dist/math/ColorConverter.js +26 -36
  168. package/dist/math/ColorConverter.mjs +26 -36
  169. package/dist/math/ConvexHull.js +16 -17
  170. package/dist/math/ConvexHull.mjs +17 -18
  171. package/dist/math/ImprovedNoise.js +41 -39
  172. package/dist/math/ImprovedNoise.mjs +41 -39
  173. package/dist/math/Lut.js +65 -63
  174. package/dist/math/Lut.mjs +66 -64
  175. package/dist/math/MeshSurfaceSampler.d.ts +3 -0
  176. package/dist/math/MeshSurfaceSampler.js +85 -89
  177. package/dist/math/MeshSurfaceSampler.mjs +85 -89
  178. package/dist/math/OBB.js +68 -88
  179. package/dist/math/OBB.mjs +68 -88
  180. package/dist/math/Octree.js +240 -245
  181. package/dist/math/Octree.mjs +240 -245
  182. package/dist/misc/ConvexObjectBreaker.js +114 -120
  183. package/dist/misc/ConvexObjectBreaker.mjs +115 -121
  184. package/dist/misc/GPUComputationRenderer.d.ts +1 -0
  185. package/dist/misc/GPUComputationRenderer.js +191 -157
  186. package/dist/misc/GPUComputationRenderer.mjs +192 -158
  187. package/dist/misc/Gyroscope.js +16 -18
  188. package/dist/misc/Gyroscope.mjs +17 -19
  189. package/dist/misc/MD2Character.js +88 -86
  190. package/dist/misc/MD2Character.mjs +89 -87
  191. package/dist/misc/MD2CharacterComplex.js +106 -105
  192. package/dist/misc/MD2CharacterComplex.mjs +107 -106
  193. package/dist/misc/MorphAnimMesh.d.ts +1 -1
  194. package/dist/misc/MorphAnimMesh.js +33 -33
  195. package/dist/misc/MorphAnimMesh.mjs +33 -33
  196. package/dist/misc/MorphBlendMesh.js +68 -68
  197. package/dist/misc/MorphBlendMesh.mjs +68 -68
  198. package/dist/misc/ProgressiveLightmap.d.ts +1 -2
  199. package/dist/misc/RollerCoaster.js +321 -314
  200. package/dist/misc/RollerCoaster.mjs +322 -315
  201. package/dist/misc/Volume.d.ts +1 -1
  202. package/dist/misc/Volume.js +169 -166
  203. package/dist/misc/Volume.mjs +170 -167
  204. package/dist/misc/VolumeSlice.js +50 -51
  205. package/dist/misc/VolumeSlice.mjs +50 -51
  206. package/dist/modifiers/CurveModifier.d.ts +2 -2
  207. package/dist/modifiers/CurveModifier.js +1 -1
  208. package/dist/modifiers/CurveModifier.mjs +1 -1
  209. package/dist/modifiers/SimplifyModifier.js +2 -1
  210. package/dist/modifiers/SimplifyModifier.mjs +2 -1
  211. package/dist/objects/Lensflare.js +32 -21
  212. package/dist/objects/Lensflare.mjs +33 -22
  213. package/dist/objects/LightningStorm.d.ts +3 -3
  214. package/dist/objects/LightningStorm.js +3 -3
  215. package/dist/objects/LightningStorm.mjs +3 -3
  216. package/dist/objects/MarchingCubes.d.ts +1 -0
  217. package/dist/objects/MarchingCubes.js +4362 -10
  218. package/dist/objects/MarchingCubes.mjs +4363 -11
  219. package/dist/objects/Reflector.d.ts +5 -2
  220. package/dist/objects/Reflector.js +39 -12
  221. package/dist/objects/Reflector.mjs +40 -13
  222. package/dist/objects/ReflectorForSSRPass.js +25 -21
  223. package/dist/objects/ReflectorForSSRPass.mjs +26 -22
  224. package/dist/objects/ReflectorRTT.d.ts +6 -0
  225. package/dist/objects/Refractor.d.ts +5 -2
  226. package/dist/objects/Refractor.js +39 -12
  227. package/dist/objects/Refractor.mjs +40 -13
  228. package/dist/objects/ShadowMesh.d.ts +6 -3
  229. package/dist/objects/ShadowMesh.js +7 -3
  230. package/dist/objects/ShadowMesh.mjs +8 -4
  231. package/dist/objects/Sky.js +181 -137
  232. package/dist/objects/Sky.mjs +182 -138
  233. package/dist/objects/Water.d.ts +3 -3
  234. package/dist/objects/Water.js +3 -2
  235. package/dist/objects/Water.mjs +3 -2
  236. package/dist/objects/Water2.d.ts +2 -2
  237. package/dist/objects/Water2.js +16 -18
  238. package/dist/objects/Water2.mjs +17 -19
  239. package/dist/postprocessing/AdaptiveToneMappingPass.d.ts +2 -2
  240. package/dist/postprocessing/AdaptiveToneMappingPass.js +105 -112
  241. package/dist/postprocessing/AdaptiveToneMappingPass.mjs +107 -114
  242. package/dist/postprocessing/BokehPass.d.ts +1 -1
  243. package/dist/postprocessing/ClearPass.d.ts +3 -3
  244. package/dist/postprocessing/CubeTexturePass.js +37 -33
  245. package/dist/postprocessing/CubeTexturePass.mjs +37 -33
  246. package/dist/postprocessing/HalftonePass.d.ts +1 -1
  247. package/dist/postprocessing/LUTPass.d.ts +3 -3
  248. package/dist/postprocessing/RenderPixelatedPass.d.ts +28 -0
  249. package/dist/postprocessing/SAOPass.d.ts +5 -6
  250. package/dist/postprocessing/SAOPass.js +151 -145
  251. package/dist/postprocessing/SAOPass.mjs +153 -147
  252. package/dist/postprocessing/SSAARenderPass.d.ts +5 -5
  253. package/dist/postprocessing/SSAARenderPass.js +78 -55
  254. package/dist/postprocessing/SSAARenderPass.mjs +80 -57
  255. package/dist/postprocessing/SSAOPass.d.ts +4 -5
  256. package/dist/postprocessing/SSAOPass.js +17 -10
  257. package/dist/postprocessing/SSAOPass.mjs +17 -10
  258. package/dist/postprocessing/SSRPass.d.ts +6 -7
  259. package/dist/postprocessing/SSRPass.js +235 -262
  260. package/dist/postprocessing/SSRPass.mjs +237 -264
  261. package/dist/postprocessing/TAARenderPass.d.ts +2 -2
  262. package/dist/postprocessing/TAARenderPass.js +106 -27
  263. package/dist/postprocessing/TAARenderPass.mjs +107 -28
  264. package/dist/postprocessing/TexturePass.d.ts +2 -2
  265. package/dist/postprocessing/TexturePass.js +24 -22
  266. package/dist/postprocessing/TexturePass.mjs +25 -23
  267. package/dist/postprocessing/UnrealBloomPass.js +175 -118
  268. package/dist/postprocessing/UnrealBloomPass.mjs +177 -120
  269. package/dist/renderers/CSS2DRenderer.d.ts +2 -1
  270. package/dist/renderers/CSS2DRenderer.js +5 -4
  271. package/dist/renderers/CSS2DRenderer.mjs +6 -5
  272. package/dist/renderers/CSS3DRenderer.d.ts +1 -1
  273. package/dist/renderers/CSS3DRenderer.js +147 -113
  274. package/dist/renderers/CSS3DRenderer.mjs +148 -114
  275. package/dist/renderers/Projector.js +377 -389
  276. package/dist/renderers/Projector.mjs +377 -389
  277. package/dist/renderers/SVGRenderer.js +280 -275
  278. package/dist/renderers/SVGRenderer.mjs +280 -275
  279. package/dist/shaders/ACESFilmicToneMappingShader.d.ts +1 -1
  280. package/dist/shaders/AfterimageShader.d.ts +1 -1
  281. package/dist/shaders/BasicShader.d.ts +1 -1
  282. package/dist/shaders/BleachBypassShader.d.ts +1 -1
  283. package/dist/shaders/BokehShader.d.ts +2 -2
  284. package/dist/shaders/BokehShader2.d.ts +2 -2
  285. package/dist/shaders/BokehShader2.js +1 -1
  286. package/dist/shaders/BokehShader2.mjs +1 -1
  287. package/dist/shaders/ColorCorrectionShader.js +3 -3
  288. package/dist/shaders/ColorCorrectionShader.mjs +3 -3
  289. package/dist/shaders/ColorifyShader.js +1 -1
  290. package/dist/shaders/ColorifyShader.mjs +1 -1
  291. package/dist/shaders/ConvolutionShader.d.ts +2 -2
  292. package/dist/shaders/ConvolutionShader.js +1 -1
  293. package/dist/shaders/ConvolutionShader.mjs +1 -1
  294. package/dist/shaders/CopyShader.d.ts +1 -1
  295. package/dist/shaders/DepthLimitedBlurShader.d.ts +2 -2
  296. package/dist/shaders/DepthLimitedBlurShader.js +2 -2
  297. package/dist/shaders/DepthLimitedBlurShader.mjs +2 -2
  298. package/dist/shaders/DotScreenShader.js +2 -2
  299. package/dist/shaders/DotScreenShader.mjs +2 -2
  300. package/dist/shaders/FXAAShader.js +1 -1
  301. package/dist/shaders/FXAAShader.mjs +1 -1
  302. package/dist/shaders/FreiChenShader.js +1 -1
  303. package/dist/shaders/FreiChenShader.mjs +1 -1
  304. package/dist/shaders/GammaCorrectionShader.d.ts +1 -1
  305. package/dist/shaders/GodRaysShader.js +4 -4
  306. package/dist/shaders/GodRaysShader.mjs +4 -4
  307. package/dist/shaders/HorizontalBlurShader.d.ts +1 -1
  308. package/dist/shaders/LuminosityHighPassShader.js +1 -1
  309. package/dist/shaders/LuminosityHighPassShader.mjs +1 -1
  310. package/dist/shaders/NormalMapShader.js +2 -2
  311. package/dist/shaders/NormalMapShader.mjs +2 -2
  312. package/dist/shaders/SAOShader.d.ts +2 -2
  313. package/dist/shaders/SAOShader.js +3 -3
  314. package/dist/shaders/SAOShader.mjs +3 -3
  315. package/dist/shaders/SMAAShader.js +3 -3
  316. package/dist/shaders/SMAAShader.mjs +3 -3
  317. package/dist/shaders/SSAOShader.js +4 -4
  318. package/dist/shaders/SSAOShader.mjs +4 -4
  319. package/dist/shaders/SSRShader.js +4 -4
  320. package/dist/shaders/SSRShader.mjs +4 -4
  321. package/dist/shaders/SobelOperatorShader.js +1 -1
  322. package/dist/shaders/SobelOperatorShader.mjs +1 -1
  323. package/dist/shaders/SubsurfaceScatteringShader.d.ts +2 -2
  324. package/dist/shaders/SubsurfaceScatteringShader.js +91 -52
  325. package/dist/shaders/SubsurfaceScatteringShader.mjs +91 -52
  326. package/dist/shaders/ToonShader.js +25 -25
  327. package/dist/shaders/ToonShader.mjs +25 -25
  328. package/dist/shaders/TriangleBlurShader.js +1 -1
  329. package/dist/shaders/TriangleBlurShader.mjs +1 -1
  330. package/dist/shaders/VerticalBlurShader.d.ts +1 -1
  331. package/dist/shaders/VolumeShader.js +2 -2
  332. package/dist/shaders/VolumeShader.mjs +2 -2
  333. package/dist/shaders/types.d.ts +2 -2
  334. package/dist/types/Loader.d.ts +4 -0
  335. package/dist/types/Loader.js +26 -0
  336. package/dist/types/Loader.mjs +9 -0
  337. package/dist/types/shared.d.ts +2 -2
  338. package/dist/types/utils.d.ts +1 -1
  339. package/dist/utils/BufferGeometryUtils.d.ts +2 -2
  340. package/dist/utils/BufferGeometryUtils.js +1 -1
  341. package/dist/utils/BufferGeometryUtils.mjs +1 -1
  342. package/dist/utils/RoughnessMipmapper.d.ts +8 -0
  343. package/dist/utils/RoughnessMipmapper.js +79 -75
  344. package/dist/utils/RoughnessMipmapper.mjs +79 -75
  345. package/dist/utils/ShadowMapViewer.js +103 -106
  346. package/dist/utils/ShadowMapViewer.mjs +103 -106
  347. package/dist/utils/SkeletonUtils.d.ts +5 -21
  348. package/dist/utils/SkeletonUtils.js +182 -263
  349. package/dist/utils/SkeletonUtils.mjs +183 -264
  350. package/dist/utils/UVsDebug.js +37 -42
  351. package/dist/utils/UVsDebug.mjs +37 -42
  352. package/dist/webxr/ARButton.d.ts +2 -1
  353. package/dist/webxr/OculusHandModel.d.ts +2 -1
  354. package/dist/webxr/OculusHandPointerModel.d.ts +2 -2
  355. package/dist/webxr/OculusHandPointerModel.js +2 -2
  356. package/dist/webxr/OculusHandPointerModel.mjs +2 -2
  357. package/dist/webxr/VRButton.d.ts +2 -1
  358. package/dist/webxr/XRHandPrimitiveModel.js +2 -2
  359. package/dist/webxr/XRHandPrimitiveModel.mjs +2 -2
  360. package/package.json +5 -6
  361. package/dist/custom.d.ts +0 -5
  362. package/dist/loaders/NodeMaterialLoader.js +0 -146
  363. package/dist/loaders/NodeMaterialLoader.mjs +0 -146
  364. package/dist/nodes/Nodes.js +0 -347
  365. package/dist/nodes/Nodes.mjs +0 -347
  366. package/dist/nodes/ShaderNode.js +0 -408
  367. package/dist/nodes/ShaderNode.mjs +0 -408
  368. package/dist/nodes/accessors/BufferNode.js +0 -14
  369. package/dist/nodes/accessors/BufferNode.mjs +0 -15
  370. package/dist/nodes/accessors/CameraNode.js +0 -43
  371. package/dist/nodes/accessors/CameraNode.mjs +0 -44
  372. package/dist/nodes/accessors/CubeTextureNode.js +0 -41
  373. package/dist/nodes/accessors/CubeTextureNode.mjs +0 -42
  374. package/dist/nodes/accessors/MaterialNode.js +0 -70
  375. package/dist/nodes/accessors/MaterialNode.mjs +0 -71
  376. package/dist/nodes/accessors/MaterialReferenceNode.js +0 -13
  377. package/dist/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  378. package/dist/nodes/accessors/ModelNode.js +0 -8
  379. package/dist/nodes/accessors/ModelNode.mjs +0 -9
  380. package/dist/nodes/accessors/ModelViewProjectionNode.js +0 -23
  381. package/dist/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  382. package/dist/nodes/accessors/NormalNode.js +0 -61
  383. package/dist/nodes/accessors/NormalNode.mjs +0 -62
  384. package/dist/nodes/accessors/Object3DNode.js +0 -75
  385. package/dist/nodes/accessors/Object3DNode.mjs +0 -76
  386. package/dist/nodes/accessors/PointUVNode.js +0 -12
  387. package/dist/nodes/accessors/PointUVNode.mjs +0 -13
  388. package/dist/nodes/accessors/PositionNode.js +0 -64
  389. package/dist/nodes/accessors/PositionNode.mjs +0 -65
  390. package/dist/nodes/accessors/ReferenceNode.js +0 -36
  391. package/dist/nodes/accessors/ReferenceNode.mjs +0 -37
  392. package/dist/nodes/accessors/ReflectNode.js +0 -42
  393. package/dist/nodes/accessors/ReflectNode.mjs +0 -43
  394. package/dist/nodes/accessors/SkinningNode.js +0 -57
  395. package/dist/nodes/accessors/SkinningNode.mjs +0 -58
  396. package/dist/nodes/accessors/TextureNode.js +0 -53
  397. package/dist/nodes/accessors/TextureNode.mjs +0 -54
  398. package/dist/nodes/accessors/UVNode.js +0 -22
  399. package/dist/nodes/accessors/UVNode.mjs +0 -23
  400. package/dist/nodes/core/ArrayUniformNode.js +0 -13
  401. package/dist/nodes/core/ArrayUniformNode.mjs +0 -14
  402. package/dist/nodes/core/AttributeNode.js +0 -29
  403. package/dist/nodes/core/AttributeNode.mjs +0 -30
  404. package/dist/nodes/core/BypassNode.js +0 -21
  405. package/dist/nodes/core/BypassNode.mjs +0 -22
  406. package/dist/nodes/core/CodeNode.js +0 -27
  407. package/dist/nodes/core/CodeNode.mjs +0 -28
  408. package/dist/nodes/core/ConstNode.js +0 -13
  409. package/dist/nodes/core/ConstNode.mjs +0 -14
  410. package/dist/nodes/core/ContextNode.js +0 -21
  411. package/dist/nodes/core/ContextNode.mjs +0 -22
  412. package/dist/nodes/core/ExpressionNode.js +0 -18
  413. package/dist/nodes/core/ExpressionNode.mjs +0 -19
  414. package/dist/nodes/core/FunctionCallNode.js +0 -36
  415. package/dist/nodes/core/FunctionCallNode.mjs +0 -37
  416. package/dist/nodes/core/FunctionNode.js +0 -55
  417. package/dist/nodes/core/FunctionNode.mjs +0 -56
  418. package/dist/nodes/core/InputNode.js +0 -37
  419. package/dist/nodes/core/InputNode.mjs +0 -38
  420. package/dist/nodes/core/Node.js +0 -138
  421. package/dist/nodes/core/Node.mjs +0 -139
  422. package/dist/nodes/core/NodeAttribute.js +0 -9
  423. package/dist/nodes/core/NodeAttribute.mjs +0 -10
  424. package/dist/nodes/core/NodeBuilder.js +0 -402
  425. package/dist/nodes/core/NodeBuilder.mjs +0 -402
  426. package/dist/nodes/core/NodeCode.js +0 -10
  427. package/dist/nodes/core/NodeCode.mjs +0 -11
  428. package/dist/nodes/core/NodeFrame.js +0 -34
  429. package/dist/nodes/core/NodeFrame.mjs +0 -35
  430. package/dist/nodes/core/NodeFunctionInput.js +0 -12
  431. package/dist/nodes/core/NodeFunctionInput.mjs +0 -13
  432. package/dist/nodes/core/NodeKeywords.js +0 -43
  433. package/dist/nodes/core/NodeKeywords.mjs +0 -44
  434. package/dist/nodes/core/NodeUniform.js +0 -17
  435. package/dist/nodes/core/NodeUniform.mjs +0 -18
  436. package/dist/nodes/core/NodeUtils.js +0 -57
  437. package/dist/nodes/core/NodeUtils.mjs +0 -57
  438. package/dist/nodes/core/NodeVar.js +0 -9
  439. package/dist/nodes/core/NodeVar.mjs +0 -10
  440. package/dist/nodes/core/NodeVary.js +0 -9
  441. package/dist/nodes/core/NodeVary.mjs +0 -10
  442. package/dist/nodes/core/PropertyNode.js +0 -20
  443. package/dist/nodes/core/PropertyNode.mjs +0 -21
  444. package/dist/nodes/core/TempNode.js +0 -24
  445. package/dist/nodes/core/TempNode.mjs +0 -25
  446. package/dist/nodes/core/UniformNode.js +0 -22
  447. package/dist/nodes/core/UniformNode.mjs +0 -23
  448. package/dist/nodes/core/VarNode.js +0 -30
  449. package/dist/nodes/core/VarNode.mjs +0 -31
  450. package/dist/nodes/core/VaryNode.js +0 -29
  451. package/dist/nodes/core/VaryNode.mjs +0 -30
  452. package/dist/nodes/core/constants.js +0 -24
  453. package/dist/nodes/core/constants.mjs +0 -24
  454. package/dist/nodes/display/ColorSpaceNode.js +0 -62
  455. package/dist/nodes/display/ColorSpaceNode.mjs +0 -62
  456. package/dist/nodes/display/NormalMapNode.js +0 -53
  457. package/dist/nodes/display/NormalMapNode.mjs +0 -54
  458. package/dist/nodes/fog/FogNode.js +0 -14
  459. package/dist/nodes/fog/FogNode.mjs +0 -15
  460. package/dist/nodes/fog/FogRangeNode.js +0 -16
  461. package/dist/nodes/fog/FogRangeNode.mjs +0 -17
  462. package/dist/nodes/functions/BSDFs.js +0 -64
  463. package/dist/nodes/functions/BSDFs.mjs +0 -64
  464. package/dist/nodes/lights/LightContextNode.js +0 -34
  465. package/dist/nodes/lights/LightContextNode.mjs +0 -35
  466. package/dist/nodes/lights/LightNode.js +0 -57
  467. package/dist/nodes/lights/LightNode.mjs +0 -58
  468. package/dist/nodes/lights/LightsNode.js +0 -58
  469. package/dist/nodes/lights/LightsNode.mjs +0 -59
  470. package/dist/nodes/loaders/NodeLoader.js +0 -195
  471. package/dist/nodes/loaders/NodeLoader.mjs +0 -196
  472. package/dist/nodes/loaders/NodeMaterialLoader.js +0 -23
  473. package/dist/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  474. package/dist/nodes/loaders/NodeObjectLoader.js +0 -39
  475. package/dist/nodes/loaders/NodeObjectLoader.mjs +0 -40
  476. package/dist/nodes/materials/LineBasicNodeMaterial.js +0 -26
  477. package/dist/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  478. package/dist/nodes/materials/Materials.js +0 -24
  479. package/dist/nodes/materials/Materials.mjs +0 -24
  480. package/dist/nodes/materials/MeshBasicNodeMaterial.js +0 -27
  481. package/dist/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  482. package/dist/nodes/materials/MeshStandardNodeMaterial.js +0 -40
  483. package/dist/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  484. package/dist/nodes/materials/NodeMaterial.js +0 -63
  485. package/dist/nodes/materials/NodeMaterial.mjs +0 -64
  486. package/dist/nodes/materials/PointsNodeMaterial.js +0 -29
  487. package/dist/nodes/materials/PointsNodeMaterial.mjs +0 -30
  488. package/dist/nodes/math/CondNode.js +0 -40
  489. package/dist/nodes/math/CondNode.mjs +0 -41
  490. package/dist/nodes/math/MathNode.js +0 -165
  491. package/dist/nodes/math/MathNode.mjs +0 -166
  492. package/dist/nodes/math/OperatorNode.js +0 -102
  493. package/dist/nodes/math/OperatorNode.mjs +0 -103
  494. package/dist/nodes/procedural/CheckerNode.js +0 -20
  495. package/dist/nodes/procedural/CheckerNode.mjs +0 -21
  496. package/dist/nodes/utils/ArrayElementNode.js +0 -18
  497. package/dist/nodes/utils/ArrayElementNode.mjs +0 -19
  498. package/dist/nodes/utils/ConvertNode.js +0 -24
  499. package/dist/nodes/utils/ConvertNode.mjs +0 -25
  500. package/dist/nodes/utils/JoinNode.js +0 -25
  501. package/dist/nodes/utils/JoinNode.mjs +0 -26
  502. package/dist/nodes/utils/MatcapUVNode.js +0 -15
  503. package/dist/nodes/utils/MatcapUVNode.mjs +0 -16
  504. package/dist/nodes/utils/OscNode.js +0 -49
  505. package/dist/nodes/utils/OscNode.mjs +0 -50
  506. package/dist/nodes/utils/SplitNode.js +0 -44
  507. package/dist/nodes/utils/SplitNode.mjs +0 -45
  508. package/dist/nodes/utils/SpriteSheetUVNode.js +0 -39
  509. package/dist/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  510. package/dist/nodes/utils/TimerNode.js +0 -43
  511. package/dist/nodes/utils/TimerNode.mjs +0 -44
  512. package/dist/offscreen/jank.js +0 -26
  513. package/dist/offscreen/jank.mjs +0 -27
  514. package/dist/offscreen/offscreen.js +0 -8
  515. package/dist/offscreen/offscreen.mjs +0 -7
  516. package/dist/offscreen/scene.js +0 -68
  517. package/dist/offscreen/scene.mjs +0 -52
  518. package/dist/renderers/nodes/accessors/CameraNode.js +0 -62
  519. package/dist/renderers/nodes/accessors/CameraNode.mjs +0 -63
  520. package/dist/renderers/nodes/accessors/ModelNode.js +0 -60
  521. package/dist/renderers/nodes/accessors/ModelNode.mjs +0 -61
  522. package/dist/renderers/nodes/accessors/ModelViewProjectionNode.js +0 -20
  523. package/dist/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  524. package/dist/renderers/nodes/accessors/NormalNode.js +0 -60
  525. package/dist/renderers/nodes/accessors/NormalNode.mjs +0 -61
  526. package/dist/renderers/nodes/accessors/PositionNode.js +0 -29
  527. package/dist/renderers/nodes/accessors/PositionNode.mjs +0 -30
  528. package/dist/renderers/nodes/accessors/UVNode.js +0 -12
  529. package/dist/renderers/nodes/accessors/UVNode.mjs +0 -13
  530. package/dist/renderers/nodes/core/AttributeNode.js +0 -34
  531. package/dist/renderers/nodes/core/AttributeNode.mjs +0 -35
  532. package/dist/renderers/nodes/core/InputNode.js +0 -30
  533. package/dist/renderers/nodes/core/InputNode.mjs +0 -31
  534. package/dist/renderers/nodes/core/Node.js +0 -33
  535. package/dist/renderers/nodes/core/Node.mjs +0 -34
  536. package/dist/renderers/nodes/core/NodeAttribute.js +0 -9
  537. package/dist/renderers/nodes/core/NodeAttribute.mjs +0 -10
  538. package/dist/renderers/nodes/core/NodeBuilder.js +0 -248
  539. package/dist/renderers/nodes/core/NodeBuilder.mjs +0 -249
  540. package/dist/renderers/nodes/core/NodeFrame.js +0 -34
  541. package/dist/renderers/nodes/core/NodeFrame.mjs +0 -35
  542. package/dist/renderers/nodes/core/NodeSlot.js +0 -9
  543. package/dist/renderers/nodes/core/NodeSlot.mjs +0 -10
  544. package/dist/renderers/nodes/core/NodeUniform.js +0 -17
  545. package/dist/renderers/nodes/core/NodeUniform.mjs +0 -18
  546. package/dist/renderers/nodes/core/NodeVary.js +0 -10
  547. package/dist/renderers/nodes/core/NodeVary.mjs +0 -11
  548. package/dist/renderers/nodes/core/VaryNode.js +0 -21
  549. package/dist/renderers/nodes/core/VaryNode.mjs +0 -22
  550. package/dist/renderers/nodes/core/constants.js +0 -22
  551. package/dist/renderers/nodes/core/constants.mjs +0 -22
  552. package/dist/renderers/nodes/inputs/ColorNode.js +0 -10
  553. package/dist/renderers/nodes/inputs/ColorNode.mjs +0 -11
  554. package/dist/renderers/nodes/inputs/FloatNode.js +0 -10
  555. package/dist/renderers/nodes/inputs/FloatNode.mjs +0 -11
  556. package/dist/renderers/nodes/inputs/Matrix3Node.js +0 -11
  557. package/dist/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  558. package/dist/renderers/nodes/inputs/Matrix4Node.js +0 -11
  559. package/dist/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  560. package/dist/renderers/nodes/inputs/TextureNode.js +0 -19
  561. package/dist/renderers/nodes/inputs/TextureNode.mjs +0 -20
  562. package/dist/renderers/nodes/inputs/Vector2Node.js +0 -10
  563. package/dist/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  564. package/dist/renderers/nodes/inputs/Vector3Node.js +0 -11
  565. package/dist/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  566. package/dist/renderers/nodes/inputs/Vector4Node.js +0 -11
  567. package/dist/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  568. package/dist/renderers/nodes/math/MathNode.js +0 -54
  569. package/dist/renderers/nodes/math/MathNode.mjs +0 -55
  570. package/dist/renderers/nodes/math/OperatorNode.js +0 -41
  571. package/dist/renderers/nodes/math/OperatorNode.mjs +0 -42
  572. package/dist/renderers/nodes/utils/SwitchNode.js +0 -19
  573. package/dist/renderers/nodes/utils/SwitchNode.mjs +0 -20
  574. package/dist/renderers/nodes/utils/TimerNode.js +0 -13
  575. package/dist/renderers/nodes/utils/TimerNode.mjs +0 -14
  576. package/dist/renderers/webgpu/WebGPU.js +0 -23
  577. package/dist/renderers/webgpu/WebGPU.mjs +0 -24
  578. package/dist/renderers/webgpu/WebGPUAttributes.js +0 -68
  579. package/dist/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  580. package/dist/renderers/webgpu/WebGPUBackground.js +0 -60
  581. package/dist/renderers/webgpu/WebGPUBackground.mjs +0 -61
  582. package/dist/renderers/webgpu/WebGPUBinding.js +0 -13
  583. package/dist/renderers/webgpu/WebGPUBinding.mjs +0 -14
  584. package/dist/renderers/webgpu/WebGPUBindings.js +0 -154
  585. package/dist/renderers/webgpu/WebGPUBindings.mjs +0 -155
  586. package/dist/renderers/webgpu/WebGPUComputePipelines.js +0 -43
  587. package/dist/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  588. package/dist/renderers/webgpu/WebGPUGeometries.js +0 -40
  589. package/dist/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  590. package/dist/renderers/webgpu/WebGPUInfo.js +0 -45
  591. package/dist/renderers/webgpu/WebGPUInfo.mjs +0 -46
  592. package/dist/renderers/webgpu/WebGPUObjects.js +0 -24
  593. package/dist/renderers/webgpu/WebGPUObjects.mjs +0 -25
  594. package/dist/renderers/webgpu/WebGPUProperties.js +0 -21
  595. package/dist/renderers/webgpu/WebGPUProperties.mjs +0 -22
  596. package/dist/renderers/webgpu/WebGPURenderLists.js +0 -118
  597. package/dist/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  598. package/dist/renderers/webgpu/WebGPURenderPipelines.js +0 -545
  599. package/dist/renderers/webgpu/WebGPURenderPipelines.mjs +0 -546
  600. package/dist/renderers/webgpu/WebGPURenderer.js +0 -596
  601. package/dist/renderers/webgpu/WebGPURenderer.mjs +0 -575
  602. package/dist/renderers/webgpu/WebGPUSampledTexture.js +0 -40
  603. package/dist/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  604. package/dist/renderers/webgpu/WebGPUSampler.js +0 -14
  605. package/dist/renderers/webgpu/WebGPUSampler.mjs +0 -15
  606. package/dist/renderers/webgpu/WebGPUStorageBuffer.js +0 -14
  607. package/dist/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  608. package/dist/renderers/webgpu/WebGPUTextureRenderer.js +0 -22
  609. package/dist/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  610. package/dist/renderers/webgpu/WebGPUTextureUtils.js +0 -97
  611. package/dist/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  612. package/dist/renderers/webgpu/WebGPUTextures.js +0 -483
  613. package/dist/renderers/webgpu/WebGPUTextures.mjs +0 -484
  614. package/dist/renderers/webgpu/WebGPUUniform.js +0 -81
  615. package/dist/renderers/webgpu/WebGPUUniform.mjs +0 -81
  616. package/dist/renderers/webgpu/WebGPUUniformsGroup.js +0 -175
  617. package/dist/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  618. package/dist/renderers/webgpu/constants.js +0 -241
  619. package/dist/renderers/webgpu/constants.mjs +0 -241
  620. package/dist/renderers/webgpu/nodes/ShaderLib.js +0 -41
  621. package/dist/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  622. package/dist/renderers/webgpu/nodes/WebGPUNodeBuilder.js +0 -164
  623. package/dist/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  624. package/dist/renderers/webgpu/nodes/WebGPUNodeUniform.js +0 -73
  625. package/dist/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  626. package/dist/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -14
  627. package/dist/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  628. package/dist/renderers/webgpu/nodes/WebGPUNodes.js +0 -39
  629. package/dist/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
@@ -3,9 +3,14 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
4
  const CCDIKSolver = require("./CCDIKSolver.js");
5
5
  const MMDPhysics = require("./MMDPhysics.js");
6
- const MMDAnimationHelper = (() => {
7
- function MMDAnimationHelper2(params) {
8
- params = params || {};
6
+ class MMDAnimationHelper {
7
+ /**
8
+ * @param {Object} params - (optional)
9
+ * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.
10
+ * @param {Number} params.afterglow - Default is 0.0.
11
+ * @param {boolean} params.resetPhysicsOnLoop - Default is true.
12
+ */
13
+ constructor(params = {}) {
9
14
  this.meshes = [];
10
15
  this.camera = null;
11
16
  this.cameraTarget = new THREE.Object3D();
@@ -16,7 +21,8 @@ const MMDAnimationHelper = (() => {
16
21
  this.configuration = {
17
22
  sync: params.sync !== void 0 ? params.sync : true,
18
23
  afterglow: params.afterglow !== void 0 ? params.afterglow : 0,
19
- resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true
24
+ resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true,
25
+ pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false
20
26
  };
21
27
  this.enabled = {
22
28
  animation: true,
@@ -25,283 +31,298 @@ const MMDAnimationHelper = (() => {
25
31
  physics: true,
26
32
  cameraAnimation: true
27
33
  };
28
- this.onBeforePhysics = () => {
34
+ this.onBeforePhysics = function() {
29
35
  };
30
36
  this.sharedPhysics = false;
31
37
  this.masterPhysics = null;
32
38
  }
33
- MMDAnimationHelper2.prototype = {
34
- constructor: MMDAnimationHelper2,
35
- /**
36
- * Adds an Three.js Object to helper and setups animation.
37
- * The anmation durations of added objects are synched
38
- * if this.configuration.sync is true.
39
- *
40
- * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
41
- * @param {Object} params - (optional)
42
- * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.
43
- * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.
44
- * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.
45
- * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.
46
- * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.
47
- * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).
48
- * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
49
- * @return {MMDAnimationHelper}
50
- */
51
- add: function(object, params) {
52
- params = params || {};
53
- if (object.isSkinnedMesh) {
54
- this._addMesh(object, params);
55
- } else if (object.isCamera) {
56
- this._setupCamera(object, params);
57
- } else if (object.type === "Audio") {
58
- this._setupAudio(object, params);
59
- } else {
60
- throw new Error(
61
- "THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
62
- );
63
- }
64
- if (this.configuration.sync)
65
- this._syncDuration();
66
- return this;
67
- },
68
- /**
69
- * Removes an Three.js Object from helper.
70
- *
71
- * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
72
- * @return {MMDAnimationHelper}
73
- */
74
- remove: function(object) {
75
- if (object.isSkinnedMesh) {
76
- this._removeMesh(object);
77
- } else if (object.isCamera) {
78
- this._clearCamera(object);
79
- } else if (object.type === "Audio") {
80
- this._clearAudio(object);
81
- } else {
82
- throw new Error(
83
- "THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
84
- );
85
- }
86
- if (this.configuration.sync)
87
- this._syncDuration();
88
- return this;
89
- },
90
- /**
91
- * Updates the animation.
92
- *
93
- * @param {Number} delta
94
- * @return {MMDAnimationHelper}
95
- */
96
- update: function(delta) {
97
- if (this.audioManager !== null)
98
- this.audioManager.control(delta);
99
- for (let i = 0; i < this.meshes.length; i++) {
100
- this._animateMesh(this.meshes[i], delta);
101
- }
102
- if (this.sharedPhysics)
103
- this._updateSharedPhysics(delta);
104
- if (this.camera !== null)
105
- this._animateCamera(this.camera, delta);
106
- return this;
107
- },
108
- /**
109
- * Changes the pose of SkinnedMesh as VPD specifies.
110
- *
111
- * @param {THREE.SkinnedMesh} mesh
112
- * @param {Object} vpd - VPD content parsed MMDParser
113
- * @param {Object} params - (optional)
114
- * @param {boolean} params.resetPose - Default is true.
115
- * @param {boolean} params.ik - Default is true.
116
- * @param {boolean} params.grant - Default is true.
117
- * @return {MMDAnimationHelper}
118
- */
119
- pose: function(mesh, vpd, params) {
120
- params = params || {};
121
- if (params.resetPose !== false)
122
- mesh.pose();
123
- const bones = mesh.skeleton.bones;
124
- const boneParams = vpd.bones;
125
- const boneNameDictionary = {};
126
- for (let i = 0, il = bones.length; i < il; i++) {
127
- boneNameDictionary[bones[i].name] = i;
128
- }
129
- const vector = new THREE.Vector3();
130
- const quaternion = new THREE.Quaternion();
131
- for (let i = 0, il = boneParams.length; i < il; i++) {
132
- const boneParam = boneParams[i];
133
- const boneIndex = boneNameDictionary[boneParam.name];
134
- if (boneIndex === void 0)
135
- continue;
136
- const bone = bones[boneIndex];
137
- bone.position.add(vector.fromArray(boneParam.translation));
138
- bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion));
139
- }
140
- mesh.updateMatrixWorld(true);
39
+ /**
40
+ * Adds an Three.js Object to helper and setups animation.
41
+ * The anmation durations of added objects are synched
42
+ * if this.configuration.sync is true.
43
+ *
44
+ * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
45
+ * @param {Object} params - (optional)
46
+ * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.
47
+ * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.
48
+ * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.
49
+ * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.
50
+ * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.
51
+ * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).
52
+ * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
53
+ * @return {MMDAnimationHelper}
54
+ */
55
+ add(object, params = {}) {
56
+ if (object.isSkinnedMesh) {
57
+ this._addMesh(object, params);
58
+ } else if (object.isCamera) {
59
+ this._setupCamera(object, params);
60
+ } else if (object.type === "Audio") {
61
+ this._setupAudio(object, params);
62
+ } else {
63
+ throw new Error(
64
+ "THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
65
+ );
66
+ }
67
+ if (this.configuration.sync)
68
+ this._syncDuration();
69
+ return this;
70
+ }
71
+ /**
72
+ * Removes an Three.js Object from helper.
73
+ *
74
+ * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
75
+ * @return {MMDAnimationHelper}
76
+ */
77
+ remove(object) {
78
+ if (object.isSkinnedMesh) {
79
+ this._removeMesh(object);
80
+ } else if (object.isCamera) {
81
+ this._clearCamera(object);
82
+ } else if (object.type === "Audio") {
83
+ this._clearAudio(object);
84
+ } else {
85
+ throw new Error(
86
+ "THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
87
+ );
88
+ }
89
+ if (this.configuration.sync)
90
+ this._syncDuration();
91
+ return this;
92
+ }
93
+ /**
94
+ * Updates the animation.
95
+ *
96
+ * @param {Number} delta
97
+ * @return {MMDAnimationHelper}
98
+ */
99
+ update(delta) {
100
+ if (this.audioManager !== null)
101
+ this.audioManager.control(delta);
102
+ for (let i = 0; i < this.meshes.length; i++) {
103
+ this._animateMesh(this.meshes[i], delta);
104
+ }
105
+ if (this.sharedPhysics)
106
+ this._updateSharedPhysics(delta);
107
+ if (this.camera !== null)
108
+ this._animateCamera(this.camera, delta);
109
+ return this;
110
+ }
111
+ /**
112
+ * Changes the pose of SkinnedMesh as VPD specifies.
113
+ *
114
+ * @param {THREE.SkinnedMesh} mesh
115
+ * @param {Object} vpd - VPD content parsed MMDParser
116
+ * @param {Object} params - (optional)
117
+ * @param {boolean} params.resetPose - Default is true.
118
+ * @param {boolean} params.ik - Default is true.
119
+ * @param {boolean} params.grant - Default is true.
120
+ * @return {MMDAnimationHelper}
121
+ */
122
+ pose(mesh, vpd, params = {}) {
123
+ if (params.resetPose !== false)
124
+ mesh.pose();
125
+ const bones = mesh.skeleton.bones;
126
+ const boneParams = vpd.bones;
127
+ const boneNameDictionary = {};
128
+ for (let i = 0, il = bones.length; i < il; i++) {
129
+ boneNameDictionary[bones[i].name] = i;
130
+ }
131
+ const vector = new THREE.Vector3();
132
+ const quaternion = new THREE.Quaternion();
133
+ for (let i = 0, il = boneParams.length; i < il; i++) {
134
+ const boneParam = boneParams[i];
135
+ const boneIndex = boneNameDictionary[boneParam.name];
136
+ if (boneIndex === void 0)
137
+ continue;
138
+ const bone = bones[boneIndex];
139
+ bone.position.add(vector.fromArray(boneParam.translation));
140
+ bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion));
141
+ }
142
+ mesh.updateMatrixWorld(true);
143
+ if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
144
+ const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
145
+ const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null;
146
+ const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null;
147
+ this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver);
148
+ } else {
141
149
  if (params.ik !== false) {
142
- this._createCCDIKSolver(mesh).update(params.saveOriginalBonesBeforeIK);
150
+ this._createCCDIKSolver(mesh).update();
143
151
  }
144
152
  if (params.grant !== false) {
145
153
  this.createGrantSolver(mesh).update();
146
154
  }
147
- return this;
148
- },
149
- /**
150
- * Enabes/Disables an animation feature.
151
- *
152
- * @param {string} key
153
- * @param {boolean} enabled
154
- * @return {MMDAnimationHelper}
155
- */
156
- enable: function(key, enabled) {
157
- if (this.enabled[key] === void 0) {
158
- throw new Error(`THREE.MMDAnimationHelper.enable: unknown key ${key}`);
159
- }
160
- this.enabled[key] = enabled;
161
- if (key === "physics") {
162
- for (let i = 0, il = this.meshes.length; i < il; i++) {
163
- this._optimizeIK(this.meshes[i], enabled);
164
- }
165
- }
166
- return this;
167
- },
168
- /**
169
- * Creates an GrantSolver instance.
170
- *
171
- * @param {THREE.SkinnedMesh} mesh
172
- * @return {GrantSolver}
173
- */
174
- createGrantSolver: function(mesh) {
175
- return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);
176
- },
177
- // private methods
178
- _addMesh: function(mesh, params) {
179
- if (this.meshes.indexOf(mesh) >= 0) {
180
- throw new Error(`THREE.MMDAnimationHelper._addMesh: SkinnedMesh '${mesh.name}' has already been added.`);
181
- }
182
- this.meshes.push(mesh);
183
- this.objects.set(mesh, { looped: false });
184
- this._setupMeshAnimation(mesh, params.animation);
185
- if (params.physics !== false) {
186
- this._setupMeshPhysics(mesh, params);
187
- }
188
- return this;
189
- },
190
- _setupCamera: function(camera, params) {
191
- if (this.camera === camera) {
192
- throw new Error(`THREE.MMDAnimationHelper._setupCamera: Camera '${camera.name}' has already been set.`);
193
- }
194
- if (this.camera)
195
- this.clearCamera(this.camera);
196
- this.camera = camera;
197
- camera.add(this.cameraTarget);
198
- this.objects.set(camera, {});
199
- if (params.animation !== void 0) {
200
- this._setupCameraAnimation(camera, params.animation);
201
- }
202
- return this;
203
- },
204
- _setupAudio: function(audio, params) {
205
- if (this.audio === audio) {
206
- throw new Error(`THREE.MMDAnimationHelper._setupAudio: Audio '${audio.name}' has already been set.`);
207
- }
208
- if (this.audio)
209
- this.clearAudio(this.audio);
210
- this.audio = audio;
211
- this.audioManager = new AudioManager(audio, params);
212
- this.objects.set(this.audioManager, {
213
- duration: this.audioManager.duration
214
- });
215
- return this;
216
- },
217
- _removeMesh: function(mesh) {
218
- let found = false;
219
- let writeIndex = 0;
155
+ }
156
+ return this;
157
+ }
158
+ /**
159
+ * Enabes/Disables an animation feature.
160
+ *
161
+ * @param {string} key
162
+ * @param {boolean} enabled
163
+ * @return {MMDAnimationHelper}
164
+ */
165
+ enable(key, enabled) {
166
+ if (this.enabled[key] === void 0) {
167
+ throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key);
168
+ }
169
+ this.enabled[key] = enabled;
170
+ if (key === "physics") {
220
171
  for (let i = 0, il = this.meshes.length; i < il; i++) {
221
- if (this.meshes[i] === mesh) {
222
- this.objects.delete(mesh);
223
- found = true;
224
- continue;
225
- }
226
- this.meshes[writeIndex++] = this.meshes[i];
227
- }
228
- if (!found) {
229
- throw new Error(`THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '${mesh.name}' has not been added yet.`);
230
- }
231
- this.meshes.length = writeIndex;
232
- return this;
233
- },
234
- _clearCamera: function(camera) {
235
- if (camera !== this.camera) {
236
- throw new Error(`THREE.MMDAnimationHelper._clearCamera: Camera '${camera.name}' has not been set yet.`);
237
- }
238
- this.camera.remove(this.cameraTarget);
239
- this.objects.delete(this.camera);
240
- this.camera = null;
241
- return this;
242
- },
243
- _clearAudio: function(audio) {
244
- if (audio !== this.audio) {
245
- throw new Error(`THREE.MMDAnimationHelper._clearAudio: Audio '${audio.name}' has not been set yet.`);
172
+ this._optimizeIK(this.meshes[i], enabled);
246
173
  }
247
- this.objects.delete(this.audioManager);
248
- this.audio = null;
249
- this.audioManager = null;
250
- return this;
251
- },
252
- _setupMeshAnimation: function(mesh, animation) {
253
- const objects = this.objects.get(mesh);
254
- if (animation !== void 0) {
255
- const animations = Array.isArray(animation) ? animation : [animation];
256
- objects.mixer = new THREE.AnimationMixer(mesh);
257
- for (let i = 0, il = animations.length; i < il; i++) {
258
- objects.mixer.clipAction(animations[i]).play();
259
- }
260
- objects.mixer.addEventListener("loop", (event) => {
261
- const tracks = event.action._clip.tracks;
262
- if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones")
263
- return;
264
- objects.looped = true;
265
- });
266
- }
267
- objects.ikSolver = this._createCCDIKSolver(mesh);
268
- objects.grantSolver = this.createGrantSolver(mesh);
269
- return this;
270
- },
271
- _setupCameraAnimation: function(camera, animation) {
174
+ }
175
+ return this;
176
+ }
177
+ /**
178
+ * Creates an GrantSolver instance.
179
+ *
180
+ * @param {THREE.SkinnedMesh} mesh
181
+ * @return {GrantSolver}
182
+ */
183
+ createGrantSolver(mesh) {
184
+ return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);
185
+ }
186
+ // private methods
187
+ _addMesh(mesh, params) {
188
+ if (this.meshes.indexOf(mesh) >= 0) {
189
+ throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added.");
190
+ }
191
+ this.meshes.push(mesh);
192
+ this.objects.set(mesh, { looped: false });
193
+ this._setupMeshAnimation(mesh, params.animation);
194
+ if (params.physics !== false) {
195
+ this._setupMeshPhysics(mesh, params);
196
+ }
197
+ return this;
198
+ }
199
+ _setupCamera(camera, params) {
200
+ if (this.camera === camera) {
201
+ throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set.");
202
+ }
203
+ if (this.camera)
204
+ this.clearCamera(this.camera);
205
+ this.camera = camera;
206
+ camera.add(this.cameraTarget);
207
+ this.objects.set(camera, {});
208
+ if (params.animation !== void 0) {
209
+ this._setupCameraAnimation(camera, params.animation);
210
+ }
211
+ return this;
212
+ }
213
+ _setupAudio(audio, params) {
214
+ if (this.audio === audio) {
215
+ throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set.");
216
+ }
217
+ if (this.audio)
218
+ this.clearAudio(this.audio);
219
+ this.audio = audio;
220
+ this.audioManager = new AudioManager(audio, params);
221
+ this.objects.set(this.audioManager, {
222
+ duration: this.audioManager.duration
223
+ });
224
+ return this;
225
+ }
226
+ _removeMesh(mesh) {
227
+ let found = false;
228
+ let writeIndex = 0;
229
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
230
+ if (this.meshes[i] === mesh) {
231
+ this.objects.delete(mesh);
232
+ found = true;
233
+ continue;
234
+ }
235
+ this.meshes[writeIndex++] = this.meshes[i];
236
+ }
237
+ if (!found) {
238
+ throw new Error(
239
+ "THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."
240
+ );
241
+ }
242
+ this.meshes.length = writeIndex;
243
+ return this;
244
+ }
245
+ _clearCamera(camera) {
246
+ if (camera !== this.camera) {
247
+ throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet.");
248
+ }
249
+ this.camera.remove(this.cameraTarget);
250
+ this.objects.delete(this.camera);
251
+ this.camera = null;
252
+ return this;
253
+ }
254
+ _clearAudio(audio) {
255
+ if (audio !== this.audio) {
256
+ throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet.");
257
+ }
258
+ this.objects.delete(this.audioManager);
259
+ this.audio = null;
260
+ this.audioManager = null;
261
+ return this;
262
+ }
263
+ _setupMeshAnimation(mesh, animation) {
264
+ const objects = this.objects.get(mesh);
265
+ if (animation !== void 0) {
272
266
  const animations = Array.isArray(animation) ? animation : [animation];
273
- const objects = this.objects.get(camera);
274
- objects.mixer = new THREE.AnimationMixer(camera);
267
+ objects.mixer = new THREE.AnimationMixer(mesh);
275
268
  for (let i = 0, il = animations.length; i < il; i++) {
276
269
  objects.mixer.clipAction(animations[i]).play();
277
270
  }
278
- },
279
- _setupMeshPhysics: function(mesh, params) {
280
- const objects = this.objects.get(mesh);
281
- if (params.world === void 0 && this.sharedPhysics) {
282
- const masterPhysics = this._getMasterPhysics();
283
- if (masterPhysics !== null)
284
- world = masterPhysics.world;
285
- }
286
- objects.physics = this._createMMDPhysics(mesh, params);
287
- if (objects.mixer && params.animationWarmup !== false) {
288
- this._animateMesh(mesh, 0);
289
- objects.physics.reset();
290
- }
291
- objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);
292
- this._optimizeIK(mesh, true);
293
- },
294
- _animateMesh: function(mesh, delta) {
295
- const objects = this.objects.get(mesh);
296
- const mixer = objects.mixer;
297
- const ikSolver = objects.ikSolver;
298
- const grantSolver = objects.grantSolver;
299
- const physics = objects.physics;
300
- const looped = objects.looped;
301
- if (mixer && this.enabled.animation) {
302
- this._restoreBones(mesh);
303
- mixer.update(delta);
304
- this._saveBones(mesh);
271
+ objects.mixer.addEventListener("loop", function(event) {
272
+ const tracks = event.action._clip.tracks;
273
+ if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones")
274
+ return;
275
+ objects.looped = true;
276
+ });
277
+ }
278
+ objects.ikSolver = this._createCCDIKSolver(mesh);
279
+ objects.grantSolver = this.createGrantSolver(mesh);
280
+ return this;
281
+ }
282
+ _setupCameraAnimation(camera, animation) {
283
+ const animations = Array.isArray(animation) ? animation : [animation];
284
+ const objects = this.objects.get(camera);
285
+ objects.mixer = new THREE.AnimationMixer(camera);
286
+ for (let i = 0, il = animations.length; i < il; i++) {
287
+ objects.mixer.clipAction(animations[i]).play();
288
+ }
289
+ }
290
+ _setupMeshPhysics(mesh, params) {
291
+ const objects = this.objects.get(mesh);
292
+ if (params.world === void 0 && this.sharedPhysics) {
293
+ const masterPhysics = this._getMasterPhysics();
294
+ if (masterPhysics !== null)
295
+ world = masterPhysics.world;
296
+ }
297
+ objects.physics = this._createMMDPhysics(mesh, params);
298
+ if (objects.mixer && params.animationWarmup !== false) {
299
+ this._animateMesh(mesh, 0);
300
+ objects.physics.reset();
301
+ }
302
+ objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);
303
+ this._optimizeIK(mesh, true);
304
+ }
305
+ _animateMesh(mesh, delta) {
306
+ const objects = this.objects.get(mesh);
307
+ const mixer = objects.mixer;
308
+ const ikSolver = objects.ikSolver;
309
+ const grantSolver = objects.grantSolver;
310
+ const physics = objects.physics;
311
+ const looped = objects.looped;
312
+ if (mixer && this.enabled.animation) {
313
+ this._restoreBones(mesh);
314
+ mixer.update(delta);
315
+ this._saveBones(mesh);
316
+ if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
317
+ if (!objects.sortedBonesData)
318
+ objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
319
+ this._animatePMXMesh(
320
+ mesh,
321
+ objects.sortedBonesData,
322
+ ikSolver && this.enabled.ik ? ikSolver : null,
323
+ grantSolver && this.enabled.grant ? grantSolver : null
324
+ );
325
+ } else {
305
326
  if (ikSolver && this.enabled.ik) {
306
327
  mesh.updateMatrixWorld(true);
307
328
  ikSolver.update();
@@ -310,75 +331,112 @@ const MMDAnimationHelper = (() => {
310
331
  grantSolver.update();
311
332
  }
312
333
  }
313
- if (looped === true && this.enabled.physics) {
314
- if (physics && this.configuration.resetPhysicsOnLoop)
315
- physics.reset();
316
- objects.looped = false;
317
- }
318
- if (physics && this.enabled.physics && !this.sharedPhysics) {
319
- this.onBeforePhysics(mesh);
320
- physics.update(delta);
321
- }
322
- },
323
- _animateCamera: function(camera, delta) {
324
- const mixer = this.objects.get(camera).mixer;
325
- if (mixer && this.enabled.cameraAnimation) {
326
- mixer.update(delta);
327
- camera.updateProjectionMatrix();
328
- camera.up.set(0, 1, 0);
329
- camera.up.applyQuaternion(camera.quaternion);
330
- camera.lookAt(this.cameraTarget.position);
334
+ }
335
+ if (looped === true && this.enabled.physics) {
336
+ if (physics && this.configuration.resetPhysicsOnLoop)
337
+ physics.reset();
338
+ objects.looped = false;
339
+ }
340
+ if (physics && this.enabled.physics && !this.sharedPhysics) {
341
+ this.onBeforePhysics(mesh);
342
+ physics.update(delta);
343
+ }
344
+ }
345
+ // Sort bones in order by 1. transformationClass and 2. bone index.
346
+ // In PMX animation system, bone transformations should be processed
347
+ // in this order.
348
+ _sortBoneDataArray(boneDataArray) {
349
+ return boneDataArray.sort(function(a, b) {
350
+ if (a.transformationClass !== b.transformationClass) {
351
+ return a.transformationClass - b.transformationClass;
352
+ } else {
353
+ return a.index - b.index;
331
354
  }
332
- },
333
- _optimizeIK: function(mesh, physicsEnabled) {
334
- const iks = mesh.geometry.userData.MMD.iks;
335
- const bones = mesh.geometry.userData.MMD.bones;
336
- for (let i = 0, il = iks.length; i < il; i++) {
337
- const ik = iks[i];
338
- const links = ik.links;
339
- for (let j = 0, jl = links.length; j < jl; j++) {
340
- const link = links[j];
341
- if (physicsEnabled === true) {
342
- link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;
343
- } else {
344
- link.enabled = true;
345
- }
355
+ });
356
+ }
357
+ // PMX Animation system is a bit too complex and doesn't great match to
358
+ // Three.js Animation system. This method attempts to simulate it as much as
359
+ // possible but doesn't perfectly simulate.
360
+ // This method is more costly than the regular one so
361
+ // you are recommended to set constructor parameter "pmxAnimation: true"
362
+ // only if your PMX model animation doesn't work well.
363
+ // If you need better method you would be required to write your own.
364
+ _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) {
365
+ _quaternionIndex = 0;
366
+ _grantResultMap.clear();
367
+ for (let i = 0, il = sortedBonesData.length; i < il; i++) {
368
+ updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver);
369
+ }
370
+ mesh.updateMatrixWorld(true);
371
+ return this;
372
+ }
373
+ _animateCamera(camera, delta) {
374
+ const mixer = this.objects.get(camera).mixer;
375
+ if (mixer && this.enabled.cameraAnimation) {
376
+ mixer.update(delta);
377
+ camera.updateProjectionMatrix();
378
+ camera.up.set(0, 1, 0);
379
+ camera.up.applyQuaternion(camera.quaternion);
380
+ camera.lookAt(this.cameraTarget.position);
381
+ }
382
+ }
383
+ _optimizeIK(mesh, physicsEnabled) {
384
+ const iks = mesh.geometry.userData.MMD.iks;
385
+ const bones = mesh.geometry.userData.MMD.bones;
386
+ for (let i = 0, il = iks.length; i < il; i++) {
387
+ const ik = iks[i];
388
+ const links = ik.links;
389
+ for (let j = 0, jl = links.length; j < jl; j++) {
390
+ const link = links[j];
391
+ if (physicsEnabled === true) {
392
+ link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;
393
+ } else {
394
+ link.enabled = true;
346
395
  }
347
396
  }
348
- },
349
- _createCCDIKSolver: function(mesh) {
350
- if (CCDIKSolver.CCDIKSolver === void 0) {
351
- throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver.");
352
- }
353
- return new CCDIKSolver.CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);
354
- },
355
- _createMMDPhysics: function(mesh, params) {
356
- if (MMDPhysics.MMDPhysics === void 0) {
357
- throw new Error("THREE.MMDPhysics: Import MMDPhysics.");
397
+ }
398
+ }
399
+ _createCCDIKSolver(mesh) {
400
+ if (CCDIKSolver.CCDIKSolver === void 0) {
401
+ throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver.");
402
+ }
403
+ return new CCDIKSolver.CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);
404
+ }
405
+ _createMMDPhysics(mesh, params) {
406
+ if (MMDPhysics.MMDPhysics === void 0) {
407
+ throw new Error("THREE.MMDPhysics: Import MMDPhysics.");
408
+ }
409
+ return new MMDPhysics.MMDPhysics(mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params);
410
+ }
411
+ /*
412
+ * Detects the longest duration and then sets it to them to sync.
413
+ * TODO: Not to access private properties ( ._actions and ._clip )
414
+ */
415
+ _syncDuration() {
416
+ let max = 0;
417
+ const objects = this.objects;
418
+ const meshes = this.meshes;
419
+ const camera = this.camera;
420
+ const audioManager = this.audioManager;
421
+ for (let i = 0, il = meshes.length; i < il; i++) {
422
+ const mixer = this.objects.get(meshes[i]).mixer;
423
+ if (mixer === void 0)
424
+ continue;
425
+ for (let j = 0; j < mixer._actions.length; j++) {
426
+ const clip = mixer._actions[j]._clip;
427
+ if (!objects.has(clip)) {
428
+ objects.set(clip, {
429
+ duration: clip.duration
430
+ });
431
+ }
432
+ max = Math.max(max, objects.get(clip).duration);
358
433
  }
359
- return new MMDPhysics.MMDPhysics(
360
- mesh,
361
- mesh.geometry.userData.MMD.rigidBodies,
362
- mesh.geometry.userData.MMD.constraints,
363
- params
364
- );
365
- },
366
- /*
367
- * Detects the longest duration and then sets it to them to sync.
368
- * TODO: Not to access private properties ( ._actions and ._clip )
369
- */
370
- _syncDuration: function() {
371
- let max = 0;
372
- const objects = this.objects;
373
- const meshes = this.meshes;
374
- const camera = this.camera;
375
- const audioManager = this.audioManager;
376
- for (let i = 0, il = meshes.length; i < il; i++) {
377
- var mixer = this.objects.get(meshes[i]).mixer;
378
- if (mixer === void 0)
379
- continue;
380
- for (let j = 0; j < mixer._actions.length; j++) {
381
- var clip = mixer._actions[j]._clip;
434
+ }
435
+ if (camera !== null) {
436
+ const mixer = this.objects.get(camera).mixer;
437
+ if (mixer !== void 0) {
438
+ for (let i = 0, il = mixer._actions.length; i < il; i++) {
439
+ const clip = mixer._actions[i]._clip;
382
440
  if (!objects.has(clip)) {
383
441
  objects.set(clip, {
384
442
  duration: clip.duration
@@ -387,128 +445,162 @@ const MMDAnimationHelper = (() => {
387
445
  max = Math.max(max, objects.get(clip).duration);
388
446
  }
389
447
  }
390
- if (camera !== null) {
391
- var mixer = this.objects.get(camera).mixer;
392
- if (mixer !== void 0) {
393
- for (let i = 0, il = mixer._actions.length; i < il; i++) {
394
- var clip = mixer._actions[i]._clip;
395
- if (!objects.has(clip)) {
396
- objects.set(clip, {
397
- duration: clip.duration
398
- });
399
- }
400
- max = Math.max(max, objects.get(clip).duration);
401
- }
402
- }
403
- }
404
- if (audioManager !== null) {
405
- max = Math.max(max, objects.get(audioManager).duration);
406
- }
407
- max += this.configuration.afterglow;
408
- for (let i = 0, il = this.meshes.length; i < il; i++) {
409
- var mixer = this.objects.get(this.meshes[i]).mixer;
410
- if (mixer === void 0)
411
- continue;
412
- for (let j = 0, jl = mixer._actions.length; j < jl; j++) {
413
- mixer._actions[j]._clip.duration = max;
414
- }
448
+ }
449
+ if (audioManager !== null) {
450
+ max = Math.max(max, objects.get(audioManager).duration);
451
+ }
452
+ max += this.configuration.afterglow;
453
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
454
+ const mixer = this.objects.get(this.meshes[i]).mixer;
455
+ if (mixer === void 0)
456
+ continue;
457
+ for (let j = 0, jl = mixer._actions.length; j < jl; j++) {
458
+ mixer._actions[j]._clip.duration = max;
415
459
  }
416
- if (camera !== null) {
417
- var mixer = this.objects.get(camera).mixer;
418
- if (mixer !== void 0) {
419
- for (let i = 0, il = mixer._actions.length; i < il; i++) {
420
- mixer._actions[i]._clip.duration = max;
421
- }
460
+ }
461
+ if (camera !== null) {
462
+ const mixer = this.objects.get(camera).mixer;
463
+ if (mixer !== void 0) {
464
+ for (let i = 0, il = mixer._actions.length; i < il; i++) {
465
+ mixer._actions[i]._clip.duration = max;
422
466
  }
423
467
  }
424
- if (audioManager !== null) {
425
- audioManager.duration = max;
426
- }
427
- },
428
- // workaround
429
- _updatePropertyMixersBuffer: function(mesh) {
430
- const mixer = this.objects.get(mesh).mixer;
431
- const propertyMixers = mixer._bindings;
432
- const accuIndex = mixer._accuIndex;
433
- for (let i = 0, il = propertyMixers.length; i < il; i++) {
434
- const propertyMixer = propertyMixers[i];
435
- const buffer = propertyMixer.buffer;
436
- const stride = propertyMixer.valueSize;
437
- const offset = (accuIndex + 1) * stride;
438
- propertyMixer.binding.getValue(buffer, offset);
439
- }
440
- },
441
- /*
442
- * Avoiding these two issues by restore/save bones before/after mixer animation.
443
- *
444
- * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.
445
- * Calculating IK, Grant, and Physics after mixer animation can break
446
- * the cache coherency.
447
- *
448
- * 2. Applying Grant two or more times without reset the posing breaks model.
449
- */
450
- _saveBones: function(mesh) {
451
- const objects = this.objects.get(mesh);
452
- const bones = mesh.skeleton.bones;
453
- let backupBones = objects.backupBones;
454
- if (backupBones === void 0) {
455
- backupBones = new Float32Array(bones.length * 7);
456
- objects.backupBones = backupBones;
457
- }
458
- for (let i = 0, il = bones.length; i < il; i++) {
459
- const bone = bones[i];
460
- bone.position.toArray(backupBones, i * 7);
461
- bone.quaternion.toArray(backupBones, i * 7 + 3);
462
- }
463
- },
464
- _restoreBones: function(mesh) {
465
- const objects = this.objects.get(mesh);
466
- const backupBones = objects.backupBones;
467
- if (backupBones === void 0)
468
- return;
469
- const bones = mesh.skeleton.bones;
470
- for (let i = 0, il = bones.length; i < il; i++) {
471
- const bone = bones[i];
472
- bone.position.fromArray(backupBones, i * 7);
473
- bone.quaternion.fromArray(backupBones, i * 7 + 3);
474
- }
475
- },
476
- // experimental
477
- _getMasterPhysics: function() {
478
- if (this.masterPhysics !== null)
468
+ }
469
+ if (audioManager !== null) {
470
+ audioManager.duration = max;
471
+ }
472
+ }
473
+ // workaround
474
+ _updatePropertyMixersBuffer(mesh) {
475
+ const mixer = this.objects.get(mesh).mixer;
476
+ const propertyMixers = mixer._bindings;
477
+ const accuIndex = mixer._accuIndex;
478
+ for (let i = 0, il = propertyMixers.length; i < il; i++) {
479
+ const propertyMixer = propertyMixers[i];
480
+ const buffer = propertyMixer.buffer;
481
+ const stride = propertyMixer.valueSize;
482
+ const offset = (accuIndex + 1) * stride;
483
+ propertyMixer.binding.getValue(buffer, offset);
484
+ }
485
+ }
486
+ /*
487
+ * Avoiding these two issues by restore/save bones before/after mixer animation.
488
+ *
489
+ * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.
490
+ * Calculating IK, Grant, and Physics after mixer animation can break
491
+ * the cache coherency.
492
+ *
493
+ * 2. Applying Grant two or more times without reset the posing breaks model.
494
+ */
495
+ _saveBones(mesh) {
496
+ const objects = this.objects.get(mesh);
497
+ const bones = mesh.skeleton.bones;
498
+ let backupBones = objects.backupBones;
499
+ if (backupBones === void 0) {
500
+ backupBones = new Float32Array(bones.length * 7);
501
+ objects.backupBones = backupBones;
502
+ }
503
+ for (let i = 0, il = bones.length; i < il; i++) {
504
+ const bone = bones[i];
505
+ bone.position.toArray(backupBones, i * 7);
506
+ bone.quaternion.toArray(backupBones, i * 7 + 3);
507
+ }
508
+ }
509
+ _restoreBones(mesh) {
510
+ const objects = this.objects.get(mesh);
511
+ const backupBones = objects.backupBones;
512
+ if (backupBones === void 0)
513
+ return;
514
+ const bones = mesh.skeleton.bones;
515
+ for (let i = 0, il = bones.length; i < il; i++) {
516
+ const bone = bones[i];
517
+ bone.position.fromArray(backupBones, i * 7);
518
+ bone.quaternion.fromArray(backupBones, i * 7 + 3);
519
+ }
520
+ }
521
+ // experimental
522
+ _getMasterPhysics() {
523
+ if (this.masterPhysics !== null)
524
+ return this.masterPhysics;
525
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
526
+ const physics = this.meshes[i].physics;
527
+ if (physics !== void 0 && physics !== null) {
528
+ this.masterPhysics = physics;
479
529
  return this.masterPhysics;
480
- for (let i = 0, il = this.meshes.length; i < il; i++) {
481
- const physics = this.meshes[i].physics;
482
- if (physics !== void 0 && physics !== null) {
483
- this.masterPhysics = physics;
484
- return this.masterPhysics;
485
- }
486
530
  }
487
- return null;
488
- },
489
- _updateSharedPhysics: function(delta) {
490
- if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)
491
- return;
492
- const physics = this._getMasterPhysics();
493
- if (physics === null)
494
- return;
495
- for (let i = 0, il = this.meshes.length; i < il; i++) {
496
- var p = this.meshes[i].physics;
497
- if (p !== null && p !== void 0) {
498
- p.updateRigidBodies();
499
- }
531
+ }
532
+ return null;
533
+ }
534
+ _updateSharedPhysics(delta) {
535
+ if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)
536
+ return;
537
+ const physics = this._getMasterPhysics();
538
+ if (physics === null)
539
+ return;
540
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
541
+ const p = this.meshes[i].physics;
542
+ if (p !== null && p !== void 0) {
543
+ p.updateRigidBodies();
500
544
  }
501
- physics.stepSimulation(delta);
502
- for (let i = 0, il = this.meshes.length; i < il; i++) {
503
- var p = this.meshes[i].physics;
504
- if (p !== null && p !== void 0) {
505
- p.updateBones();
506
- }
545
+ }
546
+ physics.stepSimulation(delta);
547
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
548
+ const p = this.meshes[i].physics;
549
+ if (p !== null && p !== void 0) {
550
+ p.updateBones();
551
+ }
552
+ }
553
+ }
554
+ }
555
+ const _quaternions = [];
556
+ let _quaternionIndex = 0;
557
+ function getQuaternion() {
558
+ if (_quaternionIndex >= _quaternions.length) {
559
+ _quaternions.push(new THREE.Quaternion());
560
+ }
561
+ return _quaternions[_quaternionIndex++];
562
+ }
563
+ const _grantResultMap = /* @__PURE__ */ new Map();
564
+ function updateOne(mesh, boneIndex, ikSolver, grantSolver) {
565
+ const bones = mesh.skeleton.bones;
566
+ const bonesData = mesh.geometry.userData.MMD.bones;
567
+ const boneData = bonesData[boneIndex];
568
+ const bone = bones[boneIndex];
569
+ if (_grantResultMap.has(boneIndex))
570
+ return;
571
+ const quaternion = getQuaternion();
572
+ _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion));
573
+ if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) {
574
+ const parentIndex = boneData.grant.parentIndex;
575
+ const ratio = boneData.grant.ratio;
576
+ if (!_grantResultMap.has(parentIndex)) {
577
+ updateOne(mesh, parentIndex, ikSolver, grantSolver);
578
+ }
579
+ grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio);
580
+ }
581
+ if (ikSolver && boneData.ik) {
582
+ mesh.updateMatrixWorld(true);
583
+ ikSolver.updateOne(boneData.ik);
584
+ const links = boneData.ik.links;
585
+ for (let i = 0, il = links.length; i < il; i++) {
586
+ const link = links[i];
587
+ if (link.enabled === false)
588
+ continue;
589
+ const linkIndex = link.index;
590
+ if (_grantResultMap.has(linkIndex)) {
591
+ _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion));
507
592
  }
508
593
  }
509
- };
510
- function AudioManager(audio, params) {
511
- params = params || {};
594
+ }
595
+ quaternion.copy(bone.quaternion);
596
+ }
597
+ class AudioManager {
598
+ /**
599
+ * @param {THREE.Audio} audio
600
+ * @param {Object} params - (optional)
601
+ * @param {Nuumber} params.delayTime
602
+ */
603
+ constructor(audio, params = {}) {
512
604
  this.audio = audio;
513
605
  this.elapsedTime = 0;
514
606
  this.currentTime = 0;
@@ -516,75 +608,81 @@ const MMDAnimationHelper = (() => {
516
608
  this.audioDuration = this.audio.buffer.duration;
517
609
  this.duration = this.audioDuration + this.delayTime;
518
610
  }
519
- AudioManager.prototype = {
520
- constructor: AudioManager,
521
- /**
522
- * @param {Number} delta
523
- * @return {AudioManager}
524
- */
525
- control: function(delta) {
526
- this.elapsed += delta;
527
- this.currentTime += delta;
528
- if (this._shouldStopAudio())
529
- this.audio.stop();
530
- if (this._shouldStartAudio())
531
- this.audio.play();
532
- return this;
533
- },
534
- // private methods
535
- _shouldStartAudio: function() {
536
- if (this.audio.isPlaying)
537
- return false;
538
- while (this.currentTime >= this.duration) {
539
- this.currentTime -= this.duration;
540
- }
541
- if (this.currentTime < this.delayTime)
542
- return false;
543
- if (this.currentTime - this.delayTime > this.audioDuration)
544
- return false;
545
- return true;
546
- },
547
- _shouldStopAudio: function() {
548
- return this.audio.isPlaying && this.currentTime >= this.duration;
549
- }
550
- };
551
- function GrantSolver(mesh, grants) {
611
+ /**
612
+ * @param {Number} delta
613
+ * @return {AudioManager}
614
+ */
615
+ control(delta) {
616
+ this.elapsed += delta;
617
+ this.currentTime += delta;
618
+ if (this._shouldStopAudio())
619
+ this.audio.stop();
620
+ if (this._shouldStartAudio())
621
+ this.audio.play();
622
+ return this;
623
+ }
624
+ // private methods
625
+ _shouldStartAudio() {
626
+ if (this.audio.isPlaying)
627
+ return false;
628
+ while (this.currentTime >= this.duration) {
629
+ this.currentTime -= this.duration;
630
+ }
631
+ if (this.currentTime < this.delayTime)
632
+ return false;
633
+ if (this.currentTime - this.delayTime > this.audioDuration)
634
+ return false;
635
+ return true;
636
+ }
637
+ _shouldStopAudio() {
638
+ return this.audio.isPlaying && this.currentTime >= this.duration;
639
+ }
640
+ }
641
+ const _q = /* @__PURE__ */ new THREE.Quaternion();
642
+ class GrantSolver {
643
+ constructor(mesh, grants = []) {
552
644
  this.mesh = mesh;
553
- this.grants = grants || [];
554
- }
555
- GrantSolver.prototype = {
556
- constructor: GrantSolver,
557
- /**
558
- * @return {GrantSolver}
559
- */
560
- update: (() => {
561
- const quaternion = new THREE.Quaternion();
562
- return function() {
563
- const bones = this.mesh.skeleton.bones;
564
- const grants = this.grants;
565
- for (let i = 0, il = grants.length; i < il; i++) {
566
- const grant = grants[i];
567
- const bone = bones[grant.index];
568
- const parentBone = bones[grant.parentIndex];
569
- if (grant.isLocal) {
570
- if (grant.affectPosition) {
571
- }
572
- if (grant.affectRotation) {
573
- }
574
- } else {
575
- if (grant.affectPosition) {
576
- }
577
- if (grant.affectRotation) {
578
- quaternion.set(0, 0, 0, 1);
579
- quaternion.slerp(parentBone.quaternion, grant.ratio);
580
- bone.quaternion.multiply(quaternion);
581
- }
582
- }
583
- }
584
- return this;
585
- };
586
- })()
587
- };
588
- return MMDAnimationHelper2;
589
- })();
645
+ this.grants = grants;
646
+ }
647
+ /**
648
+ * Solve all the grant bones
649
+ * @return {GrantSolver}
650
+ */
651
+ update() {
652
+ const grants = this.grants;
653
+ for (let i = 0, il = grants.length; i < il; i++) {
654
+ this.updateOne(grants[i]);
655
+ }
656
+ return this;
657
+ }
658
+ /**
659
+ * Solve a grant bone
660
+ * @param {Object} grant - grant parameter
661
+ * @return {GrantSolver}
662
+ */
663
+ updateOne(grant) {
664
+ const bones = this.mesh.skeleton.bones;
665
+ const bone = bones[grant.index];
666
+ const parentBone = bones[grant.parentIndex];
667
+ if (grant.isLocal) {
668
+ if (grant.affectPosition) {
669
+ }
670
+ if (grant.affectRotation) {
671
+ }
672
+ } else {
673
+ if (grant.affectPosition) {
674
+ }
675
+ if (grant.affectRotation) {
676
+ this.addGrantRotation(bone, parentBone.quaternion, grant.ratio);
677
+ }
678
+ }
679
+ return this;
680
+ }
681
+ addGrantRotation(bone, q, ratio) {
682
+ _q.set(0, 0, 0, 1);
683
+ _q.slerp(q, ratio);
684
+ bone.quaternion.multiply(_q);
685
+ return this;
686
+ }
687
+ }
590
688
  exports.MMDAnimationHelper = MMDAnimationHelper;