three-stdlib 2.24.2 → 2.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (540) hide show
  1. package/controls/OrbitControls.d.ts +2 -0
  2. package/index.cjs +116401 -611
  3. package/index.js +116037 -263
  4. package/package.json +17 -4
  5. package/_polyfill/CapsuleGeometry.cjs +0 -22
  6. package/_polyfill/CapsuleGeometry.js +0 -22
  7. package/_polyfill/CompressedArrayTexture.cjs +0 -12
  8. package/_polyfill/CompressedArrayTexture.js +0 -12
  9. package/_polyfill/Data3DTexture.cjs +0 -17
  10. package/_polyfill/Data3DTexture.js +0 -17
  11. package/animation/AnimationClipCreator.cjs +0 -56
  12. package/animation/AnimationClipCreator.js +0 -56
  13. package/animation/CCDIKSolver.cjs +0 -269
  14. package/animation/CCDIKSolver.js +0 -269
  15. package/animation/MMDAnimationHelper.cjs +0 -688
  16. package/animation/MMDAnimationHelper.js +0 -688
  17. package/animation/MMDPhysics.cjs +0 -830
  18. package/animation/MMDPhysics.js +0 -830
  19. package/cameras/CinematicCamera.cjs +0 -131
  20. package/cameras/CinematicCamera.js +0 -131
  21. package/controls/ArcballControls.cjs +0 -2033
  22. package/controls/ArcballControls.js +0 -2033
  23. package/controls/DeviceOrientationControls.cjs +0 -85
  24. package/controls/DeviceOrientationControls.js +0 -85
  25. package/controls/DragControls.cjs +0 -182
  26. package/controls/DragControls.js +0 -182
  27. package/controls/FirstPersonControls.cjs +0 -229
  28. package/controls/FirstPersonControls.js +0 -229
  29. package/controls/FlyControls.cjs +0 -248
  30. package/controls/FlyControls.js +0 -248
  31. package/controls/OrbitControls.cjs +0 -787
  32. package/controls/OrbitControls.js +0 -787
  33. package/controls/PointerLockControls.cjs +0 -103
  34. package/controls/PointerLockControls.js +0 -103
  35. package/controls/TrackballControls.cjs +0 -502
  36. package/controls/TrackballControls.js +0 -502
  37. package/controls/TransformControls.cjs +0 -1089
  38. package/controls/TransformControls.js +0 -1089
  39. package/controls/experimental/CameraControls.cjs +0 -736
  40. package/controls/experimental/CameraControls.js +0 -736
  41. package/csm/CSM.cjs +0 -244
  42. package/csm/CSM.js +0 -244
  43. package/csm/CSMFrustum.cjs +0 -75
  44. package/csm/CSMFrustum.js +0 -75
  45. package/csm/CSMHelper.cjs +0 -114
  46. package/csm/CSMHelper.js +0 -114
  47. package/csm/CSMShader.cjs +0 -261
  48. package/csm/CSMShader.js +0 -261
  49. package/curves/CurveExtras.cjs +0 -214
  50. package/curves/CurveExtras.js +0 -214
  51. package/curves/NURBSCurve.cjs +0 -35
  52. package/curves/NURBSCurve.js +0 -35
  53. package/curves/NURBSSurface.cjs +0 -28
  54. package/curves/NURBSSurface.js +0 -28
  55. package/curves/NURBSUtils.cjs +0 -226
  56. package/curves/NURBSUtils.js +0 -226
  57. package/deprecated/Geometry.cjs +0 -971
  58. package/deprecated/Geometry.js +0 -971
  59. package/effects/AnaglyphEffect.cjs +0 -102
  60. package/effects/AnaglyphEffect.js +0 -102
  61. package/effects/AsciiEffect.cjs +0 -155
  62. package/effects/AsciiEffect.js +0 -155
  63. package/effects/OutlineEffect.cjs +0 -275
  64. package/effects/OutlineEffect.js +0 -275
  65. package/effects/ParallaxBarrierEffect.cjs +0 -65
  66. package/effects/ParallaxBarrierEffect.js +0 -65
  67. package/effects/PeppersGhostEffect.cjs +0 -88
  68. package/effects/PeppersGhostEffect.js +0 -88
  69. package/effects/StereoEffect.cjs +0 -35
  70. package/effects/StereoEffect.js +0 -35
  71. package/environments/RoomEnvironment.cjs +0 -95
  72. package/environments/RoomEnvironment.js +0 -78
  73. package/exporters/ColladaExporter.cjs +0 -331
  74. package/exporters/ColladaExporter.js +0 -331
  75. package/exporters/DRACOExporter.cjs +0 -141
  76. package/exporters/DRACOExporter.js +0 -141
  77. package/exporters/GLTFExporter.cjs +0 -1909
  78. package/exporters/GLTFExporter.js +0 -1909
  79. package/exporters/MMDExporter.cjs +0 -131
  80. package/exporters/MMDExporter.js +0 -131
  81. package/exporters/OBJExporter.cjs +0 -181
  82. package/exporters/OBJExporter.js +0 -181
  83. package/exporters/PLYExporter.cjs +0 -280
  84. package/exporters/PLYExporter.js +0 -280
  85. package/exporters/STLExporter.cjs +0 -146
  86. package/exporters/STLExporter.js +0 -146
  87. package/exporters/USDZExporter.cjs +0 -340
  88. package/exporters/USDZExporter.js +0 -340
  89. package/geometries/BoxLineGeometry.cjs +0 -45
  90. package/geometries/BoxLineGeometry.js +0 -45
  91. package/geometries/ConvexGeometry.cjs +0 -26
  92. package/geometries/ConvexGeometry.js +0 -26
  93. package/geometries/DecalGeometry.cjs +0 -184
  94. package/geometries/DecalGeometry.js +0 -184
  95. package/geometries/LightningStrike.cjs +0 -553
  96. package/geometries/LightningStrike.js +0 -553
  97. package/geometries/ParametricGeometries.cjs +0 -130
  98. package/geometries/ParametricGeometries.js +0 -130
  99. package/geometries/ParametricGeometry.cjs +0 -63
  100. package/geometries/ParametricGeometry.js +0 -63
  101. package/geometries/RoundedBoxGeometry.cjs +0 -91
  102. package/geometries/RoundedBoxGeometry.js +0 -91
  103. package/geometries/TeapotGeometry.cjs +0 -1563
  104. package/geometries/TeapotGeometry.js +0 -1563
  105. package/geometries/TextGeometry.cjs +0 -27
  106. package/geometries/TextGeometry.js +0 -27
  107. package/helpers/LightProbeHelper.cjs +0 -73
  108. package/helpers/LightProbeHelper.js +0 -73
  109. package/helpers/PositionalAudioHelper.cjs +0 -68
  110. package/helpers/PositionalAudioHelper.js +0 -68
  111. package/helpers/RectAreaLightHelper.cjs +0 -44
  112. package/helpers/RectAreaLightHelper.js +0 -44
  113. package/helpers/VertexNormalsHelper.cjs +0 -47
  114. package/helpers/VertexNormalsHelper.js +0 -47
  115. package/helpers/VertexTangentsHelper.cjs +0 -43
  116. package/helpers/VertexTangentsHelper.js +0 -43
  117. package/interactive/HTMLMesh.cjs +0 -325
  118. package/interactive/HTMLMesh.js +0 -325
  119. package/interactive/InteractiveGroup.cjs +0 -68
  120. package/interactive/InteractiveGroup.js +0 -68
  121. package/interactive/SelectionBox.cjs +0 -134
  122. package/interactive/SelectionBox.js +0 -134
  123. package/interactive/SelectionHelper.cjs +0 -51
  124. package/interactive/SelectionHelper.js +0 -51
  125. package/libs/MeshoptDecoder.cjs +0 -221
  126. package/libs/MeshoptDecoder.js +0 -221
  127. package/libs/MotionControllers.cjs +0 -325
  128. package/libs/MotionControllers.js +0 -325
  129. package/lights/LightProbeGenerator.cjs +0 -145
  130. package/lights/LightProbeGenerator.js +0 -145
  131. package/lights/RectAreaLightUniformsLib.cjs +0 -32846
  132. package/lights/RectAreaLightUniformsLib.js +0 -32846
  133. package/lines/Line2.cjs +0 -13
  134. package/lines/Line2.js +0 -13
  135. package/lines/LineGeometry.cjs +0 -44
  136. package/lines/LineGeometry.js +0 -44
  137. package/lines/LineMaterial.cjs +0 -547
  138. package/lines/LineMaterial.js +0 -547
  139. package/lines/LineSegments2.cjs +0 -203
  140. package/lines/LineSegments2.js +0 -203
  141. package/lines/LineSegmentsGeometry.cjs +0 -124
  142. package/lines/LineSegmentsGeometry.js +0 -124
  143. package/lines/Wireframe.cjs +0 -32
  144. package/lines/Wireframe.js +0 -32
  145. package/lines/WireframeGeometry2.cjs +0 -13
  146. package/lines/WireframeGeometry2.js +0 -13
  147. package/loaders/3DMLoader.cjs +0 -803
  148. package/loaders/3DMLoader.js +0 -803
  149. package/loaders/3MFLoader.cjs +0 -854
  150. package/loaders/3MFLoader.js +0 -854
  151. package/loaders/AMFLoader.cjs +0 -284
  152. package/loaders/AMFLoader.js +0 -284
  153. package/loaders/AssimpLoader.cjs +0 -1434
  154. package/loaders/AssimpLoader.js +0 -1434
  155. package/loaders/BVHLoader.cjs +0 -207
  156. package/loaders/BVHLoader.js +0 -207
  157. package/loaders/BasisTextureLoader.cjs +0 -489
  158. package/loaders/BasisTextureLoader.js +0 -489
  159. package/loaders/ColladaLoader.cjs +0 -2405
  160. package/loaders/ColladaLoader.js +0 -2405
  161. package/loaders/DDSLoader.cjs +0 -148
  162. package/loaders/DDSLoader.js +0 -148
  163. package/loaders/DRACOLoader.cjs +0 -341
  164. package/loaders/DRACOLoader.js +0 -341
  165. package/loaders/EXRLoader.cjs +0 -1356
  166. package/loaders/EXRLoader.js +0 -1356
  167. package/loaders/FBXLoader.cjs +0 -2457
  168. package/loaders/FBXLoader.js +0 -2457
  169. package/loaders/FontLoader.cjs +0 -123
  170. package/loaders/FontLoader.js +0 -123
  171. package/loaders/GCodeLoader.cjs +0 -141
  172. package/loaders/GCodeLoader.js +0 -141
  173. package/loaders/GLTFLoader.cjs +0 -2504
  174. package/loaders/GLTFLoader.js +0 -2504
  175. package/loaders/HDRCubeTextureLoader.cjs +0 -75
  176. package/loaders/HDRCubeTextureLoader.js +0 -75
  177. package/loaders/KMZLoader.cjs +0 -75
  178. package/loaders/KMZLoader.js +0 -75
  179. package/loaders/KTX2Loader.cjs +0 -480
  180. package/loaders/KTX2Loader.js +0 -480
  181. package/loaders/KTXLoader.cjs +0 -93
  182. package/loaders/KTXLoader.js +0 -93
  183. package/loaders/LDrawLoader.cjs +0 -1424
  184. package/loaders/LDrawLoader.js +0 -1424
  185. package/loaders/LUT3dlLoader.cjs +0 -103
  186. package/loaders/LUT3dlLoader.js +0 -103
  187. package/loaders/LUTCubeLoader.cjs +0 -107
  188. package/loaders/LUTCubeLoader.js +0 -107
  189. package/loaders/LWOLoader.cjs +0 -645
  190. package/loaders/LWOLoader.js +0 -645
  191. package/loaders/LottieLoader.cjs +0 -47
  192. package/loaders/LottieLoader.js +0 -47
  193. package/loaders/MD2Loader.cjs +0 -359
  194. package/loaders/MD2Loader.js +0 -359
  195. package/loaders/MDDLoader.cjs +0 -58
  196. package/loaders/MDDLoader.js +0 -58
  197. package/loaders/MMDLoader.cjs +0 -1121
  198. package/loaders/MMDLoader.js +0 -1121
  199. package/loaders/MTLLoader.cjs +0 -304
  200. package/loaders/MTLLoader.js +0 -304
  201. package/loaders/NRRDLoader.cjs +0 -401
  202. package/loaders/NRRDLoader.js +0 -401
  203. package/loaders/OBJLoader.cjs +0 -487
  204. package/loaders/OBJLoader.js +0 -487
  205. package/loaders/PCDLoader.cjs +0 -248
  206. package/loaders/PCDLoader.js +0 -248
  207. package/loaders/PDBLoader.cjs +0 -247
  208. package/loaders/PDBLoader.js +0 -247
  209. package/loaders/PLYLoader.cjs +0 -317
  210. package/loaders/PLYLoader.js +0 -317
  211. package/loaders/PRWMLoader.cjs +0 -160
  212. package/loaders/PRWMLoader.js +0 -160
  213. package/loaders/PVRLoader.cjs +0 -131
  214. package/loaders/PVRLoader.js +0 -131
  215. package/loaders/RGBELoader.cjs +0 -252
  216. package/loaders/RGBELoader.js +0 -252
  217. package/loaders/RGBMLoader.cjs +0 -1004
  218. package/loaders/RGBMLoader.js +0 -1004
  219. package/loaders/STLLoader.cjs +0 -190
  220. package/loaders/STLLoader.js +0 -190
  221. package/loaders/SVGLoader.cjs +0 -1712
  222. package/loaders/SVGLoader.js +0 -1712
  223. package/loaders/TDSLoader.cjs +0 -650
  224. package/loaders/TDSLoader.js +0 -650
  225. package/loaders/TGALoader.cjs +0 -285
  226. package/loaders/TGALoader.js +0 -285
  227. package/loaders/TTFLoader.cjs +0 -131
  228. package/loaders/TTFLoader.js +0 -131
  229. package/loaders/TiltLoader.cjs +0 -375
  230. package/loaders/TiltLoader.js +0 -375
  231. package/loaders/VOXLoader.cjs +0 -432
  232. package/loaders/VOXLoader.js +0 -432
  233. package/loaders/VRMLLoader.cjs +0 -2105
  234. package/loaders/VRMLLoader.js +0 -2105
  235. package/loaders/VRMLoader.cjs +0 -38
  236. package/loaders/VRMLoader.js +0 -38
  237. package/loaders/VTKLoader.cjs +0 -648
  238. package/loaders/VTKLoader.js +0 -648
  239. package/loaders/XLoader.cjs +0 -1258
  240. package/loaders/XLoader.js +0 -1258
  241. package/loaders/XYZLoader.cjs +0 -60
  242. package/loaders/XYZLoader.js +0 -60
  243. package/loaders/lwo/IFFParser.cjs +0 -743
  244. package/loaders/lwo/IFFParser.js +0 -743
  245. package/loaders/lwo/LWO2Parser.cjs +0 -312
  246. package/loaders/lwo/LWO2Parser.js +0 -312
  247. package/loaders/lwo/LWO3Parser.cjs +0 -282
  248. package/loaders/lwo/LWO3Parser.js +0 -282
  249. package/math/Capsule.cjs +0 -98
  250. package/math/Capsule.js +0 -98
  251. package/math/ColorConverter.cjs +0 -42
  252. package/math/ColorConverter.js +0 -42
  253. package/math/ConvexHull.cjs +0 -596
  254. package/math/ConvexHull.js +0 -596
  255. package/math/ImprovedNoise.cjs +0 -304
  256. package/math/ImprovedNoise.js +0 -304
  257. package/math/Lut.cjs +0 -137
  258. package/math/Lut.js +0 -137
  259. package/math/MeshSurfaceSampler.cjs +0 -103
  260. package/math/MeshSurfaceSampler.js +0 -103
  261. package/math/OBB.cjs +0 -242
  262. package/math/OBB.js +0 -242
  263. package/math/Octree.cjs +0 -273
  264. package/math/Octree.js +0 -273
  265. package/math/SimplexNoise.cjs +0 -440
  266. package/math/SimplexNoise.js +0 -440
  267. package/misc/ConvexObjectBreaker.cjs +0 -292
  268. package/misc/ConvexObjectBreaker.js +0 -292
  269. package/misc/GPUComputationRenderer.cjs +0 -205
  270. package/misc/GPUComputationRenderer.js +0 -205
  271. package/misc/Gyroscope.cjs +0 -33
  272. package/misc/Gyroscope.js +0 -33
  273. package/misc/MD2Character.cjs +0 -167
  274. package/misc/MD2Character.js +0 -167
  275. package/misc/MD2CharacterComplex.cjs +0 -332
  276. package/misc/MD2CharacterComplex.js +0 -332
  277. package/misc/MorphAnimMesh.cjs +0 -40
  278. package/misc/MorphAnimMesh.js +0 -40
  279. package/misc/MorphBlendMesh.cjs +0 -179
  280. package/misc/MorphBlendMesh.js +0 -179
  281. package/misc/ProgressiveLightmap.cjs +0 -186
  282. package/misc/ProgressiveLightmap.js +0 -186
  283. package/misc/RollerCoaster.cjs +0 -353
  284. package/misc/RollerCoaster.js +0 -353
  285. package/misc/Timer.cjs +0 -101
  286. package/misc/Timer.js +0 -101
  287. package/misc/TubePainter.cjs +0 -123
  288. package/misc/TubePainter.js +0 -123
  289. package/misc/Volume.cjs +0 -305
  290. package/misc/Volume.js +0 -305
  291. package/misc/VolumeSlice.cjs +0 -114
  292. package/misc/VolumeSlice.js +0 -114
  293. package/misc/WebGL.cjs +0 -74
  294. package/misc/WebGL.js +0 -74
  295. package/modifiers/CurveModifier.cjs +0 -232
  296. package/modifiers/CurveModifier.js +0 -232
  297. package/modifiers/EdgeSplitModifier.cjs +0 -167
  298. package/modifiers/EdgeSplitModifier.js +0 -168
  299. package/modifiers/SimplifyModifier.cjs +0 -301
  300. package/modifiers/SimplifyModifier.js +0 -301
  301. package/modifiers/TessellateModifier.cjs +0 -214
  302. package/modifiers/TessellateModifier.js +0 -214
  303. package/objects/GroundProjectedEnv.cjs +0 -134
  304. package/objects/GroundProjectedEnv.js +0 -134
  305. package/objects/Lensflare.cjs +0 -291
  306. package/objects/Lensflare.js +0 -291
  307. package/objects/LightningStorm.cjs +0 -110
  308. package/objects/LightningStorm.js +0 -110
  309. package/objects/MarchingCubes.cjs +0 -4809
  310. package/objects/MarchingCubes.js +0 -4809
  311. package/objects/Reflector.cjs +0 -202
  312. package/objects/Reflector.js +0 -202
  313. package/objects/ReflectorForSSRPass.cjs +0 -260
  314. package/objects/ReflectorForSSRPass.js +0 -260
  315. package/objects/ReflectorRTT.cjs +0 -10
  316. package/objects/ReflectorRTT.js +0 -10
  317. package/objects/Refractor.cjs +0 -215
  318. package/objects/Refractor.js +0 -215
  319. package/objects/ShadowMesh.cjs +0 -45
  320. package/objects/ShadowMesh.js +0 -45
  321. package/objects/Sky.cjs +0 -200
  322. package/objects/Sky.js +0 -200
  323. package/objects/Water.cjs +0 -242
  324. package/objects/Water.js +0 -242
  325. package/objects/Water2.cjs +0 -256
  326. package/objects/Water2.js +0 -256
  327. package/physics/AmmoPhysics.cjs +0 -166
  328. package/physics/AmmoPhysics.js +0 -166
  329. package/postprocessing/AdaptiveToneMappingPass.cjs +0 -218
  330. package/postprocessing/AdaptiveToneMappingPass.js +0 -218
  331. package/postprocessing/AfterimagePass.cjs +0 -68
  332. package/postprocessing/AfterimagePass.js +0 -68
  333. package/postprocessing/BloomPass.cjs +0 -109
  334. package/postprocessing/BloomPass.js +0 -109
  335. package/postprocessing/BokehPass.cjs +0 -90
  336. package/postprocessing/BokehPass.js +0 -90
  337. package/postprocessing/ClearPass.cjs +0 -36
  338. package/postprocessing/ClearPass.js +0 -36
  339. package/postprocessing/CubeTexturePass.cjs +0 -53
  340. package/postprocessing/CubeTexturePass.js +0 -53
  341. package/postprocessing/DotScreenPass.cjs +0 -49
  342. package/postprocessing/DotScreenPass.js +0 -49
  343. package/postprocessing/EffectComposer.cjs +0 -157
  344. package/postprocessing/EffectComposer.js +0 -157
  345. package/postprocessing/FilmPass.cjs +0 -51
  346. package/postprocessing/FilmPass.js +0 -51
  347. package/postprocessing/GlitchPass.cjs +0 -84
  348. package/postprocessing/GlitchPass.js +0 -84
  349. package/postprocessing/HalftonePass.cjs +0 -53
  350. package/postprocessing/HalftonePass.js +0 -53
  351. package/postprocessing/LUTPass.cjs +0 -142
  352. package/postprocessing/LUTPass.js +0 -142
  353. package/postprocessing/MaskPass.cjs +0 -69
  354. package/postprocessing/MaskPass.js +0 -69
  355. package/postprocessing/OutlinePass.cjs +0 -479
  356. package/postprocessing/OutlinePass.js +0 -479
  357. package/postprocessing/Pass.cjs +0 -48
  358. package/postprocessing/Pass.js +0 -48
  359. package/postprocessing/RenderPass.cjs +0 -59
  360. package/postprocessing/RenderPass.js +0 -59
  361. package/postprocessing/RenderPixelatedPass.cjs +0 -199
  362. package/postprocessing/RenderPixelatedPass.js +0 -199
  363. package/postprocessing/SAOPass.cjs +0 -288
  364. package/postprocessing/SAOPass.js +0 -288
  365. package/postprocessing/SMAAPass.cjs +0 -112
  366. package/postprocessing/SMAAPass.js +0 -112
  367. package/postprocessing/SSAARenderPass.cjs +0 -189
  368. package/postprocessing/SSAARenderPass.js +0 -189
  369. package/postprocessing/SSAOPass.cjs +0 -272
  370. package/postprocessing/SSAOPass.js +0 -272
  371. package/postprocessing/SSRPass.cjs +0 -411
  372. package/postprocessing/SSRPass.js +0 -411
  373. package/postprocessing/SavePass.cjs +0 -38
  374. package/postprocessing/SavePass.js +0 -38
  375. package/postprocessing/ShaderPass.cjs +0 -49
  376. package/postprocessing/ShaderPass.js +0 -49
  377. package/postprocessing/TAARenderPass.cjs +0 -174
  378. package/postprocessing/TAARenderPass.js +0 -174
  379. package/postprocessing/TexturePass.cjs +0 -42
  380. package/postprocessing/TexturePass.js +0 -42
  381. package/postprocessing/UnrealBloomPass.cjs +0 -277
  382. package/postprocessing/UnrealBloomPass.js +0 -277
  383. package/postprocessing/WaterPass.cjs +0 -72
  384. package/postprocessing/WaterPass.js +0 -72
  385. package/renderers/CSS2DRenderer.cjs +0 -122
  386. package/renderers/CSS2DRenderer.js +0 -122
  387. package/renderers/CSS3DRenderer.cjs +0 -167
  388. package/renderers/CSS3DRenderer.js +0 -167
  389. package/renderers/Projector.cjs +0 -499
  390. package/renderers/Projector.js +0 -499
  391. package/renderers/SVGRenderer.cjs +0 -311
  392. package/renderers/SVGRenderer.js +0 -311
  393. package/shaders/ACESFilmicToneMappingShader.cjs +0 -55
  394. package/shaders/ACESFilmicToneMappingShader.js +0 -55
  395. package/shaders/AfterimageShader.cjs +0 -32
  396. package/shaders/AfterimageShader.js +0 -32
  397. package/shaders/BasicShader.cjs +0 -12
  398. package/shaders/BasicShader.js +0 -12
  399. package/shaders/BleachBypassShader.cjs +0 -35
  400. package/shaders/BleachBypassShader.js +0 -35
  401. package/shaders/BlendShader.cjs +0 -30
  402. package/shaders/BlendShader.js +0 -30
  403. package/shaders/BokehShader.cjs +0 -109
  404. package/shaders/BokehShader.js +0 -109
  405. package/shaders/BokehShader2.cjs +0 -269
  406. package/shaders/BokehShader2.js +0 -269
  407. package/shaders/BrightnessContrastShader.cjs +0 -32
  408. package/shaders/BrightnessContrastShader.js +0 -32
  409. package/shaders/ColorCorrectionShader.cjs +0 -30
  410. package/shaders/ColorCorrectionShader.js +0 -30
  411. package/shaders/ColorifyShader.cjs +0 -28
  412. package/shaders/ColorifyShader.js +0 -28
  413. package/shaders/ConvolutionShader.cjs +0 -55
  414. package/shaders/ConvolutionShader.js +0 -55
  415. package/shaders/CopyShader.cjs +0 -25
  416. package/shaders/CopyShader.js +0 -25
  417. package/shaders/DOFMipMapShader.cjs +0 -32
  418. package/shaders/DOFMipMapShader.js +0 -32
  419. package/shaders/DepthLimitedBlurShader.cjs +0 -114
  420. package/shaders/DepthLimitedBlurShader.js +0 -114
  421. package/shaders/DigitalGlitch.cjs +0 -85
  422. package/shaders/DigitalGlitch.js +0 -85
  423. package/shaders/DotScreenShader.cjs +0 -39
  424. package/shaders/DotScreenShader.js +0 -39
  425. package/shaders/FXAAShader.cjs +0 -1098
  426. package/shaders/FXAAShader.js +0 -1098
  427. package/shaders/FilmShader.cjs +0 -53
  428. package/shaders/FilmShader.js +0 -53
  429. package/shaders/FocusShader.cjs +0 -55
  430. package/shaders/FocusShader.js +0 -55
  431. package/shaders/FreiChenShader.cjs +0 -64
  432. package/shaders/FreiChenShader.js +0 -64
  433. package/shaders/FresnelShader.cjs +0 -47
  434. package/shaders/FresnelShader.js +0 -47
  435. package/shaders/GammaCorrectionShader.cjs +0 -23
  436. package/shaders/GammaCorrectionShader.js +0 -23
  437. package/shaders/GodRaysShader.cjs +0 -183
  438. package/shaders/GodRaysShader.js +0 -183
  439. package/shaders/HalftoneShader.cjs +0 -228
  440. package/shaders/HalftoneShader.js +0 -228
  441. package/shaders/HorizontalBlurShader.cjs +0 -49
  442. package/shaders/HorizontalBlurShader.js +0 -49
  443. package/shaders/HorizontalTiltShiftShader.cjs +0 -37
  444. package/shaders/HorizontalTiltShiftShader.js +0 -37
  445. package/shaders/HueSaturationShader.cjs +0 -43
  446. package/shaders/HueSaturationShader.js +0 -43
  447. package/shaders/KaleidoShader.cjs +0 -34
  448. package/shaders/KaleidoShader.js +0 -34
  449. package/shaders/LuminosityHighPassShader.cjs +0 -37
  450. package/shaders/LuminosityHighPassShader.js +0 -37
  451. package/shaders/LuminosityShader.cjs +0 -25
  452. package/shaders/LuminosityShader.js +0 -25
  453. package/shaders/MirrorShader.cjs +0 -35
  454. package/shaders/MirrorShader.js +0 -35
  455. package/shaders/NormalMapShader.cjs +0 -31
  456. package/shaders/NormalMapShader.js +0 -31
  457. package/shaders/ParallaxShader.cjs +0 -133
  458. package/shaders/ParallaxShader.js +0 -133
  459. package/shaders/PixelShader.cjs +0 -28
  460. package/shaders/PixelShader.js +0 -28
  461. package/shaders/RGBShiftShader.cjs +0 -30
  462. package/shaders/RGBShiftShader.js +0 -30
  463. package/shaders/SAOShader.cjs +0 -144
  464. package/shaders/SAOShader.js +0 -144
  465. package/shaders/SMAAShader.cjs +0 -358
  466. package/shaders/SMAAShader.js +0 -358
  467. package/shaders/SSAOShader.cjs +0 -182
  468. package/shaders/SSAOShader.js +0 -182
  469. package/shaders/SSRShader.cjs +0 -342
  470. package/shaders/SSRShader.js +0 -342
  471. package/shaders/SepiaShader.cjs +0 -29
  472. package/shaders/SepiaShader.js +0 -29
  473. package/shaders/SobelOperatorShader.cjs +0 -54
  474. package/shaders/SobelOperatorShader.js +0 -54
  475. package/shaders/SubsurfaceScatteringShader.cjs +0 -98
  476. package/shaders/SubsurfaceScatteringShader.js +0 -98
  477. package/shaders/TechnicolorShader.cjs +0 -24
  478. package/shaders/TechnicolorShader.js +0 -24
  479. package/shaders/ToneMapShader.cjs +0 -51
  480. package/shaders/ToneMapShader.js +0 -51
  481. package/shaders/ToonShader.cjs +0 -188
  482. package/shaders/ToonShader.js +0 -188
  483. package/shaders/TriangleBlurShader.cjs +0 -37
  484. package/shaders/TriangleBlurShader.js +0 -37
  485. package/shaders/UnpackDepthRGBAShader.cjs +0 -26
  486. package/shaders/UnpackDepthRGBAShader.js +0 -26
  487. package/shaders/VerticalBlurShader.cjs +0 -50
  488. package/shaders/VerticalBlurShader.js +0 -50
  489. package/shaders/VerticalTiltShiftShader.cjs +0 -37
  490. package/shaders/VerticalTiltShiftShader.js +0 -37
  491. package/shaders/VignetteShader.cjs +0 -38
  492. package/shaders/VignetteShader.js +0 -38
  493. package/shaders/VolumeShader.cjs +0 -225
  494. package/shaders/VolumeShader.js +0 -225
  495. package/shaders/WaterRefractionShader.cjs +0 -59
  496. package/shaders/WaterRefractionShader.js +0 -59
  497. package/shaders/types.cjs +0 -1
  498. package/shaders/types.js +0 -1
  499. package/textures/FlakesTexture.cjs +0 -30
  500. package/textures/FlakesTexture.js +0 -30
  501. package/types/helpers.cjs +0 -4
  502. package/types/helpers.js +0 -4
  503. package/utils/BufferGeometryUtils.cjs +0 -636
  504. package/utils/BufferGeometryUtils.js +0 -636
  505. package/utils/GeometryCompressionUtils.cjs +0 -573
  506. package/utils/GeometryCompressionUtils.js +0 -573
  507. package/utils/GeometryUtils.cjs +0 -109
  508. package/utils/GeometryUtils.js +0 -109
  509. package/utils/RoughnessMipmapper.cjs +0 -223
  510. package/utils/RoughnessMipmapper.js +0 -223
  511. package/utils/SceneUtils.cjs +0 -36
  512. package/utils/SceneUtils.js +0 -36
  513. package/utils/ShadowMapViewer.cjs +0 -111
  514. package/utils/ShadowMapViewer.js +0 -111
  515. package/utils/SkeletonUtils.cjs +0 -211
  516. package/utils/SkeletonUtils.js +0 -211
  517. package/utils/UVsDebug.cjs +0 -80
  518. package/utils/UVsDebug.js +0 -80
  519. package/utils/WorkerPool.cjs +0 -62
  520. package/utils/WorkerPool.js +0 -62
  521. package/webxr/ARButton.cjs +0 -119
  522. package/webxr/ARButton.js +0 -119
  523. package/webxr/OculusHandModel.cjs +0 -82
  524. package/webxr/OculusHandModel.js +0 -82
  525. package/webxr/OculusHandPointerModel.cjs +0 -241
  526. package/webxr/OculusHandPointerModel.js +0 -224
  527. package/webxr/Text2D.cjs +0 -48
  528. package/webxr/Text2D.js +0 -31
  529. package/webxr/VRButton.cjs +0 -111
  530. package/webxr/VRButton.js +0 -111
  531. package/webxr/XRControllerModelFactory.cjs +0 -174
  532. package/webxr/XRControllerModelFactory.js +0 -174
  533. package/webxr/XREstimatedLight.cjs +0 -126
  534. package/webxr/XREstimatedLight.js +0 -126
  535. package/webxr/XRHandMeshModel.cjs +0 -82
  536. package/webxr/XRHandMeshModel.js +0 -82
  537. package/webxr/XRHandModelFactory.cjs +0 -61
  538. package/webxr/XRHandModelFactory.js +0 -61
  539. package/webxr/XRHandPrimitiveModel.cjs +0 -68
  540. package/webxr/XRHandPrimitiveModel.js +0 -68
@@ -1,1121 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const THREE = require("three");
4
- const TGALoader = require("./TGALoader.cjs");
5
- const mmdParser = require("mmd-parser");
6
- class MMDLoader extends THREE.Loader {
7
- constructor(manager) {
8
- super(manager);
9
- this.loader = new THREE.FileLoader(this.manager);
10
- this.parser = null;
11
- this.meshBuilder = new MeshBuilder(this.manager);
12
- this.animationBuilder = new AnimationBuilder();
13
- }
14
- /**
15
- * @param {string} animationPath
16
- * @return {MMDLoader}
17
- */
18
- setAnimationPath(animationPath) {
19
- this.animationPath = animationPath;
20
- return this;
21
- }
22
- // Load MMD assets as Three.js Object
23
- /**
24
- * Loads Model file (.pmd or .pmx) as a SkinnedMesh.
25
- *
26
- * @param {string} url - url to Model(.pmd or .pmx) file
27
- * @param {function} onLoad
28
- * @param {function} onProgress
29
- * @param {function} onError
30
- */
31
- load(url, onLoad, onProgress, onError) {
32
- const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);
33
- let resourcePath;
34
- if (this.resourcePath !== "") {
35
- resourcePath = this.resourcePath;
36
- } else if (this.path !== "") {
37
- resourcePath = this.path;
38
- } else {
39
- resourcePath = THREE.LoaderUtils.extractUrlBase(url);
40
- }
41
- const modelExtension = this._extractExtension(url).toLowerCase();
42
- if (modelExtension !== "pmd" && modelExtension !== "pmx") {
43
- if (onError)
44
- onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + "."));
45
- return;
46
- }
47
- this[modelExtension === "pmd" ? "loadPMD" : "loadPMX"](
48
- url,
49
- function(data) {
50
- onLoad(builder.build(data, resourcePath, onProgress, onError));
51
- },
52
- onProgress,
53
- onError
54
- );
55
- }
56
- /**
57
- * Loads Motion file(s) (.vmd) as a AnimationClip.
58
- * If two or more files are specified, they'll be merged.
59
- *
60
- * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)
61
- * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object
62
- * @param {function} onLoad
63
- * @param {function} onProgress
64
- * @param {function} onError
65
- */
66
- loadAnimation(url, object, onLoad, onProgress, onError) {
67
- const builder = this.animationBuilder;
68
- this.loadVMD(
69
- url,
70
- function(vmd) {
71
- onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));
72
- },
73
- onProgress,
74
- onError
75
- );
76
- }
77
- /**
78
- * Loads mode file and motion file(s) as an object containing
79
- * a SkinnedMesh and a AnimationClip.
80
- * Tracks of AnimationClip are fitting to the model.
81
- *
82
- * @param {string} modelUrl - url to Model(.pmd or .pmx) file
83
- * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file
84
- * @param {function} onLoad
85
- * @param {function} onProgress
86
- * @param {function} onError
87
- */
88
- loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) {
89
- const scope = this;
90
- this.load(
91
- modelUrl,
92
- function(mesh) {
93
- scope.loadAnimation(
94
- vmdUrl,
95
- mesh,
96
- function(animation) {
97
- onLoad({
98
- mesh,
99
- animation
100
- });
101
- },
102
- onProgress,
103
- onError
104
- );
105
- },
106
- onProgress,
107
- onError
108
- );
109
- }
110
- // Load MMD assets as Object data parsed by MMDParser
111
- /**
112
- * Loads .pmd file as an Object.
113
- *
114
- * @param {string} url - url to .pmd file
115
- * @param {function} onLoad
116
- * @param {function} onProgress
117
- * @param {function} onError
118
- */
119
- loadPMD(url, onLoad, onProgress, onError) {
120
- const parser = this._getParser();
121
- this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
122
- url,
123
- function(buffer) {
124
- onLoad(parser.parsePmd(buffer, true));
125
- },
126
- onProgress,
127
- onError
128
- );
129
- }
130
- /**
131
- * Loads .pmx file as an Object.
132
- *
133
- * @param {string} url - url to .pmx file
134
- * @param {function} onLoad
135
- * @param {function} onProgress
136
- * @param {function} onError
137
- */
138
- loadPMX(url, onLoad, onProgress, onError) {
139
- const parser = this._getParser();
140
- this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
141
- url,
142
- function(buffer) {
143
- onLoad(parser.parsePmx(buffer, true));
144
- },
145
- onProgress,
146
- onError
147
- );
148
- }
149
- /**
150
- * Loads .vmd file as an Object. If two or more files are specified
151
- * they'll be merged.
152
- *
153
- * @param {string|Array<string>} url - url(s) to .vmd file(s)
154
- * @param {function} onLoad
155
- * @param {function} onProgress
156
- * @param {function} onError
157
- */
158
- loadVMD(url, onLoad, onProgress, onError) {
159
- const urls = Array.isArray(url) ? url : [url];
160
- const vmds = [];
161
- const vmdNum = urls.length;
162
- const parser = this._getParser();
163
- this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
164
- for (let i = 0, il = urls.length; i < il; i++) {
165
- this.loader.load(
166
- urls[i],
167
- function(buffer) {
168
- vmds.push(parser.parseVmd(buffer, true));
169
- if (vmds.length === vmdNum)
170
- onLoad(parser.mergeVmds(vmds));
171
- },
172
- onProgress,
173
- onError
174
- );
175
- }
176
- }
177
- /**
178
- * Loads .vpd file as an Object.
179
- *
180
- * @param {string} url - url to .vpd file
181
- * @param {boolean} isUnicode
182
- * @param {function} onLoad
183
- * @param {function} onProgress
184
- * @param {function} onError
185
- */
186
- loadVPD(url, isUnicode, onLoad, onProgress, onError) {
187
- const parser = this._getParser();
188
- this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
189
- url,
190
- function(text) {
191
- onLoad(parser.parseVpd(text, true));
192
- },
193
- onProgress,
194
- onError
195
- );
196
- }
197
- // private methods
198
- _extractExtension(url) {
199
- const index = url.lastIndexOf(".");
200
- return index < 0 ? "" : url.slice(index + 1);
201
- }
202
- _getParser() {
203
- if (this.parser === null) {
204
- this.parser = new mmdParser.Parser();
205
- }
206
- return this.parser;
207
- }
208
- }
209
- const DEFAULT_TOON_TEXTURES = [
210
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
211
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==",
212
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC",
213
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==",
214
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==",
215
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=",
216
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=",
217
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
218
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
219
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
220
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII="
221
- ];
222
- class MeshBuilder {
223
- constructor(manager) {
224
- this.crossOrigin = "anonymous";
225
- this.geometryBuilder = new GeometryBuilder();
226
- this.materialBuilder = new MaterialBuilder(manager);
227
- }
228
- /**
229
- * @param {string} crossOrigin
230
- * @return {MeshBuilder}
231
- */
232
- setCrossOrigin(crossOrigin) {
233
- this.crossOrigin = crossOrigin;
234
- return this;
235
- }
236
- /**
237
- * @param {Object} data - parsed PMD/PMX data
238
- * @param {string} resourcePath
239
- * @param {function} onProgress
240
- * @param {function} onError
241
- * @return {SkinnedMesh}
242
- */
243
- build(data, resourcePath, onProgress, onError) {
244
- const geometry = this.geometryBuilder.build(data);
245
- const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError);
246
- const mesh = new THREE.SkinnedMesh(geometry, material);
247
- const skeleton = new THREE.Skeleton(initBones(mesh));
248
- mesh.bind(skeleton);
249
- return mesh;
250
- }
251
- }
252
- function initBones(mesh) {
253
- const geometry = mesh.geometry;
254
- const bones = [];
255
- if (geometry && geometry.bones !== void 0) {
256
- for (let i = 0, il = geometry.bones.length; i < il; i++) {
257
- const gbone = geometry.bones[i];
258
- const bone = new THREE.Bone();
259
- bones.push(bone);
260
- bone.name = gbone.name;
261
- bone.position.fromArray(gbone.pos);
262
- bone.quaternion.fromArray(gbone.rotq);
263
- if (gbone.scl !== void 0)
264
- bone.scale.fromArray(gbone.scl);
265
- }
266
- for (let i = 0, il = geometry.bones.length; i < il; i++) {
267
- const gbone = geometry.bones[i];
268
- if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {
269
- bones[gbone.parent].add(bones[i]);
270
- } else {
271
- mesh.add(bones[i]);
272
- }
273
- }
274
- }
275
- mesh.updateMatrixWorld(true);
276
- return bones;
277
- }
278
- class GeometryBuilder {
279
- /**
280
- * @param {Object} data - parsed PMD/PMX data
281
- * @return {BufferGeometry}
282
- */
283
- build(data) {
284
- const positions = [];
285
- const uvs = [];
286
- const normals = [];
287
- const indices = [];
288
- const groups = [];
289
- const bones = [];
290
- const skinIndices = [];
291
- const skinWeights = [];
292
- const morphTargets = [];
293
- const morphPositions = [];
294
- const iks = [];
295
- const grants = [];
296
- const rigidBodies = [];
297
- const constraints = [];
298
- let offset = 0;
299
- const boneTypeTable = {};
300
- for (let i = 0; i < data.metadata.vertexCount; i++) {
301
- const v = data.vertices[i];
302
- for (let j = 0, jl = v.position.length; j < jl; j++) {
303
- positions.push(v.position[j]);
304
- }
305
- for (let j = 0, jl = v.normal.length; j < jl; j++) {
306
- normals.push(v.normal[j]);
307
- }
308
- for (let j = 0, jl = v.uv.length; j < jl; j++) {
309
- uvs.push(v.uv[j]);
310
- }
311
- for (let j = 0; j < 4; j++) {
312
- skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0);
313
- }
314
- for (let j = 0; j < 4; j++) {
315
- skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0);
316
- }
317
- }
318
- for (let i = 0; i < data.metadata.faceCount; i++) {
319
- const face = data.faces[i];
320
- for (let j = 0, jl = face.indices.length; j < jl; j++) {
321
- indices.push(face.indices[j]);
322
- }
323
- }
324
- for (let i = 0; i < data.metadata.materialCount; i++) {
325
- const material = data.materials[i];
326
- groups.push({
327
- offset: offset * 3,
328
- count: material.faceCount * 3
329
- });
330
- offset += material.faceCount;
331
- }
332
- for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
333
- const body = data.rigidBodies[i];
334
- let value = boneTypeTable[body.boneIndex];
335
- value = value === void 0 ? body.type : Math.max(body.type, value);
336
- boneTypeTable[body.boneIndex] = value;
337
- }
338
- for (let i = 0; i < data.metadata.boneCount; i++) {
339
- const boneData = data.bones[i];
340
- const bone = {
341
- index: i,
342
- transformationClass: boneData.transformationClass,
343
- parent: boneData.parentIndex,
344
- name: boneData.name,
345
- pos: boneData.position.slice(0, 3),
346
- rotq: [0, 0, 0, 1],
347
- scl: [1, 1, 1],
348
- rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1
349
- };
350
- if (bone.parent !== -1) {
351
- bone.pos[0] -= data.bones[bone.parent].position[0];
352
- bone.pos[1] -= data.bones[bone.parent].position[1];
353
- bone.pos[2] -= data.bones[bone.parent].position[2];
354
- }
355
- bones.push(bone);
356
- }
357
- if (data.metadata.format === "pmd") {
358
- for (let i = 0; i < data.metadata.ikCount; i++) {
359
- const ik = data.iks[i];
360
- const param = {
361
- target: ik.target,
362
- effector: ik.effector,
363
- iteration: ik.iteration,
364
- maxAngle: ik.maxAngle * 4,
365
- links: []
366
- };
367
- for (let j = 0, jl = ik.links.length; j < jl; j++) {
368
- const link = {};
369
- link.index = ik.links[j].index;
370
- link.enabled = true;
371
- if (data.bones[link.index].name.indexOf("ひざ") >= 0) {
372
- link.limitation = new THREE.Vector3(1, 0, 0);
373
- }
374
- param.links.push(link);
375
- }
376
- iks.push(param);
377
- }
378
- } else {
379
- for (let i = 0; i < data.metadata.boneCount; i++) {
380
- const ik = data.bones[i].ik;
381
- if (ik === void 0)
382
- continue;
383
- const param = {
384
- target: i,
385
- effector: ik.effector,
386
- iteration: ik.iteration,
387
- maxAngle: ik.maxAngle,
388
- links: []
389
- };
390
- for (let j = 0, jl = ik.links.length; j < jl; j++) {
391
- const link = {};
392
- link.index = ik.links[j].index;
393
- link.enabled = true;
394
- if (ik.links[j].angleLimitation === 1) {
395
- const rotationMin = ik.links[j].lowerLimitationAngle;
396
- const rotationMax = ik.links[j].upperLimitationAngle;
397
- const tmp1 = -rotationMax[0];
398
- const tmp2 = -rotationMax[1];
399
- rotationMax[0] = -rotationMin[0];
400
- rotationMax[1] = -rotationMin[1];
401
- rotationMin[0] = tmp1;
402
- rotationMin[1] = tmp2;
403
- link.rotationMin = new THREE.Vector3().fromArray(rotationMin);
404
- link.rotationMax = new THREE.Vector3().fromArray(rotationMax);
405
- }
406
- param.links.push(link);
407
- }
408
- iks.push(param);
409
- bones[i].ik = param;
410
- }
411
- }
412
- if (data.metadata.format === "pmx") {
413
- let traverse = function(entry) {
414
- if (entry.param) {
415
- grants.push(entry.param);
416
- bones[entry.param.index].grant = entry.param;
417
- }
418
- entry.visited = true;
419
- for (let i = 0, il = entry.children.length; i < il; i++) {
420
- const child = entry.children[i];
421
- if (!child.visited)
422
- traverse(child);
423
- }
424
- };
425
- const grantEntryMap = {};
426
- for (let i = 0; i < data.metadata.boneCount; i++) {
427
- const boneData = data.bones[i];
428
- const grant = boneData.grant;
429
- if (grant === void 0)
430
- continue;
431
- const param = {
432
- index: i,
433
- parentIndex: grant.parentIndex,
434
- ratio: grant.ratio,
435
- isLocal: grant.isLocal,
436
- affectRotation: grant.affectRotation,
437
- affectPosition: grant.affectPosition,
438
- transformationClass: boneData.transformationClass
439
- };
440
- grantEntryMap[i] = { parent: null, children: [], param, visited: false };
441
- }
442
- const rootEntry = { parent: null, children: [], param: null, visited: false };
443
- for (const boneIndex in grantEntryMap) {
444
- const grantEntry = grantEntryMap[boneIndex];
445
- const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry;
446
- grantEntry.parent = parentGrantEntry;
447
- parentGrantEntry.children.push(grantEntry);
448
- }
449
- traverse(rootEntry);
450
- }
451
- function updateAttributes(attribute, morph, ratio) {
452
- for (let i = 0; i < morph.elementCount; i++) {
453
- const element = morph.elements[i];
454
- let index;
455
- if (data.metadata.format === "pmd") {
456
- index = data.morphs[0].elements[element.index].index;
457
- } else {
458
- index = element.index;
459
- }
460
- attribute.array[index * 3 + 0] += element.position[0] * ratio;
461
- attribute.array[index * 3 + 1] += element.position[1] * ratio;
462
- attribute.array[index * 3 + 2] += element.position[2] * ratio;
463
- }
464
- }
465
- for (let i = 0; i < data.metadata.morphCount; i++) {
466
- const morph = data.morphs[i];
467
- const params = { name: morph.name };
468
- const attribute = new THREE.Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
469
- attribute.name = morph.name;
470
- for (let j = 0; j < data.metadata.vertexCount * 3; j++) {
471
- attribute.array[j] = positions[j];
472
- }
473
- if (data.metadata.format === "pmd") {
474
- if (i !== 0) {
475
- updateAttributes(attribute, morph, 1);
476
- }
477
- } else {
478
- if (morph.type === 0) {
479
- for (let j = 0; j < morph.elementCount; j++) {
480
- const morph2 = data.morphs[morph.elements[j].index];
481
- const ratio = morph.elements[j].ratio;
482
- if (morph2.type === 1) {
483
- updateAttributes(attribute, morph2, ratio);
484
- } else {
485
- }
486
- }
487
- } else if (morph.type === 1) {
488
- updateAttributes(attribute, morph, 1);
489
- } else if (morph.type === 2) {
490
- } else if (morph.type === 3) {
491
- } else if (morph.type === 4) {
492
- } else if (morph.type === 5) {
493
- } else if (morph.type === 6) {
494
- } else if (morph.type === 7) {
495
- } else if (morph.type === 8) {
496
- }
497
- }
498
- morphTargets.push(params);
499
- morphPositions.push(attribute);
500
- }
501
- for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
502
- const rigidBody = data.rigidBodies[i];
503
- const params = {};
504
- for (const key in rigidBody) {
505
- params[key] = rigidBody[key];
506
- }
507
- if (data.metadata.format === "pmx") {
508
- if (params.boneIndex !== -1) {
509
- const bone = data.bones[params.boneIndex];
510
- params.position[0] -= bone.position[0];
511
- params.position[1] -= bone.position[1];
512
- params.position[2] -= bone.position[2];
513
- }
514
- }
515
- rigidBodies.push(params);
516
- }
517
- for (let i = 0; i < data.metadata.constraintCount; i++) {
518
- const constraint = data.constraints[i];
519
- const params = {};
520
- for (const key in constraint) {
521
- params[key] = constraint[key];
522
- }
523
- const bodyA = rigidBodies[params.rigidBodyIndex1];
524
- const bodyB = rigidBodies[params.rigidBodyIndex2];
525
- if (bodyA.type !== 0 && bodyB.type === 2) {
526
- if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) {
527
- bodyB.type = 1;
528
- }
529
- }
530
- constraints.push(params);
531
- }
532
- const geometry = new THREE.BufferGeometry();
533
- geometry.setAttribute("position", new THREE.Float32BufferAttribute(positions, 3));
534
- geometry.setAttribute("normal", new THREE.Float32BufferAttribute(normals, 3));
535
- geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
536
- geometry.setAttribute("skinIndex", new THREE.Uint16BufferAttribute(skinIndices, 4));
537
- geometry.setAttribute("skinWeight", new THREE.Float32BufferAttribute(skinWeights, 4));
538
- geometry.setIndex(indices);
539
- for (let i = 0, il = groups.length; i < il; i++) {
540
- geometry.addGroup(groups[i].offset, groups[i].count, i);
541
- }
542
- geometry.bones = bones;
543
- geometry.morphTargets = morphTargets;
544
- geometry.morphAttributes.position = morphPositions;
545
- geometry.morphTargetsRelative = false;
546
- geometry.userData.MMD = {
547
- bones,
548
- iks,
549
- grants,
550
- rigidBodies,
551
- constraints,
552
- format: data.metadata.format
553
- };
554
- geometry.computeBoundingSphere();
555
- return geometry;
556
- }
557
- }
558
- class MaterialBuilder {
559
- constructor(manager) {
560
- this.manager = manager;
561
- this.textureLoader = new THREE.TextureLoader(this.manager);
562
- this.tgaLoader = null;
563
- this.crossOrigin = "anonymous";
564
- this.resourcePath = void 0;
565
- }
566
- /**
567
- * @param {string} crossOrigin
568
- * @return {MaterialBuilder}
569
- */
570
- setCrossOrigin(crossOrigin) {
571
- this.crossOrigin = crossOrigin;
572
- return this;
573
- }
574
- /**
575
- * @param {string} resourcePath
576
- * @return {MaterialBuilder}
577
- */
578
- setResourcePath(resourcePath) {
579
- this.resourcePath = resourcePath;
580
- return this;
581
- }
582
- /**
583
- * @param {Object} data - parsed PMD/PMX data
584
- * @param {BufferGeometry} geometry - some properties are dependend on geometry
585
- * @param {function} onProgress
586
- * @param {function} onError
587
- * @return {Array<MeshToonMaterial>}
588
- */
589
- build(data, geometry) {
590
- const materials = [];
591
- const textures = {};
592
- this.textureLoader.setCrossOrigin(this.crossOrigin);
593
- for (let i = 0; i < data.metadata.materialCount; i++) {
594
- const material = data.materials[i];
595
- const params = { userData: {} };
596
- if (material.name !== void 0)
597
- params.name = material.name;
598
- params.color = new THREE.Color().fromArray(material.diffuse);
599
- params.opacity = material.diffuse[3];
600
- params.emissive = new THREE.Color().fromArray(material.ambient);
601
- params.transparent = params.opacity !== 1;
602
- params.skinning = geometry.bones.length > 0 ? true : false;
603
- params.morphTargets = geometry.morphTargets.length > 0 ? true : false;
604
- params.fog = true;
605
- params.blending = THREE.CustomBlending;
606
- params.blendSrc = THREE.SrcAlphaFactor;
607
- params.blendDst = THREE.OneMinusSrcAlphaFactor;
608
- params.blendSrcAlpha = THREE.SrcAlphaFactor;
609
- params.blendDstAlpha = THREE.DstAlphaFactor;
610
- if (data.metadata.format === "pmx" && (material.flag & 1) === 1) {
611
- params.side = THREE.DoubleSide;
612
- } else {
613
- params.side = params.opacity === 1 ? THREE.FrontSide : THREE.DoubleSide;
614
- }
615
- if (data.metadata.format === "pmd") {
616
- if (material.fileName) {
617
- const fileName = material.fileName;
618
- const fileNames = fileName.split("*");
619
- params.map = this._loadTexture(fileNames[0], textures);
620
- if (fileNames.length > 1) {
621
- const extension = fileNames[1].slice(-4).toLowerCase();
622
- params.envMap = this._loadTexture(fileNames[1], textures);
623
- params.combine = extension === ".sph" ? THREE.MultiplyOperation : THREE.AddOperation;
624
- }
625
- }
626
- const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data.toonTextures[material.toonIndex].fileName;
627
- params.gradientMap = this._loadTexture(toonFileName, textures, {
628
- isToonTexture: true,
629
- isDefaultToonTexture: this._isDefaultToonTexture(toonFileName)
630
- });
631
- params.userData.outlineParameters = {
632
- thickness: material.edgeFlag === 1 ? 3e-3 : 0,
633
- color: [0, 0, 0],
634
- alpha: 1,
635
- visible: material.edgeFlag === 1
636
- };
637
- } else {
638
- if (material.textureIndex !== -1) {
639
- params.map = this._loadTexture(data.textures[material.textureIndex], textures);
640
- }
641
- if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) {
642
- params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures);
643
- params.combine = material.envFlag === 1 ? THREE.MultiplyOperation : THREE.AddOperation;
644
- }
645
- let toonFileName, isDefaultToon;
646
- if (material.toonIndex === -1 || material.toonFlag !== 0) {
647
- toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp";
648
- isDefaultToon = true;
649
- } else {
650
- toonFileName = data.textures[material.toonIndex];
651
- isDefaultToon = false;
652
- }
653
- params.gradientMap = this._loadTexture(toonFileName, textures, {
654
- isToonTexture: true,
655
- isDefaultToonTexture: isDefaultToon
656
- });
657
- params.userData.outlineParameters = {
658
- thickness: material.edgeSize / 300,
659
- // TODO: better calculation?
660
- color: material.edgeColor.slice(0, 3),
661
- alpha: material.edgeColor[3],
662
- visible: (material.flag & 16) !== 0 && material.edgeSize > 0
663
- };
664
- }
665
- if (params.map !== void 0) {
666
- if (!params.transparent) {
667
- this._checkImageTransparency(params.map, geometry, i);
668
- }
669
- params.emissive.multiplyScalar(0.2);
670
- }
671
- materials.push(new THREE.MeshToonMaterial(params));
672
- }
673
- if (data.metadata.format === "pmx") {
674
- let checkAlphaMorph = function(elements, materials2) {
675
- for (let i = 0, il = elements.length; i < il; i++) {
676
- const element = elements[i];
677
- if (element.index === -1)
678
- continue;
679
- const material = materials2[element.index];
680
- if (material.opacity !== element.diffuse[3]) {
681
- material.transparent = true;
682
- }
683
- }
684
- };
685
- for (let i = 0, il = data.morphs.length; i < il; i++) {
686
- const morph = data.morphs[i];
687
- const elements = morph.elements;
688
- if (morph.type === 0) {
689
- for (let j = 0, jl = elements.length; j < jl; j++) {
690
- const morph2 = data.morphs[elements[j].index];
691
- if (morph2.type !== 8)
692
- continue;
693
- checkAlphaMorph(morph2.elements, materials);
694
- }
695
- } else if (morph.type === 8) {
696
- checkAlphaMorph(elements, materials);
697
- }
698
- }
699
- }
700
- return materials;
701
- }
702
- // private methods
703
- _getTGALoader() {
704
- if (this.tgaLoader === null) {
705
- if (TGALoader.TGALoader === void 0) {
706
- throw new Error("THREE.MMDLoader: Import TGALoader");
707
- }
708
- this.tgaLoader = new TGALoader.TGALoader(this.manager);
709
- }
710
- return this.tgaLoader;
711
- }
712
- _isDefaultToonTexture(name) {
713
- if (name.length !== 10)
714
- return false;
715
- return /toon(10|0[0-9])\.bmp/.test(name);
716
- }
717
- _loadTexture(filePath, textures, params, onProgress, onError) {
718
- params = params || {};
719
- const scope = this;
720
- let fullPath;
721
- if (params.isDefaultToonTexture === true) {
722
- let index;
723
- try {
724
- index = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]);
725
- } catch (e) {
726
- console.warn(
727
- "THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."
728
- );
729
- index = 0;
730
- }
731
- fullPath = DEFAULT_TOON_TEXTURES[index];
732
- } else {
733
- fullPath = this.resourcePath + filePath;
734
- }
735
- if (textures[fullPath] !== void 0)
736
- return textures[fullPath];
737
- let loader = this.manager.getHandler(fullPath);
738
- if (loader === null) {
739
- loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader;
740
- }
741
- const texture = loader.load(
742
- fullPath,
743
- function(t) {
744
- if (params.isToonTexture === true) {
745
- t.image = scope._getRotatedImage(t.image);
746
- t.magFilter = THREE.NearestFilter;
747
- t.minFilter = THREE.NearestFilter;
748
- }
749
- t.flipY = false;
750
- t.wrapS = THREE.RepeatWrapping;
751
- t.wrapT = THREE.RepeatWrapping;
752
- for (let i = 0; i < texture.readyCallbacks.length; i++) {
753
- texture.readyCallbacks[i](texture);
754
- }
755
- delete texture.readyCallbacks;
756
- },
757
- onProgress,
758
- onError
759
- );
760
- texture.readyCallbacks = [];
761
- textures[fullPath] = texture;
762
- return texture;
763
- }
764
- _getRotatedImage(image) {
765
- const canvas = document.createElement("canvas");
766
- const context = canvas.getContext("2d");
767
- const width = image.width;
768
- const height = image.height;
769
- canvas.width = width;
770
- canvas.height = height;
771
- context.clearRect(0, 0, width, height);
772
- context.translate(width / 2, height / 2);
773
- context.rotate(0.5 * Math.PI);
774
- context.translate(-width / 2, -height / 2);
775
- context.drawImage(image, 0, 0);
776
- return context.getImageData(0, 0, width, height);
777
- }
778
- // Check if the partial image area used by the texture is transparent.
779
- _checkImageTransparency(map, geometry, groupIndex) {
780
- map.readyCallbacks.push(function(texture) {
781
- function createImageData(image) {
782
- const canvas = document.createElement("canvas");
783
- canvas.width = image.width;
784
- canvas.height = image.height;
785
- const context = canvas.getContext("2d");
786
- context.drawImage(image, 0, 0);
787
- return context.getImageData(0, 0, canvas.width, canvas.height);
788
- }
789
- function detectImageTransparency(image, uvs, indices) {
790
- const width = image.width;
791
- const height = image.height;
792
- const data = image.data;
793
- const threshold = 253;
794
- if (data.length / (width * height) !== 4)
795
- return false;
796
- for (let i = 0; i < indices.length; i += 3) {
797
- const centerUV = { x: 0, y: 0 };
798
- for (let j = 0; j < 3; j++) {
799
- const index = indices[i * 3 + j];
800
- const uv = { x: uvs[index * 2 + 0], y: uvs[index * 2 + 1] };
801
- if (getAlphaByUv(image, uv) < threshold)
802
- return true;
803
- centerUV.x += uv.x;
804
- centerUV.y += uv.y;
805
- }
806
- centerUV.x /= 3;
807
- centerUV.y /= 3;
808
- if (getAlphaByUv(image, centerUV) < threshold)
809
- return true;
810
- }
811
- return false;
812
- }
813
- function getAlphaByUv(image, uv) {
814
- const width = image.width;
815
- const height = image.height;
816
- let x = Math.round(uv.x * width) % width;
817
- let y = Math.round(uv.y * height) % height;
818
- if (x < 0)
819
- x += width;
820
- if (y < 0)
821
- y += height;
822
- const index = y * width + x;
823
- return image.data[index * 4 + 3];
824
- }
825
- const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image);
826
- const group = geometry.groups[groupIndex];
827
- if (detectImageTransparency(
828
- imageData,
829
- geometry.attributes.uv.array,
830
- geometry.index.array.slice(group.start, group.start + group.count)
831
- )) {
832
- map.transparent = true;
833
- }
834
- });
835
- }
836
- }
837
- class AnimationBuilder {
838
- /**
839
- * @param {Object} vmd - parsed VMD data
840
- * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
841
- * @return {AnimationClip}
842
- */
843
- build(vmd, mesh) {
844
- const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks;
845
- const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks;
846
- for (let i = 0, il = tracks2.length; i < il; i++) {
847
- tracks.push(tracks2[i]);
848
- }
849
- return new THREE.AnimationClip("", -1, tracks);
850
- }
851
- /**
852
- * @param {Object} vmd - parsed VMD data
853
- * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
854
- * @return {AnimationClip}
855
- */
856
- buildSkeletalAnimation(vmd, mesh) {
857
- function pushInterpolation(array, interpolation, index) {
858
- array.push(interpolation[index + 0] / 127);
859
- array.push(interpolation[index + 8] / 127);
860
- array.push(interpolation[index + 4] / 127);
861
- array.push(interpolation[index + 12] / 127);
862
- }
863
- const tracks = [];
864
- const motions = {};
865
- const bones = mesh.skeleton.bones;
866
- const boneNameDictionary = {};
867
- for (let i = 0, il = bones.length; i < il; i++) {
868
- boneNameDictionary[bones[i].name] = true;
869
- }
870
- for (let i = 0; i < vmd.metadata.motionCount; i++) {
871
- const motion = vmd.motions[i];
872
- const boneName = motion.boneName;
873
- if (boneNameDictionary[boneName] === void 0)
874
- continue;
875
- motions[boneName] = motions[boneName] || [];
876
- motions[boneName].push(motion);
877
- }
878
- for (const key in motions) {
879
- const array = motions[key];
880
- array.sort(function(a, b) {
881
- return a.frameNum - b.frameNum;
882
- });
883
- const times = [];
884
- const positions = [];
885
- const rotations = [];
886
- const pInterpolations = [];
887
- const rInterpolations = [];
888
- const basePosition = mesh.skeleton.getBoneByName(key).position.toArray();
889
- for (let i = 0, il = array.length; i < il; i++) {
890
- const time = array[i].frameNum / 30;
891
- const position = array[i].position;
892
- const rotation = array[i].rotation;
893
- const interpolation = array[i].interpolation;
894
- times.push(time);
895
- for (let j = 0; j < 3; j++)
896
- positions.push(basePosition[j] + position[j]);
897
- for (let j = 0; j < 4; j++)
898
- rotations.push(rotation[j]);
899
- for (let j = 0; j < 3; j++)
900
- pushInterpolation(pInterpolations, interpolation, j);
901
- pushInterpolation(rInterpolations, interpolation, 3);
902
- }
903
- const targetName = ".bones[" + key + "]";
904
- tracks.push(this._createTrack(targetName + ".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
905
- tracks.push(
906
- this._createTrack(targetName + ".quaternion", THREE.QuaternionKeyframeTrack, times, rotations, rInterpolations)
907
- );
908
- }
909
- return new THREE.AnimationClip("", -1, tracks);
910
- }
911
- /**
912
- * @param {Object} vmd - parsed VMD data
913
- * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
914
- * @return {AnimationClip}
915
- */
916
- buildMorphAnimation(vmd, mesh) {
917
- const tracks = [];
918
- const morphs = {};
919
- const morphTargetDictionary = mesh.morphTargetDictionary;
920
- for (let i = 0; i < vmd.metadata.morphCount; i++) {
921
- const morph = vmd.morphs[i];
922
- const morphName = morph.morphName;
923
- if (morphTargetDictionary[morphName] === void 0)
924
- continue;
925
- morphs[morphName] = morphs[morphName] || [];
926
- morphs[morphName].push(morph);
927
- }
928
- for (const key in morphs) {
929
- const array = morphs[key];
930
- array.sort(function(a, b) {
931
- return a.frameNum - b.frameNum;
932
- });
933
- const times = [];
934
- const values = [];
935
- for (let i = 0, il = array.length; i < il; i++) {
936
- times.push(array[i].frameNum / 30);
937
- values.push(array[i].weight);
938
- }
939
- tracks.push(new THREE.NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key] + "]", times, values));
940
- }
941
- return new THREE.AnimationClip("", -1, tracks);
942
- }
943
- /**
944
- * @param {Object} vmd - parsed VMD data
945
- * @return {AnimationClip}
946
- */
947
- buildCameraAnimation(vmd) {
948
- function pushVector3(array, vec) {
949
- array.push(vec.x);
950
- array.push(vec.y);
951
- array.push(vec.z);
952
- }
953
- function pushQuaternion(array, q) {
954
- array.push(q.x);
955
- array.push(q.y);
956
- array.push(q.z);
957
- array.push(q.w);
958
- }
959
- function pushInterpolation(array, interpolation, index) {
960
- array.push(interpolation[index * 4 + 0] / 127);
961
- array.push(interpolation[index * 4 + 1] / 127);
962
- array.push(interpolation[index * 4 + 2] / 127);
963
- array.push(interpolation[index * 4 + 3] / 127);
964
- }
965
- const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice();
966
- cameras.sort(function(a, b) {
967
- return a.frameNum - b.frameNum;
968
- });
969
- const times = [];
970
- const centers = [];
971
- const quaternions = [];
972
- const positions = [];
973
- const fovs = [];
974
- const cInterpolations = [];
975
- const qInterpolations = [];
976
- const pInterpolations = [];
977
- const fInterpolations = [];
978
- const quaternion = new THREE.Quaternion();
979
- const euler = new THREE.Euler();
980
- const position = new THREE.Vector3();
981
- const center = new THREE.Vector3();
982
- for (let i = 0, il = cameras.length; i < il; i++) {
983
- const motion = cameras[i];
984
- const time = motion.frameNum / 30;
985
- const pos = motion.position;
986
- const rot = motion.rotation;
987
- const distance = motion.distance;
988
- const fov = motion.fov;
989
- const interpolation = motion.interpolation;
990
- times.push(time);
991
- position.set(0, 0, -distance);
992
- center.set(pos[0], pos[1], pos[2]);
993
- euler.set(-rot[0], -rot[1], -rot[2]);
994
- quaternion.setFromEuler(euler);
995
- position.add(center);
996
- position.applyQuaternion(quaternion);
997
- pushVector3(centers, center);
998
- pushQuaternion(quaternions, quaternion);
999
- pushVector3(positions, position);
1000
- fovs.push(fov);
1001
- for (let j = 0; j < 3; j++) {
1002
- pushInterpolation(cInterpolations, interpolation, j);
1003
- }
1004
- pushInterpolation(qInterpolations, interpolation, 3);
1005
- for (let j = 0; j < 3; j++) {
1006
- pushInterpolation(pInterpolations, interpolation, 4);
1007
- }
1008
- pushInterpolation(fInterpolations, interpolation, 5);
1009
- }
1010
- const tracks = [];
1011
- tracks.push(this._createTrack("target.position", THREE.VectorKeyframeTrack, times, centers, cInterpolations));
1012
- tracks.push(this._createTrack(".quaternion", THREE.QuaternionKeyframeTrack, times, quaternions, qInterpolations));
1013
- tracks.push(this._createTrack(".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
1014
- tracks.push(this._createTrack(".fov", THREE.NumberKeyframeTrack, times, fovs, fInterpolations));
1015
- return new THREE.AnimationClip("", -1, tracks);
1016
- }
1017
- // private method
1018
- _createTrack(node, typedKeyframeTrack, times, values, interpolations) {
1019
- if (times.length > 2) {
1020
- times = times.slice();
1021
- values = values.slice();
1022
- interpolations = interpolations.slice();
1023
- const stride = values.length / times.length;
1024
- const interpolateStride = interpolations.length / times.length;
1025
- let index = 1;
1026
- for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) {
1027
- for (let i = 0; i < stride; i++) {
1028
- if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) {
1029
- index++;
1030
- break;
1031
- }
1032
- }
1033
- if (aheadIndex > index) {
1034
- times[index] = times[aheadIndex];
1035
- for (let i = 0; i < stride; i++) {
1036
- values[index * stride + i] = values[aheadIndex * stride + i];
1037
- }
1038
- for (let i = 0; i < interpolateStride; i++) {
1039
- interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i];
1040
- }
1041
- }
1042
- }
1043
- times.length = index + 1;
1044
- values.length = (index + 1) * stride;
1045
- interpolations.length = (index + 1) * interpolateStride;
1046
- }
1047
- const track = new typedKeyframeTrack(node, times, values);
1048
- track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) {
1049
- return new CubicBezierInterpolation(
1050
- this.times,
1051
- this.values,
1052
- this.getValueSize(),
1053
- result,
1054
- new Float32Array(interpolations)
1055
- );
1056
- };
1057
- return track;
1058
- }
1059
- }
1060
- class CubicBezierInterpolation extends THREE.Interpolant {
1061
- constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) {
1062
- super(parameterPositions, sampleValues, sampleSize, resultBuffer);
1063
- this.interpolationParams = params;
1064
- }
1065
- interpolate_(i1, t0, t, t1) {
1066
- const result = this.resultBuffer;
1067
- const values = this.sampleValues;
1068
- const stride = this.valueSize;
1069
- const params = this.interpolationParams;
1070
- const offset1 = i1 * stride;
1071
- const offset0 = offset1 - stride;
1072
- const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0);
1073
- if (stride === 4) {
1074
- const x1 = params[i1 * 4 + 0];
1075
- const x2 = params[i1 * 4 + 1];
1076
- const y1 = params[i1 * 4 + 2];
1077
- const y2 = params[i1 * 4 + 3];
1078
- const ratio = this._calculate(x1, x2, y1, y2, weight1);
1079
- THREE.Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
1080
- } else if (stride === 3) {
1081
- for (let i = 0; i !== stride; ++i) {
1082
- const x1 = params[i1 * 12 + i * 4 + 0];
1083
- const x2 = params[i1 * 12 + i * 4 + 1];
1084
- const y1 = params[i1 * 12 + i * 4 + 2];
1085
- const y2 = params[i1 * 12 + i * 4 + 3];
1086
- const ratio = this._calculate(x1, x2, y1, y2, weight1);
1087
- result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio;
1088
- }
1089
- } else {
1090
- const x1 = params[i1 * 4 + 0];
1091
- const x2 = params[i1 * 4 + 1];
1092
- const y1 = params[i1 * 4 + 2];
1093
- const y2 = params[i1 * 4 + 3];
1094
- const ratio = this._calculate(x1, x2, y1, y2, weight1);
1095
- result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio;
1096
- }
1097
- return result;
1098
- }
1099
- _calculate(x1, x2, y1, y2, x) {
1100
- let c = 0.5;
1101
- let t = c;
1102
- let s = 1 - t;
1103
- const loop = 15;
1104
- const eps = 1e-5;
1105
- const math = Math;
1106
- let sst3, stt3, ttt;
1107
- for (let i = 0; i < loop; i++) {
1108
- sst3 = 3 * s * s * t;
1109
- stt3 = 3 * s * t * t;
1110
- ttt = t * t * t;
1111
- const ft = sst3 * x1 + stt3 * x2 + ttt - x;
1112
- if (math.abs(ft) < eps)
1113
- break;
1114
- c /= 2;
1115
- t += ft < 0 ? c : -c;
1116
- s = 1 - t;
1117
- }
1118
- return sst3 * y1 + stt3 * y2 + ttt;
1119
- }
1120
- }
1121
- exports.MMDLoader = MMDLoader;