three-stdlib 2.22.9 → 2.22.10

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.
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
@@ -1,9 +1,14 @@
1
1
  import { Object3D, Vector3, Quaternion, AnimationMixer } from "three";
2
2
  import { CCDIKSolver } from "./CCDIKSolver.mjs";
3
3
  import { MMDPhysics } from "./MMDPhysics.mjs";
4
- const MMDAnimationHelper = (() => {
5
- function MMDAnimationHelper2(params) {
6
- params = params || {};
4
+ class MMDAnimationHelper {
5
+ /**
6
+ * @param {Object} params - (optional)
7
+ * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.
8
+ * @param {Number} params.afterglow - Default is 0.0.
9
+ * @param {boolean} params.resetPhysicsOnLoop - Default is true.
10
+ */
11
+ constructor(params = {}) {
7
12
  this.meshes = [];
8
13
  this.camera = null;
9
14
  this.cameraTarget = new Object3D();
@@ -14,7 +19,8 @@ const MMDAnimationHelper = (() => {
14
19
  this.configuration = {
15
20
  sync: params.sync !== void 0 ? params.sync : true,
16
21
  afterglow: params.afterglow !== void 0 ? params.afterglow : 0,
17
- resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true
22
+ resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true,
23
+ pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false
18
24
  };
19
25
  this.enabled = {
20
26
  animation: true,
@@ -23,283 +29,298 @@ const MMDAnimationHelper = (() => {
23
29
  physics: true,
24
30
  cameraAnimation: true
25
31
  };
26
- this.onBeforePhysics = () => {
32
+ this.onBeforePhysics = function() {
27
33
  };
28
34
  this.sharedPhysics = false;
29
35
  this.masterPhysics = null;
30
36
  }
31
- MMDAnimationHelper2.prototype = {
32
- constructor: MMDAnimationHelper2,
33
- /**
34
- * Adds an Three.js Object to helper and setups animation.
35
- * The anmation durations of added objects are synched
36
- * if this.configuration.sync is true.
37
- *
38
- * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
39
- * @param {Object} params - (optional)
40
- * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.
41
- * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.
42
- * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.
43
- * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.
44
- * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.
45
- * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).
46
- * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
47
- * @return {MMDAnimationHelper}
48
- */
49
- add: function(object, params) {
50
- params = params || {};
51
- if (object.isSkinnedMesh) {
52
- this._addMesh(object, params);
53
- } else if (object.isCamera) {
54
- this._setupCamera(object, params);
55
- } else if (object.type === "Audio") {
56
- this._setupAudio(object, params);
57
- } else {
58
- throw new Error(
59
- "THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
60
- );
61
- }
62
- if (this.configuration.sync)
63
- this._syncDuration();
64
- return this;
65
- },
66
- /**
67
- * Removes an Three.js Object from helper.
68
- *
69
- * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
70
- * @return {MMDAnimationHelper}
71
- */
72
- remove: function(object) {
73
- if (object.isSkinnedMesh) {
74
- this._removeMesh(object);
75
- } else if (object.isCamera) {
76
- this._clearCamera(object);
77
- } else if (object.type === "Audio") {
78
- this._clearAudio(object);
79
- } else {
80
- throw new Error(
81
- "THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
82
- );
83
- }
84
- if (this.configuration.sync)
85
- this._syncDuration();
86
- return this;
87
- },
88
- /**
89
- * Updates the animation.
90
- *
91
- * @param {Number} delta
92
- * @return {MMDAnimationHelper}
93
- */
94
- update: function(delta) {
95
- if (this.audioManager !== null)
96
- this.audioManager.control(delta);
97
- for (let i = 0; i < this.meshes.length; i++) {
98
- this._animateMesh(this.meshes[i], delta);
99
- }
100
- if (this.sharedPhysics)
101
- this._updateSharedPhysics(delta);
102
- if (this.camera !== null)
103
- this._animateCamera(this.camera, delta);
104
- return this;
105
- },
106
- /**
107
- * Changes the pose of SkinnedMesh as VPD specifies.
108
- *
109
- * @param {THREE.SkinnedMesh} mesh
110
- * @param {Object} vpd - VPD content parsed MMDParser
111
- * @param {Object} params - (optional)
112
- * @param {boolean} params.resetPose - Default is true.
113
- * @param {boolean} params.ik - Default is true.
114
- * @param {boolean} params.grant - Default is true.
115
- * @return {MMDAnimationHelper}
116
- */
117
- pose: function(mesh, vpd, params) {
118
- params = params || {};
119
- if (params.resetPose !== false)
120
- mesh.pose();
121
- const bones = mesh.skeleton.bones;
122
- const boneParams = vpd.bones;
123
- const boneNameDictionary = {};
124
- for (let i = 0, il = bones.length; i < il; i++) {
125
- boneNameDictionary[bones[i].name] = i;
126
- }
127
- const vector = new Vector3();
128
- const quaternion = new Quaternion();
129
- for (let i = 0, il = boneParams.length; i < il; i++) {
130
- const boneParam = boneParams[i];
131
- const boneIndex = boneNameDictionary[boneParam.name];
132
- if (boneIndex === void 0)
133
- continue;
134
- const bone = bones[boneIndex];
135
- bone.position.add(vector.fromArray(boneParam.translation));
136
- bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion));
137
- }
138
- mesh.updateMatrixWorld(true);
37
+ /**
38
+ * Adds an Three.js Object to helper and setups animation.
39
+ * The anmation durations of added objects are synched
40
+ * if this.configuration.sync is true.
41
+ *
42
+ * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
43
+ * @param {Object} params - (optional)
44
+ * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.
45
+ * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.
46
+ * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.
47
+ * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.
48
+ * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.
49
+ * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).
50
+ * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
51
+ * @return {MMDAnimationHelper}
52
+ */
53
+ add(object, params = {}) {
54
+ if (object.isSkinnedMesh) {
55
+ this._addMesh(object, params);
56
+ } else if (object.isCamera) {
57
+ this._setupCamera(object, params);
58
+ } else if (object.type === "Audio") {
59
+ this._setupAudio(object, params);
60
+ } else {
61
+ throw new Error(
62
+ "THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
63
+ );
64
+ }
65
+ if (this.configuration.sync)
66
+ this._syncDuration();
67
+ return this;
68
+ }
69
+ /**
70
+ * Removes an Three.js Object from helper.
71
+ *
72
+ * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
73
+ * @return {MMDAnimationHelper}
74
+ */
75
+ remove(object) {
76
+ if (object.isSkinnedMesh) {
77
+ this._removeMesh(object);
78
+ } else if (object.isCamera) {
79
+ this._clearCamera(object);
80
+ } else if (object.type === "Audio") {
81
+ this._clearAudio(object);
82
+ } else {
83
+ throw new Error(
84
+ "THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
85
+ );
86
+ }
87
+ if (this.configuration.sync)
88
+ this._syncDuration();
89
+ return this;
90
+ }
91
+ /**
92
+ * Updates the animation.
93
+ *
94
+ * @param {Number} delta
95
+ * @return {MMDAnimationHelper}
96
+ */
97
+ update(delta) {
98
+ if (this.audioManager !== null)
99
+ this.audioManager.control(delta);
100
+ for (let i = 0; i < this.meshes.length; i++) {
101
+ this._animateMesh(this.meshes[i], delta);
102
+ }
103
+ if (this.sharedPhysics)
104
+ this._updateSharedPhysics(delta);
105
+ if (this.camera !== null)
106
+ this._animateCamera(this.camera, delta);
107
+ return this;
108
+ }
109
+ /**
110
+ * Changes the pose of SkinnedMesh as VPD specifies.
111
+ *
112
+ * @param {THREE.SkinnedMesh} mesh
113
+ * @param {Object} vpd - VPD content parsed MMDParser
114
+ * @param {Object} params - (optional)
115
+ * @param {boolean} params.resetPose - Default is true.
116
+ * @param {boolean} params.ik - Default is true.
117
+ * @param {boolean} params.grant - Default is true.
118
+ * @return {MMDAnimationHelper}
119
+ */
120
+ pose(mesh, vpd, 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 Vector3();
130
+ const quaternion = new 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);
141
+ if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
142
+ const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
143
+ const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null;
144
+ const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null;
145
+ this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver);
146
+ } else {
139
147
  if (params.ik !== false) {
140
- this._createCCDIKSolver(mesh).update(params.saveOriginalBonesBeforeIK);
148
+ this._createCCDIKSolver(mesh).update();
141
149
  }
142
150
  if (params.grant !== false) {
143
151
  this.createGrantSolver(mesh).update();
144
152
  }
145
- return this;
146
- },
147
- /**
148
- * Enabes/Disables an animation feature.
149
- *
150
- * @param {string} key
151
- * @param {boolean} enabled
152
- * @return {MMDAnimationHelper}
153
- */
154
- enable: function(key, enabled) {
155
- if (this.enabled[key] === void 0) {
156
- throw new Error(`THREE.MMDAnimationHelper.enable: unknown key ${key}`);
157
- }
158
- this.enabled[key] = enabled;
159
- if (key === "physics") {
160
- for (let i = 0, il = this.meshes.length; i < il; i++) {
161
- this._optimizeIK(this.meshes[i], enabled);
162
- }
163
- }
164
- return this;
165
- },
166
- /**
167
- * Creates an GrantSolver instance.
168
- *
169
- * @param {THREE.SkinnedMesh} mesh
170
- * @return {GrantSolver}
171
- */
172
- createGrantSolver: function(mesh) {
173
- return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);
174
- },
175
- // private methods
176
- _addMesh: function(mesh, params) {
177
- if (this.meshes.indexOf(mesh) >= 0) {
178
- throw new Error(`THREE.MMDAnimationHelper._addMesh: SkinnedMesh '${mesh.name}' has already been added.`);
179
- }
180
- this.meshes.push(mesh);
181
- this.objects.set(mesh, { looped: false });
182
- this._setupMeshAnimation(mesh, params.animation);
183
- if (params.physics !== false) {
184
- this._setupMeshPhysics(mesh, params);
185
- }
186
- return this;
187
- },
188
- _setupCamera: function(camera, params) {
189
- if (this.camera === camera) {
190
- throw new Error(`THREE.MMDAnimationHelper._setupCamera: Camera '${camera.name}' has already been set.`);
191
- }
192
- if (this.camera)
193
- this.clearCamera(this.camera);
194
- this.camera = camera;
195
- camera.add(this.cameraTarget);
196
- this.objects.set(camera, {});
197
- if (params.animation !== void 0) {
198
- this._setupCameraAnimation(camera, params.animation);
199
- }
200
- return this;
201
- },
202
- _setupAudio: function(audio, params) {
203
- if (this.audio === audio) {
204
- throw new Error(`THREE.MMDAnimationHelper._setupAudio: Audio '${audio.name}' has already been set.`);
205
- }
206
- if (this.audio)
207
- this.clearAudio(this.audio);
208
- this.audio = audio;
209
- this.audioManager = new AudioManager(audio, params);
210
- this.objects.set(this.audioManager, {
211
- duration: this.audioManager.duration
212
- });
213
- return this;
214
- },
215
- _removeMesh: function(mesh) {
216
- let found = false;
217
- let writeIndex = 0;
153
+ }
154
+ return this;
155
+ }
156
+ /**
157
+ * Enabes/Disables an animation feature.
158
+ *
159
+ * @param {string} key
160
+ * @param {boolean} enabled
161
+ * @return {MMDAnimationHelper}
162
+ */
163
+ enable(key, enabled) {
164
+ if (this.enabled[key] === void 0) {
165
+ throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key);
166
+ }
167
+ this.enabled[key] = enabled;
168
+ if (key === "physics") {
218
169
  for (let i = 0, il = this.meshes.length; i < il; i++) {
219
- if (this.meshes[i] === mesh) {
220
- this.objects.delete(mesh);
221
- found = true;
222
- continue;
223
- }
224
- this.meshes[writeIndex++] = this.meshes[i];
225
- }
226
- if (!found) {
227
- throw new Error(`THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '${mesh.name}' has not been added yet.`);
228
- }
229
- this.meshes.length = writeIndex;
230
- return this;
231
- },
232
- _clearCamera: function(camera) {
233
- if (camera !== this.camera) {
234
- throw new Error(`THREE.MMDAnimationHelper._clearCamera: Camera '${camera.name}' has not been set yet.`);
235
- }
236
- this.camera.remove(this.cameraTarget);
237
- this.objects.delete(this.camera);
238
- this.camera = null;
239
- return this;
240
- },
241
- _clearAudio: function(audio) {
242
- if (audio !== this.audio) {
243
- throw new Error(`THREE.MMDAnimationHelper._clearAudio: Audio '${audio.name}' has not been set yet.`);
170
+ this._optimizeIK(this.meshes[i], enabled);
244
171
  }
245
- this.objects.delete(this.audioManager);
246
- this.audio = null;
247
- this.audioManager = null;
248
- return this;
249
- },
250
- _setupMeshAnimation: function(mesh, animation) {
251
- const objects = this.objects.get(mesh);
252
- if (animation !== void 0) {
253
- const animations = Array.isArray(animation) ? animation : [animation];
254
- objects.mixer = new AnimationMixer(mesh);
255
- for (let i = 0, il = animations.length; i < il; i++) {
256
- objects.mixer.clipAction(animations[i]).play();
257
- }
258
- objects.mixer.addEventListener("loop", (event) => {
259
- const tracks = event.action._clip.tracks;
260
- if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones")
261
- return;
262
- objects.looped = true;
263
- });
264
- }
265
- objects.ikSolver = this._createCCDIKSolver(mesh);
266
- objects.grantSolver = this.createGrantSolver(mesh);
267
- return this;
268
- },
269
- _setupCameraAnimation: function(camera, animation) {
172
+ }
173
+ return this;
174
+ }
175
+ /**
176
+ * Creates an GrantSolver instance.
177
+ *
178
+ * @param {THREE.SkinnedMesh} mesh
179
+ * @return {GrantSolver}
180
+ */
181
+ createGrantSolver(mesh) {
182
+ return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);
183
+ }
184
+ // private methods
185
+ _addMesh(mesh, params) {
186
+ if (this.meshes.indexOf(mesh) >= 0) {
187
+ throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added.");
188
+ }
189
+ this.meshes.push(mesh);
190
+ this.objects.set(mesh, { looped: false });
191
+ this._setupMeshAnimation(mesh, params.animation);
192
+ if (params.physics !== false) {
193
+ this._setupMeshPhysics(mesh, params);
194
+ }
195
+ return this;
196
+ }
197
+ _setupCamera(camera, params) {
198
+ if (this.camera === camera) {
199
+ throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set.");
200
+ }
201
+ if (this.camera)
202
+ this.clearCamera(this.camera);
203
+ this.camera = camera;
204
+ camera.add(this.cameraTarget);
205
+ this.objects.set(camera, {});
206
+ if (params.animation !== void 0) {
207
+ this._setupCameraAnimation(camera, params.animation);
208
+ }
209
+ return this;
210
+ }
211
+ _setupAudio(audio, params) {
212
+ if (this.audio === audio) {
213
+ throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set.");
214
+ }
215
+ if (this.audio)
216
+ this.clearAudio(this.audio);
217
+ this.audio = audio;
218
+ this.audioManager = new AudioManager(audio, params);
219
+ this.objects.set(this.audioManager, {
220
+ duration: this.audioManager.duration
221
+ });
222
+ return this;
223
+ }
224
+ _removeMesh(mesh) {
225
+ let found = false;
226
+ let writeIndex = 0;
227
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
228
+ if (this.meshes[i] === mesh) {
229
+ this.objects.delete(mesh);
230
+ found = true;
231
+ continue;
232
+ }
233
+ this.meshes[writeIndex++] = this.meshes[i];
234
+ }
235
+ if (!found) {
236
+ throw new Error(
237
+ "THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."
238
+ );
239
+ }
240
+ this.meshes.length = writeIndex;
241
+ return this;
242
+ }
243
+ _clearCamera(camera) {
244
+ if (camera !== this.camera) {
245
+ throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet.");
246
+ }
247
+ this.camera.remove(this.cameraTarget);
248
+ this.objects.delete(this.camera);
249
+ this.camera = null;
250
+ return this;
251
+ }
252
+ _clearAudio(audio) {
253
+ if (audio !== this.audio) {
254
+ throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet.");
255
+ }
256
+ this.objects.delete(this.audioManager);
257
+ this.audio = null;
258
+ this.audioManager = null;
259
+ return this;
260
+ }
261
+ _setupMeshAnimation(mesh, animation) {
262
+ const objects = this.objects.get(mesh);
263
+ if (animation !== void 0) {
270
264
  const animations = Array.isArray(animation) ? animation : [animation];
271
- const objects = this.objects.get(camera);
272
- objects.mixer = new AnimationMixer(camera);
265
+ objects.mixer = new AnimationMixer(mesh);
273
266
  for (let i = 0, il = animations.length; i < il; i++) {
274
267
  objects.mixer.clipAction(animations[i]).play();
275
268
  }
276
- },
277
- _setupMeshPhysics: function(mesh, params) {
278
- const objects = this.objects.get(mesh);
279
- if (params.world === void 0 && this.sharedPhysics) {
280
- const masterPhysics = this._getMasterPhysics();
281
- if (masterPhysics !== null)
282
- world = masterPhysics.world;
283
- }
284
- objects.physics = this._createMMDPhysics(mesh, params);
285
- if (objects.mixer && params.animationWarmup !== false) {
286
- this._animateMesh(mesh, 0);
287
- objects.physics.reset();
288
- }
289
- objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);
290
- this._optimizeIK(mesh, true);
291
- },
292
- _animateMesh: function(mesh, delta) {
293
- const objects = this.objects.get(mesh);
294
- const mixer = objects.mixer;
295
- const ikSolver = objects.ikSolver;
296
- const grantSolver = objects.grantSolver;
297
- const physics = objects.physics;
298
- const looped = objects.looped;
299
- if (mixer && this.enabled.animation) {
300
- this._restoreBones(mesh);
301
- mixer.update(delta);
302
- this._saveBones(mesh);
269
+ objects.mixer.addEventListener("loop", function(event) {
270
+ const tracks = event.action._clip.tracks;
271
+ if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones")
272
+ return;
273
+ objects.looped = true;
274
+ });
275
+ }
276
+ objects.ikSolver = this._createCCDIKSolver(mesh);
277
+ objects.grantSolver = this.createGrantSolver(mesh);
278
+ return this;
279
+ }
280
+ _setupCameraAnimation(camera, animation) {
281
+ const animations = Array.isArray(animation) ? animation : [animation];
282
+ const objects = this.objects.get(camera);
283
+ objects.mixer = new AnimationMixer(camera);
284
+ for (let i = 0, il = animations.length; i < il; i++) {
285
+ objects.mixer.clipAction(animations[i]).play();
286
+ }
287
+ }
288
+ _setupMeshPhysics(mesh, params) {
289
+ const objects = this.objects.get(mesh);
290
+ if (params.world === void 0 && this.sharedPhysics) {
291
+ const masterPhysics = this._getMasterPhysics();
292
+ if (masterPhysics !== null)
293
+ world = masterPhysics.world;
294
+ }
295
+ objects.physics = this._createMMDPhysics(mesh, params);
296
+ if (objects.mixer && params.animationWarmup !== false) {
297
+ this._animateMesh(mesh, 0);
298
+ objects.physics.reset();
299
+ }
300
+ objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);
301
+ this._optimizeIK(mesh, true);
302
+ }
303
+ _animateMesh(mesh, delta) {
304
+ const objects = this.objects.get(mesh);
305
+ const mixer = objects.mixer;
306
+ const ikSolver = objects.ikSolver;
307
+ const grantSolver = objects.grantSolver;
308
+ const physics = objects.physics;
309
+ const looped = objects.looped;
310
+ if (mixer && this.enabled.animation) {
311
+ this._restoreBones(mesh);
312
+ mixer.update(delta);
313
+ this._saveBones(mesh);
314
+ if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
315
+ if (!objects.sortedBonesData)
316
+ objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
317
+ this._animatePMXMesh(
318
+ mesh,
319
+ objects.sortedBonesData,
320
+ ikSolver && this.enabled.ik ? ikSolver : null,
321
+ grantSolver && this.enabled.grant ? grantSolver : null
322
+ );
323
+ } else {
303
324
  if (ikSolver && this.enabled.ik) {
304
325
  mesh.updateMatrixWorld(true);
305
326
  ikSolver.update();
@@ -308,75 +329,112 @@ const MMDAnimationHelper = (() => {
308
329
  grantSolver.update();
309
330
  }
310
331
  }
311
- if (looped === true && this.enabled.physics) {
312
- if (physics && this.configuration.resetPhysicsOnLoop)
313
- physics.reset();
314
- objects.looped = false;
315
- }
316
- if (physics && this.enabled.physics && !this.sharedPhysics) {
317
- this.onBeforePhysics(mesh);
318
- physics.update(delta);
319
- }
320
- },
321
- _animateCamera: function(camera, delta) {
322
- const mixer = this.objects.get(camera).mixer;
323
- if (mixer && this.enabled.cameraAnimation) {
324
- mixer.update(delta);
325
- camera.updateProjectionMatrix();
326
- camera.up.set(0, 1, 0);
327
- camera.up.applyQuaternion(camera.quaternion);
328
- camera.lookAt(this.cameraTarget.position);
332
+ }
333
+ if (looped === true && this.enabled.physics) {
334
+ if (physics && this.configuration.resetPhysicsOnLoop)
335
+ physics.reset();
336
+ objects.looped = false;
337
+ }
338
+ if (physics && this.enabled.physics && !this.sharedPhysics) {
339
+ this.onBeforePhysics(mesh);
340
+ physics.update(delta);
341
+ }
342
+ }
343
+ // Sort bones in order by 1. transformationClass and 2. bone index.
344
+ // In PMX animation system, bone transformations should be processed
345
+ // in this order.
346
+ _sortBoneDataArray(boneDataArray) {
347
+ return boneDataArray.sort(function(a, b) {
348
+ if (a.transformationClass !== b.transformationClass) {
349
+ return a.transformationClass - b.transformationClass;
350
+ } else {
351
+ return a.index - b.index;
329
352
  }
330
- },
331
- _optimizeIK: function(mesh, physicsEnabled) {
332
- const iks = mesh.geometry.userData.MMD.iks;
333
- const bones = mesh.geometry.userData.MMD.bones;
334
- for (let i = 0, il = iks.length; i < il; i++) {
335
- const ik = iks[i];
336
- const links = ik.links;
337
- for (let j = 0, jl = links.length; j < jl; j++) {
338
- const link = links[j];
339
- if (physicsEnabled === true) {
340
- link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;
341
- } else {
342
- link.enabled = true;
343
- }
353
+ });
354
+ }
355
+ // PMX Animation system is a bit too complex and doesn't great match to
356
+ // Three.js Animation system. This method attempts to simulate it as much as
357
+ // possible but doesn't perfectly simulate.
358
+ // This method is more costly than the regular one so
359
+ // you are recommended to set constructor parameter "pmxAnimation: true"
360
+ // only if your PMX model animation doesn't work well.
361
+ // If you need better method you would be required to write your own.
362
+ _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) {
363
+ _quaternionIndex = 0;
364
+ _grantResultMap.clear();
365
+ for (let i = 0, il = sortedBonesData.length; i < il; i++) {
366
+ updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver);
367
+ }
368
+ mesh.updateMatrixWorld(true);
369
+ return this;
370
+ }
371
+ _animateCamera(camera, delta) {
372
+ const mixer = this.objects.get(camera).mixer;
373
+ if (mixer && this.enabled.cameraAnimation) {
374
+ mixer.update(delta);
375
+ camera.updateProjectionMatrix();
376
+ camera.up.set(0, 1, 0);
377
+ camera.up.applyQuaternion(camera.quaternion);
378
+ camera.lookAt(this.cameraTarget.position);
379
+ }
380
+ }
381
+ _optimizeIK(mesh, physicsEnabled) {
382
+ const iks = mesh.geometry.userData.MMD.iks;
383
+ const bones = mesh.geometry.userData.MMD.bones;
384
+ for (let i = 0, il = iks.length; i < il; i++) {
385
+ const ik = iks[i];
386
+ const links = ik.links;
387
+ for (let j = 0, jl = links.length; j < jl; j++) {
388
+ const link = links[j];
389
+ if (physicsEnabled === true) {
390
+ link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;
391
+ } else {
392
+ link.enabled = true;
344
393
  }
345
394
  }
346
- },
347
- _createCCDIKSolver: function(mesh) {
348
- if (CCDIKSolver === void 0) {
349
- throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver.");
350
- }
351
- return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);
352
- },
353
- _createMMDPhysics: function(mesh, params) {
354
- if (MMDPhysics === void 0) {
355
- throw new Error("THREE.MMDPhysics: Import MMDPhysics.");
395
+ }
396
+ }
397
+ _createCCDIKSolver(mesh) {
398
+ if (CCDIKSolver === void 0) {
399
+ throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver.");
400
+ }
401
+ return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);
402
+ }
403
+ _createMMDPhysics(mesh, params) {
404
+ if (MMDPhysics === void 0) {
405
+ throw new Error("THREE.MMDPhysics: Import MMDPhysics.");
406
+ }
407
+ return new MMDPhysics(mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params);
408
+ }
409
+ /*
410
+ * Detects the longest duration and then sets it to them to sync.
411
+ * TODO: Not to access private properties ( ._actions and ._clip )
412
+ */
413
+ _syncDuration() {
414
+ let max = 0;
415
+ const objects = this.objects;
416
+ const meshes = this.meshes;
417
+ const camera = this.camera;
418
+ const audioManager = this.audioManager;
419
+ for (let i = 0, il = meshes.length; i < il; i++) {
420
+ const mixer = this.objects.get(meshes[i]).mixer;
421
+ if (mixer === void 0)
422
+ continue;
423
+ for (let j = 0; j < mixer._actions.length; j++) {
424
+ const clip = mixer._actions[j]._clip;
425
+ if (!objects.has(clip)) {
426
+ objects.set(clip, {
427
+ duration: clip.duration
428
+ });
429
+ }
430
+ max = Math.max(max, objects.get(clip).duration);
356
431
  }
357
- return new MMDPhysics(
358
- mesh,
359
- mesh.geometry.userData.MMD.rigidBodies,
360
- mesh.geometry.userData.MMD.constraints,
361
- params
362
- );
363
- },
364
- /*
365
- * Detects the longest duration and then sets it to them to sync.
366
- * TODO: Not to access private properties ( ._actions and ._clip )
367
- */
368
- _syncDuration: function() {
369
- let max = 0;
370
- const objects = this.objects;
371
- const meshes = this.meshes;
372
- const camera = this.camera;
373
- const audioManager = this.audioManager;
374
- for (let i = 0, il = meshes.length; i < il; i++) {
375
- var mixer = this.objects.get(meshes[i]).mixer;
376
- if (mixer === void 0)
377
- continue;
378
- for (let j = 0; j < mixer._actions.length; j++) {
379
- var clip = mixer._actions[j]._clip;
432
+ }
433
+ if (camera !== null) {
434
+ const mixer = this.objects.get(camera).mixer;
435
+ if (mixer !== void 0) {
436
+ for (let i = 0, il = mixer._actions.length; i < il; i++) {
437
+ const clip = mixer._actions[i]._clip;
380
438
  if (!objects.has(clip)) {
381
439
  objects.set(clip, {
382
440
  duration: clip.duration
@@ -385,128 +443,162 @@ const MMDAnimationHelper = (() => {
385
443
  max = Math.max(max, objects.get(clip).duration);
386
444
  }
387
445
  }
388
- if (camera !== null) {
389
- var mixer = this.objects.get(camera).mixer;
390
- if (mixer !== void 0) {
391
- for (let i = 0, il = mixer._actions.length; i < il; i++) {
392
- var clip = mixer._actions[i]._clip;
393
- if (!objects.has(clip)) {
394
- objects.set(clip, {
395
- duration: clip.duration
396
- });
397
- }
398
- max = Math.max(max, objects.get(clip).duration);
399
- }
400
- }
401
- }
402
- if (audioManager !== null) {
403
- max = Math.max(max, objects.get(audioManager).duration);
404
- }
405
- max += this.configuration.afterglow;
406
- for (let i = 0, il = this.meshes.length; i < il; i++) {
407
- var mixer = this.objects.get(this.meshes[i]).mixer;
408
- if (mixer === void 0)
409
- continue;
410
- for (let j = 0, jl = mixer._actions.length; j < jl; j++) {
411
- mixer._actions[j]._clip.duration = max;
412
- }
446
+ }
447
+ if (audioManager !== null) {
448
+ max = Math.max(max, objects.get(audioManager).duration);
449
+ }
450
+ max += this.configuration.afterglow;
451
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
452
+ const mixer = this.objects.get(this.meshes[i]).mixer;
453
+ if (mixer === void 0)
454
+ continue;
455
+ for (let j = 0, jl = mixer._actions.length; j < jl; j++) {
456
+ mixer._actions[j]._clip.duration = max;
413
457
  }
414
- if (camera !== null) {
415
- var mixer = this.objects.get(camera).mixer;
416
- if (mixer !== void 0) {
417
- for (let i = 0, il = mixer._actions.length; i < il; i++) {
418
- mixer._actions[i]._clip.duration = max;
419
- }
458
+ }
459
+ if (camera !== null) {
460
+ const mixer = this.objects.get(camera).mixer;
461
+ if (mixer !== void 0) {
462
+ for (let i = 0, il = mixer._actions.length; i < il; i++) {
463
+ mixer._actions[i]._clip.duration = max;
420
464
  }
421
465
  }
422
- if (audioManager !== null) {
423
- audioManager.duration = max;
424
- }
425
- },
426
- // workaround
427
- _updatePropertyMixersBuffer: function(mesh) {
428
- const mixer = this.objects.get(mesh).mixer;
429
- const propertyMixers = mixer._bindings;
430
- const accuIndex = mixer._accuIndex;
431
- for (let i = 0, il = propertyMixers.length; i < il; i++) {
432
- const propertyMixer = propertyMixers[i];
433
- const buffer = propertyMixer.buffer;
434
- const stride = propertyMixer.valueSize;
435
- const offset = (accuIndex + 1) * stride;
436
- propertyMixer.binding.getValue(buffer, offset);
437
- }
438
- },
439
- /*
440
- * Avoiding these two issues by restore/save bones before/after mixer animation.
441
- *
442
- * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.
443
- * Calculating IK, Grant, and Physics after mixer animation can break
444
- * the cache coherency.
445
- *
446
- * 2. Applying Grant two or more times without reset the posing breaks model.
447
- */
448
- _saveBones: function(mesh) {
449
- const objects = this.objects.get(mesh);
450
- const bones = mesh.skeleton.bones;
451
- let backupBones = objects.backupBones;
452
- if (backupBones === void 0) {
453
- backupBones = new Float32Array(bones.length * 7);
454
- objects.backupBones = backupBones;
455
- }
456
- for (let i = 0, il = bones.length; i < il; i++) {
457
- const bone = bones[i];
458
- bone.position.toArray(backupBones, i * 7);
459
- bone.quaternion.toArray(backupBones, i * 7 + 3);
460
- }
461
- },
462
- _restoreBones: function(mesh) {
463
- const objects = this.objects.get(mesh);
464
- const backupBones = objects.backupBones;
465
- if (backupBones === void 0)
466
- return;
467
- const bones = mesh.skeleton.bones;
468
- for (let i = 0, il = bones.length; i < il; i++) {
469
- const bone = bones[i];
470
- bone.position.fromArray(backupBones, i * 7);
471
- bone.quaternion.fromArray(backupBones, i * 7 + 3);
472
- }
473
- },
474
- // experimental
475
- _getMasterPhysics: function() {
476
- if (this.masterPhysics !== null)
466
+ }
467
+ if (audioManager !== null) {
468
+ audioManager.duration = max;
469
+ }
470
+ }
471
+ // workaround
472
+ _updatePropertyMixersBuffer(mesh) {
473
+ const mixer = this.objects.get(mesh).mixer;
474
+ const propertyMixers = mixer._bindings;
475
+ const accuIndex = mixer._accuIndex;
476
+ for (let i = 0, il = propertyMixers.length; i < il; i++) {
477
+ const propertyMixer = propertyMixers[i];
478
+ const buffer = propertyMixer.buffer;
479
+ const stride = propertyMixer.valueSize;
480
+ const offset = (accuIndex + 1) * stride;
481
+ propertyMixer.binding.getValue(buffer, offset);
482
+ }
483
+ }
484
+ /*
485
+ * Avoiding these two issues by restore/save bones before/after mixer animation.
486
+ *
487
+ * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.
488
+ * Calculating IK, Grant, and Physics after mixer animation can break
489
+ * the cache coherency.
490
+ *
491
+ * 2. Applying Grant two or more times without reset the posing breaks model.
492
+ */
493
+ _saveBones(mesh) {
494
+ const objects = this.objects.get(mesh);
495
+ const bones = mesh.skeleton.bones;
496
+ let backupBones = objects.backupBones;
497
+ if (backupBones === void 0) {
498
+ backupBones = new Float32Array(bones.length * 7);
499
+ objects.backupBones = backupBones;
500
+ }
501
+ for (let i = 0, il = bones.length; i < il; i++) {
502
+ const bone = bones[i];
503
+ bone.position.toArray(backupBones, i * 7);
504
+ bone.quaternion.toArray(backupBones, i * 7 + 3);
505
+ }
506
+ }
507
+ _restoreBones(mesh) {
508
+ const objects = this.objects.get(mesh);
509
+ const backupBones = objects.backupBones;
510
+ if (backupBones === void 0)
511
+ return;
512
+ const bones = mesh.skeleton.bones;
513
+ for (let i = 0, il = bones.length; i < il; i++) {
514
+ const bone = bones[i];
515
+ bone.position.fromArray(backupBones, i * 7);
516
+ bone.quaternion.fromArray(backupBones, i * 7 + 3);
517
+ }
518
+ }
519
+ // experimental
520
+ _getMasterPhysics() {
521
+ if (this.masterPhysics !== null)
522
+ return this.masterPhysics;
523
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
524
+ const physics = this.meshes[i].physics;
525
+ if (physics !== void 0 && physics !== null) {
526
+ this.masterPhysics = physics;
477
527
  return this.masterPhysics;
478
- for (let i = 0, il = this.meshes.length; i < il; i++) {
479
- const physics = this.meshes[i].physics;
480
- if (physics !== void 0 && physics !== null) {
481
- this.masterPhysics = physics;
482
- return this.masterPhysics;
483
- }
484
528
  }
485
- return null;
486
- },
487
- _updateSharedPhysics: function(delta) {
488
- if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)
489
- return;
490
- const physics = this._getMasterPhysics();
491
- if (physics === null)
492
- return;
493
- for (let i = 0, il = this.meshes.length; i < il; i++) {
494
- var p = this.meshes[i].physics;
495
- if (p !== null && p !== void 0) {
496
- p.updateRigidBodies();
497
- }
529
+ }
530
+ return null;
531
+ }
532
+ _updateSharedPhysics(delta) {
533
+ if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)
534
+ return;
535
+ const physics = this._getMasterPhysics();
536
+ if (physics === null)
537
+ return;
538
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
539
+ const p = this.meshes[i].physics;
540
+ if (p !== null && p !== void 0) {
541
+ p.updateRigidBodies();
498
542
  }
499
- physics.stepSimulation(delta);
500
- for (let i = 0, il = this.meshes.length; i < il; i++) {
501
- var p = this.meshes[i].physics;
502
- if (p !== null && p !== void 0) {
503
- p.updateBones();
504
- }
543
+ }
544
+ physics.stepSimulation(delta);
545
+ for (let i = 0, il = this.meshes.length; i < il; i++) {
546
+ const p = this.meshes[i].physics;
547
+ if (p !== null && p !== void 0) {
548
+ p.updateBones();
549
+ }
550
+ }
551
+ }
552
+ }
553
+ const _quaternions = [];
554
+ let _quaternionIndex = 0;
555
+ function getQuaternion() {
556
+ if (_quaternionIndex >= _quaternions.length) {
557
+ _quaternions.push(new Quaternion());
558
+ }
559
+ return _quaternions[_quaternionIndex++];
560
+ }
561
+ const _grantResultMap = /* @__PURE__ */ new Map();
562
+ function updateOne(mesh, boneIndex, ikSolver, grantSolver) {
563
+ const bones = mesh.skeleton.bones;
564
+ const bonesData = mesh.geometry.userData.MMD.bones;
565
+ const boneData = bonesData[boneIndex];
566
+ const bone = bones[boneIndex];
567
+ if (_grantResultMap.has(boneIndex))
568
+ return;
569
+ const quaternion = getQuaternion();
570
+ _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion));
571
+ if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) {
572
+ const parentIndex = boneData.grant.parentIndex;
573
+ const ratio = boneData.grant.ratio;
574
+ if (!_grantResultMap.has(parentIndex)) {
575
+ updateOne(mesh, parentIndex, ikSolver, grantSolver);
576
+ }
577
+ grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio);
578
+ }
579
+ if (ikSolver && boneData.ik) {
580
+ mesh.updateMatrixWorld(true);
581
+ ikSolver.updateOne(boneData.ik);
582
+ const links = boneData.ik.links;
583
+ for (let i = 0, il = links.length; i < il; i++) {
584
+ const link = links[i];
585
+ if (link.enabled === false)
586
+ continue;
587
+ const linkIndex = link.index;
588
+ if (_grantResultMap.has(linkIndex)) {
589
+ _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion));
505
590
  }
506
591
  }
507
- };
508
- function AudioManager(audio, params) {
509
- params = params || {};
592
+ }
593
+ quaternion.copy(bone.quaternion);
594
+ }
595
+ class AudioManager {
596
+ /**
597
+ * @param {THREE.Audio} audio
598
+ * @param {Object} params - (optional)
599
+ * @param {Nuumber} params.delayTime
600
+ */
601
+ constructor(audio, params = {}) {
510
602
  this.audio = audio;
511
603
  this.elapsedTime = 0;
512
604
  this.currentTime = 0;
@@ -514,77 +606,83 @@ const MMDAnimationHelper = (() => {
514
606
  this.audioDuration = this.audio.buffer.duration;
515
607
  this.duration = this.audioDuration + this.delayTime;
516
608
  }
517
- AudioManager.prototype = {
518
- constructor: AudioManager,
519
- /**
520
- * @param {Number} delta
521
- * @return {AudioManager}
522
- */
523
- control: function(delta) {
524
- this.elapsed += delta;
525
- this.currentTime += delta;
526
- if (this._shouldStopAudio())
527
- this.audio.stop();
528
- if (this._shouldStartAudio())
529
- this.audio.play();
530
- return this;
531
- },
532
- // private methods
533
- _shouldStartAudio: function() {
534
- if (this.audio.isPlaying)
535
- return false;
536
- while (this.currentTime >= this.duration) {
537
- this.currentTime -= this.duration;
538
- }
539
- if (this.currentTime < this.delayTime)
540
- return false;
541
- if (this.currentTime - this.delayTime > this.audioDuration)
542
- return false;
543
- return true;
544
- },
545
- _shouldStopAudio: function() {
546
- return this.audio.isPlaying && this.currentTime >= this.duration;
547
- }
548
- };
549
- function GrantSolver(mesh, grants) {
609
+ /**
610
+ * @param {Number} delta
611
+ * @return {AudioManager}
612
+ */
613
+ control(delta) {
614
+ this.elapsed += delta;
615
+ this.currentTime += delta;
616
+ if (this._shouldStopAudio())
617
+ this.audio.stop();
618
+ if (this._shouldStartAudio())
619
+ this.audio.play();
620
+ return this;
621
+ }
622
+ // private methods
623
+ _shouldStartAudio() {
624
+ if (this.audio.isPlaying)
625
+ return false;
626
+ while (this.currentTime >= this.duration) {
627
+ this.currentTime -= this.duration;
628
+ }
629
+ if (this.currentTime < this.delayTime)
630
+ return false;
631
+ if (this.currentTime - this.delayTime > this.audioDuration)
632
+ return false;
633
+ return true;
634
+ }
635
+ _shouldStopAudio() {
636
+ return this.audio.isPlaying && this.currentTime >= this.duration;
637
+ }
638
+ }
639
+ const _q = /* @__PURE__ */ new Quaternion();
640
+ class GrantSolver {
641
+ constructor(mesh, grants = []) {
550
642
  this.mesh = mesh;
551
- this.grants = grants || [];
552
- }
553
- GrantSolver.prototype = {
554
- constructor: GrantSolver,
555
- /**
556
- * @return {GrantSolver}
557
- */
558
- update: (() => {
559
- const quaternion = new Quaternion();
560
- return function() {
561
- const bones = this.mesh.skeleton.bones;
562
- const grants = this.grants;
563
- for (let i = 0, il = grants.length; i < il; i++) {
564
- const grant = grants[i];
565
- const bone = bones[grant.index];
566
- const parentBone = bones[grant.parentIndex];
567
- if (grant.isLocal) {
568
- if (grant.affectPosition) {
569
- }
570
- if (grant.affectRotation) {
571
- }
572
- } else {
573
- if (grant.affectPosition) {
574
- }
575
- if (grant.affectRotation) {
576
- quaternion.set(0, 0, 0, 1);
577
- quaternion.slerp(parentBone.quaternion, grant.ratio);
578
- bone.quaternion.multiply(quaternion);
579
- }
580
- }
581
- }
582
- return this;
583
- };
584
- })()
585
- };
586
- return MMDAnimationHelper2;
587
- })();
643
+ this.grants = grants;
644
+ }
645
+ /**
646
+ * Solve all the grant bones
647
+ * @return {GrantSolver}
648
+ */
649
+ update() {
650
+ const grants = this.grants;
651
+ for (let i = 0, il = grants.length; i < il; i++) {
652
+ this.updateOne(grants[i]);
653
+ }
654
+ return this;
655
+ }
656
+ /**
657
+ * Solve a grant bone
658
+ * @param {Object} grant - grant parameter
659
+ * @return {GrantSolver}
660
+ */
661
+ updateOne(grant) {
662
+ const bones = this.mesh.skeleton.bones;
663
+ const bone = bones[grant.index];
664
+ const parentBone = bones[grant.parentIndex];
665
+ if (grant.isLocal) {
666
+ if (grant.affectPosition) {
667
+ }
668
+ if (grant.affectRotation) {
669
+ }
670
+ } else {
671
+ if (grant.affectPosition) {
672
+ }
673
+ if (grant.affectRotation) {
674
+ this.addGrantRotation(bone, parentBone.quaternion, grant.ratio);
675
+ }
676
+ }
677
+ return this;
678
+ }
679
+ addGrantRotation(bone, q, ratio) {
680
+ _q.set(0, 0, 0, 1);
681
+ _q.slerp(q, ratio);
682
+ bone.quaternion.multiply(_q);
683
+ return this;
684
+ }
685
+ }
588
686
  export {
589
687
  MMDAnimationHelper
590
688
  };