three-stdlib 2.22.9 → 2.23.0

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 (630) 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/TrackballControls.d.ts +2 -2
  23. package/dist/controls/TransformControls.d.ts +1 -1
  24. package/dist/controls/experimental/CameraControls.d.ts +1 -1
  25. package/dist/csm/CSM.js +4 -4
  26. package/dist/csm/CSM.mjs +4 -4
  27. package/dist/csm/CSMFrustum.js +1 -1
  28. package/dist/csm/CSMFrustum.mjs +1 -1
  29. package/dist/csm/CSMShader.js +14 -10
  30. package/dist/csm/CSMShader.mjs +14 -10
  31. package/dist/curves/CurveExtras.js +52 -62
  32. package/dist/curves/CurveExtras.mjs +53 -63
  33. package/dist/curves/NURBSUtils.d.ts +18 -20
  34. package/dist/curves/NURBSUtils.js +17 -17
  35. package/dist/curves/NURBSUtils.mjs +17 -17
  36. package/dist/deprecated/Geometry.js +26 -26
  37. package/dist/deprecated/Geometry.mjs +27 -27
  38. package/dist/effects/AnaglyphEffect.js +95 -114
  39. package/dist/effects/AnaglyphEffect.mjs +95 -114
  40. package/dist/effects/AsciiEffect.js +144 -162
  41. package/dist/effects/AsciiEffect.mjs +144 -162
  42. package/dist/effects/OutlineEffect.js +253 -276
  43. package/dist/effects/OutlineEffect.mjs +253 -276
  44. package/dist/effects/ParallaxBarrierEffect.js +61 -60
  45. package/dist/effects/ParallaxBarrierEffect.mjs +61 -60
  46. package/dist/effects/PeppersGhostEffect.js +84 -81
  47. package/dist/effects/PeppersGhostEffect.mjs +84 -81
  48. package/dist/effects/StereoEffect.js +31 -28
  49. package/dist/effects/StereoEffect.mjs +31 -28
  50. package/dist/environments/RoomEnvironment.d.ts +6 -5
  51. package/dist/exporters/GLTFExporter.d.ts +109 -441
  52. package/dist/exporters/GLTFExporter.js +915 -581
  53. package/dist/exporters/GLTFExporter.mjs +915 -581
  54. package/dist/geometries/ConvexGeometry.js +0 -3
  55. package/dist/geometries/ConvexGeometry.mjs +0 -3
  56. package/dist/geometries/LightningStrike.d.ts +3 -3
  57. package/dist/geometries/LightningStrike.js +80 -75
  58. package/dist/geometries/LightningStrike.mjs +80 -75
  59. package/dist/geometries/ParametricGeometries.js +75 -74
  60. package/dist/geometries/ParametricGeometries.mjs +75 -74
  61. package/dist/geometries/RoundedBoxGeometry.js +1 -1
  62. package/dist/geometries/RoundedBoxGeometry.mjs +1 -1
  63. package/dist/geometries/TextGeometry.d.ts +1 -1
  64. package/dist/helpers/RectAreaLightHelper.d.ts +4 -3
  65. package/dist/helpers/RectAreaLightHelper.js +2 -2
  66. package/dist/helpers/RectAreaLightHelper.mjs +2 -2
  67. package/dist/helpers/VertexNormalsHelper.d.ts +3 -0
  68. package/dist/helpers/VertexNormalsHelper.js +15 -22
  69. package/dist/helpers/VertexNormalsHelper.mjs +16 -23
  70. package/dist/helpers/VertexTangentsHelper.d.ts +3 -0
  71. package/dist/helpers/VertexTangentsHelper.js +12 -14
  72. package/dist/helpers/VertexTangentsHelper.mjs +12 -14
  73. package/dist/index.d.ts +1 -66
  74. package/dist/index.js +5 -370
  75. package/dist/index.mjs +9 -374
  76. package/dist/interactive/InteractiveGroup.js +1 -1
  77. package/dist/interactive/InteractiveGroup.mjs +1 -1
  78. package/dist/interactive/SelectionBox.js +122 -125
  79. package/dist/interactive/SelectionBox.mjs +122 -125
  80. package/dist/interactive/SelectionHelper.js +45 -48
  81. package/dist/interactive/SelectionHelper.mjs +45 -48
  82. package/dist/libs/MeshoptDecoder.d.ts +1 -1
  83. package/dist/libs/MotionControllers.d.ts +15 -14
  84. package/dist/libs/MotionControllers.js +10 -10
  85. package/dist/libs/MotionControllers.mjs +10 -10
  86. package/dist/lights/LightProbeGenerator.js +43 -43
  87. package/dist/lights/LightProbeGenerator.mjs +43 -43
  88. package/dist/lights/RectAreaLightUniformsLib.js +9 -5
  89. package/dist/lights/RectAreaLightUniformsLib.mjs +9 -5
  90. package/dist/lines/LineMaterial.js +271 -271
  91. package/dist/lines/LineMaterial.mjs +272 -272
  92. package/dist/lines/LineSegments2.js +12 -12
  93. package/dist/lines/LineSegments2.mjs +12 -12
  94. package/dist/lines/LineSegmentsGeometry.js +2 -2
  95. package/dist/lines/LineSegmentsGeometry.mjs +2 -2
  96. package/dist/lines/Wireframe.js +2 -2
  97. package/dist/lines/Wireframe.mjs +2 -2
  98. package/dist/loaders/3DMLoader.d.ts +2 -1
  99. package/dist/loaders/3MFLoader.d.ts +2 -1
  100. package/dist/loaders/AMFLoader.d.ts +2 -1
  101. package/dist/loaders/AssimpLoader.d.ts +20 -0
  102. package/dist/loaders/AssimpLoader.js +520 -482
  103. package/dist/loaders/AssimpLoader.mjs +520 -482
  104. package/dist/loaders/BVHLoader.d.ts +2 -1
  105. package/dist/loaders/BasisTextureLoader.d.ts +2 -1
  106. package/dist/loaders/BasisTextureLoader.js +23 -14
  107. package/dist/loaders/BasisTextureLoader.mjs +24 -15
  108. package/dist/loaders/ColladaLoader.d.ts +2 -1
  109. package/dist/loaders/DRACOLoader.d.ts +2 -1
  110. package/dist/loaders/FBXLoader.d.ts +2 -1
  111. package/dist/loaders/FBXLoader.js +2 -2
  112. package/dist/loaders/FBXLoader.mjs +2 -2
  113. package/dist/loaders/FontLoader.d.ts +4 -4
  114. package/dist/loaders/FontLoader.js +2 -1
  115. package/dist/loaders/FontLoader.mjs +2 -1
  116. package/dist/loaders/GCodeLoader.d.ts +2 -1
  117. package/dist/loaders/GLTFLoader.d.ts +11 -9
  118. package/dist/loaders/GLTFLoader.js +2 -2
  119. package/dist/loaders/GLTFLoader.mjs +2 -2
  120. package/dist/loaders/HDRCubeTextureLoader.d.ts +2 -1
  121. package/dist/loaders/KMZLoader.d.ts +2 -1
  122. package/dist/loaders/KTX2Loader.js +34 -15
  123. package/dist/loaders/KTX2Loader.mjs +35 -16
  124. package/dist/loaders/LDrawLoader.d.ts +2 -1
  125. package/dist/loaders/LDrawLoader.js +3 -3
  126. package/dist/loaders/LDrawLoader.mjs +3 -3
  127. package/dist/loaders/LUT3dlLoader.d.ts +3 -2
  128. package/dist/loaders/LUTCubeLoader.d.ts +3 -2
  129. package/dist/loaders/LWOLoader.d.ts +2 -1
  130. package/dist/loaders/LottieLoader.d.ts +2 -1
  131. package/dist/loaders/MD2Loader.d.ts +2 -1
  132. package/dist/loaders/MDDLoader.d.ts +2 -1
  133. package/dist/loaders/MMDLoader.d.ts +2 -1
  134. package/dist/loaders/MTLLoader.d.ts +2 -1
  135. package/dist/loaders/OBJLoader.d.ts +2 -1
  136. package/dist/loaders/OBJLoader.js +5 -5
  137. package/dist/loaders/OBJLoader.mjs +5 -5
  138. package/dist/loaders/PCDLoader.d.ts +2 -1
  139. package/dist/loaders/PDBLoader.d.ts +2 -1
  140. package/dist/loaders/PLYLoader.d.ts +2 -1
  141. package/dist/loaders/PRWMLoader.d.ts +2 -1
  142. package/dist/loaders/RGBMLoader.js +924 -918
  143. package/dist/loaders/RGBMLoader.mjs +924 -918
  144. package/dist/loaders/STLLoader.d.ts +2 -1
  145. package/dist/loaders/SVGLoader.d.ts +2 -1
  146. package/dist/loaders/TDSLoader.d.ts +2 -1
  147. package/dist/loaders/TTFLoader.d.ts +2 -1
  148. package/dist/loaders/TiltLoader.d.ts +2 -1
  149. package/dist/loaders/TiltLoader.js +3 -1
  150. package/dist/loaders/TiltLoader.mjs +3 -1
  151. package/dist/loaders/VOXLoader.d.ts +4 -2
  152. package/dist/loaders/VRMLLoader.d.ts +2 -1
  153. package/dist/loaders/VRMLoader.d.ts +20 -0
  154. package/dist/loaders/VTKLoader.d.ts +2 -1
  155. package/dist/loaders/XLoader.d.ts +20 -0
  156. package/dist/loaders/XLoader.js +1 -1
  157. package/dist/loaders/XLoader.mjs +1 -1
  158. package/dist/loaders/XYZLoader.d.ts +2 -1
  159. package/dist/loaders/lwo/IFFParser.js +104 -110
  160. package/dist/loaders/lwo/IFFParser.mjs +104 -110
  161. package/dist/loaders/lwo/LWO2Parser.js +18 -33
  162. package/dist/loaders/lwo/LWO2Parser.mjs +18 -33
  163. package/dist/loaders/lwo/LWO3Parser.js +17 -33
  164. package/dist/loaders/lwo/LWO3Parser.mjs +17 -33
  165. package/dist/math/Capsule.d.ts +1 -1
  166. package/dist/math/Capsule.js +90 -92
  167. package/dist/math/Capsule.mjs +90 -92
  168. package/dist/math/ColorConverter.js +26 -36
  169. package/dist/math/ColorConverter.mjs +26 -36
  170. package/dist/math/ConvexHull.js +16 -17
  171. package/dist/math/ConvexHull.mjs +17 -18
  172. package/dist/math/ImprovedNoise.js +41 -39
  173. package/dist/math/ImprovedNoise.mjs +41 -39
  174. package/dist/math/Lut.js +65 -63
  175. package/dist/math/Lut.mjs +66 -64
  176. package/dist/math/MeshSurfaceSampler.d.ts +3 -0
  177. package/dist/math/MeshSurfaceSampler.js +85 -89
  178. package/dist/math/MeshSurfaceSampler.mjs +85 -89
  179. package/dist/math/OBB.js +68 -88
  180. package/dist/math/OBB.mjs +68 -88
  181. package/dist/math/Octree.js +240 -245
  182. package/dist/math/Octree.mjs +240 -245
  183. package/dist/misc/ConvexObjectBreaker.js +114 -120
  184. package/dist/misc/ConvexObjectBreaker.mjs +115 -121
  185. package/dist/misc/GPUComputationRenderer.d.ts +1 -0
  186. package/dist/misc/GPUComputationRenderer.js +191 -157
  187. package/dist/misc/GPUComputationRenderer.mjs +192 -158
  188. package/dist/misc/Gyroscope.js +16 -18
  189. package/dist/misc/Gyroscope.mjs +17 -19
  190. package/dist/misc/MD2Character.js +88 -86
  191. package/dist/misc/MD2Character.mjs +89 -87
  192. package/dist/misc/MD2CharacterComplex.js +106 -105
  193. package/dist/misc/MD2CharacterComplex.mjs +107 -106
  194. package/dist/misc/MorphAnimMesh.d.ts +1 -1
  195. package/dist/misc/MorphAnimMesh.js +33 -33
  196. package/dist/misc/MorphAnimMesh.mjs +33 -33
  197. package/dist/misc/MorphBlendMesh.js +68 -68
  198. package/dist/misc/MorphBlendMesh.mjs +68 -68
  199. package/dist/misc/ProgressiveLightmap.d.ts +1 -2
  200. package/dist/misc/RollerCoaster.js +321 -314
  201. package/dist/misc/RollerCoaster.mjs +322 -315
  202. package/dist/misc/Volume.d.ts +1 -1
  203. package/dist/misc/Volume.js +169 -166
  204. package/dist/misc/Volume.mjs +170 -167
  205. package/dist/misc/VolumeSlice.js +50 -51
  206. package/dist/misc/VolumeSlice.mjs +50 -51
  207. package/dist/modifiers/CurveModifier.d.ts +2 -2
  208. package/dist/modifiers/CurveModifier.js +1 -1
  209. package/dist/modifiers/CurveModifier.mjs +1 -1
  210. package/dist/modifiers/SimplifyModifier.js +2 -1
  211. package/dist/modifiers/SimplifyModifier.mjs +2 -1
  212. package/dist/objects/Lensflare.js +32 -21
  213. package/dist/objects/Lensflare.mjs +33 -22
  214. package/dist/objects/LightningStorm.d.ts +3 -3
  215. package/dist/objects/LightningStorm.js +3 -3
  216. package/dist/objects/LightningStorm.mjs +3 -3
  217. package/dist/objects/MarchingCubes.d.ts +1 -0
  218. package/dist/objects/MarchingCubes.js +4362 -10
  219. package/dist/objects/MarchingCubes.mjs +4363 -11
  220. package/dist/objects/Reflector.d.ts +5 -2
  221. package/dist/objects/Reflector.js +39 -12
  222. package/dist/objects/Reflector.mjs +40 -13
  223. package/dist/objects/ReflectorForSSRPass.js +25 -21
  224. package/dist/objects/ReflectorForSSRPass.mjs +26 -22
  225. package/dist/objects/ReflectorRTT.d.ts +6 -0
  226. package/dist/objects/Refractor.d.ts +5 -2
  227. package/dist/objects/Refractor.js +39 -12
  228. package/dist/objects/Refractor.mjs +40 -13
  229. package/dist/objects/ShadowMesh.d.ts +6 -3
  230. package/dist/objects/ShadowMesh.js +7 -3
  231. package/dist/objects/ShadowMesh.mjs +8 -4
  232. package/dist/objects/Sky.js +181 -137
  233. package/dist/objects/Sky.mjs +182 -138
  234. package/dist/objects/Water.d.ts +3 -3
  235. package/dist/objects/Water.js +3 -2
  236. package/dist/objects/Water.mjs +3 -2
  237. package/dist/objects/Water2.d.ts +2 -2
  238. package/dist/objects/Water2.js +16 -18
  239. package/dist/objects/Water2.mjs +17 -19
  240. package/dist/postprocessing/AdaptiveToneMappingPass.d.ts +2 -2
  241. package/dist/postprocessing/AdaptiveToneMappingPass.js +105 -112
  242. package/dist/postprocessing/AdaptiveToneMappingPass.mjs +107 -114
  243. package/dist/postprocessing/BokehPass.d.ts +1 -1
  244. package/dist/postprocessing/ClearPass.d.ts +3 -3
  245. package/dist/postprocessing/CubeTexturePass.js +37 -33
  246. package/dist/postprocessing/CubeTexturePass.mjs +37 -33
  247. package/dist/postprocessing/HalftonePass.d.ts +1 -1
  248. package/dist/postprocessing/LUTPass.d.ts +3 -3
  249. package/dist/postprocessing/RenderPixelatedPass.d.ts +28 -0
  250. package/dist/postprocessing/SAOPass.d.ts +5 -6
  251. package/dist/postprocessing/SAOPass.js +151 -145
  252. package/dist/postprocessing/SAOPass.mjs +153 -147
  253. package/dist/postprocessing/SSAARenderPass.d.ts +5 -5
  254. package/dist/postprocessing/SSAARenderPass.js +78 -55
  255. package/dist/postprocessing/SSAARenderPass.mjs +80 -57
  256. package/dist/postprocessing/SSAOPass.d.ts +4 -5
  257. package/dist/postprocessing/SSAOPass.js +17 -10
  258. package/dist/postprocessing/SSAOPass.mjs +17 -10
  259. package/dist/postprocessing/SSRPass.d.ts +6 -7
  260. package/dist/postprocessing/SSRPass.js +235 -262
  261. package/dist/postprocessing/SSRPass.mjs +237 -264
  262. package/dist/postprocessing/TAARenderPass.d.ts +2 -2
  263. package/dist/postprocessing/TAARenderPass.js +106 -27
  264. package/dist/postprocessing/TAARenderPass.mjs +107 -28
  265. package/dist/postprocessing/TexturePass.d.ts +2 -2
  266. package/dist/postprocessing/TexturePass.js +24 -22
  267. package/dist/postprocessing/TexturePass.mjs +25 -23
  268. package/dist/postprocessing/UnrealBloomPass.js +175 -118
  269. package/dist/postprocessing/UnrealBloomPass.mjs +177 -120
  270. package/dist/renderers/CSS2DRenderer.d.ts +2 -1
  271. package/dist/renderers/CSS2DRenderer.js +5 -4
  272. package/dist/renderers/CSS2DRenderer.mjs +6 -5
  273. package/dist/renderers/CSS3DRenderer.d.ts +1 -1
  274. package/dist/renderers/CSS3DRenderer.js +147 -113
  275. package/dist/renderers/CSS3DRenderer.mjs +148 -114
  276. package/dist/renderers/Projector.js +377 -389
  277. package/dist/renderers/Projector.mjs +377 -389
  278. package/dist/renderers/SVGRenderer.js +280 -275
  279. package/dist/renderers/SVGRenderer.mjs +280 -275
  280. package/dist/shaders/ACESFilmicToneMappingShader.d.ts +1 -1
  281. package/dist/shaders/AfterimageShader.d.ts +1 -1
  282. package/dist/shaders/BasicShader.d.ts +1 -1
  283. package/dist/shaders/BleachBypassShader.d.ts +1 -1
  284. package/dist/shaders/BokehShader.d.ts +2 -2
  285. package/dist/shaders/BokehShader2.d.ts +2 -2
  286. package/dist/shaders/BokehShader2.js +1 -1
  287. package/dist/shaders/BokehShader2.mjs +1 -1
  288. package/dist/shaders/ColorCorrectionShader.js +3 -3
  289. package/dist/shaders/ColorCorrectionShader.mjs +3 -3
  290. package/dist/shaders/ColorifyShader.js +1 -1
  291. package/dist/shaders/ColorifyShader.mjs +1 -1
  292. package/dist/shaders/ConvolutionShader.d.ts +2 -2
  293. package/dist/shaders/ConvolutionShader.js +1 -1
  294. package/dist/shaders/ConvolutionShader.mjs +1 -1
  295. package/dist/shaders/CopyShader.d.ts +1 -1
  296. package/dist/shaders/DepthLimitedBlurShader.d.ts +2 -2
  297. package/dist/shaders/DepthLimitedBlurShader.js +2 -2
  298. package/dist/shaders/DepthLimitedBlurShader.mjs +2 -2
  299. package/dist/shaders/DotScreenShader.js +2 -2
  300. package/dist/shaders/DotScreenShader.mjs +2 -2
  301. package/dist/shaders/FXAAShader.js +1 -1
  302. package/dist/shaders/FXAAShader.mjs +1 -1
  303. package/dist/shaders/FreiChenShader.js +1 -1
  304. package/dist/shaders/FreiChenShader.mjs +1 -1
  305. package/dist/shaders/GammaCorrectionShader.d.ts +1 -1
  306. package/dist/shaders/GodRaysShader.js +4 -4
  307. package/dist/shaders/GodRaysShader.mjs +4 -4
  308. package/dist/shaders/HorizontalBlurShader.d.ts +1 -1
  309. package/dist/shaders/LuminosityHighPassShader.js +1 -1
  310. package/dist/shaders/LuminosityHighPassShader.mjs +1 -1
  311. package/dist/shaders/NormalMapShader.js +2 -2
  312. package/dist/shaders/NormalMapShader.mjs +2 -2
  313. package/dist/shaders/SAOShader.d.ts +2 -2
  314. package/dist/shaders/SAOShader.js +3 -3
  315. package/dist/shaders/SAOShader.mjs +3 -3
  316. package/dist/shaders/SMAAShader.js +3 -3
  317. package/dist/shaders/SMAAShader.mjs +3 -3
  318. package/dist/shaders/SSAOShader.js +4 -4
  319. package/dist/shaders/SSAOShader.mjs +4 -4
  320. package/dist/shaders/SSRShader.js +4 -4
  321. package/dist/shaders/SSRShader.mjs +4 -4
  322. package/dist/shaders/SobelOperatorShader.js +1 -1
  323. package/dist/shaders/SobelOperatorShader.mjs +1 -1
  324. package/dist/shaders/SubsurfaceScatteringShader.d.ts +2 -2
  325. package/dist/shaders/SubsurfaceScatteringShader.js +91 -52
  326. package/dist/shaders/SubsurfaceScatteringShader.mjs +91 -52
  327. package/dist/shaders/ToonShader.js +25 -25
  328. package/dist/shaders/ToonShader.mjs +25 -25
  329. package/dist/shaders/TriangleBlurShader.js +1 -1
  330. package/dist/shaders/TriangleBlurShader.mjs +1 -1
  331. package/dist/shaders/VerticalBlurShader.d.ts +1 -1
  332. package/dist/shaders/VolumeShader.js +2 -2
  333. package/dist/shaders/VolumeShader.mjs +2 -2
  334. package/dist/shaders/types.d.ts +2 -2
  335. package/dist/types/Loader.d.ts +4 -0
  336. package/dist/types/Loader.js +26 -0
  337. package/dist/types/Loader.mjs +9 -0
  338. package/dist/types/shared.d.ts +2 -2
  339. package/dist/types/utils.d.ts +1 -1
  340. package/dist/utils/BufferGeometryUtils.d.ts +2 -2
  341. package/dist/utils/BufferGeometryUtils.js +1 -1
  342. package/dist/utils/BufferGeometryUtils.mjs +1 -1
  343. package/dist/utils/RoughnessMipmapper.d.ts +8 -0
  344. package/dist/utils/RoughnessMipmapper.js +79 -75
  345. package/dist/utils/RoughnessMipmapper.mjs +79 -75
  346. package/dist/utils/ShadowMapViewer.js +103 -106
  347. package/dist/utils/ShadowMapViewer.mjs +103 -106
  348. package/dist/utils/SkeletonUtils.d.ts +5 -21
  349. package/dist/utils/SkeletonUtils.js +182 -263
  350. package/dist/utils/SkeletonUtils.mjs +183 -264
  351. package/dist/utils/UVsDebug.js +37 -42
  352. package/dist/utils/UVsDebug.mjs +37 -42
  353. package/dist/webxr/ARButton.d.ts +2 -1
  354. package/dist/webxr/OculusHandModel.d.ts +2 -1
  355. package/dist/webxr/OculusHandPointerModel.d.ts +2 -2
  356. package/dist/webxr/OculusHandPointerModel.js +2 -2
  357. package/dist/webxr/OculusHandPointerModel.mjs +2 -2
  358. package/dist/webxr/VRButton.d.ts +2 -1
  359. package/dist/webxr/XRHandPrimitiveModel.js +2 -2
  360. package/dist/webxr/XRHandPrimitiveModel.mjs +2 -2
  361. package/package.json +5 -6
  362. package/dist/custom.d.ts +0 -5
  363. package/dist/loaders/NodeMaterialLoader.js +0 -146
  364. package/dist/loaders/NodeMaterialLoader.mjs +0 -146
  365. package/dist/nodes/Nodes.js +0 -347
  366. package/dist/nodes/Nodes.mjs +0 -347
  367. package/dist/nodes/ShaderNode.js +0 -408
  368. package/dist/nodes/ShaderNode.mjs +0 -408
  369. package/dist/nodes/accessors/BufferNode.js +0 -14
  370. package/dist/nodes/accessors/BufferNode.mjs +0 -15
  371. package/dist/nodes/accessors/CameraNode.js +0 -43
  372. package/dist/nodes/accessors/CameraNode.mjs +0 -44
  373. package/dist/nodes/accessors/CubeTextureNode.js +0 -41
  374. package/dist/nodes/accessors/CubeTextureNode.mjs +0 -42
  375. package/dist/nodes/accessors/MaterialNode.js +0 -70
  376. package/dist/nodes/accessors/MaterialNode.mjs +0 -71
  377. package/dist/nodes/accessors/MaterialReferenceNode.js +0 -13
  378. package/dist/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  379. package/dist/nodes/accessors/ModelNode.js +0 -8
  380. package/dist/nodes/accessors/ModelNode.mjs +0 -9
  381. package/dist/nodes/accessors/ModelViewProjectionNode.js +0 -23
  382. package/dist/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  383. package/dist/nodes/accessors/NormalNode.js +0 -61
  384. package/dist/nodes/accessors/NormalNode.mjs +0 -62
  385. package/dist/nodes/accessors/Object3DNode.js +0 -75
  386. package/dist/nodes/accessors/Object3DNode.mjs +0 -76
  387. package/dist/nodes/accessors/PointUVNode.js +0 -12
  388. package/dist/nodes/accessors/PointUVNode.mjs +0 -13
  389. package/dist/nodes/accessors/PositionNode.js +0 -64
  390. package/dist/nodes/accessors/PositionNode.mjs +0 -65
  391. package/dist/nodes/accessors/ReferenceNode.js +0 -36
  392. package/dist/nodes/accessors/ReferenceNode.mjs +0 -37
  393. package/dist/nodes/accessors/ReflectNode.js +0 -42
  394. package/dist/nodes/accessors/ReflectNode.mjs +0 -43
  395. package/dist/nodes/accessors/SkinningNode.js +0 -57
  396. package/dist/nodes/accessors/SkinningNode.mjs +0 -58
  397. package/dist/nodes/accessors/TextureNode.js +0 -53
  398. package/dist/nodes/accessors/TextureNode.mjs +0 -54
  399. package/dist/nodes/accessors/UVNode.js +0 -22
  400. package/dist/nodes/accessors/UVNode.mjs +0 -23
  401. package/dist/nodes/core/ArrayUniformNode.js +0 -13
  402. package/dist/nodes/core/ArrayUniformNode.mjs +0 -14
  403. package/dist/nodes/core/AttributeNode.js +0 -29
  404. package/dist/nodes/core/AttributeNode.mjs +0 -30
  405. package/dist/nodes/core/BypassNode.js +0 -21
  406. package/dist/nodes/core/BypassNode.mjs +0 -22
  407. package/dist/nodes/core/CodeNode.js +0 -27
  408. package/dist/nodes/core/CodeNode.mjs +0 -28
  409. package/dist/nodes/core/ConstNode.js +0 -13
  410. package/dist/nodes/core/ConstNode.mjs +0 -14
  411. package/dist/nodes/core/ContextNode.js +0 -21
  412. package/dist/nodes/core/ContextNode.mjs +0 -22
  413. package/dist/nodes/core/ExpressionNode.js +0 -18
  414. package/dist/nodes/core/ExpressionNode.mjs +0 -19
  415. package/dist/nodes/core/FunctionCallNode.js +0 -36
  416. package/dist/nodes/core/FunctionCallNode.mjs +0 -37
  417. package/dist/nodes/core/FunctionNode.js +0 -55
  418. package/dist/nodes/core/FunctionNode.mjs +0 -56
  419. package/dist/nodes/core/InputNode.js +0 -37
  420. package/dist/nodes/core/InputNode.mjs +0 -38
  421. package/dist/nodes/core/Node.js +0 -138
  422. package/dist/nodes/core/Node.mjs +0 -139
  423. package/dist/nodes/core/NodeAttribute.js +0 -9
  424. package/dist/nodes/core/NodeAttribute.mjs +0 -10
  425. package/dist/nodes/core/NodeBuilder.js +0 -402
  426. package/dist/nodes/core/NodeBuilder.mjs +0 -402
  427. package/dist/nodes/core/NodeCode.js +0 -10
  428. package/dist/nodes/core/NodeCode.mjs +0 -11
  429. package/dist/nodes/core/NodeFrame.js +0 -34
  430. package/dist/nodes/core/NodeFrame.mjs +0 -35
  431. package/dist/nodes/core/NodeFunctionInput.js +0 -12
  432. package/dist/nodes/core/NodeFunctionInput.mjs +0 -13
  433. package/dist/nodes/core/NodeKeywords.js +0 -43
  434. package/dist/nodes/core/NodeKeywords.mjs +0 -44
  435. package/dist/nodes/core/NodeUniform.js +0 -17
  436. package/dist/nodes/core/NodeUniform.mjs +0 -18
  437. package/dist/nodes/core/NodeUtils.js +0 -57
  438. package/dist/nodes/core/NodeUtils.mjs +0 -57
  439. package/dist/nodes/core/NodeVar.js +0 -9
  440. package/dist/nodes/core/NodeVar.mjs +0 -10
  441. package/dist/nodes/core/NodeVary.js +0 -9
  442. package/dist/nodes/core/NodeVary.mjs +0 -10
  443. package/dist/nodes/core/PropertyNode.js +0 -20
  444. package/dist/nodes/core/PropertyNode.mjs +0 -21
  445. package/dist/nodes/core/TempNode.js +0 -24
  446. package/dist/nodes/core/TempNode.mjs +0 -25
  447. package/dist/nodes/core/UniformNode.js +0 -22
  448. package/dist/nodes/core/UniformNode.mjs +0 -23
  449. package/dist/nodes/core/VarNode.js +0 -30
  450. package/dist/nodes/core/VarNode.mjs +0 -31
  451. package/dist/nodes/core/VaryNode.js +0 -29
  452. package/dist/nodes/core/VaryNode.mjs +0 -30
  453. package/dist/nodes/core/constants.js +0 -24
  454. package/dist/nodes/core/constants.mjs +0 -24
  455. package/dist/nodes/display/ColorSpaceNode.js +0 -62
  456. package/dist/nodes/display/ColorSpaceNode.mjs +0 -62
  457. package/dist/nodes/display/NormalMapNode.js +0 -53
  458. package/dist/nodes/display/NormalMapNode.mjs +0 -54
  459. package/dist/nodes/fog/FogNode.js +0 -14
  460. package/dist/nodes/fog/FogNode.mjs +0 -15
  461. package/dist/nodes/fog/FogRangeNode.js +0 -16
  462. package/dist/nodes/fog/FogRangeNode.mjs +0 -17
  463. package/dist/nodes/functions/BSDFs.js +0 -64
  464. package/dist/nodes/functions/BSDFs.mjs +0 -64
  465. package/dist/nodes/lights/LightContextNode.js +0 -34
  466. package/dist/nodes/lights/LightContextNode.mjs +0 -35
  467. package/dist/nodes/lights/LightNode.js +0 -57
  468. package/dist/nodes/lights/LightNode.mjs +0 -58
  469. package/dist/nodes/lights/LightsNode.js +0 -58
  470. package/dist/nodes/lights/LightsNode.mjs +0 -59
  471. package/dist/nodes/loaders/NodeLoader.js +0 -195
  472. package/dist/nodes/loaders/NodeLoader.mjs +0 -196
  473. package/dist/nodes/loaders/NodeMaterialLoader.js +0 -23
  474. package/dist/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  475. package/dist/nodes/loaders/NodeObjectLoader.js +0 -39
  476. package/dist/nodes/loaders/NodeObjectLoader.mjs +0 -40
  477. package/dist/nodes/materials/LineBasicNodeMaterial.js +0 -26
  478. package/dist/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  479. package/dist/nodes/materials/Materials.js +0 -24
  480. package/dist/nodes/materials/Materials.mjs +0 -24
  481. package/dist/nodes/materials/MeshBasicNodeMaterial.js +0 -27
  482. package/dist/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  483. package/dist/nodes/materials/MeshStandardNodeMaterial.js +0 -40
  484. package/dist/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  485. package/dist/nodes/materials/NodeMaterial.js +0 -63
  486. package/dist/nodes/materials/NodeMaterial.mjs +0 -64
  487. package/dist/nodes/materials/PointsNodeMaterial.js +0 -29
  488. package/dist/nodes/materials/PointsNodeMaterial.mjs +0 -30
  489. package/dist/nodes/math/CondNode.js +0 -40
  490. package/dist/nodes/math/CondNode.mjs +0 -41
  491. package/dist/nodes/math/MathNode.js +0 -165
  492. package/dist/nodes/math/MathNode.mjs +0 -166
  493. package/dist/nodes/math/OperatorNode.js +0 -102
  494. package/dist/nodes/math/OperatorNode.mjs +0 -103
  495. package/dist/nodes/procedural/CheckerNode.js +0 -20
  496. package/dist/nodes/procedural/CheckerNode.mjs +0 -21
  497. package/dist/nodes/utils/ArrayElementNode.js +0 -18
  498. package/dist/nodes/utils/ArrayElementNode.mjs +0 -19
  499. package/dist/nodes/utils/ConvertNode.js +0 -24
  500. package/dist/nodes/utils/ConvertNode.mjs +0 -25
  501. package/dist/nodes/utils/JoinNode.js +0 -25
  502. package/dist/nodes/utils/JoinNode.mjs +0 -26
  503. package/dist/nodes/utils/MatcapUVNode.js +0 -15
  504. package/dist/nodes/utils/MatcapUVNode.mjs +0 -16
  505. package/dist/nodes/utils/OscNode.js +0 -49
  506. package/dist/nodes/utils/OscNode.mjs +0 -50
  507. package/dist/nodes/utils/SplitNode.js +0 -44
  508. package/dist/nodes/utils/SplitNode.mjs +0 -45
  509. package/dist/nodes/utils/SpriteSheetUVNode.js +0 -39
  510. package/dist/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  511. package/dist/nodes/utils/TimerNode.js +0 -43
  512. package/dist/nodes/utils/TimerNode.mjs +0 -44
  513. package/dist/offscreen/jank.js +0 -26
  514. package/dist/offscreen/jank.mjs +0 -27
  515. package/dist/offscreen/offscreen.js +0 -8
  516. package/dist/offscreen/offscreen.mjs +0 -7
  517. package/dist/offscreen/scene.js +0 -68
  518. package/dist/offscreen/scene.mjs +0 -52
  519. package/dist/renderers/nodes/accessors/CameraNode.js +0 -62
  520. package/dist/renderers/nodes/accessors/CameraNode.mjs +0 -63
  521. package/dist/renderers/nodes/accessors/ModelNode.js +0 -60
  522. package/dist/renderers/nodes/accessors/ModelNode.mjs +0 -61
  523. package/dist/renderers/nodes/accessors/ModelViewProjectionNode.js +0 -20
  524. package/dist/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  525. package/dist/renderers/nodes/accessors/NormalNode.js +0 -60
  526. package/dist/renderers/nodes/accessors/NormalNode.mjs +0 -61
  527. package/dist/renderers/nodes/accessors/PositionNode.js +0 -29
  528. package/dist/renderers/nodes/accessors/PositionNode.mjs +0 -30
  529. package/dist/renderers/nodes/accessors/UVNode.js +0 -12
  530. package/dist/renderers/nodes/accessors/UVNode.mjs +0 -13
  531. package/dist/renderers/nodes/core/AttributeNode.js +0 -34
  532. package/dist/renderers/nodes/core/AttributeNode.mjs +0 -35
  533. package/dist/renderers/nodes/core/InputNode.js +0 -30
  534. package/dist/renderers/nodes/core/InputNode.mjs +0 -31
  535. package/dist/renderers/nodes/core/Node.js +0 -33
  536. package/dist/renderers/nodes/core/Node.mjs +0 -34
  537. package/dist/renderers/nodes/core/NodeAttribute.js +0 -9
  538. package/dist/renderers/nodes/core/NodeAttribute.mjs +0 -10
  539. package/dist/renderers/nodes/core/NodeBuilder.js +0 -248
  540. package/dist/renderers/nodes/core/NodeBuilder.mjs +0 -249
  541. package/dist/renderers/nodes/core/NodeFrame.js +0 -34
  542. package/dist/renderers/nodes/core/NodeFrame.mjs +0 -35
  543. package/dist/renderers/nodes/core/NodeSlot.js +0 -9
  544. package/dist/renderers/nodes/core/NodeSlot.mjs +0 -10
  545. package/dist/renderers/nodes/core/NodeUniform.js +0 -17
  546. package/dist/renderers/nodes/core/NodeUniform.mjs +0 -18
  547. package/dist/renderers/nodes/core/NodeVary.js +0 -10
  548. package/dist/renderers/nodes/core/NodeVary.mjs +0 -11
  549. package/dist/renderers/nodes/core/VaryNode.js +0 -21
  550. package/dist/renderers/nodes/core/VaryNode.mjs +0 -22
  551. package/dist/renderers/nodes/core/constants.js +0 -22
  552. package/dist/renderers/nodes/core/constants.mjs +0 -22
  553. package/dist/renderers/nodes/inputs/ColorNode.js +0 -10
  554. package/dist/renderers/nodes/inputs/ColorNode.mjs +0 -11
  555. package/dist/renderers/nodes/inputs/FloatNode.js +0 -10
  556. package/dist/renderers/nodes/inputs/FloatNode.mjs +0 -11
  557. package/dist/renderers/nodes/inputs/Matrix3Node.js +0 -11
  558. package/dist/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  559. package/dist/renderers/nodes/inputs/Matrix4Node.js +0 -11
  560. package/dist/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  561. package/dist/renderers/nodes/inputs/TextureNode.js +0 -19
  562. package/dist/renderers/nodes/inputs/TextureNode.mjs +0 -20
  563. package/dist/renderers/nodes/inputs/Vector2Node.js +0 -10
  564. package/dist/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  565. package/dist/renderers/nodes/inputs/Vector3Node.js +0 -11
  566. package/dist/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  567. package/dist/renderers/nodes/inputs/Vector4Node.js +0 -11
  568. package/dist/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  569. package/dist/renderers/nodes/math/MathNode.js +0 -54
  570. package/dist/renderers/nodes/math/MathNode.mjs +0 -55
  571. package/dist/renderers/nodes/math/OperatorNode.js +0 -41
  572. package/dist/renderers/nodes/math/OperatorNode.mjs +0 -42
  573. package/dist/renderers/nodes/utils/SwitchNode.js +0 -19
  574. package/dist/renderers/nodes/utils/SwitchNode.mjs +0 -20
  575. package/dist/renderers/nodes/utils/TimerNode.js +0 -13
  576. package/dist/renderers/nodes/utils/TimerNode.mjs +0 -14
  577. package/dist/renderers/webgpu/WebGPU.js +0 -23
  578. package/dist/renderers/webgpu/WebGPU.mjs +0 -24
  579. package/dist/renderers/webgpu/WebGPUAttributes.js +0 -68
  580. package/dist/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  581. package/dist/renderers/webgpu/WebGPUBackground.js +0 -60
  582. package/dist/renderers/webgpu/WebGPUBackground.mjs +0 -61
  583. package/dist/renderers/webgpu/WebGPUBinding.js +0 -13
  584. package/dist/renderers/webgpu/WebGPUBinding.mjs +0 -14
  585. package/dist/renderers/webgpu/WebGPUBindings.js +0 -154
  586. package/dist/renderers/webgpu/WebGPUBindings.mjs +0 -155
  587. package/dist/renderers/webgpu/WebGPUComputePipelines.js +0 -43
  588. package/dist/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  589. package/dist/renderers/webgpu/WebGPUGeometries.js +0 -40
  590. package/dist/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  591. package/dist/renderers/webgpu/WebGPUInfo.js +0 -45
  592. package/dist/renderers/webgpu/WebGPUInfo.mjs +0 -46
  593. package/dist/renderers/webgpu/WebGPUObjects.js +0 -24
  594. package/dist/renderers/webgpu/WebGPUObjects.mjs +0 -25
  595. package/dist/renderers/webgpu/WebGPUProperties.js +0 -21
  596. package/dist/renderers/webgpu/WebGPUProperties.mjs +0 -22
  597. package/dist/renderers/webgpu/WebGPURenderLists.js +0 -118
  598. package/dist/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  599. package/dist/renderers/webgpu/WebGPURenderPipelines.js +0 -545
  600. package/dist/renderers/webgpu/WebGPURenderPipelines.mjs +0 -546
  601. package/dist/renderers/webgpu/WebGPURenderer.js +0 -596
  602. package/dist/renderers/webgpu/WebGPURenderer.mjs +0 -575
  603. package/dist/renderers/webgpu/WebGPUSampledTexture.js +0 -40
  604. package/dist/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  605. package/dist/renderers/webgpu/WebGPUSampler.js +0 -14
  606. package/dist/renderers/webgpu/WebGPUSampler.mjs +0 -15
  607. package/dist/renderers/webgpu/WebGPUStorageBuffer.js +0 -14
  608. package/dist/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  609. package/dist/renderers/webgpu/WebGPUTextureRenderer.js +0 -22
  610. package/dist/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  611. package/dist/renderers/webgpu/WebGPUTextureUtils.js +0 -97
  612. package/dist/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  613. package/dist/renderers/webgpu/WebGPUTextures.js +0 -483
  614. package/dist/renderers/webgpu/WebGPUTextures.mjs +0 -484
  615. package/dist/renderers/webgpu/WebGPUUniform.js +0 -81
  616. package/dist/renderers/webgpu/WebGPUUniform.mjs +0 -81
  617. package/dist/renderers/webgpu/WebGPUUniformsGroup.js +0 -175
  618. package/dist/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  619. package/dist/renderers/webgpu/constants.js +0 -241
  620. package/dist/renderers/webgpu/constants.mjs +0 -241
  621. package/dist/renderers/webgpu/nodes/ShaderLib.js +0 -41
  622. package/dist/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  623. package/dist/renderers/webgpu/nodes/WebGPUNodeBuilder.js +0 -164
  624. package/dist/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  625. package/dist/renderers/webgpu/nodes/WebGPUNodeUniform.js +0 -73
  626. package/dist/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  627. package/dist/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +0 -14
  628. package/dist/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  629. package/dist/renderers/webgpu/nodes/WebGPUNodes.js +0 -39
  630. 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
  };