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