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
@@ -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;