three-stdlib 2.16.0 → 2.16.2

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 (1219) hide show
  1. package/BufferGeometryUtils-1a7a235c.js +655 -0
  2. package/BufferGeometryUtils-971dfde3.js +1 -0
  3. package/Nodes-4f766d71.js +471 -0
  4. package/Nodes-9aa16d74.js +1 -0
  5. package/animation/AnimationClipCreator.cjs.js +1 -0
  6. package/animation/AnimationClipCreator.js +52 -32
  7. package/animation/CCDIKSolver.cjs.js +1 -0
  8. package/animation/CCDIKSolver.js +143 -64
  9. package/animation/MMDAnimationHelper.cjs.js +1 -0
  10. package/animation/MMDAnimationHelper.js +341 -150
  11. package/animation/MMDPhysics.cjs.js +1 -0
  12. package/animation/MMDPhysics.js +361 -154
  13. package/cameras/CinematicCamera.cjs.js +1 -0
  14. package/cameras/CinematicCamera.js +77 -67
  15. package/controls/ArcballControls.cjs.js +1 -0
  16. package/controls/ArcballControls.js +1449 -544
  17. package/controls/DeviceOrientationControls.cjs.js +1 -0
  18. package/controls/DeviceOrientationControls.js +97 -52
  19. package/controls/DragControls.cjs.js +1 -0
  20. package/controls/DragControls.js +187 -85
  21. package/controls/FirstPersonControls.cjs.js +1 -0
  22. package/controls/FirstPersonControls.js +193 -123
  23. package/controls/FlyControls.cjs.js +1 -0
  24. package/controls/FlyControls.d.ts +5 -4
  25. package/controls/FlyControls.js +160 -90
  26. package/controls/OrbitControls.cjs.js +1 -0
  27. package/controls/OrbitControls.js +481 -232
  28. package/controls/PointerLockControls.cjs.js +1 -0
  29. package/controls/PointerLockControls.js +99 -63
  30. package/controls/TrackballControls.cjs.js +1 -0
  31. package/controls/TrackballControls.js +383 -211
  32. package/controls/TransformControls.cjs.js +1 -0
  33. package/controls/TransformControls.js +782 -575
  34. package/controls/experimental/CameraControls.cjs.js +1 -0
  35. package/controls/experimental/CameraControls.js +609 -329
  36. package/csm/CSM.cjs.js +1 -0
  37. package/csm/CSM.js +108 -47
  38. package/csm/CSMFrustum.cjs.js +1 -0
  39. package/csm/CSMFrustum.js +29 -14
  40. package/csm/CSMHelper.cjs.js +1 -0
  41. package/csm/CSMHelper.js +34 -20
  42. package/csm/CSMShader.cjs.js +1 -0
  43. package/csm/CSMShader.js +11 -7
  44. package/curves/CurveExtras.cjs.js +1 -0
  45. package/curves/CurveExtras.js +115 -73
  46. package/curves/NURBSCurve.cjs.js +1 -0
  47. package/curves/NURBSCurve.js +43 -15
  48. package/curves/NURBSSurface.cjs.js +1 -0
  49. package/curves/NURBSSurface.js +27 -11
  50. package/curves/NURBSUtils.cjs.js +1 -0
  51. package/curves/NURBSUtils.js +203 -54
  52. package/custom.d.cjs.js +1 -0
  53. package/{shaders/types.mjs → custom.d.js} +0 -0
  54. package/deprecated/Geometry.cjs.js +1 -0
  55. package/deprecated/Geometry.js +486 -191
  56. package/effects/AnaglyphEffect.cjs.js +1 -0
  57. package/effects/AnaglyphEffect.js +60 -95
  58. package/effects/AsciiEffect.cjs.js +1 -0
  59. package/effects/AsciiEffect.js +110 -80
  60. package/effects/OutlineEffect.cjs.js +1 -0
  61. package/effects/OutlineEffect.js +204 -121
  62. package/effects/ParallaxBarrierEffect.cjs.js +1 -0
  63. package/effects/ParallaxBarrierEffect.js +38 -39
  64. package/effects/PeppersGhostEffect.cjs.js +1 -0
  65. package/effects/PeppersGhostEffect.js +68 -19
  66. package/effects/StereoEffect.cjs.js +1 -0
  67. package/effects/StereoEffect.js +16 -12
  68. package/environments/RoomEnvironment.cjs.js +1 -0
  69. package/environments/RoomEnvironment.js +47 -52
  70. package/exporters/ColladaExporter.cjs.js +1 -0
  71. package/exporters/ColladaExporter.js +241 -115
  72. package/exporters/DRACOExporter.cjs.js +1 -0
  73. package/exporters/DRACOExporter.js +121 -67
  74. package/exporters/GLTFExporter.cjs.js +1 -0
  75. package/exporters/GLTFExporter.js +1014 -463
  76. package/exporters/MMDExporter.cjs.js +1 -0
  77. package/exporters/MMDExporter.js +102 -44
  78. package/exporters/OBJExporter.cjs.js +1 -0
  79. package/exporters/OBJExporter.js +140 -78
  80. package/exporters/PLYExporter.cjs.js +1 -0
  81. package/exporters/PLYExporter.js +154 -93
  82. package/exporters/STLExporter.cjs.js +1 -0
  83. package/exporters/STLExporter.js +81 -30
  84. package/exporters/USDZExporter.cjs.js +1 -0
  85. package/exporters/USDZExporter.js +144 -84
  86. package/geometries/BoxLineGeometry.cjs.js +1 -0
  87. package/geometries/BoxLineGeometry.js +14 -7
  88. package/geometries/ConvexGeometry.cjs.js +1 -0
  89. package/geometries/ConvexGeometry.js +23 -14
  90. package/geometries/DecalGeometry.cjs.js +1 -0
  91. package/geometries/DecalGeometry.js +162 -108
  92. package/geometries/LightningStrike.cjs.js +1 -0
  93. package/geometries/LightningStrike.js +294 -101
  94. package/geometries/ParametricGeometries.cjs.js +1 -0
  95. package/geometries/ParametricGeometries.js +76 -26
  96. package/geometries/ParametricGeometry.cjs.js +1 -0
  97. package/geometries/ParametricGeometry.js +48 -24
  98. package/geometries/RoundedBoxGeometry.cjs.js +1 -0
  99. package/geometries/RoundedBoxGeometry.js +64 -33
  100. package/geometries/TeapotGeometry.cjs.js +1 -0
  101. package/geometries/TeapotGeometry.js +174 -1434
  102. package/geometries/TextGeometry.cjs.js +1 -0
  103. package/geometries/TextGeometry.js +17 -9
  104. package/helpers/LightProbeHelper.cjs.js +1 -0
  105. package/helpers/LightProbeHelper.js +21 -53
  106. package/helpers/PositionalAudioHelper.cjs.js +1 -0
  107. package/helpers/PositionalAudioHelper.js +30 -23
  108. package/helpers/RectAreaLightHelper.cjs.js +1 -0
  109. package/helpers/RectAreaLightHelper.js +33 -17
  110. package/helpers/VertexNormalsHelper.cjs.js +1 -0
  111. package/helpers/VertexNormalsHelper.js +41 -20
  112. package/helpers/VertexTangentsHelper.cjs.js +1 -0
  113. package/helpers/VertexTangentsHelper.js +36 -18
  114. package/index.cjs.js +1 -0
  115. package/index.js +333 -969
  116. package/interactive/InteractiveGroup.cjs.js +1 -0
  117. package/interactive/InteractiveGroup.d.ts +5 -0
  118. package/interactive/InteractiveGroup.js +87 -0
  119. package/interactive/SelectionBox.cjs.js +1 -0
  120. package/interactive/SelectionBox.js +46 -31
  121. package/interactive/SelectionHelper.cjs.js +1 -0
  122. package/interactive/SelectionHelper.js +21 -16
  123. package/libs/MeshoptDecoder.cjs.js +1 -0
  124. package/libs/MeshoptDecoder.js +58 -147
  125. package/libs/MotionControllers.cjs.js +1 -0
  126. package/libs/MotionControllers.js +208 -66
  127. package/lights/LightProbeGenerator.cjs.js +1 -0
  128. package/lights/LightProbeGenerator.js +96 -40
  129. package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
  130. package/lights/RectAreaLightUniformsLib.js +9 -32842
  131. package/lines/Line2.cjs.js +1 -0
  132. package/lines/Line2.js +12 -9
  133. package/lines/LineGeometry.cjs.js +1 -0
  134. package/lines/LineGeometry.js +19 -7
  135. package/lines/LineMaterial.cjs.js +1 -0
  136. package/lines/LineMaterial.js +89 -51
  137. package/lines/LineSegments2.cjs.js +1 -0
  138. package/lines/LineSegments2.js +165 -56
  139. package/lines/LineSegmentsGeometry.cjs.js +1 -0
  140. package/lines/LineSegmentsGeometry.js +71 -29
  141. package/lines/Wireframe.cjs.js +1 -0
  142. package/lines/Wireframe.js +29 -15
  143. package/lines/WireframeGeometry2.cjs.js +1 -0
  144. package/lines/WireframeGeometry2.js +9 -8
  145. package/loaders/3DMLoader.cjs.js +1 -0
  146. package/loaders/3DMLoader.js +469 -234
  147. package/loaders/3MFLoader.cjs.js +1 -0
  148. package/loaders/3MFLoader.js +555 -340
  149. package/loaders/AMFLoader.cjs.js +1 -0
  150. package/loaders/AMFLoader.js +219 -114
  151. package/loaders/AssimpLoader.cjs.js +1 -0
  152. package/loaders/AssimpLoader.js +725 -328
  153. package/loaders/BVHLoader.cjs.js +1 -0
  154. package/loaders/BVHLoader.js +200 -94
  155. package/loaders/BasisTextureLoader.cjs.js +1 -0
  156. package/loaders/BasisTextureLoader.js +357 -229
  157. package/loaders/ColladaLoader.cjs.js +1 -0
  158. package/loaders/ColladaLoader.js +1522 -932
  159. package/loaders/DDSLoader.cjs.js +1 -0
  160. package/loaders/DDSLoader.js +108 -42
  161. package/loaders/DRACOLoader.cjs.js +1 -0
  162. package/loaders/DRACOLoader.js +210 -103
  163. package/loaders/EXRLoader.cjs.js +1 -0
  164. package/loaders/EXRLoader.js +809 -461
  165. package/loaders/FBXLoader.cjs.js +1 -0
  166. package/loaders/FBXLoader.js +1397 -842
  167. package/loaders/FontLoader.cjs.js +1 -0
  168. package/loaders/FontLoader.js +66 -33
  169. package/loaders/GCodeLoader.cjs.js +1 -0
  170. package/loaders/GCodeLoader.js +111 -63
  171. package/loaders/GLTFLoader.cjs.js +1 -0
  172. package/loaders/GLTFLoader.js +1484 -771
  173. package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
  174. package/loaders/HDRCubeTextureLoader.js +50 -45
  175. package/loaders/KMZLoader.cjs.js +1 -0
  176. package/loaders/KMZLoader.js +55 -42
  177. package/loaders/KTX2Loader.cjs.js +1 -0
  178. package/loaders/KTX2Loader.js +362 -229
  179. package/loaders/KTXLoader.cjs.js +1 -0
  180. package/loaders/KTXLoader.js +99 -37
  181. package/loaders/LDrawLoader.cjs.js +1 -0
  182. package/loaders/LDrawLoader.js +746 -313
  183. package/loaders/LUT3dlLoader.cjs.js +1 -0
  184. package/loaders/LUT3dlLoader.js +62 -50
  185. package/loaders/LUTCubeLoader.cjs.js +1 -0
  186. package/loaders/LUTCubeLoader.js +56 -45
  187. package/loaders/LWOLoader.cjs.js +1 -0
  188. package/loaders/LWOLoader.js +339 -227
  189. package/loaders/LottieLoader.cjs.js +1 -0
  190. package/loaders/LottieLoader.js +38 -36
  191. package/loaders/MD2Loader.cjs.js +1 -0
  192. package/loaders/MD2Loader.js +91 -248
  193. package/loaders/MDDLoader.cjs.js +1 -0
  194. package/loaders/MDDLoader.js +45 -25
  195. package/loaders/MMDLoader.cjs.js +1 -0
  196. package/loaders/MMDLoader.js +795 -359
  197. package/loaders/MTLLoader.cjs.js +1 -0
  198. package/loaders/MTLLoader.js +201 -91
  199. package/loaders/NRRDLoader.cjs.js +1 -0
  200. package/loaders/NRRDLoader.js +263 -182
  201. package/loaders/NodeMaterialLoader.cjs.js +1 -0
  202. package/loaders/NodeMaterialLoader.js +14 -121
  203. package/loaders/OBJLoader.cjs.js +1 -0
  204. package/loaders/OBJLoader.js +283 -161
  205. package/loaders/PCDLoader.cjs.js +1 -0
  206. package/loaders/PCDLoader.js +164 -145
  207. package/loaders/PDBLoader.cjs.js +1 -0
  208. package/loaders/PDBLoader.js +63 -45
  209. package/loaders/PLYLoader.cjs.js +1 -0
  210. package/loaders/PLYLoader.js +203 -106
  211. package/loaders/PRWMLoader.cjs.js +1 -0
  212. package/loaders/PRWMLoader.js +110 -73
  213. package/loaders/PVRLoader.cjs.js +1 -0
  214. package/loaders/PVRLoader.js +93 -32
  215. package/loaders/RGBELoader.cjs.js +1 -0
  216. package/loaders/RGBELoader.js +233 -96
  217. package/loaders/RGBMLoader.cjs.js +1 -0
  218. package/loaders/RGBMLoader.js +514 -344
  219. package/loaders/STLLoader.cjs.js +1 -0
  220. package/loaders/STLLoader.js +165 -59
  221. package/loaders/SVGLoader.cjs.js +1 -0
  222. package/loaders/SVGLoader.js +851 -481
  223. package/loaders/TDSLoader.cjs.js +1 -0
  224. package/loaders/TDSLoader.js +527 -137
  225. package/loaders/TGALoader.cjs.js +1 -0
  226. package/loaders/TGALoader.js +205 -94
  227. package/loaders/TTFLoader.cjs.js +1 -0
  228. package/loaders/TTFLoader.js +79 -58
  229. package/loaders/TiltLoader.cjs.js +1 -0
  230. package/loaders/TiltLoader.js +167 -129
  231. package/loaders/VOXLoader.cjs.js +1 -0
  232. package/loaders/VOXLoader.js +84 -320
  233. package/loaders/VRMLLoader.cjs.js +1 -0
  234. package/loaders/VRMLLoader.js +1268 -786
  235. package/loaders/VRMLoader.cjs.js +1 -0
  236. package/loaders/VRMLoader.js +31 -23
  237. package/loaders/VTKLoader.cjs.js +1 -0
  238. package/loaders/VTKLoader.js +407 -219
  239. package/loaders/XLoader.cjs.js +1 -0
  240. package/loaders/XLoader.js +1259 -1083
  241. package/loaders/XYZLoader.cjs.js +1 -0
  242. package/loaders/XYZLoader.js +34 -28
  243. package/loaders/lwo/IFFParser.cjs.js +1 -0
  244. package/loaders/lwo/IFFParser.js +492 -238
  245. package/loaders/lwo/LWO2Parser.cjs.js +1 -0
  246. package/loaders/lwo/LWO2Parser.js +279 -176
  247. package/loaders/lwo/LWO3Parser.cjs.js +1 -0
  248. package/loaders/lwo/LWO3Parser.js +247 -160
  249. package/math/Capsule.cjs.js +1 -0
  250. package/math/Capsule.js +43 -56
  251. package/math/ColorConverter.cjs.js +1 -0
  252. package/math/ColorConverter.js +32 -18
  253. package/math/ConvexHull.cjs.js +1 -0
  254. package/math/ConvexHull.js +357 -97
  255. package/math/ImprovedNoise.cjs.js +1 -0
  256. package/math/ImprovedNoise.js +32 -282
  257. package/math/Lut.cjs.js +1 -0
  258. package/math/Lut.js +35 -51
  259. package/math/MeshSurfaceSampler.cjs.js +1 -0
  260. package/math/MeshSurfaceSampler.js +68 -25
  261. package/math/OBB.cjs.js +1 -0
  262. package/math/OBB.js +152 -91
  263. package/math/Octree.cjs.js +1 -0
  264. package/math/Octree.js +139 -76
  265. package/math/SimplexNoise.cjs.js +1 -0
  266. package/math/SimplexNoise.js +238 -217
  267. package/misc/ConvexObjectBreaker.cjs.js +1 -0
  268. package/misc/ConvexObjectBreaker.js +185 -79
  269. package/misc/GPUComputationRenderer.cjs.js +1 -0
  270. package/misc/GPUComputationRenderer.js +194 -69
  271. package/misc/Gyroscope.cjs.js +1 -0
  272. package/misc/Gyroscope.js +22 -16
  273. package/misc/MD2Character.cjs.js +1 -0
  274. package/misc/MD2Character.js +74 -52
  275. package/misc/MD2CharacterComplex.cjs.js +1 -0
  276. package/misc/MD2CharacterComplex.js +163 -112
  277. package/misc/MorphAnimMesh.cjs.js +1 -0
  278. package/misc/MorphAnimMesh.js +28 -20
  279. package/misc/MorphBlendMesh.cjs.js +1 -0
  280. package/misc/MorphBlendMesh.js +69 -45
  281. package/misc/ProgressiveLightmap.cjs.js +1 -0
  282. package/misc/ProgressiveLightmap.js +187 -70
  283. package/misc/RollerCoaster.cjs.js +1 -0
  284. package/misc/RollerCoaster.js +135 -106
  285. package/misc/TubePainter.cjs.js +1 -0
  286. package/misc/TubePainter.js +92 -74
  287. package/misc/Volume.cjs.js +1 -0
  288. package/misc/Volume.js +270 -108
  289. package/misc/VolumeSlice.cjs.js +1 -0
  290. package/misc/VolumeSlice.js +122 -34
  291. package/misc/WebGL.cjs.js +1 -0
  292. package/misc/WebGL.js +34 -37
  293. package/modifiers/CurveModifier.cjs.js +1 -0
  294. package/modifiers/CurveModifier.js +151 -46
  295. package/modifiers/EdgeSplitModifier.cjs.js +1 -0
  296. package/modifiers/EdgeSplitModifier.js +90 -46
  297. package/modifiers/SimplifyModifier.cjs.js +1 -0
  298. package/modifiers/SimplifyModifier.js +202 -77
  299. package/modifiers/TessellateModifier.cjs.js +1 -0
  300. package/modifiers/TessellateModifier.js +90 -65
  301. package/nodes/Nodes.cjs.js +1 -0
  302. package/nodes/Nodes.js +140 -274
  303. package/nodes/ShaderNode.cjs.js +1 -0
  304. package/nodes/ShaderNode.js +196 -296
  305. package/nodes/accessors/BufferNode.cjs.js +1 -0
  306. package/nodes/accessors/BufferNode.js +8 -4
  307. package/nodes/accessors/CameraNode.cjs.js +1 -0
  308. package/nodes/accessors/CameraNode.js +25 -20
  309. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  310. package/nodes/accessors/CubeTextureNode.js +26 -14
  311. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  312. package/nodes/accessors/MaterialNode.js +53 -43
  313. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  314. package/nodes/accessors/MaterialReferenceNode.js +6 -3
  315. package/nodes/accessors/ModelNode.cjs.js +1 -0
  316. package/nodes/accessors/ModelNode.js +5 -3
  317. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  318. package/nodes/accessors/ModelViewProjectionNode.js +13 -14
  319. package/nodes/accessors/NormalNode.cjs.js +1 -0
  320. package/nodes/accessors/NormalNode.js +39 -40
  321. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  322. package/nodes/accessors/Object3DNode.js +50 -40
  323. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  324. package/nodes/accessors/PointUVNode.js +9 -5
  325. package/nodes/accessors/PositionNode.cjs.js +1 -0
  326. package/nodes/accessors/PositionNode.js +41 -42
  327. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  328. package/nodes/accessors/ReferenceNode.js +17 -10
  329. package/nodes/accessors/ReflectNode.cjs.js +1 -0
  330. package/nodes/accessors/ReflectNode.js +26 -23
  331. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  332. package/nodes/accessors/SkinningNode.js +48 -46
  333. package/nodes/accessors/TextureNode.cjs.js +1 -0
  334. package/nodes/accessors/TextureNode.js +29 -14
  335. package/nodes/accessors/UVNode.cjs.js +1 -0
  336. package/nodes/accessors/UVNode.js +11 -5
  337. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  338. package/nodes/core/ArrayUniformNode.js +7 -3
  339. package/nodes/core/AttributeNode.cjs.js +1 -0
  340. package/nodes/core/AttributeNode.js +12 -5
  341. package/nodes/core/BypassNode.cjs.js +1 -0
  342. package/nodes/core/BypassNode.js +12 -5
  343. package/nodes/core/CodeNode.cjs.js +1 -0
  344. package/nodes/core/CodeNode.js +12 -4
  345. package/nodes/core/ConstNode.cjs.js +1 -0
  346. package/nodes/core/ConstNode.js +7 -3
  347. package/nodes/core/ContextNode.cjs.js +1 -0
  348. package/nodes/core/ContextNode.js +8 -3
  349. package/nodes/core/ExpressionNode.cjs.js +1 -0
  350. package/nodes/core/ExpressionNode.js +9 -5
  351. package/nodes/core/FunctionCallNode.cjs.js +1 -0
  352. package/nodes/core/FunctionCallNode.js +15 -6
  353. package/nodes/core/FunctionNode.cjs.js +1 -0
  354. package/nodes/core/FunctionNode.js +25 -10
  355. package/nodes/core/InputNode.cjs.js +1 -0
  356. package/nodes/core/InputNode.js +23 -12
  357. package/nodes/core/Node.cjs.js +1 -0
  358. package/nodes/core/Node.js +75 -35
  359. package/nodes/core/NodeAttribute.cjs.js +1 -0
  360. package/nodes/core/NodeAttribute.js +4 -2
  361. package/nodes/core/NodeBuilder.cjs.js +1 -0
  362. package/nodes/core/NodeBuilder.js +224 -110
  363. package/nodes/core/NodeCode.cjs.js +1 -0
  364. package/nodes/core/NodeCode.js +7 -4
  365. package/nodes/core/NodeFrame.cjs.js +1 -0
  366. package/nodes/core/NodeFrame.js +12 -9
  367. package/nodes/core/NodeFunction.cjs.js +1 -0
  368. package/nodes/core/NodeFunction.js +17 -0
  369. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  370. package/nodes/core/NodeFunctionInput.js +5 -3
  371. package/nodes/core/NodeKeywords.cjs.js +1 -0
  372. package/nodes/core/NodeKeywords.js +16 -5
  373. package/nodes/core/NodeParser.cjs.js +1 -0
  374. package/nodes/core/NodeParser.js +8 -0
  375. package/nodes/core/NodeUniform.cjs.js +1 -0
  376. package/nodes/core/NodeUniform.js +7 -3
  377. package/nodes/core/NodeUtils.cjs.js +1 -0
  378. package/nodes/core/NodeUtils.js +43 -39
  379. package/nodes/core/NodeVar.cjs.js +1 -0
  380. package/nodes/core/NodeVar.js +4 -2
  381. package/nodes/core/NodeVary.cjs.js +1 -0
  382. package/nodes/core/NodeVary.js +4 -2
  383. package/nodes/core/PropertyNode.cjs.js +1 -0
  384. package/nodes/core/PropertyNode.js +10 -4
  385. package/nodes/core/TempNode.cjs.js +1 -0
  386. package/nodes/core/TempNode.js +11 -5
  387. package/nodes/core/UniformNode.cjs.js +1 -0
  388. package/nodes/core/UniformNode.js +10 -4
  389. package/nodes/core/VarNode.cjs.js +1 -0
  390. package/nodes/core/VarNode.js +11 -3
  391. package/nodes/core/VaryNode.cjs.js +1 -0
  392. package/nodes/core/VaryNode.js +15 -6
  393. package/nodes/core/constants.cjs.js +1 -0
  394. package/nodes/core/constants.js +7 -20
  395. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  396. package/nodes/display/ColorSpaceNode.js +38 -34
  397. package/nodes/display/NormalMapNode.cjs.js +1 -0
  398. package/nodes/display/NormalMapNode.js +53 -35
  399. package/nodes/fog/FogNode.cjs.js +1 -0
  400. package/nodes/fog/FogNode.js +9 -5
  401. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  402. package/nodes/fog/FogRangeNode.js +9 -5
  403. package/nodes/functions/BSDFs.cjs.js +1 -0
  404. package/nodes/functions/BSDFs.js +118 -61
  405. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  406. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  407. package/nodes/lights/LightContextNode.cjs.js +1 -0
  408. package/nodes/lights/LightContextNode.js +23 -14
  409. package/nodes/lights/LightNode.cjs.js +1 -0
  410. package/nodes/lights/LightNode.js +31 -27
  411. package/nodes/lights/LightsNode.cjs.js +1 -0
  412. package/nodes/lights/LightsNode.js +28 -9
  413. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  414. package/nodes/loaders/NodeLoader.js +42 -27
  415. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  416. package/nodes/loaders/NodeMaterialLoader.js +10 -4
  417. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  418. package/nodes/loaders/NodeObjectLoader.js +19 -9
  419. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  420. package/nodes/materials/LineBasicNodeMaterial.js +10 -5
  421. package/nodes/materials/Materials.cjs.js +1 -0
  422. package/nodes/materials/Materials.js +17 -14
  423. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  424. package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
  425. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
  426. package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
  427. package/nodes/materials/NodeMaterial.cjs.js +1 -0
  428. package/nodes/materials/NodeMaterial.js +36 -20
  429. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  430. package/nodes/materials/PointsNodeMaterial.js +10 -5
  431. package/nodes/math/CondNode.cjs.js +1 -0
  432. package/nodes/math/CondNode.js +23 -11
  433. package/nodes/math/MathNode.cjs.js +1 -0
  434. package/nodes/math/MathNode.js +142 -98
  435. package/nodes/math/OperatorNode.cjs.js +1 -0
  436. package/nodes/math/OperatorNode.js +46 -24
  437. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  438. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  439. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  440. package/nodes/parsers/GLSLNodeParser.js +13 -0
  441. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  442. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  443. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  444. package/nodes/parsers/WGSLNodeParser.js +13 -0
  445. package/nodes/procedural/CheckerNode.cjs.js +1 -0
  446. package/nodes/procedural/CheckerNode.js +19 -13
  447. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  448. package/nodes/utils/ArrayElementNode.js +8 -4
  449. package/nodes/utils/ConvertNode.cjs.js +1 -0
  450. package/nodes/utils/ConvertNode.js +8 -3
  451. package/nodes/utils/JoinNode.cjs.js +1 -0
  452. package/nodes/utils/JoinNode.js +11 -7
  453. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  454. package/nodes/utils/MatcapUVNode.js +11 -8
  455. package/nodes/utils/OscNode.cjs.js +1 -0
  456. package/nodes/utils/OscNode.js +33 -27
  457. package/nodes/utils/SplitNode.cjs.js +1 -0
  458. package/nodes/utils/SplitNode.js +20 -6
  459. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  460. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  461. package/nodes/utils/TimerNode.cjs.js +1 -0
  462. package/nodes/utils/TimerNode.js +24 -20
  463. package/objects/GroundProjectedEnv.cjs.js +1 -0
  464. package/objects/GroundProjectedEnv.js +37 -22
  465. package/objects/Lensflare.cjs.js +1 -0
  466. package/objects/Lensflare.js +156 -86
  467. package/objects/LightningStorm.cjs.js +1 -0
  468. package/objects/LightningStorm.js +102 -38
  469. package/objects/MarchingCubes.cjs.js +1 -0
  470. package/objects/MarchingCubes.js +303 -150
  471. package/objects/Reflector.cjs.js +1 -0
  472. package/objects/Reflector.js +72 -50
  473. package/objects/ReflectorForSSRPass.cjs.js +1 -0
  474. package/objects/ReflectorForSSRPass.js +131 -80
  475. package/objects/ReflectorRTT.cjs.js +1 -0
  476. package/objects/ReflectorRTT.js +7 -6
  477. package/objects/Refractor.cjs.js +1 -0
  478. package/objects/Refractor.js +106 -64
  479. package/objects/ShadowMesh.cjs.js +1 -0
  480. package/objects/ShadowMesh.js +17 -8
  481. package/objects/Sky.cjs.js +1 -0
  482. package/objects/Sky.js +80 -119
  483. package/objects/Water.cjs.js +1 -0
  484. package/objects/Water.js +127 -83
  485. package/objects/Water2.cjs.js +1 -0
  486. package/objects/Water2.js +108 -72
  487. package/offscreen/jank.cjs.js +1 -0
  488. package/offscreen/jank.js +14 -10
  489. package/offscreen/offscreen.cjs.js +1 -0
  490. package/offscreen/offscreen.js +5 -4
  491. package/offscreen/scene.cjs.js +1 -0
  492. package/offscreen/scene.js +48 -45
  493. package/package.json +3 -3
  494. package/physics/AmmoPhysics.cjs.js +1 -0
  495. package/physics/AmmoPhysics.js +71 -30
  496. package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
  497. package/postprocessing/AdaptiveToneMappingPass.js +123 -97
  498. package/postprocessing/AfterimagePass.cjs.js +1 -0
  499. package/postprocessing/AfterimagePass.js +49 -28
  500. package/postprocessing/BloomPass.cjs.js +1 -0
  501. package/postprocessing/BloomPass.js +69 -43
  502. package/postprocessing/BokehPass.cjs.js +1 -0
  503. package/postprocessing/BokehPass.js +69 -39
  504. package/postprocessing/ClearPass.cjs.js +1 -0
  505. package/postprocessing/ClearPass.js +25 -10
  506. package/postprocessing/CubeTexturePass.cjs.js +1 -0
  507. package/postprocessing/CubeTexturePass.js +27 -28
  508. package/postprocessing/DotScreenPass.cjs.js +1 -0
  509. package/postprocessing/DotScreenPass.js +32 -24
  510. package/postprocessing/EffectComposer.cjs.js +1 -0
  511. package/postprocessing/EffectComposer.js +86 -39
  512. package/postprocessing/FilmPass.cjs.js +1 -0
  513. package/postprocessing/FilmPass.js +30 -25
  514. package/postprocessing/GlitchPass.cjs.js +1 -0
  515. package/postprocessing/GlitchPass.js +61 -38
  516. package/postprocessing/HalftonePass.cjs.js +1 -0
  517. package/postprocessing/HalftonePass.js +39 -19
  518. package/postprocessing/LUTPass.cjs.js +1 -0
  519. package/postprocessing/LUTPass.js +38 -13
  520. package/postprocessing/MaskPass.cjs.js +1 -0
  521. package/postprocessing/MaskPass.js +38 -19
  522. package/postprocessing/OutlinePass.cjs.js +1 -0
  523. package/postprocessing/OutlinePass.js +277 -135
  524. package/postprocessing/Pass.cjs.js +1 -0
  525. package/postprocessing/Pass.js +44 -20
  526. package/postprocessing/RenderPass.cjs.js +1 -0
  527. package/postprocessing/RenderPass.js +36 -13
  528. package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
  529. package/postprocessing/RenderPixelatedPass.js +58 -44
  530. package/postprocessing/SAOPass.cjs.js +1 -0
  531. package/postprocessing/SAOPass.js +189 -154
  532. package/postprocessing/SMAAPass.cjs.js +1 -0
  533. package/postprocessing/SMAAPass.js +84 -64
  534. package/postprocessing/SSAARenderPass.cjs.js +1 -0
  535. package/postprocessing/SSAARenderPass.js +69 -121
  536. package/postprocessing/SSAOPass.cjs.js +1 -0
  537. package/postprocessing/SSAOPass.js +172 -123
  538. package/postprocessing/SSRPass.cjs.js +1 -0
  539. package/postprocessing/SSRPass.js +280 -211
  540. package/postprocessing/SavePass.cjs.js +1 -0
  541. package/postprocessing/SavePass.js +25 -20
  542. package/postprocessing/ShaderPass.cjs.js +1 -0
  543. package/postprocessing/ShaderPass.js +30 -14
  544. package/postprocessing/TAARenderPass.cjs.js +1 -0
  545. package/postprocessing/TAARenderPass.js +61 -42
  546. package/postprocessing/TexturePass.cjs.js +1 -0
  547. package/postprocessing/TexturePass.js +22 -21
  548. package/postprocessing/UnrealBloomPass.cjs.js +1 -0
  549. package/postprocessing/UnrealBloomPass.js +213 -105
  550. package/renderers/CSS2DRenderer.cjs.js +1 -0
  551. package/renderers/CSS2DRenderer.js +56 -44
  552. package/renderers/CSS3DRenderer.cjs.js +1 -0
  553. package/renderers/CSS3DRenderer.js +86 -53
  554. package/renderers/Projector.cjs.js +1 -0
  555. package/renderers/Projector.js +274 -107
  556. package/renderers/SVGRenderer.cjs.js +1 -0
  557. package/renderers/SVGRenderer.js +182 -72
  558. package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
  559. package/renderers/nodes/accessors/CameraNode.js +40 -29
  560. package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
  561. package/renderers/nodes/accessors/ModelNode.js +37 -28
  562. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  563. package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
  564. package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
  565. package/renderers/nodes/accessors/NormalNode.js +45 -35
  566. package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
  567. package/renderers/nodes/accessors/PositionNode.js +19 -18
  568. package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
  569. package/renderers/nodes/accessors/UVNode.js +10 -5
  570. package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
  571. package/renderers/nodes/core/AttributeNode.js +14 -5
  572. package/renderers/nodes/core/InputNode.cjs.js +1 -0
  573. package/renderers/nodes/core/InputNode.js +14 -4
  574. package/renderers/nodes/core/Node.cjs.js +1 -0
  575. package/renderers/nodes/core/Node.js +17 -7
  576. package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
  577. package/renderers/nodes/core/NodeAttribute.js +6 -3
  578. package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
  579. package/renderers/nodes/core/NodeBuilder.js +154 -87
  580. package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
  581. package/renderers/nodes/core/NodeFrame.js +12 -9
  582. package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
  583. package/renderers/nodes/core/NodeSlot.js +3 -2
  584. package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
  585. package/renderers/nodes/core/NodeUniform.js +9 -4
  586. package/renderers/nodes/core/NodeVary.cjs.js +1 -0
  587. package/renderers/nodes/core/NodeVary.js +7 -4
  588. package/renderers/nodes/core/VaryNode.cjs.js +1 -0
  589. package/renderers/nodes/core/VaryNode.js +12 -6
  590. package/renderers/nodes/core/constants.cjs.js +1 -0
  591. package/renderers/nodes/core/constants.js +13 -16
  592. package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
  593. package/renderers/nodes/inputs/ColorNode.js +11 -5
  594. package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
  595. package/renderers/nodes/inputs/FloatNode.js +11 -5
  596. package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
  597. package/renderers/nodes/inputs/Matrix3Node.js +13 -7
  598. package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
  599. package/renderers/nodes/inputs/Matrix4Node.js +13 -7
  600. package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
  601. package/renderers/nodes/inputs/TextureNode.js +15 -7
  602. package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
  603. package/renderers/nodes/inputs/Vector2Node.js +11 -5
  604. package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
  605. package/renderers/nodes/inputs/Vector3Node.js +13 -7
  606. package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
  607. package/renderers/nodes/inputs/Vector4Node.js +13 -7
  608. package/renderers/nodes/math/MathNode.cjs.js +1 -0
  609. package/renderers/nodes/math/MathNode.js +30 -20
  610. package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
  611. package/renderers/nodes/math/OperatorNode.js +20 -4
  612. package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
  613. package/renderers/nodes/utils/SwitchNode.js +9 -4
  614. package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
  615. package/renderers/nodes/utils/TimerNode.js +10 -5
  616. package/renderers/webgpu/WebGPU.cjs.js +1 -0
  617. package/renderers/webgpu/WebGPU.js +16 -14
  618. package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
  619. package/renderers/webgpu/WebGPUAttributes.js +23 -16
  620. package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
  621. package/renderers/webgpu/WebGPUBackground.js +30 -13
  622. package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
  623. package/renderers/webgpu/WebGPUBinding.js +7 -4
  624. package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
  625. package/renderers/webgpu/WebGPUBindings.js +57 -21
  626. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
  627. package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
  628. package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
  629. package/renderers/webgpu/WebGPUGeometries.js +15 -5
  630. package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
  631. package/renderers/webgpu/WebGPUInfo.js +8 -3
  632. package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
  633. package/renderers/webgpu/WebGPUObjects.js +10 -5
  634. package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
  635. package/renderers/webgpu/WebGPUProperties.js +11 -5
  636. package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
  637. package/renderers/webgpu/WebGPURenderLists.js +36 -20
  638. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
  639. package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
  640. package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
  641. package/renderers/webgpu/WebGPURenderer.js +262 -124
  642. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
  643. package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
  644. package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
  645. package/renderers/webgpu/WebGPUSampler.js +12 -7
  646. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
  647. package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
  648. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
  649. package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
  650. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
  651. package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
  652. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
  653. package/renderers/webgpu/WebGPUTextures.js +333 -186
  654. package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
  655. package/renderers/webgpu/WebGPUUniform.js +51 -25
  656. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
  657. package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
  658. package/renderers/webgpu/constants.cjs.js +1 -0
  659. package/renderers/webgpu/constants.js +181 -190
  660. package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
  661. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  662. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
  663. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
  664. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
  665. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
  666. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
  667. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
  668. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
  669. package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
  670. package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
  671. package/shaders/ACESFilmicToneMappingShader.js +24 -44
  672. package/shaders/AfterimageShader.cjs.js +1 -0
  673. package/shaders/AfterimageShader.js +18 -28
  674. package/shaders/BasicShader.cjs.js +1 -0
  675. package/shaders/BasicShader.js +7 -9
  676. package/shaders/BleachBypassShader.cjs.js +1 -0
  677. package/shaders/BleachBypassShader.js +15 -31
  678. package/shaders/BlendShader.cjs.js +1 -0
  679. package/shaders/BlendShader.js +19 -26
  680. package/shaders/BokehShader.cjs.js +1 -0
  681. package/shaders/BokehShader.js +36 -98
  682. package/shaders/BokehShader2.cjs.js +1 -0
  683. package/shaders/BokehShader2.js +90 -261
  684. package/shaders/BrightnessContrastShader.cjs.js +1 -0
  685. package/shaders/BrightnessContrastShader.js +19 -28
  686. package/shaders/ColorCorrectionShader.cjs.js +1 -0
  687. package/shaders/ColorCorrectionShader.js +22 -26
  688. package/shaders/ColorifyShader.cjs.js +1 -0
  689. package/shaders/ColorifyShader.js +16 -24
  690. package/shaders/ConvolutionShader.cjs.js +1 -0
  691. package/shaders/ConvolutionShader.js +36 -40
  692. package/shaders/CopyShader.cjs.js +1 -0
  693. package/shaders/CopyShader.js +13 -21
  694. package/shaders/DOFMipMapShader.cjs.js +1 -0
  695. package/shaders/DOFMipMapShader.js +21 -28
  696. package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
  697. package/shaders/DepthLimitedBlurShader.js +40 -85
  698. package/shaders/DigitalGlitch.cjs.js +1 -0
  699. package/shaders/DigitalGlitch.js +46 -74
  700. package/shaders/DotScreenShader.cjs.js +1 -0
  701. package/shaders/DotScreenShader.js +27 -35
  702. package/shaders/FXAAShader.cjs.js +1 -0
  703. package/shaders/FXAAShader.js +19 -1094
  704. package/shaders/FilmShader.cjs.js +1 -0
  705. package/shaders/FilmShader.js +52 -38
  706. package/shaders/FocusShader.cjs.js +1 -0
  707. package/shaders/FocusShader.js +24 -51
  708. package/shaders/FreiChenShader.cjs.js +1 -0
  709. package/shaders/FreiChenShader.js +24 -57
  710. package/shaders/FresnelShader.cjs.js +1 -0
  711. package/shaders/FresnelShader.js +22 -43
  712. package/shaders/GammaCorrectionShader.cjs.js +1 -0
  713. package/shaders/GammaCorrectionShader.js +11 -19
  714. package/shaders/GodRaysShader.cjs.js +1 -0
  715. package/shaders/GodRaysShader.js +94 -103
  716. package/shaders/HalftoneShader.cjs.js +1 -0
  717. package/shaders/HalftoneShader.js +65 -208
  718. package/shaders/HorizontalBlurShader.cjs.js +1 -0
  719. package/shaders/HorizontalBlurShader.js +23 -7
  720. package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
  721. package/shaders/HorizontalTiltShiftShader.js +21 -33
  722. package/shaders/HueSaturationShader.cjs.js +1 -0
  723. package/shaders/HueSaturationShader.js +21 -37
  724. package/shaders/KaleidoShader.cjs.js +1 -0
  725. package/shaders/KaleidoShader.js +22 -30
  726. package/shaders/LuminosityHighPassShader.cjs.js +1 -0
  727. package/shaders/LuminosityHighPassShader.js +27 -33
  728. package/shaders/LuminosityShader.cjs.js +1 -0
  729. package/shaders/LuminosityShader.js +11 -21
  730. package/shaders/MirrorShader.cjs.js +1 -0
  731. package/shaders/MirrorShader.js +16 -31
  732. package/shaders/NormalMapShader.cjs.js +1 -0
  733. package/shaders/NormalMapShader.js +23 -27
  734. package/shaders/ParallaxShader.cjs.js +1 -0
  735. package/shaders/ParallaxShader.js +48 -107
  736. package/shaders/PixelShader.cjs.js +1 -0
  737. package/shaders/PixelShader.js +16 -24
  738. package/shaders/RGBShiftShader.cjs.js +1 -0
  739. package/shaders/RGBShiftShader.js +22 -26
  740. package/shaders/SAOShader.cjs.js +1 -0
  741. package/shaders/SAOShader.js +48 -132
  742. package/shaders/SMAAShader.cjs.js +1 -0
  743. package/shaders/SMAAShader.js +135 -256
  744. package/shaders/SSAOShader.cjs.js +1 -0
  745. package/shaders/SSAOShader.js +81 -153
  746. package/shaders/SSRShader.cjs.js +1 -0
  747. package/shaders/SSRShader.js +87 -32
  748. package/shaders/SepiaShader.cjs.js +1 -0
  749. package/shaders/SepiaShader.js +15 -25
  750. package/shaders/SobelOperatorShader.cjs.js +1 -0
  751. package/shaders/SobelOperatorShader.js +29 -40
  752. package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
  753. package/shaders/SubsurfaceScatteringShader.js +39 -53
  754. package/shaders/TechnicolorShader.cjs.js +1 -0
  755. package/shaders/TechnicolorShader.js +13 -20
  756. package/shaders/ToneMapShader.cjs.js +1 -0
  757. package/shaders/ToneMapShader.js +28 -44
  758. package/shaders/ToonShader.cjs.js +1 -0
  759. package/shaders/ToonShader.js +96 -172
  760. package/shaders/TriangleBlurShader.cjs.js +1 -0
  761. package/shaders/TriangleBlurShader.js +23 -32
  762. package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
  763. package/shaders/UnpackDepthRGBAShader.js +14 -22
  764. package/shaders/VerticalBlurShader.cjs.js +1 -0
  765. package/shaders/VerticalBlurShader.js +23 -7
  766. package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
  767. package/shaders/VerticalTiltShiftShader.js +21 -33
  768. package/shaders/VignetteShader.cjs.js +1 -0
  769. package/shaders/VignetteShader.js +28 -24
  770. package/shaders/VolumeShader.cjs.js +1 -0
  771. package/shaders/VolumeShader.js +77 -174
  772. package/shaders/WaterRefractionShader.cjs.js +1 -0
  773. package/shaders/WaterRefractionShader.js +6 -38
  774. package/shaders/types.cjs.js +1 -0
  775. package/shaders/types.js +1 -1
  776. package/textures/FlakesTexture.cjs.js +1 -0
  777. package/textures/FlakesTexture.js +10 -8
  778. package/types/helpers.cjs.js +1 -0
  779. package/types/helpers.js +2 -3
  780. package/types/shared.cjs.js +1 -0
  781. package/types/shared.js +1 -0
  782. package/types/utils.cjs.js +1 -0
  783. package/types/utils.js +1 -0
  784. package/utils/BufferGeometryUtils.cjs.js +1 -0
  785. package/utils/BufferGeometryUtils.js +325 -251
  786. package/utils/GeometryCompressionUtils.cjs.js +1 -0
  787. package/utils/GeometryCompressionUtils.js +239 -241
  788. package/utils/GeometryUtils.cjs.js +1 -0
  789. package/utils/GeometryUtils.js +94 -41
  790. package/utils/LDrawUtils.cjs.js +1 -0
  791. package/utils/LDrawUtils.d.ts +5 -0
  792. package/utils/LDrawUtils.js +144 -0
  793. package/utils/RoughnessMipmapper.cjs.js +1 -0
  794. package/utils/RoughnessMipmapper.js +82 -38
  795. package/utils/SceneUtils.cjs.js +1 -0
  796. package/utils/SceneUtils.js +20 -15
  797. package/utils/ShadowMapViewer.cjs.js +1 -0
  798. package/utils/ShadowMapViewer.js +95 -49
  799. package/utils/SkeletonUtils.cjs.js +1 -0
  800. package/utils/SkeletonUtils.js +165 -74
  801. package/utils/UVsDebug.cjs.js +1 -0
  802. package/utils/UVsDebug.js +62 -32
  803. package/utils/WorkerPool.cjs.js +1 -0
  804. package/utils/WorkerPool.js +33 -13
  805. package/webxr/ARButton.cjs.js +1 -0
  806. package/webxr/ARButton.js +98 -72
  807. package/webxr/OculusHandModel.cjs.js +1 -0
  808. package/webxr/OculusHandModel.js +37 -18
  809. package/webxr/OculusHandPointerModel.cjs.js +1 -0
  810. package/webxr/OculusHandPointerModel.js +80 -58
  811. package/webxr/Text2D.cjs.js +1 -0
  812. package/webxr/Text2D.js +19 -37
  813. package/webxr/VRButton.cjs.js +1 -0
  814. package/webxr/VRButton.js +90 -59
  815. package/webxr/XRControllerModelFactory.cjs.js +1 -0
  816. package/webxr/XRControllerModelFactory.js +116 -58
  817. package/webxr/XREstimatedLight.cjs.js +1 -0
  818. package/webxr/XREstimatedLight.js +66 -39
  819. package/webxr/XRHandMeshModel.cjs.js +1 -0
  820. package/webxr/XRHandMeshModel.js +29 -40
  821. package/webxr/XRHandModelFactory.cjs.js +1 -0
  822. package/webxr/XRHandModelFactory.js +31 -28
  823. package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
  824. package/webxr/XRHandPrimitiveModel.js +27 -41
  825. package/animation/AnimationClipCreator.mjs +0 -57
  826. package/animation/CCDIKSolver.mjs +0 -223
  827. package/animation/MMDAnimationHelper.mjs +0 -514
  828. package/animation/MMDPhysics.mjs +0 -769
  829. package/cameras/CinematicCamera.mjs +0 -129
  830. package/controls/ArcballControls.mjs +0 -1737
  831. package/controls/DeviceOrientationControls.mjs +0 -74
  832. package/controls/DragControls.mjs +0 -172
  833. package/controls/FirstPersonControls.mjs +0 -220
  834. package/controls/FlyControls.mjs +0 -239
  835. package/controls/OrbitControls.mjs +0 -731
  836. package/controls/PointerLockControls.mjs +0 -88
  837. package/controls/TrackballControls.mjs +0 -481
  838. package/controls/TransformControls.mjs +0 -1068
  839. package/controls/experimental/CameraControls.mjs +0 -673
  840. package/csm/CSM.mjs +0 -244
  841. package/csm/CSMFrustum.mjs +0 -75
  842. package/csm/CSMHelper.mjs +0 -114
  843. package/csm/CSMShader.mjs +0 -251
  844. package/curves/CurveExtras.mjs +0 -224
  845. package/curves/NURBSCurve.mjs +0 -35
  846. package/curves/NURBSSurface.mjs +0 -28
  847. package/curves/NURBSUtils.mjs +0 -226
  848. package/deprecated/Geometry.mjs +0 -966
  849. package/effects/AnaglyphEffect.mjs +0 -120
  850. package/effects/AsciiEffect.mjs +0 -173
  851. package/effects/OutlineEffect.mjs +0 -295
  852. package/effects/ParallaxBarrierEffect.mjs +0 -64
  853. package/effects/PeppersGhostEffect.mjs +0 -85
  854. package/effects/StereoEffect.mjs +0 -32
  855. package/environments/RoomEnvironment.mjs +0 -78
  856. package/exporters/ColladaExporter.mjs +0 -299
  857. package/exporters/DRACOExporter.mjs +0 -132
  858. package/exporters/GLTFExporter.mjs +0 -1381
  859. package/exporters/MMDExporter.mjs +0 -102
  860. package/exporters/OBJExporter.mjs +0 -166
  861. package/exporters/PLYExporter.mjs +0 -278
  862. package/exporters/STLExporter.mjs +0 -129
  863. package/exporters/USDZExporter.mjs +0 -328
  864. package/geometries/BoxLineGeometry.mjs +0 -45
  865. package/geometries/ConvexGeometry.mjs +0 -29
  866. package/geometries/DecalGeometry.mjs +0 -184
  867. package/geometries/LightningStrike.mjs +0 -547
  868. package/geometries/ParametricGeometries.mjs +0 -129
  869. package/geometries/ParametricGeometry.mjs +0 -63
  870. package/geometries/RoundedBoxGeometry.mjs +0 -91
  871. package/geometries/TeapotGeometry.mjs +0 -1557
  872. package/geometries/TextGeometry.mjs +0 -23
  873. package/helpers/LightProbeHelper.mjs +0 -72
  874. package/helpers/PositionalAudioHelper.mjs +0 -68
  875. package/helpers/RectAreaLightHelper.mjs +0 -44
  876. package/helpers/VertexNormalsHelper.mjs +0 -54
  877. package/helpers/VertexTangentsHelper.mjs +0 -45
  878. package/index.mjs +0 -969
  879. package/interactive/SelectionBox.mjs +0 -137
  880. package/interactive/SelectionHelper.mjs +0 -54
  881. package/libs/MeshoptDecoder.mjs +0 -210
  882. package/libs/MotionControllers.mjs +0 -261
  883. package/lights/LightProbeGenerator.mjs +0 -145
  884. package/lights/RectAreaLightUniformsLib.mjs +0 -32842
  885. package/lines/Line2.mjs +0 -13
  886. package/lines/LineGeometry.mjs +0 -44
  887. package/lines/LineMaterial.mjs +0 -539
  888. package/lines/LineSegments2.mjs +0 -202
  889. package/lines/LineSegmentsGeometry.mjs +0 -124
  890. package/lines/Wireframe.mjs +0 -31
  891. package/lines/WireframeGeometry2.mjs +0 -13
  892. package/loaders/3DMLoader.mjs +0 -802
  893. package/loaders/3MFLoader.mjs +0 -837
  894. package/loaders/AMFLoader.mjs +0 -284
  895. package/loaders/AssimpLoader.mjs +0 -1396
  896. package/loaders/BVHLoader.mjs +0 -207
  897. package/loaders/BasisTextureLoader.mjs +0 -474
  898. package/loaders/ColladaLoader.mjs +0 -2403
  899. package/loaders/DDSLoader.mjs +0 -148
  900. package/loaders/DRACOLoader.mjs +0 -340
  901. package/loaders/EXRLoader.mjs +0 -1351
  902. package/loaders/FBXLoader.mjs +0 -2362
  903. package/loaders/FontLoader.mjs +0 -111
  904. package/loaders/GCodeLoader.mjs +0 -141
  905. package/loaders/GLTFLoader.mjs +0 -2316
  906. package/loaders/HDRCubeTextureLoader.mjs +0 -77
  907. package/loaders/KMZLoader.mjs +0 -75
  908. package/loaders/KTX2Loader.mjs +0 -427
  909. package/loaders/KTXLoader.mjs +0 -87
  910. package/loaders/LDrawLoader.mjs +0 -1409
  911. package/loaders/LUT3dlLoader.mjs +0 -100
  912. package/loaders/LUTCubeLoader.mjs +0 -104
  913. package/loaders/LWOLoader.mjs +0 -625
  914. package/loaders/LottieLoader.mjs +0 -47
  915. package/loaders/MD2Loader.mjs +0 -359
  916. package/loaders/MDDLoader.mjs +0 -58
  917. package/loaders/MMDLoader.mjs +0 -998
  918. package/loaders/MTLLoader.mjs +0 -280
  919. package/loaders/NRRDLoader.mjs +0 -401
  920. package/loaders/NodeMaterialLoader.mjs +0 -146
  921. package/loaders/OBJLoader.mjs +0 -487
  922. package/loaders/PCDLoader.mjs +0 -248
  923. package/loaders/PDBLoader.mjs +0 -246
  924. package/loaders/PLYLoader.mjs +0 -317
  925. package/loaders/PRWMLoader.mjs +0 -160
  926. package/loaders/PVRLoader.mjs +0 -131
  927. package/loaders/RGBELoader.mjs +0 -244
  928. package/loaders/RGBMLoader.mjs +0 -998
  929. package/loaders/STLLoader.mjs +0 -190
  930. package/loaders/SVGLoader.mjs +0 -1709
  931. package/loaders/TDSLoader.mjs +0 -480
  932. package/loaders/TGALoader.mjs +0 -285
  933. package/loaders/TTFLoader.mjs +0 -131
  934. package/loaders/TiltLoader.mjs +0 -373
  935. package/loaders/VOXLoader.mjs +0 -431
  936. package/loaders/VRMLLoader.mjs +0 -2093
  937. package/loaders/VRMLoader.mjs +0 -38
  938. package/loaders/VTKLoader.mjs +0 -646
  939. package/loaders/XLoader.mjs +0 -1258
  940. package/loaders/XYZLoader.mjs +0 -60
  941. package/loaders/lwo/IFFParser.mjs +0 -697
  942. package/loaders/lwo/LWO2Parser.mjs +0 -327
  943. package/loaders/lwo/LWO3Parser.mjs +0 -298
  944. package/math/Capsule.mjs +0 -100
  945. package/math/ColorConverter.mjs +0 -51
  946. package/math/ConvexHull.mjs +0 -574
  947. package/math/ImprovedNoise.mjs +0 -302
  948. package/math/Lut.mjs +0 -135
  949. package/math/MeshSurfaceSampler.mjs +0 -107
  950. package/math/OBB.mjs +0 -235
  951. package/math/Octree.mjs +0 -278
  952. package/math/SimplexNoise.mjs +0 -425
  953. package/misc/ConvexObjectBreaker.mjs +0 -292
  954. package/misc/GPUComputationRenderer.mjs +0 -171
  955. package/misc/Gyroscope.mjs +0 -35
  956. package/misc/MD2Character.mjs +0 -162
  957. package/misc/MD2CharacterComplex.mjs +0 -328
  958. package/misc/MorphAnimMesh.mjs +0 -40
  959. package/misc/MorphBlendMesh.mjs +0 -179
  960. package/misc/ProgressiveLightmap.mjs +0 -166
  961. package/misc/RollerCoaster.mjs +0 -346
  962. package/misc/TubePainter.mjs +0 -123
  963. package/misc/Volume.mjs +0 -244
  964. package/misc/VolumeSlice.mjs +0 -106
  965. package/misc/WebGL.mjs +0 -74
  966. package/modifiers/CurveModifier.mjs +0 -182
  967. package/modifiers/EdgeSplitModifier.mjs +0 -162
  968. package/modifiers/SimplifyModifier.mjs +0 -282
  969. package/modifiers/TessellateModifier.mjs +0 -206
  970. package/nodes/Nodes.mjs +0 -400
  971. package/nodes/ShaderNode.mjs +0 -408
  972. package/nodes/accessors/BufferNode.mjs +0 -15
  973. package/nodes/accessors/CameraNode.mjs +0 -44
  974. package/nodes/accessors/CubeTextureNode.mjs +0 -42
  975. package/nodes/accessors/MaterialNode.mjs +0 -71
  976. package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  977. package/nodes/accessors/ModelNode.mjs +0 -9
  978. package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  979. package/nodes/accessors/NormalNode.mjs +0 -62
  980. package/nodes/accessors/Object3DNode.mjs +0 -76
  981. package/nodes/accessors/PointUVNode.mjs +0 -13
  982. package/nodes/accessors/PositionNode.mjs +0 -65
  983. package/nodes/accessors/ReferenceNode.mjs +0 -37
  984. package/nodes/accessors/ReflectNode.mjs +0 -43
  985. package/nodes/accessors/SkinningNode.mjs +0 -58
  986. package/nodes/accessors/TextureNode.mjs +0 -54
  987. package/nodes/accessors/UVNode.mjs +0 -23
  988. package/nodes/core/ArrayUniformNode.mjs +0 -14
  989. package/nodes/core/AttributeNode.mjs +0 -30
  990. package/nodes/core/BypassNode.mjs +0 -22
  991. package/nodes/core/CodeNode.mjs +0 -28
  992. package/nodes/core/ConstNode.mjs +0 -14
  993. package/nodes/core/ContextNode.mjs +0 -22
  994. package/nodes/core/ExpressionNode.mjs +0 -19
  995. package/nodes/core/FunctionCallNode.mjs +0 -37
  996. package/nodes/core/FunctionNode.mjs +0 -56
  997. package/nodes/core/InputNode.mjs +0 -38
  998. package/nodes/core/Node.mjs +0 -139
  999. package/nodes/core/NodeAttribute.mjs +0 -10
  1000. package/nodes/core/NodeBuilder.mjs +0 -395
  1001. package/nodes/core/NodeCode.mjs +0 -11
  1002. package/nodes/core/NodeFrame.mjs +0 -35
  1003. package/nodes/core/NodeFunctionInput.mjs +0 -13
  1004. package/nodes/core/NodeKeywords.mjs +0 -44
  1005. package/nodes/core/NodeUniform.mjs +0 -18
  1006. package/nodes/core/NodeUtils.mjs +0 -57
  1007. package/nodes/core/NodeVar.mjs +0 -10
  1008. package/nodes/core/NodeVary.mjs +0 -10
  1009. package/nodes/core/PropertyNode.mjs +0 -21
  1010. package/nodes/core/TempNode.mjs +0 -25
  1011. package/nodes/core/UniformNode.mjs +0 -23
  1012. package/nodes/core/VarNode.mjs +0 -31
  1013. package/nodes/core/VaryNode.mjs +0 -30
  1014. package/nodes/core/constants.mjs +0 -24
  1015. package/nodes/display/ColorSpaceNode.mjs +0 -63
  1016. package/nodes/display/NormalMapNode.mjs +0 -54
  1017. package/nodes/fog/FogNode.mjs +0 -15
  1018. package/nodes/fog/FogRangeNode.mjs +0 -17
  1019. package/nodes/functions/BSDFs.mjs +0 -64
  1020. package/nodes/lights/LightContextNode.mjs +0 -35
  1021. package/nodes/lights/LightNode.mjs +0 -58
  1022. package/nodes/lights/LightsNode.mjs +0 -59
  1023. package/nodes/loaders/NodeLoader.mjs +0 -66
  1024. package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  1025. package/nodes/loaders/NodeObjectLoader.mjs +0 -40
  1026. package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  1027. package/nodes/materials/Materials.mjs +0 -28
  1028. package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  1029. package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  1030. package/nodes/materials/NodeMaterial.mjs +0 -64
  1031. package/nodes/materials/PointsNodeMaterial.mjs +0 -30
  1032. package/nodes/math/CondNode.mjs +0 -38
  1033. package/nodes/math/MathNode.mjs +0 -163
  1034. package/nodes/math/OperatorNode.mjs +0 -103
  1035. package/nodes/procedural/CheckerNode.mjs +0 -21
  1036. package/nodes/utils/ArrayElementNode.mjs +0 -19
  1037. package/nodes/utils/ConvertNode.mjs +0 -25
  1038. package/nodes/utils/JoinNode.mjs +0 -26
  1039. package/nodes/utils/MatcapUVNode.mjs +0 -16
  1040. package/nodes/utils/OscNode.mjs +0 -50
  1041. package/nodes/utils/SplitNode.mjs +0 -45
  1042. package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  1043. package/nodes/utils/TimerNode.mjs +0 -44
  1044. package/objects/GroundProjectedEnv.mjs +0 -130
  1045. package/objects/Lensflare.mjs +0 -262
  1046. package/objects/LightningStorm.mjs +0 -110
  1047. package/objects/MarchingCubes.mjs +0 -457
  1048. package/objects/Reflector.mjs +0 -166
  1049. package/objects/ReflectorForSSRPass.mjs +0 -247
  1050. package/objects/ReflectorRTT.mjs +0 -10
  1051. package/objects/Refractor.mjs +0 -178
  1052. package/objects/ShadowMesh.mjs +0 -41
  1053. package/objects/Sky.mjs +0 -124
  1054. package/objects/Water.mjs +0 -235
  1055. package/objects/Water2.mjs +0 -252
  1056. package/offscreen/jank.mjs +0 -27
  1057. package/offscreen/offscreen.mjs +0 -5
  1058. package/offscreen/scene.mjs +0 -52
  1059. package/physics/AmmoPhysics.mjs +0 -165
  1060. package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
  1061. package/postprocessing/AfterimagePass.mjs +0 -55
  1062. package/postprocessing/BloomPass.mjs +0 -90
  1063. package/postprocessing/BokehPass.mjs +0 -76
  1064. package/postprocessing/ClearPass.mjs +0 -27
  1065. package/postprocessing/CubeTexturePass.mjs +0 -49
  1066. package/postprocessing/DotScreenPass.mjs +0 -40
  1067. package/postprocessing/EffectComposer.mjs +0 -139
  1068. package/postprocessing/FilmPass.mjs +0 -42
  1069. package/postprocessing/GlitchPass.mjs +0 -75
  1070. package/postprocessing/HalftonePass.mjs +0 -44
  1071. package/postprocessing/LUTPass.mjs +0 -136
  1072. package/postprocessing/MaskPass.mjs +0 -60
  1073. package/postprocessing/OutlinePass.mjs +0 -438
  1074. package/postprocessing/Pass.mjs +0 -37
  1075. package/postprocessing/RenderPass.mjs +0 -48
  1076. package/postprocessing/RenderPixelatedPass.mjs +0 -199
  1077. package/postprocessing/SAOPass.mjs +0 -282
  1078. package/postprocessing/SMAAPass.mjs +0 -112
  1079. package/postprocessing/SSAARenderPass.mjs +0 -170
  1080. package/postprocessing/SSAOPass.mjs +0 -265
  1081. package/postprocessing/SSRPass.mjs +0 -432
  1082. package/postprocessing/SavePass.mjs +0 -37
  1083. package/postprocessing/ShaderPass.mjs +0 -39
  1084. package/postprocessing/TAARenderPass.mjs +0 -88
  1085. package/postprocessing/TexturePass.mjs +0 -39
  1086. package/postprocessing/UnrealBloomPass.mjs +0 -220
  1087. package/renderers/CSS2DRenderer.mjs +0 -112
  1088. package/renderers/CSS3DRenderer.mjs +0 -133
  1089. package/renderers/Projector.mjs +0 -511
  1090. package/renderers/SVGRenderer.mjs +0 -306
  1091. package/renderers/nodes/accessors/CameraNode.mjs +0 -63
  1092. package/renderers/nodes/accessors/ModelNode.mjs +0 -61
  1093. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  1094. package/renderers/nodes/accessors/NormalNode.mjs +0 -61
  1095. package/renderers/nodes/accessors/PositionNode.mjs +0 -30
  1096. package/renderers/nodes/accessors/UVNode.mjs +0 -13
  1097. package/renderers/nodes/core/AttributeNode.mjs +0 -35
  1098. package/renderers/nodes/core/InputNode.mjs +0 -31
  1099. package/renderers/nodes/core/Node.mjs +0 -34
  1100. package/renderers/nodes/core/NodeAttribute.mjs +0 -10
  1101. package/renderers/nodes/core/NodeBuilder.mjs +0 -243
  1102. package/renderers/nodes/core/NodeFrame.mjs +0 -35
  1103. package/renderers/nodes/core/NodeSlot.mjs +0 -10
  1104. package/renderers/nodes/core/NodeUniform.mjs +0 -18
  1105. package/renderers/nodes/core/NodeVary.mjs +0 -11
  1106. package/renderers/nodes/core/VaryNode.mjs +0 -22
  1107. package/renderers/nodes/core/constants.mjs +0 -22
  1108. package/renderers/nodes/inputs/ColorNode.mjs +0 -11
  1109. package/renderers/nodes/inputs/FloatNode.mjs +0 -11
  1110. package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  1111. package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  1112. package/renderers/nodes/inputs/TextureNode.mjs +0 -20
  1113. package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  1114. package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  1115. package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  1116. package/renderers/nodes/math/MathNode.mjs +0 -55
  1117. package/renderers/nodes/math/OperatorNode.mjs +0 -42
  1118. package/renderers/nodes/utils/SwitchNode.mjs +0 -20
  1119. package/renderers/nodes/utils/TimerNode.mjs +0 -14
  1120. package/renderers/webgpu/WebGPU.mjs +0 -24
  1121. package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  1122. package/renderers/webgpu/WebGPUBackground.mjs +0 -61
  1123. package/renderers/webgpu/WebGPUBinding.mjs +0 -14
  1124. package/renderers/webgpu/WebGPUBindings.mjs +0 -155
  1125. package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  1126. package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  1127. package/renderers/webgpu/WebGPUInfo.mjs +0 -46
  1128. package/renderers/webgpu/WebGPUObjects.mjs +0 -25
  1129. package/renderers/webgpu/WebGPUProperties.mjs +0 -22
  1130. package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  1131. package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
  1132. package/renderers/webgpu/WebGPURenderer.mjs +0 -574
  1133. package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  1134. package/renderers/webgpu/WebGPUSampler.mjs +0 -15
  1135. package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  1136. package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  1137. package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  1138. package/renderers/webgpu/WebGPUTextures.mjs +0 -484
  1139. package/renderers/webgpu/WebGPUUniform.mjs +0 -81
  1140. package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  1141. package/renderers/webgpu/constants.mjs +0 -230
  1142. package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  1143. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  1144. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  1145. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  1146. package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
  1147. package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
  1148. package/shaders/AfterimageShader.mjs +0 -32
  1149. package/shaders/BasicShader.mjs +0 -12
  1150. package/shaders/BleachBypassShader.mjs +0 -35
  1151. package/shaders/BlendShader.mjs +0 -30
  1152. package/shaders/BokehShader.mjs +0 -106
  1153. package/shaders/BokehShader2.mjs +0 -269
  1154. package/shaders/BrightnessContrastShader.mjs +0 -32
  1155. package/shaders/ColorCorrectionShader.mjs +0 -30
  1156. package/shaders/ColorifyShader.mjs +0 -28
  1157. package/shaders/ConvolutionShader.mjs +0 -55
  1158. package/shaders/CopyShader.mjs +0 -25
  1159. package/shaders/DOFMipMapShader.mjs +0 -32
  1160. package/shaders/DepthLimitedBlurShader.mjs +0 -114
  1161. package/shaders/DigitalGlitch.mjs +0 -78
  1162. package/shaders/DotScreenShader.mjs +0 -39
  1163. package/shaders/FXAAShader.mjs +0 -1098
  1164. package/shaders/FilmShader.mjs +0 -42
  1165. package/shaders/FocusShader.mjs +0 -55
  1166. package/shaders/FreiChenShader.mjs +0 -61
  1167. package/shaders/FresnelShader.mjs +0 -47
  1168. package/shaders/GammaCorrectionShader.mjs +0 -23
  1169. package/shaders/GodRaysShader.mjs +0 -146
  1170. package/shaders/HalftoneShader.mjs +0 -212
  1171. package/shaders/HorizontalBlurShader.mjs +0 -43
  1172. package/shaders/HorizontalTiltShiftShader.mjs +0 -37
  1173. package/shaders/HueSaturationShader.mjs +0 -41
  1174. package/shaders/KaleidoShader.mjs +0 -34
  1175. package/shaders/LuminosityHighPassShader.mjs +0 -37
  1176. package/shaders/LuminosityShader.mjs +0 -25
  1177. package/shaders/MirrorShader.mjs +0 -35
  1178. package/shaders/NormalMapShader.mjs +0 -31
  1179. package/shaders/ParallaxShader.mjs +0 -113
  1180. package/shaders/PixelShader.mjs +0 -28
  1181. package/shaders/RGBShiftShader.mjs +0 -30
  1182. package/shaders/SAOShader.mjs +0 -144
  1183. package/shaders/SMAAShader.mjs +0 -272
  1184. package/shaders/SSAOShader.mjs +0 -172
  1185. package/shaders/SSRShader.mjs +0 -324
  1186. package/shaders/SepiaShader.mjs +0 -29
  1187. package/shaders/SobelOperatorShader.mjs +0 -44
  1188. package/shaders/SubsurfaceScatteringShader.mjs +0 -59
  1189. package/shaders/TechnicolorShader.mjs +0 -24
  1190. package/shaders/ToneMapShader.mjs +0 -48
  1191. package/shaders/ToonShader.mjs +0 -188
  1192. package/shaders/TriangleBlurShader.mjs +0 -36
  1193. package/shaders/UnpackDepthRGBAShader.mjs +0 -26
  1194. package/shaders/VerticalBlurShader.mjs +0 -44
  1195. package/shaders/VerticalTiltShiftShader.mjs +0 -37
  1196. package/shaders/VignetteShader.mjs +0 -28
  1197. package/shaders/VolumeShader.mjs +0 -178
  1198. package/shaders/WaterRefractionShader.mjs +0 -57
  1199. package/textures/FlakesTexture.mjs +0 -30
  1200. package/types/helpers.mjs +0 -4
  1201. package/utils/BufferGeometryUtils.mjs +0 -570
  1202. package/utils/GeometryCompressionUtils.mjs +0 -547
  1203. package/utils/GeometryUtils.mjs +0 -108
  1204. package/utils/RoughnessMipmapper.mjs +0 -213
  1205. package/utils/SceneUtils.mjs +0 -36
  1206. package/utils/ShadowMapViewer.mjs +0 -114
  1207. package/utils/SkeletonUtils.mjs +0 -292
  1208. package/utils/UVsDebug.mjs +0 -85
  1209. package/utils/WorkerPool.mjs +0 -62
  1210. package/webxr/ARButton.mjs +0 -119
  1211. package/webxr/OculusHandModel.mjs +0 -71
  1212. package/webxr/OculusHandPointerModel.mjs +0 -207
  1213. package/webxr/Text2D.mjs +0 -31
  1214. package/webxr/VRButton.mjs +0 -105
  1215. package/webxr/XRControllerModelFactory.mjs +0 -146
  1216. package/webxr/XREstimatedLight.mjs +0 -126
  1217. package/webxr/XRHandMeshModel.mjs +0 -73
  1218. package/webxr/XRHandModelFactory.mjs +0 -61
  1219. package/webxr/XRHandPrimitiveModel.mjs +0 -68
@@ -1,201 +1,331 @@
1
- "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const THREE = require("three");
4
- const TGALoader = require("./TGALoader.js");
5
- const mmdParser = require("mmd-parser");
6
- class MMDLoader extends THREE.Loader {
1
+ import { Loader, FileLoader, LoaderUtils, SkinnedMesh, Skeleton, Bone, Vector3, Float32BufferAttribute, BufferGeometry, Uint16BufferAttribute, TextureLoader, Color, MultiplyOperation, AddOperation, MeshToonMaterial, NearestFilter, RepeatWrapping, AnimationClip, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, Quaternion, Euler, Interpolant, CustomBlending, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, DoubleSide, FrontSide } from 'three';
2
+ import { TGALoader } from './TGALoader.js';
3
+ import { Parser } from 'mmd-parser';
4
+
5
+ /**
6
+ * Dependencies
7
+ * - mmd-parser https://github.com/takahirox/mmd-parser
8
+ * - TGALoader
9
+ * - OutlineEffect
10
+ *
11
+ * MMDLoader creates Three.js Objects from MMD resources as
12
+ * PMD, PMX, VMD, and VPD files.
13
+ *
14
+ * PMD/PMX is a model data format, VMD is a motion data format
15
+ * VPD is a posing data format used in MMD(Miku Miku Dance).
16
+ *
17
+ * MMD official site
18
+ * - https://sites.google.com/view/evpvp/
19
+ *
20
+ * PMD, VMD format (in Japanese)
21
+ * - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4
22
+ *
23
+ * PMX format
24
+ * - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f
25
+ *
26
+ * TODO
27
+ * - light motion in vmd support.
28
+ * - SDEF support.
29
+ * - uv/material/bone morphing support.
30
+ * - more precise grant skinning support.
31
+ * - shadow support.
32
+ */
33
+
34
+ /**
35
+ * @param {THREE.LoadingManager} manager
36
+ */
37
+
38
+ class MMDLoader extends Loader {
7
39
  constructor(manager) {
8
40
  super(manager);
9
- this.loader = new THREE.FileLoader(this.manager);
10
- this.parser = null;
41
+ this.loader = new FileLoader(this.manager);
42
+ this.parser = null; // lazy generation
43
+
11
44
  this.meshBuilder = new MeshBuilder(this.manager);
12
45
  this.animationBuilder = new AnimationBuilder();
13
46
  }
47
+ /**
48
+ * @param {string} animationPath
49
+ * @return {MMDLoader}
50
+ */
51
+
52
+
14
53
  setAnimationPath(animationPath) {
15
54
  this.animationPath = animationPath;
16
55
  return this;
17
- }
56
+ } // Load MMD assets as Three.js Object
57
+
58
+ /**
59
+ * Loads Model file (.pmd or .pmx) as a SkinnedMesh.
60
+ *
61
+ * @param {string} url - url to Model(.pmd or .pmx) file
62
+ * @param {function} onLoad
63
+ * @param {function} onProgress
64
+ * @param {function} onError
65
+ */
66
+
67
+
18
68
  load(url, onLoad, onProgress, onError) {
19
- const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);
69
+ const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin); // resource path
70
+
20
71
  let resourcePath;
21
- if (this.resourcePath !== "") {
72
+
73
+ if (this.resourcePath !== '') {
22
74
  resourcePath = this.resourcePath;
23
- } else if (this.path !== "") {
75
+ } else if (this.path !== '') {
24
76
  resourcePath = this.path;
25
77
  } else {
26
- resourcePath = THREE.LoaderUtils.extractUrlBase(url);
78
+ resourcePath = LoaderUtils.extractUrlBase(url);
27
79
  }
28
- const modelExtension = this._extractExtension(url).toLowerCase();
29
- if (modelExtension !== "pmd" && modelExtension !== "pmx") {
30
- if (onError)
31
- onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + "."));
80
+
81
+ const modelExtension = this._extractExtension(url).toLowerCase(); // Should I detect by seeing header?
82
+
83
+
84
+ if (modelExtension !== 'pmd' && modelExtension !== 'pmx') {
85
+ if (onError) onError(new Error('THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.'));
32
86
  return;
33
87
  }
34
- this[modelExtension === "pmd" ? "loadPMD" : "loadPMX"](
35
- url,
36
- function(data) {
37
- onLoad(builder.build(data, resourcePath, onProgress, onError));
38
- },
39
- onProgress,
40
- onError
41
- );
88
+
89
+ this[modelExtension === 'pmd' ? 'loadPMD' : 'loadPMX'](url, function (data) {
90
+ onLoad(builder.build(data, resourcePath, onProgress, onError));
91
+ }, onProgress, onError);
42
92
  }
93
+ /**
94
+ * Loads Motion file(s) (.vmd) as a AnimationClip.
95
+ * If two or more files are specified, they'll be merged.
96
+ *
97
+ * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)
98
+ * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object
99
+ * @param {function} onLoad
100
+ * @param {function} onProgress
101
+ * @param {function} onError
102
+ */
103
+
104
+
43
105
  loadAnimation(url, object, onLoad, onProgress, onError) {
44
106
  const builder = this.animationBuilder;
45
- this.loadVMD(
46
- url,
47
- function(vmd) {
48
- onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));
49
- },
50
- onProgress,
51
- onError
52
- );
107
+ this.loadVMD(url, function (vmd) {
108
+ onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));
109
+ }, onProgress, onError);
53
110
  }
111
+ /**
112
+ * Loads mode file and motion file(s) as an object containing
113
+ * a SkinnedMesh and a AnimationClip.
114
+ * Tracks of AnimationClip are fitting to the model.
115
+ *
116
+ * @param {string} modelUrl - url to Model(.pmd or .pmx) file
117
+ * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file
118
+ * @param {function} onLoad
119
+ * @param {function} onProgress
120
+ * @param {function} onError
121
+ */
122
+
123
+
54
124
  loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) {
55
125
  const scope = this;
56
- this.load(
57
- modelUrl,
58
- function(mesh) {
59
- scope.loadAnimation(
60
- vmdUrl,
61
- mesh,
62
- function(animation) {
63
- onLoad({
64
- mesh,
65
- animation
66
- });
67
- },
68
- onProgress,
69
- onError
70
- );
71
- },
72
- onProgress,
73
- onError
74
- );
75
- }
126
+ this.load(modelUrl, function (mesh) {
127
+ scope.loadAnimation(vmdUrl, mesh, function (animation) {
128
+ onLoad({
129
+ mesh: mesh,
130
+ animation: animation
131
+ });
132
+ }, onProgress, onError);
133
+ }, onProgress, onError);
134
+ } // Load MMD assets as Object data parsed by MMDParser
135
+
136
+ /**
137
+ * Loads .pmd file as an Object.
138
+ *
139
+ * @param {string} url - url to .pmd file
140
+ * @param {function} onLoad
141
+ * @param {function} onProgress
142
+ * @param {function} onError
143
+ */
144
+
145
+
76
146
  loadPMD(url, onLoad, onProgress, onError) {
77
147
  const parser = this._getParser();
78
- this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
79
- url,
80
- function(buffer) {
81
- onLoad(parser.parsePmd(buffer, true));
82
- },
83
- onProgress,
84
- onError
85
- );
148
+
149
+ this.loader.setMimeType(undefined).setPath(this.path).setResponseType('arraybuffer').setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function (buffer) {
150
+ onLoad(parser.parsePmd(buffer, true));
151
+ }, onProgress, onError);
86
152
  }
153
+ /**
154
+ * Loads .pmx file as an Object.
155
+ *
156
+ * @param {string} url - url to .pmx file
157
+ * @param {function} onLoad
158
+ * @param {function} onProgress
159
+ * @param {function} onError
160
+ */
161
+
162
+
87
163
  loadPMX(url, onLoad, onProgress, onError) {
88
164
  const parser = this._getParser();
89
- this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
90
- url,
91
- function(buffer) {
92
- onLoad(parser.parsePmx(buffer, true));
93
- },
94
- onProgress,
95
- onError
96
- );
165
+
166
+ this.loader.setMimeType(undefined).setPath(this.path).setResponseType('arraybuffer').setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function (buffer) {
167
+ onLoad(parser.parsePmx(buffer, true));
168
+ }, onProgress, onError);
97
169
  }
170
+ /**
171
+ * Loads .vmd file as an Object. If two or more files are specified
172
+ * they'll be merged.
173
+ *
174
+ * @param {string|Array<string>} url - url(s) to .vmd file(s)
175
+ * @param {function} onLoad
176
+ * @param {function} onProgress
177
+ * @param {function} onError
178
+ */
179
+
180
+
98
181
  loadVMD(url, onLoad, onProgress, onError) {
99
182
  const urls = Array.isArray(url) ? url : [url];
100
183
  const vmds = [];
101
184
  const vmdNum = urls.length;
185
+
102
186
  const parser = this._getParser();
103
- this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
187
+
188
+ this.loader.setMimeType(undefined).setPath(this.animationPath).setResponseType('arraybuffer').setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
189
+
104
190
  for (let i = 0, il = urls.length; i < il; i++) {
105
- this.loader.load(
106
- urls[i],
107
- function(buffer) {
108
- vmds.push(parser.parseVmd(buffer, true));
109
- if (vmds.length === vmdNum)
110
- onLoad(parser.mergeVmds(vmds));
111
- },
112
- onProgress,
113
- onError
114
- );
191
+ this.loader.load(urls[i], function (buffer) {
192
+ vmds.push(parser.parseVmd(buffer, true));
193
+ if (vmds.length === vmdNum) onLoad(parser.mergeVmds(vmds));
194
+ }, onProgress, onError);
115
195
  }
116
196
  }
197
+ /**
198
+ * Loads .vpd file as an Object.
199
+ *
200
+ * @param {string} url - url to .vpd file
201
+ * @param {boolean} isUnicode
202
+ * @param {function} onLoad
203
+ * @param {function} onProgress
204
+ * @param {function} onError
205
+ */
206
+
207
+
117
208
  loadVPD(url, isUnicode, onLoad, onProgress, onError) {
118
209
  const parser = this._getParser();
119
- this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
120
- url,
121
- function(text) {
122
- onLoad(parser.parseVpd(text, true));
123
- },
124
- onProgress,
125
- onError
126
- );
127
- }
210
+
211
+ this.loader.setMimeType(isUnicode ? undefined : 'text/plain; charset=shift_jis').setPath(this.animationPath).setResponseType('text').setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function (text) {
212
+ onLoad(parser.parseVpd(text, true));
213
+ }, onProgress, onError);
214
+ } // private methods
215
+
216
+
128
217
  _extractExtension(url) {
129
- const index = url.lastIndexOf(".");
130
- return index < 0 ? "" : url.slice(index + 1);
218
+ const index = url.lastIndexOf('.');
219
+ return index < 0 ? '' : url.slice(index + 1);
131
220
  }
221
+
132
222
  _getParser() {
133
223
  if (this.parser === null) {
134
- this.parser = new mmdParser.Parser();
224
+ this.parser = new Parser(); // eslint-disable-line no-undef
135
225
  }
226
+
136
227
  return this.parser;
137
228
  }
138
- }
139
- const DEFAULT_TOON_TEXTURES = [
140
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
141
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==",
142
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC",
143
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==",
144
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==",
145
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=",
146
- "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=",
147
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
148
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
149
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
150
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII="
151
- ];
229
+
230
+ } // Utilities
231
+
232
+ /*
233
+ * base64 encoded defalut toon textures toon00.bmp - toon10.bmp.
234
+ * We don't need to request external toon image files.
235
+ * This idea is from http://www20.atpages.jp/katwat/three.js_r58/examples/mytest37/mmd.three.js
236
+ */
237
+
238
+
239
+ const DEFAULT_TOON_TEXTURES = ['data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=', '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=', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=']; // Builders. They build Three.js object from Object data parsed by MMDParser.
240
+
241
+ /**
242
+ * @param {THREE.LoadingManager} manager
243
+ */
244
+
152
245
  class MeshBuilder {
153
246
  constructor(manager) {
154
- this.crossOrigin = "anonymous";
247
+ this.crossOrigin = 'anonymous';
155
248
  this.geometryBuilder = new GeometryBuilder();
156
249
  this.materialBuilder = new MaterialBuilder(manager);
157
250
  }
251
+ /**
252
+ * @param {string} crossOrigin
253
+ * @return {MeshBuilder}
254
+ */
255
+
256
+
158
257
  setCrossOrigin(crossOrigin) {
159
258
  this.crossOrigin = crossOrigin;
160
259
  return this;
161
260
  }
261
+ /**
262
+ * @param {Object} data - parsed PMD/PMX data
263
+ * @param {string} resourcePath
264
+ * @param {function} onProgress
265
+ * @param {function} onError
266
+ * @return {SkinnedMesh}
267
+ */
268
+
269
+
162
270
  build(data, resourcePath, onProgress, onError) {
163
271
  const geometry = this.geometryBuilder.build(data);
164
272
  const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError);
165
- const mesh = new THREE.SkinnedMesh(geometry, material);
166
- const skeleton = new THREE.Skeleton(initBones(mesh));
167
- mesh.bind(skeleton);
273
+ const mesh = new SkinnedMesh(geometry, material);
274
+ const skeleton = new Skeleton(initBones(mesh));
275
+ mesh.bind(skeleton); // console.log( mesh ); // for console debug
276
+
168
277
  return mesh;
169
278
  }
170
- }
279
+
280
+ } // TODO: Try to remove this function
281
+
282
+
171
283
  function initBones(mesh) {
172
284
  const geometry = mesh.geometry;
173
285
  const bones = [];
174
- if (geometry && geometry.bones !== void 0) {
286
+
287
+ if (geometry && geometry.bones !== undefined) {
288
+ // first, create array of 'Bone' objects from geometry data
175
289
  for (let i = 0, il = geometry.bones.length; i < il; i++) {
176
- const gbone = geometry.bones[i];
177
- const bone = new THREE.Bone();
178
- bones.push(bone);
290
+ const gbone = geometry.bones[i]; // create new 'Bone' object
291
+
292
+ const bone = new Bone();
293
+ bones.push(bone); // apply values
294
+
179
295
  bone.name = gbone.name;
180
296
  bone.position.fromArray(gbone.pos);
181
297
  bone.quaternion.fromArray(gbone.rotq);
182
- if (gbone.scl !== void 0)
183
- bone.scale.fromArray(gbone.scl);
184
- }
298
+ if (gbone.scl !== undefined) bone.scale.fromArray(gbone.scl);
299
+ } // second, create bone hierarchy
300
+
301
+
185
302
  for (let i = 0, il = geometry.bones.length; i < il; i++) {
186
303
  const gbone = geometry.bones[i];
187
- if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {
304
+
305
+ if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== undefined) {
306
+ // subsequent bones in the hierarchy
188
307
  bones[gbone.parent].add(bones[i]);
189
308
  } else {
309
+ // topmost bone, immediate child of the skinned mesh
190
310
  mesh.add(bones[i]);
191
311
  }
192
312
  }
193
- }
313
+ } // now the bones are part of the scene graph and children of the skinned mesh.
314
+ // let's update the corresponding matrices
315
+
316
+
194
317
  mesh.updateMatrixWorld(true);
195
318
  return bones;
196
- }
319
+ } //
320
+
321
+
197
322
  class GeometryBuilder {
323
+ /**
324
+ * @param {Object} data - parsed PMD/PMX data
325
+ * @return {BufferGeometry}
326
+ */
198
327
  build(data) {
328
+ // for geometry
199
329
  const positions = [];
200
330
  const uvs = [];
201
331
  const normals = [];
@@ -209,33 +339,45 @@ class GeometryBuilder {
209
339
  const iks = [];
210
340
  const grants = [];
211
341
  const rigidBodies = [];
212
- const constraints = [];
342
+ const constraints = []; // for work
343
+
213
344
  let offset = 0;
214
- const boneTypeTable = {};
345
+ const boneTypeTable = {}; // positions, normals, uvs, skinIndices, skinWeights
346
+
215
347
  for (let i = 0; i < data.metadata.vertexCount; i++) {
216
348
  const v = data.vertices[i];
349
+
217
350
  for (let j = 0, jl = v.position.length; j < jl; j++) {
218
351
  positions.push(v.position[j]);
219
352
  }
353
+
220
354
  for (let j = 0, jl = v.normal.length; j < jl; j++) {
221
355
  normals.push(v.normal[j]);
222
356
  }
357
+
223
358
  for (let j = 0, jl = v.uv.length; j < jl; j++) {
224
359
  uvs.push(v.uv[j]);
225
360
  }
361
+
226
362
  for (let j = 0; j < 4; j++) {
227
- skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0);
363
+ skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0.0);
228
364
  }
365
+
229
366
  for (let j = 0; j < 4; j++) {
230
- skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0);
367
+ skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0.0);
231
368
  }
232
- }
369
+ } // indices
370
+
371
+
233
372
  for (let i = 0; i < data.metadata.faceCount; i++) {
234
373
  const face = data.faces[i];
374
+
235
375
  for (let j = 0, jl = face.indices.length; j < jl; j++) {
236
376
  indices.push(face.indices[j]);
237
377
  }
238
- }
378
+ } // groups
379
+
380
+
239
381
  for (let i = 0; i < data.metadata.materialCount; i++) {
240
382
  const material = data.materials[i];
241
383
  groups.push({
@@ -243,13 +385,17 @@ class GeometryBuilder {
243
385
  count: material.faceCount * 3
244
386
  });
245
387
  offset += material.faceCount;
246
- }
388
+ } // bones
389
+
390
+
247
391
  for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
248
392
  const body = data.rigidBodies[i];
249
- let value = boneTypeTable[body.boneIndex];
250
- value = value === void 0 ? body.type : Math.max(body.type, value);
393
+ let value = boneTypeTable[body.boneIndex]; // keeps greater number if already value is set without any special reasons
394
+
395
+ value = value === undefined ? body.type : Math.max(body.type, value);
251
396
  boneTypeTable[body.boneIndex] = value;
252
397
  }
398
+
253
399
  for (let i = 0; i < data.metadata.boneCount; i++) {
254
400
  const boneData = data.bones[i];
255
401
  const bone = {
@@ -260,16 +406,21 @@ class GeometryBuilder {
260
406
  pos: boneData.position.slice(0, 3),
261
407
  rotq: [0, 0, 0, 1],
262
408
  scl: [1, 1, 1],
263
- rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1
409
+ rigidBodyType: boneTypeTable[i] !== undefined ? boneTypeTable[i] : -1
264
410
  };
411
+
265
412
  if (bone.parent !== -1) {
266
413
  bone.pos[0] -= data.bones[bone.parent].position[0];
267
414
  bone.pos[1] -= data.bones[bone.parent].position[1];
268
415
  bone.pos[2] -= data.bones[bone.parent].position[2];
269
416
  }
417
+
270
418
  bones.push(bone);
271
- }
272
- if (data.metadata.format === "pmd") {
419
+ } // iks
420
+ // TODO: remove duplicated codes between PMD and PMX
421
+
422
+
423
+ if (data.metadata.format === 'pmd') {
273
424
  for (let i = 0; i < data.metadata.ikCount; i++) {
274
425
  const ik = data.iks[i];
275
426
  const param = {
@@ -279,22 +430,25 @@ class GeometryBuilder {
279
430
  maxAngle: ik.maxAngle * 4,
280
431
  links: []
281
432
  };
433
+
282
434
  for (let j = 0, jl = ik.links.length; j < jl; j++) {
283
435
  const link = {};
284
436
  link.index = ik.links[j].index;
285
437
  link.enabled = true;
286
- if (data.bones[link.index].name.indexOf("\u3072\u3056") >= 0) {
287
- link.limitation = new THREE.Vector3(1, 0, 0);
438
+
439
+ if (data.bones[link.index].name.indexOf('ひざ') >= 0) {
440
+ link.limitation = new Vector3(1.0, 0.0, 0.0);
288
441
  }
442
+
289
443
  param.links.push(link);
290
444
  }
445
+
291
446
  iks.push(param);
292
447
  }
293
448
  } else {
294
449
  for (let i = 0; i < data.metadata.boneCount; i++) {
295
450
  const ik = data.bones[i].ik;
296
- if (ik === void 0)
297
- continue;
451
+ if (ik === undefined) continue;
298
452
  const param = {
299
453
  target: i,
300
454
  effector: ik.effector,
@@ -302,47 +456,48 @@ class GeometryBuilder {
302
456
  maxAngle: ik.maxAngle,
303
457
  links: []
304
458
  };
459
+
305
460
  for (let j = 0, jl = ik.links.length; j < jl; j++) {
306
461
  const link = {};
307
462
  link.index = ik.links[j].index;
308
463
  link.enabled = true;
464
+
309
465
  if (ik.links[j].angleLimitation === 1) {
466
+ // Revert if rotationMin/Max doesn't work well
467
+ // link.limitation = new Vector3( 1.0, 0.0, 0.0 );
310
468
  const rotationMin = ik.links[j].lowerLimitationAngle;
311
- const rotationMax = ik.links[j].upperLimitationAngle;
469
+ const rotationMax = ik.links[j].upperLimitationAngle; // Convert Left to Right coordinate by myself because
470
+ // MMDParser doesn't convert. It's a MMDParser's bug
471
+
312
472
  const tmp1 = -rotationMax[0];
313
473
  const tmp2 = -rotationMax[1];
314
474
  rotationMax[0] = -rotationMin[0];
315
475
  rotationMax[1] = -rotationMin[1];
316
476
  rotationMin[0] = tmp1;
317
477
  rotationMin[1] = tmp2;
318
- link.rotationMin = new THREE.Vector3().fromArray(rotationMin);
319
- link.rotationMax = new THREE.Vector3().fromArray(rotationMax);
478
+ link.rotationMin = new Vector3().fromArray(rotationMin);
479
+ link.rotationMax = new Vector3().fromArray(rotationMax);
320
480
  }
481
+
321
482
  param.links.push(link);
322
483
  }
323
- iks.push(param);
484
+
485
+ iks.push(param); // Save the reference even from bone data for efficiently
486
+ // simulating PMX animation system
487
+
324
488
  bones[i].ik = param;
325
489
  }
326
- }
327
- if (data.metadata.format === "pmx") {
328
- let traverse = function(entry) {
329
- if (entry.param) {
330
- grants.push(entry.param);
331
- bones[entry.param.index].grant = entry.param;
332
- }
333
- entry.visited = true;
334
- for (let i = 0, il = entry.children.length; i < il; i++) {
335
- const child = entry.children[i];
336
- if (!child.visited)
337
- traverse(child);
338
- }
339
- };
490
+ } // grants
491
+
492
+
493
+ if (data.metadata.format === 'pmx') {
494
+ // bone index -> grant entry map
340
495
  const grantEntryMap = {};
496
+
341
497
  for (let i = 0; i < data.metadata.boneCount; i++) {
342
498
  const boneData = data.bones[i];
343
499
  const grant = boneData.grant;
344
- if (grant === void 0)
345
- continue;
500
+ if (grant === undefined) continue;
346
501
  const param = {
347
502
  index: i,
348
503
  parentIndex: grant.parentIndex,
@@ -352,74 +507,122 @@ class GeometryBuilder {
352
507
  affectPosition: grant.affectPosition,
353
508
  transformationClass: boneData.transformationClass
354
509
  };
355
- grantEntryMap[i] = { parent: null, children: [], param, visited: false };
510
+ grantEntryMap[i] = {
511
+ parent: null,
512
+ children: [],
513
+ param: param,
514
+ visited: false
515
+ };
356
516
  }
357
- const rootEntry = { parent: null, children: [], param: null, visited: false };
517
+
518
+ const rootEntry = {
519
+ parent: null,
520
+ children: [],
521
+ param: null,
522
+ visited: false
523
+ }; // Build a tree representing grant hierarchy
524
+
358
525
  for (const boneIndex in grantEntryMap) {
359
526
  const grantEntry = grantEntryMap[boneIndex];
360
527
  const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry;
361
528
  grantEntry.parent = parentGrantEntry;
362
529
  parentGrantEntry.children.push(grantEntry);
530
+ } // Sort grant parameters from parents to children because
531
+ // grant uses parent's transform that parent's grant is already applied
532
+ // so grant should be applied in order from parents to children
533
+
534
+
535
+ function traverse(entry) {
536
+ if (entry.param) {
537
+ grants.push(entry.param); // Save the reference even from bone data for efficiently
538
+ // simulating PMX animation system
539
+
540
+ bones[entry.param.index].grant = entry.param;
541
+ }
542
+
543
+ entry.visited = true;
544
+
545
+ for (let i = 0, il = entry.children.length; i < il; i++) {
546
+ const child = entry.children[i]; // Cut off a loop if exists. (Is a grant loop invalid?)
547
+
548
+ if (!child.visited) traverse(child);
549
+ }
363
550
  }
551
+
364
552
  traverse(rootEntry);
365
- }
553
+ } // morph
554
+
555
+
366
556
  function updateAttributes(attribute, morph, ratio) {
367
557
  for (let i = 0; i < morph.elementCount; i++) {
368
558
  const element = morph.elements[i];
369
559
  let index;
370
- if (data.metadata.format === "pmd") {
560
+
561
+ if (data.metadata.format === 'pmd') {
371
562
  index = data.morphs[0].elements[element.index].index;
372
563
  } else {
373
564
  index = element.index;
374
565
  }
566
+
375
567
  attribute.array[index * 3 + 0] += element.position[0] * ratio;
376
568
  attribute.array[index * 3 + 1] += element.position[1] * ratio;
377
569
  attribute.array[index * 3 + 2] += element.position[2] * ratio;
378
570
  }
379
571
  }
572
+
380
573
  for (let i = 0; i < data.metadata.morphCount; i++) {
381
574
  const morph = data.morphs[i];
382
- const params = { name: morph.name };
383
- const attribute = new THREE.Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
575
+ const params = {
576
+ name: morph.name
577
+ };
578
+ const attribute = new Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
384
579
  attribute.name = morph.name;
580
+
385
581
  for (let j = 0; j < data.metadata.vertexCount * 3; j++) {
386
582
  attribute.array[j] = positions[j];
387
583
  }
388
- if (data.metadata.format === "pmd") {
584
+
585
+ if (data.metadata.format === 'pmd') {
389
586
  if (i !== 0) {
390
- updateAttributes(attribute, morph, 1);
587
+ updateAttributes(attribute, morph, 1.0);
391
588
  }
392
589
  } else {
393
590
  if (morph.type === 0) {
591
+ // group
394
592
  for (let j = 0; j < morph.elementCount; j++) {
395
593
  const morph2 = data.morphs[morph.elements[j].index];
396
594
  const ratio = morph.elements[j].ratio;
595
+
397
596
  if (morph2.type === 1) {
398
597
  updateAttributes(attribute, morph2, ratio);
399
- } else {
400
598
  }
401
599
  }
402
600
  } else if (morph.type === 1) {
403
- updateAttributes(attribute, morph, 1);
404
- } else if (morph.type === 2) {
405
- } else if (morph.type === 3) {
406
- } else if (morph.type === 4) {
407
- } else if (morph.type === 5) {
408
- } else if (morph.type === 6) {
409
- } else if (morph.type === 7) {
410
- } else if (morph.type === 8) {
411
- }
601
+ // vertex
602
+ updateAttributes(attribute, morph, 1.0);
603
+ } else if (morph.type === 2) ; else if (morph.type === 3) ; else if (morph.type === 4) ; else if (morph.type === 5) ; else if (morph.type === 6) ; else if (morph.type === 7) ; else if (morph.type === 8) ;
412
604
  }
605
+
413
606
  morphTargets.push(params);
414
607
  morphPositions.push(attribute);
415
- }
608
+ } // rigid bodies from rigidBodies field.
609
+
610
+
416
611
  for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
417
612
  const rigidBody = data.rigidBodies[i];
418
613
  const params = {};
614
+
419
615
  for (const key in rigidBody) {
420
616
  params[key] = rigidBody[key];
421
617
  }
422
- if (data.metadata.format === "pmx") {
618
+ /*
619
+ * RigidBody position parameter in PMX seems global position
620
+ * while the one in PMD seems offset from corresponding bone.
621
+ * So unify being offset.
622
+ */
623
+
624
+
625
+ if (data.metadata.format === 'pmx') {
423
626
  if (params.boneIndex !== -1) {
424
627
  const bone = data.bones[params.boneIndex];
425
628
  params.position[0] -= bone.position[0];
@@ -427,168 +630,250 @@ class GeometryBuilder {
427
630
  params.position[2] -= bone.position[2];
428
631
  }
429
632
  }
633
+
430
634
  rigidBodies.push(params);
431
- }
635
+ } // constraints from constraints field.
636
+
637
+
432
638
  for (let i = 0; i < data.metadata.constraintCount; i++) {
433
639
  const constraint = data.constraints[i];
434
640
  const params = {};
641
+
435
642
  for (const key in constraint) {
436
643
  params[key] = constraint[key];
437
644
  }
645
+
438
646
  const bodyA = rigidBodies[params.rigidBodyIndex1];
439
- const bodyB = rigidBodies[params.rigidBodyIndex2];
647
+ const bodyB = rigidBodies[params.rigidBodyIndex2]; // Refer to http://www20.atpages.jp/katwat/wp/?p=4135
648
+
440
649
  if (bodyA.type !== 0 && bodyB.type === 2) {
441
650
  if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) {
442
651
  bodyB.type = 1;
443
652
  }
444
653
  }
654
+
445
655
  constraints.push(params);
446
- }
447
- const geometry = new THREE.BufferGeometry();
448
- geometry.setAttribute("position", new THREE.Float32BufferAttribute(positions, 3));
449
- geometry.setAttribute("normal", new THREE.Float32BufferAttribute(normals, 3));
450
- geometry.setAttribute("uv", new THREE.Float32BufferAttribute(uvs, 2));
451
- geometry.setAttribute("skinIndex", new THREE.Uint16BufferAttribute(skinIndices, 4));
452
- geometry.setAttribute("skinWeight", new THREE.Float32BufferAttribute(skinWeights, 4));
656
+ } // build BufferGeometry.
657
+
658
+
659
+ const geometry = new BufferGeometry();
660
+ geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
661
+ geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3));
662
+ geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
663
+ geometry.setAttribute('skinIndex', new Uint16BufferAttribute(skinIndices, 4));
664
+ geometry.setAttribute('skinWeight', new Float32BufferAttribute(skinWeights, 4));
453
665
  geometry.setIndex(indices);
666
+
454
667
  for (let i = 0, il = groups.length; i < il; i++) {
455
668
  geometry.addGroup(groups[i].offset, groups[i].count, i);
456
669
  }
670
+
457
671
  geometry.bones = bones;
458
672
  geometry.morphTargets = morphTargets;
459
673
  geometry.morphAttributes.position = morphPositions;
460
674
  geometry.morphTargetsRelative = false;
461
675
  geometry.userData.MMD = {
462
- bones,
463
- iks,
464
- grants,
465
- rigidBodies,
466
- constraints,
676
+ bones: bones,
677
+ iks: iks,
678
+ grants: grants,
679
+ rigidBodies: rigidBodies,
680
+ constraints: constraints,
467
681
  format: data.metadata.format
468
682
  };
469
683
  geometry.computeBoundingSphere();
470
684
  return geometry;
471
685
  }
472
- }
686
+
687
+ } //
688
+
689
+ /**
690
+ * @param {THREE.LoadingManager} manager
691
+ */
692
+
693
+
473
694
  class MaterialBuilder {
474
695
  constructor(manager) {
475
696
  this.manager = manager;
476
- this.textureLoader = new THREE.TextureLoader(this.manager);
477
- this.tgaLoader = null;
478
- this.crossOrigin = "anonymous";
479
- this.resourcePath = void 0;
697
+ this.textureLoader = new TextureLoader(this.manager);
698
+ this.tgaLoader = null; // lazy generation
699
+
700
+ this.crossOrigin = 'anonymous';
701
+ this.resourcePath = undefined;
480
702
  }
703
+ /**
704
+ * @param {string} crossOrigin
705
+ * @return {MaterialBuilder}
706
+ */
707
+
708
+
481
709
  setCrossOrigin(crossOrigin) {
482
710
  this.crossOrigin = crossOrigin;
483
711
  return this;
484
712
  }
713
+ /**
714
+ * @param {string} resourcePath
715
+ * @return {MaterialBuilder}
716
+ */
717
+
718
+
485
719
  setResourcePath(resourcePath) {
486
720
  this.resourcePath = resourcePath;
487
721
  return this;
488
722
  }
489
- build(data, geometry) {
723
+ /**
724
+ * @param {Object} data - parsed PMD/PMX data
725
+ * @param {BufferGeometry} geometry - some properties are dependend on geometry
726
+ * @param {function} onProgress
727
+ * @param {function} onError
728
+ * @return {Array<MeshToonMaterial>}
729
+ */
730
+
731
+
732
+ build(data, geometry
733
+ /*, onProgress, onError */
734
+ ) {
490
735
  const materials = [];
491
736
  const textures = {};
492
- this.textureLoader.setCrossOrigin(this.crossOrigin);
737
+ this.textureLoader.setCrossOrigin(this.crossOrigin); // materials
738
+
493
739
  for (let i = 0; i < data.metadata.materialCount; i++) {
494
740
  const material = data.materials[i];
495
- const params = { userData: {} };
496
- if (material.name !== void 0)
497
- params.name = material.name;
498
- params.color = new THREE.Color().fromArray(material.diffuse);
741
+ const params = {
742
+ userData: {}
743
+ };
744
+ if (material.name !== undefined) params.name = material.name;
745
+ /*
746
+ * Color
747
+ *
748
+ * MMD MeshToonMaterial
749
+ * diffuse - color
750
+ * ambient - emissive * a
751
+ * (a = 1.0 without map texture or 0.2 with map texture)
752
+ *
753
+ * MeshToonMaterial doesn't have ambient. Set it to emissive instead.
754
+ * It'll be too bright if material has map texture so using coef 0.2.
755
+ */
756
+
757
+ params.color = new Color().fromArray(material.diffuse);
499
758
  params.opacity = material.diffuse[3];
500
- params.emissive = new THREE.Color().fromArray(material.ambient);
501
- params.transparent = params.opacity !== 1;
759
+ params.emissive = new Color().fromArray(material.ambient);
760
+ params.transparent = params.opacity !== 1.0; //
761
+
502
762
  params.skinning = geometry.bones.length > 0 ? true : false;
503
763
  params.morphTargets = geometry.morphTargets.length > 0 ? true : false;
504
- params.fog = true;
505
- params.blending = THREE.CustomBlending;
506
- params.blendSrc = THREE.SrcAlphaFactor;
507
- params.blendDst = THREE.OneMinusSrcAlphaFactor;
508
- params.blendSrcAlpha = THREE.SrcAlphaFactor;
509
- params.blendDstAlpha = THREE.DstAlphaFactor;
510
- if (data.metadata.format === "pmx" && (material.flag & 1) === 1) {
511
- params.side = THREE.DoubleSide;
764
+ params.fog = true; // blend
765
+
766
+ params.blending = CustomBlending;
767
+ params.blendSrc = SrcAlphaFactor;
768
+ params.blendDst = OneMinusSrcAlphaFactor;
769
+ params.blendSrcAlpha = SrcAlphaFactor;
770
+ params.blendDstAlpha = DstAlphaFactor; // side
771
+
772
+ if (data.metadata.format === 'pmx' && (material.flag & 0x1) === 1) {
773
+ params.side = DoubleSide;
512
774
  } else {
513
- params.side = params.opacity === 1 ? THREE.FrontSide : THREE.DoubleSide;
775
+ params.side = params.opacity === 1.0 ? FrontSide : DoubleSide;
514
776
  }
515
- if (data.metadata.format === "pmd") {
777
+
778
+ if (data.metadata.format === 'pmd') {
779
+ // map, envMap
516
780
  if (material.fileName) {
517
781
  const fileName = material.fileName;
518
- const fileNames = fileName.split("*");
782
+ const fileNames = fileName.split('*'); // fileNames[ 0 ]: mapFileName
783
+ // fileNames[ 1 ]: envMapFileName( optional )
784
+
519
785
  params.map = this._loadTexture(fileNames[0], textures);
786
+
520
787
  if (fileNames.length > 1) {
521
788
  const extension = fileNames[1].slice(-4).toLowerCase();
522
789
  params.envMap = this._loadTexture(fileNames[1], textures);
523
- params.combine = extension === ".sph" ? THREE.MultiplyOperation : THREE.AddOperation;
790
+ params.combine = extension === '.sph' ? MultiplyOperation : AddOperation;
524
791
  }
525
- }
526
- const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data.toonTextures[material.toonIndex].fileName;
792
+ } // gradientMap
793
+
794
+
795
+ const toonFileName = material.toonIndex === -1 ? 'toon00.bmp' : data.toonTextures[material.toonIndex].fileName;
527
796
  params.gradientMap = this._loadTexture(toonFileName, textures, {
528
797
  isToonTexture: true,
529
798
  isDefaultToonTexture: this._isDefaultToonTexture(toonFileName)
530
- });
799
+ }); // parameters for OutlineEffect
800
+
531
801
  params.userData.outlineParameters = {
532
- thickness: material.edgeFlag === 1 ? 3e-3 : 0,
802
+ thickness: material.edgeFlag === 1 ? 0.003 : 0.0,
533
803
  color: [0, 0, 0],
534
- alpha: 1,
804
+ alpha: 1.0,
535
805
  visible: material.edgeFlag === 1
536
806
  };
537
807
  } else {
808
+ // map
538
809
  if (material.textureIndex !== -1) {
539
810
  params.map = this._loadTexture(data.textures[material.textureIndex], textures);
540
- }
811
+ } // envMap TODO: support m.envFlag === 3
812
+
813
+
541
814
  if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) {
542
815
  params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures);
543
- params.combine = material.envFlag === 1 ? THREE.MultiplyOperation : THREE.AddOperation;
544
- }
816
+ params.combine = material.envFlag === 1 ? MultiplyOperation : AddOperation;
817
+ } // gradientMap
818
+
819
+
545
820
  let toonFileName, isDefaultToon;
821
+
546
822
  if (material.toonIndex === -1 || material.toonFlag !== 0) {
547
- toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp";
823
+ toonFileName = 'toon' + ('0' + (material.toonIndex + 1)).slice(-2) + '.bmp';
548
824
  isDefaultToon = true;
549
825
  } else {
550
826
  toonFileName = data.textures[material.toonIndex];
551
827
  isDefaultToon = false;
552
828
  }
829
+
553
830
  params.gradientMap = this._loadTexture(toonFileName, textures, {
554
831
  isToonTexture: true,
555
832
  isDefaultToonTexture: isDefaultToon
556
- });
833
+ }); // parameters for OutlineEffect
834
+
557
835
  params.userData.outlineParameters = {
558
836
  thickness: material.edgeSize / 300,
837
+ // TODO: better calculation?
559
838
  color: material.edgeColor.slice(0, 3),
560
839
  alpha: material.edgeColor[3],
561
- visible: (material.flag & 16) !== 0 && material.edgeSize > 0
840
+ visible: (material.flag & 0x10) !== 0 && material.edgeSize > 0.0
562
841
  };
563
842
  }
564
- if (params.map !== void 0) {
843
+
844
+ if (params.map !== undefined) {
565
845
  if (!params.transparent) {
566
846
  this._checkImageTransparency(params.map, geometry, i);
567
847
  }
848
+
568
849
  params.emissive.multiplyScalar(0.2);
569
850
  }
570
- materials.push(new THREE.MeshToonMaterial(params));
851
+
852
+ materials.push(new MeshToonMaterial(params));
571
853
  }
572
- if (data.metadata.format === "pmx") {
573
- let checkAlphaMorph = function(elements, materials2) {
854
+
855
+ if (data.metadata.format === 'pmx') {
856
+ // set transparent true if alpha morph is defined.
857
+ function checkAlphaMorph(elements, materials) {
574
858
  for (let i = 0, il = elements.length; i < il; i++) {
575
859
  const element = elements[i];
576
- if (element.index === -1)
577
- continue;
578
- const material = materials2[element.index];
860
+ if (element.index === -1) continue;
861
+ const material = materials[element.index];
862
+
579
863
  if (material.opacity !== element.diffuse[3]) {
580
864
  material.transparent = true;
581
865
  }
582
866
  }
583
- };
867
+ }
868
+
584
869
  for (let i = 0, il = data.morphs.length; i < il; i++) {
585
870
  const morph = data.morphs[i];
586
871
  const elements = morph.elements;
872
+
587
873
  if (morph.type === 0) {
588
874
  for (let j = 0, jl = elements.length; j < jl; j++) {
589
875
  const morph2 = data.morphs[elements[j].index];
590
- if (morph2.type !== 8)
591
- continue;
876
+ if (morph2.type !== 8) continue;
592
877
  checkAlphaMorph(morph2.elements, materials);
593
878
  }
594
879
  } else if (morph.type === 8) {
@@ -596,175 +881,227 @@ class MaterialBuilder {
596
881
  }
597
882
  }
598
883
  }
884
+
599
885
  return materials;
600
- }
886
+ } // private methods
887
+
888
+
601
889
  _getTGALoader() {
602
890
  if (this.tgaLoader === null) {
603
- if (TGALoader.TGALoader === void 0) {
604
- throw new Error("THREE.MMDLoader: Import TGALoader");
891
+ if (TGALoader === undefined) {
892
+ throw new Error('THREE.MMDLoader: Import TGALoader');
605
893
  }
606
- this.tgaLoader = new TGALoader.TGALoader(this.manager);
894
+
895
+ this.tgaLoader = new TGALoader(this.manager);
607
896
  }
897
+
608
898
  return this.tgaLoader;
609
899
  }
900
+
610
901
  _isDefaultToonTexture(name) {
611
- if (name.length !== 10)
612
- return false;
902
+ if (name.length !== 10) return false;
613
903
  return /toon(10|0[0-9])\.bmp/.test(name);
614
904
  }
905
+
615
906
  _loadTexture(filePath, textures, params, onProgress, onError) {
616
907
  params = params || {};
617
908
  const scope = this;
618
909
  let fullPath;
910
+
619
911
  if (params.isDefaultToonTexture === true) {
620
912
  let index;
913
+
621
914
  try {
622
915
  index = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]);
623
916
  } catch (e) {
624
- console.warn(
625
- "THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."
626
- );
917
+ console.warn('THREE.MMDLoader: ' + filePath + ' seems like a ' + 'not right default texture path. Using toon00.bmp instead.');
627
918
  index = 0;
628
919
  }
920
+
629
921
  fullPath = DEFAULT_TOON_TEXTURES[index];
630
922
  } else {
631
923
  fullPath = this.resourcePath + filePath;
632
924
  }
633
- if (textures[fullPath] !== void 0)
634
- return textures[fullPath];
925
+
926
+ if (textures[fullPath] !== undefined) return textures[fullPath];
635
927
  let loader = this.manager.getHandler(fullPath);
928
+
636
929
  if (loader === null) {
637
- loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader;
930
+ loader = filePath.slice(-4).toLowerCase() === '.tga' ? this._getTGALoader() : this.textureLoader;
638
931
  }
639
- const texture = loader.load(
640
- fullPath,
641
- function(t) {
642
- if (params.isToonTexture === true) {
643
- t.image = scope._getRotatedImage(t.image);
644
- t.magFilter = THREE.NearestFilter;
645
- t.minFilter = THREE.NearestFilter;
646
- }
647
- t.flipY = false;
648
- t.wrapS = THREE.RepeatWrapping;
649
- t.wrapT = THREE.RepeatWrapping;
650
- for (let i = 0; i < texture.readyCallbacks.length; i++) {
651
- texture.readyCallbacks[i](texture);
652
- }
653
- delete texture.readyCallbacks;
654
- },
655
- onProgress,
656
- onError
657
- );
932
+
933
+ const texture = loader.load(fullPath, function (t) {
934
+ // MMD toon texture is Axis-Y oriented
935
+ // but Three.js gradient map is Axis-X oriented.
936
+ // So here replaces the toon texture image with the rotated one.
937
+ if (params.isToonTexture === true) {
938
+ t.image = scope._getRotatedImage(t.image);
939
+ t.magFilter = NearestFilter;
940
+ t.minFilter = NearestFilter;
941
+ }
942
+
943
+ t.flipY = false;
944
+ t.wrapS = RepeatWrapping;
945
+ t.wrapT = RepeatWrapping;
946
+
947
+ for (let i = 0; i < texture.readyCallbacks.length; i++) {
948
+ texture.readyCallbacks[i](texture);
949
+ }
950
+
951
+ delete texture.readyCallbacks;
952
+ }, onProgress, onError);
658
953
  texture.readyCallbacks = [];
659
954
  textures[fullPath] = texture;
660
955
  return texture;
661
956
  }
957
+
662
958
  _getRotatedImage(image) {
663
- const canvas = document.createElement("canvas");
664
- const context = canvas.getContext("2d");
959
+ const canvas = document.createElement('canvas');
960
+ const context = canvas.getContext('2d');
665
961
  const width = image.width;
666
962
  const height = image.height;
667
963
  canvas.width = width;
668
964
  canvas.height = height;
669
965
  context.clearRect(0, 0, width, height);
670
- context.translate(width / 2, height / 2);
671
- context.rotate(0.5 * Math.PI);
672
- context.translate(-width / 2, -height / 2);
966
+ context.translate(width / 2.0, height / 2.0);
967
+ context.rotate(0.5 * Math.PI); // 90.0 * Math.PI / 180.0
968
+
969
+ context.translate(-width / 2.0, -height / 2.0);
673
970
  context.drawImage(image, 0, 0);
674
971
  return context.getImageData(0, 0, width, height);
675
- }
972
+ } // Check if the partial image area used by the texture is transparent.
973
+
974
+
676
975
  _checkImageTransparency(map, geometry, groupIndex) {
677
- map.readyCallbacks.push(function(texture) {
976
+ map.readyCallbacks.push(function (texture) {
977
+ // Is there any efficient ways?
678
978
  function createImageData(image) {
679
- const canvas = document.createElement("canvas");
979
+ const canvas = document.createElement('canvas');
680
980
  canvas.width = image.width;
681
981
  canvas.height = image.height;
682
- const context = canvas.getContext("2d");
982
+ const context = canvas.getContext('2d');
683
983
  context.drawImage(image, 0, 0);
684
984
  return context.getImageData(0, 0, canvas.width, canvas.height);
685
985
  }
986
+
686
987
  function detectImageTransparency(image, uvs, indices) {
687
988
  const width = image.width;
688
989
  const height = image.height;
689
990
  const data = image.data;
690
991
  const threshold = 253;
691
- if (data.length / (width * height) !== 4)
692
- return false;
992
+ if (data.length / (width * height) !== 4) return false;
993
+
693
994
  for (let i = 0; i < indices.length; i += 3) {
694
- const centerUV = { x: 0, y: 0 };
995
+ const centerUV = {
996
+ x: 0.0,
997
+ y: 0.0
998
+ };
999
+
695
1000
  for (let j = 0; j < 3; j++) {
696
1001
  const index = indices[i * 3 + j];
697
- const uv = { x: uvs[index * 2 + 0], y: uvs[index * 2 + 1] };
698
- if (getAlphaByUv(image, uv) < threshold)
699
- return true;
1002
+ const uv = {
1003
+ x: uvs[index * 2 + 0],
1004
+ y: uvs[index * 2 + 1]
1005
+ };
1006
+ if (getAlphaByUv(image, uv) < threshold) return true;
700
1007
  centerUV.x += uv.x;
701
1008
  centerUV.y += uv.y;
702
1009
  }
1010
+
703
1011
  centerUV.x /= 3;
704
1012
  centerUV.y /= 3;
705
- if (getAlphaByUv(image, centerUV) < threshold)
706
- return true;
1013
+ if (getAlphaByUv(image, centerUV) < threshold) return true;
707
1014
  }
1015
+
708
1016
  return false;
709
1017
  }
1018
+ /*
1019
+ * This method expects
1020
+ * texture.flipY = false
1021
+ * texture.wrapS = RepeatWrapping
1022
+ * texture.wrapT = RepeatWrapping
1023
+ * TODO: more precise
1024
+ */
1025
+
1026
+
710
1027
  function getAlphaByUv(image, uv) {
711
1028
  const width = image.width;
712
1029
  const height = image.height;
713
1030
  let x = Math.round(uv.x * width) % width;
714
1031
  let y = Math.round(uv.y * height) % height;
715
- if (x < 0)
716
- x += width;
717
- if (y < 0)
718
- y += height;
1032
+ if (x < 0) x += width;
1033
+ if (y < 0) y += height;
719
1034
  const index = y * width + x;
720
1035
  return image.data[index * 4 + 3];
721
1036
  }
722
- const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image);
1037
+
1038
+ const imageData = texture.image.data !== undefined ? texture.image : createImageData(texture.image);
723
1039
  const group = geometry.groups[groupIndex];
724
- if (detectImageTransparency(
725
- imageData,
726
- geometry.attributes.uv.array,
727
- geometry.index.array.slice(group.start, group.start + group.count)
728
- )) {
1040
+
1041
+ if (detectImageTransparency(imageData, geometry.attributes.uv.array, geometry.index.array.slice(group.start, group.start + group.count))) {
729
1042
  map.transparent = true;
730
1043
  }
731
1044
  });
732
1045
  }
733
- }
1046
+
1047
+ } //
1048
+
1049
+
734
1050
  class AnimationBuilder {
1051
+ /**
1052
+ * @param {Object} vmd - parsed VMD data
1053
+ * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
1054
+ * @return {AnimationClip}
1055
+ */
735
1056
  build(vmd, mesh) {
1057
+ // combine skeletal and morph animations
736
1058
  const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks;
737
1059
  const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks;
1060
+
738
1061
  for (let i = 0, il = tracks2.length; i < il; i++) {
739
1062
  tracks.push(tracks2[i]);
740
1063
  }
741
- return new THREE.AnimationClip("", -1, tracks);
1064
+
1065
+ return new AnimationClip('', -1, tracks);
742
1066
  }
1067
+ /**
1068
+ * @param {Object} vmd - parsed VMD data
1069
+ * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
1070
+ * @return {AnimationClip}
1071
+ */
1072
+
1073
+
743
1074
  buildSkeletalAnimation(vmd, mesh) {
744
1075
  function pushInterpolation(array, interpolation, index) {
745
- array.push(interpolation[index + 0] / 127);
746
- array.push(interpolation[index + 8] / 127);
747
- array.push(interpolation[index + 4] / 127);
748
- array.push(interpolation[index + 12] / 127);
1076
+ array.push(interpolation[index + 0] / 127); // x1
1077
+
1078
+ array.push(interpolation[index + 8] / 127); // x2
1079
+
1080
+ array.push(interpolation[index + 4] / 127); // y1
1081
+
1082
+ array.push(interpolation[index + 12] / 127); // y2
749
1083
  }
1084
+
750
1085
  const tracks = [];
751
1086
  const motions = {};
752
1087
  const bones = mesh.skeleton.bones;
753
1088
  const boneNameDictionary = {};
1089
+
754
1090
  for (let i = 0, il = bones.length; i < il; i++) {
755
1091
  boneNameDictionary[bones[i].name] = true;
756
1092
  }
1093
+
757
1094
  for (let i = 0; i < vmd.metadata.motionCount; i++) {
758
1095
  const motion = vmd.motions[i];
759
1096
  const boneName = motion.boneName;
760
- if (boneNameDictionary[boneName] === void 0)
761
- continue;
1097
+ if (boneNameDictionary[boneName] === undefined) continue;
762
1098
  motions[boneName] = motions[boneName] || [];
763
1099
  motions[boneName].push(motion);
764
1100
  }
1101
+
765
1102
  for (const key in motions) {
766
1103
  const array = motions[key];
767
- array.sort(function(a, b) {
1104
+ array.sort(function (a, b) {
768
1105
  return a.frameNum - b.frameNum;
769
1106
  });
770
1107
  const times = [];
@@ -773,75 +1110,100 @@ class AnimationBuilder {
773
1110
  const pInterpolations = [];
774
1111
  const rInterpolations = [];
775
1112
  const basePosition = mesh.skeleton.getBoneByName(key).position.toArray();
1113
+
776
1114
  for (let i = 0, il = array.length; i < il; i++) {
777
1115
  const time = array[i].frameNum / 30;
778
1116
  const position = array[i].position;
779
1117
  const rotation = array[i].rotation;
780
1118
  const interpolation = array[i].interpolation;
781
1119
  times.push(time);
782
- for (let j = 0; j < 3; j++)
783
- positions.push(basePosition[j] + position[j]);
784
- for (let j = 0; j < 4; j++)
785
- rotations.push(rotation[j]);
786
- for (let j = 0; j < 3; j++)
787
- pushInterpolation(pInterpolations, interpolation, j);
1120
+
1121
+ for (let j = 0; j < 3; j++) positions.push(basePosition[j] + position[j]);
1122
+
1123
+ for (let j = 0; j < 4; j++) rotations.push(rotation[j]);
1124
+
1125
+ for (let j = 0; j < 3; j++) pushInterpolation(pInterpolations, interpolation, j);
1126
+
788
1127
  pushInterpolation(rInterpolations, interpolation, 3);
789
1128
  }
790
- const targetName = ".bones[" + key + "]";
791
- tracks.push(this._createTrack(targetName + ".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
792
- tracks.push(
793
- this._createTrack(targetName + ".quaternion", THREE.QuaternionKeyframeTrack, times, rotations, rInterpolations)
794
- );
1129
+
1130
+ const targetName = '.bones[' + key + ']';
1131
+ tracks.push(this._createTrack(targetName + '.position', VectorKeyframeTrack, times, positions, pInterpolations));
1132
+ tracks.push(this._createTrack(targetName + '.quaternion', QuaternionKeyframeTrack, times, rotations, rInterpolations));
795
1133
  }
796
- return new THREE.AnimationClip("", -1, tracks);
1134
+
1135
+ return new AnimationClip('', -1, tracks);
797
1136
  }
1137
+ /**
1138
+ * @param {Object} vmd - parsed VMD data
1139
+ * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
1140
+ * @return {AnimationClip}
1141
+ */
1142
+
1143
+
798
1144
  buildMorphAnimation(vmd, mesh) {
799
1145
  const tracks = [];
800
1146
  const morphs = {};
801
1147
  const morphTargetDictionary = mesh.morphTargetDictionary;
1148
+
802
1149
  for (let i = 0; i < vmd.metadata.morphCount; i++) {
803
1150
  const morph = vmd.morphs[i];
804
1151
  const morphName = morph.morphName;
805
- if (morphTargetDictionary[morphName] === void 0)
806
- continue;
1152
+ if (morphTargetDictionary[morphName] === undefined) continue;
807
1153
  morphs[morphName] = morphs[morphName] || [];
808
1154
  morphs[morphName].push(morph);
809
1155
  }
1156
+
810
1157
  for (const key in morphs) {
811
1158
  const array = morphs[key];
812
- array.sort(function(a, b) {
1159
+ array.sort(function (a, b) {
813
1160
  return a.frameNum - b.frameNum;
814
1161
  });
815
1162
  const times = [];
816
1163
  const values = [];
1164
+
817
1165
  for (let i = 0, il = array.length; i < il; i++) {
818
1166
  times.push(array[i].frameNum / 30);
819
1167
  values.push(array[i].weight);
820
1168
  }
821
- tracks.push(new THREE.NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key] + "]", times, values));
1169
+
1170
+ tracks.push(new NumberKeyframeTrack('.morphTargetInfluences[' + morphTargetDictionary[key] + ']', times, values));
822
1171
  }
823
- return new THREE.AnimationClip("", -1, tracks);
1172
+
1173
+ return new AnimationClip('', -1, tracks);
824
1174
  }
1175
+ /**
1176
+ * @param {Object} vmd - parsed VMD data
1177
+ * @return {AnimationClip}
1178
+ */
1179
+
1180
+
825
1181
  buildCameraAnimation(vmd) {
826
1182
  function pushVector3(array, vec) {
827
1183
  array.push(vec.x);
828
1184
  array.push(vec.y);
829
1185
  array.push(vec.z);
830
1186
  }
1187
+
831
1188
  function pushQuaternion(array, q) {
832
1189
  array.push(q.x);
833
1190
  array.push(q.y);
834
1191
  array.push(q.z);
835
1192
  array.push(q.w);
836
1193
  }
1194
+
837
1195
  function pushInterpolation(array, interpolation, index) {
838
- array.push(interpolation[index * 4 + 0] / 127);
839
- array.push(interpolation[index * 4 + 1] / 127);
840
- array.push(interpolation[index * 4 + 2] / 127);
841
- array.push(interpolation[index * 4 + 3] / 127);
1196
+ array.push(interpolation[index * 4 + 0] / 127); // x1
1197
+
1198
+ array.push(interpolation[index * 4 + 1] / 127); // x2
1199
+
1200
+ array.push(interpolation[index * 4 + 2] / 127); // y1
1201
+
1202
+ array.push(interpolation[index * 4 + 3] / 127); // y2
842
1203
  }
843
- const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice();
844
- cameras.sort(function(a, b) {
1204
+
1205
+ const cameras = vmd.cameras === undefined ? [] : vmd.cameras.slice();
1206
+ cameras.sort(function (a, b) {
845
1207
  return a.frameNum - b.frameNum;
846
1208
  });
847
1209
  const times = [];
@@ -853,10 +1215,11 @@ class AnimationBuilder {
853
1215
  const qInterpolations = [];
854
1216
  const pInterpolations = [];
855
1217
  const fInterpolations = [];
856
- const quaternion = new THREE.Quaternion();
857
- const euler = new THREE.Euler();
858
- const position = new THREE.Vector3();
859
- const center = new THREE.Vector3();
1218
+ const quaternion = new Quaternion();
1219
+ const euler = new Euler();
1220
+ const position = new Vector3();
1221
+ const center = new Vector3();
1222
+
860
1223
  for (let i = 0, il = cameras.length; i < il; i++) {
861
1224
  const motion = cameras[i];
862
1225
  const time = motion.frameNum / 30;
@@ -876,23 +1239,36 @@ class AnimationBuilder {
876
1239
  pushQuaternion(quaternions, quaternion);
877
1240
  pushVector3(positions, position);
878
1241
  fovs.push(fov);
1242
+
879
1243
  for (let j = 0; j < 3; j++) {
880
1244
  pushInterpolation(cInterpolations, interpolation, j);
881
1245
  }
882
- pushInterpolation(qInterpolations, interpolation, 3);
1246
+
1247
+ pushInterpolation(qInterpolations, interpolation, 3); // use the same parameter for x, y, z axis.
1248
+
883
1249
  for (let j = 0; j < 3; j++) {
884
1250
  pushInterpolation(pInterpolations, interpolation, 4);
885
1251
  }
1252
+
886
1253
  pushInterpolation(fInterpolations, interpolation, 5);
887
1254
  }
888
- const tracks = [];
889
- tracks.push(this._createTrack("target.position", THREE.VectorKeyframeTrack, times, centers, cInterpolations));
890
- tracks.push(this._createTrack(".quaternion", THREE.QuaternionKeyframeTrack, times, quaternions, qInterpolations));
891
- tracks.push(this._createTrack(".position", THREE.VectorKeyframeTrack, times, positions, pInterpolations));
892
- tracks.push(this._createTrack(".fov", THREE.NumberKeyframeTrack, times, fovs, fInterpolations));
893
- return new THREE.AnimationClip("", -1, tracks);
894
- }
1255
+
1256
+ const tracks = []; // I expect an object whose name 'target' exists under THREE.Camera
1257
+
1258
+ tracks.push(this._createTrack('target.position', VectorKeyframeTrack, times, centers, cInterpolations));
1259
+ tracks.push(this._createTrack('.quaternion', QuaternionKeyframeTrack, times, quaternions, qInterpolations));
1260
+ tracks.push(this._createTrack('.position', VectorKeyframeTrack, times, positions, pInterpolations));
1261
+ tracks.push(this._createTrack('.fov', NumberKeyframeTrack, times, fovs, fInterpolations));
1262
+ return new AnimationClip('', -1, tracks);
1263
+ } // private method
1264
+
1265
+
895
1266
  _createTrack(node, typedKeyframeTrack, times, values, interpolations) {
1267
+ /*
1268
+ * optimizes here not to let KeyframeTrackPrototype optimize
1269
+ * because KeyframeTrackPrototype optimizes times and values but
1270
+ * doesn't optimize interpolations.
1271
+ */
896
1272
  if (times.length > 2) {
897
1273
  times = times.slice();
898
1274
  values = values.slice();
@@ -900,6 +1276,7 @@ class AnimationBuilder {
900
1276
  const stride = values.length / times.length;
901
1277
  const interpolateStride = interpolations.length / times.length;
902
1278
  let index = 1;
1279
+
903
1280
  for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) {
904
1281
  for (let i = 0; i < stride; i++) {
905
1282
  if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) {
@@ -907,92 +1284,151 @@ class AnimationBuilder {
907
1284
  break;
908
1285
  }
909
1286
  }
1287
+
910
1288
  if (aheadIndex > index) {
911
1289
  times[index] = times[aheadIndex];
1290
+
912
1291
  for (let i = 0; i < stride; i++) {
913
1292
  values[index * stride + i] = values[aheadIndex * stride + i];
914
1293
  }
1294
+
915
1295
  for (let i = 0; i < interpolateStride; i++) {
916
1296
  interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i];
917
1297
  }
918
1298
  }
919
1299
  }
1300
+
920
1301
  times.length = index + 1;
921
1302
  values.length = (index + 1) * stride;
922
1303
  interpolations.length = (index + 1) * interpolateStride;
923
1304
  }
1305
+
924
1306
  const track = new typedKeyframeTrack(node, times, values);
1307
+
925
1308
  track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) {
926
- return new CubicBezierInterpolation(
927
- this.times,
928
- this.values,
929
- this.getValueSize(),
930
- result,
931
- new Float32Array(interpolations)
932
- );
1309
+ return new CubicBezierInterpolation(this.times, this.values, this.getValueSize(), result, new Float32Array(interpolations));
933
1310
  };
1311
+
934
1312
  return track;
935
1313
  }
936
- }
937
- class CubicBezierInterpolation extends THREE.Interpolant {
1314
+
1315
+ } // interpolation
1316
+
1317
+
1318
+ class CubicBezierInterpolation extends Interpolant {
938
1319
  constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) {
939
1320
  super(parameterPositions, sampleValues, sampleSize, resultBuffer);
940
1321
  this.interpolationParams = params;
941
1322
  }
1323
+
942
1324
  interpolate_(i1, t0, t, t1) {
943
1325
  const result = this.resultBuffer;
944
1326
  const values = this.sampleValues;
945
1327
  const stride = this.valueSize;
946
1328
  const params = this.interpolationParams;
947
1329
  const offset1 = i1 * stride;
948
- const offset0 = offset1 - stride;
949
- const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0);
1330
+ const offset0 = offset1 - stride; // No interpolation if next key frame is in one frame in 30fps.
1331
+ // This is from MMD animation spec.
1332
+ // '1.5' is for precision loss. times are Float32 in Three.js Animation system.
1333
+
1334
+ const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0.0 : (t - t0) / (t1 - t0);
1335
+
950
1336
  if (stride === 4) {
1337
+ // Quaternion
951
1338
  const x1 = params[i1 * 4 + 0];
952
1339
  const x2 = params[i1 * 4 + 1];
953
1340
  const y1 = params[i1 * 4 + 2];
954
1341
  const y2 = params[i1 * 4 + 3];
1342
+
955
1343
  const ratio = this._calculate(x1, x2, y1, y2, weight1);
956
- THREE.Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
1344
+
1345
+ Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
957
1346
  } else if (stride === 3) {
1347
+ // Vector3
958
1348
  for (let i = 0; i !== stride; ++i) {
959
1349
  const x1 = params[i1 * 12 + i * 4 + 0];
960
1350
  const x2 = params[i1 * 12 + i * 4 + 1];
961
1351
  const y1 = params[i1 * 12 + i * 4 + 2];
962
1352
  const y2 = params[i1 * 12 + i * 4 + 3];
1353
+
963
1354
  const ratio = this._calculate(x1, x2, y1, y2, weight1);
1355
+
964
1356
  result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio;
965
1357
  }
966
1358
  } else {
1359
+ // Number
967
1360
  const x1 = params[i1 * 4 + 0];
968
1361
  const x2 = params[i1 * 4 + 1];
969
1362
  const y1 = params[i1 * 4 + 2];
970
1363
  const y2 = params[i1 * 4 + 3];
1364
+
971
1365
  const ratio = this._calculate(x1, x2, y1, y2, weight1);
1366
+
972
1367
  result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio;
973
1368
  }
1369
+
974
1370
  return result;
975
1371
  }
1372
+
976
1373
  _calculate(x1, x2, y1, y2, x) {
1374
+ /*
1375
+ * Cubic Bezier curves
1376
+ * https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves
1377
+ *
1378
+ * B(t) = ( 1 - t ) ^ 3 * P0
1379
+ * + 3 * ( 1 - t ) ^ 2 * t * P1
1380
+ * + 3 * ( 1 - t ) * t^2 * P2
1381
+ * + t ^ 3 * P3
1382
+ * ( 0 <= t <= 1 )
1383
+ *
1384
+ * MMD uses Cubic Bezier curves for bone and camera animation interpolation.
1385
+ * http://d.hatena.ne.jp/edvakf/20111016/1318716097
1386
+ *
1387
+ * x = ( 1 - t ) ^ 3 * x0
1388
+ * + 3 * ( 1 - t ) ^ 2 * t * x1
1389
+ * + 3 * ( 1 - t ) * t^2 * x2
1390
+ * + t ^ 3 * x3
1391
+ * y = ( 1 - t ) ^ 3 * y0
1392
+ * + 3 * ( 1 - t ) ^ 2 * t * y1
1393
+ * + 3 * ( 1 - t ) * t^2 * y2
1394
+ * + t ^ 3 * y3
1395
+ * ( x0 = 0, y0 = 0 )
1396
+ * ( x3 = 1, y3 = 1 )
1397
+ * ( 0 <= t, x1, x2, y1, y2 <= 1 )
1398
+ *
1399
+ * Here solves this equation with Bisection method,
1400
+ * https://en.wikipedia.org/wiki/Bisection_method
1401
+ * gets t, and then calculate y.
1402
+ *
1403
+ * f(t) = 3 * ( 1 - t ) ^ 2 * t * x1
1404
+ * + 3 * ( 1 - t ) * t^2 * x2
1405
+ * + t ^ 3 - x = 0
1406
+ *
1407
+ * (Another option: Newton's method
1408
+ * https://en.wikipedia.org/wiki/Newton%27s_method)
1409
+ */
977
1410
  let c = 0.5;
978
1411
  let t = c;
979
- let s = 1 - t;
1412
+ let s = 1.0 - t;
980
1413
  const loop = 15;
981
1414
  const eps = 1e-5;
982
1415
  const math = Math;
983
1416
  let sst3, stt3, ttt;
1417
+
984
1418
  for (let i = 0; i < loop; i++) {
985
- sst3 = 3 * s * s * t;
986
- stt3 = 3 * s * t * t;
1419
+ sst3 = 3.0 * s * s * t;
1420
+ stt3 = 3.0 * s * t * t;
987
1421
  ttt = t * t * t;
988
1422
  const ft = sst3 * x1 + stt3 * x2 + ttt - x;
989
- if (math.abs(ft) < eps)
990
- break;
991
- c /= 2;
1423
+ if (math.abs(ft) < eps) break;
1424
+ c /= 2.0;
992
1425
  t += ft < 0 ? c : -c;
993
- s = 1 - t;
1426
+ s = 1.0 - t;
994
1427
  }
1428
+
995
1429
  return sst3 * y1 + stt3 * y2 + ttt;
996
1430
  }
1431
+
997
1432
  }
998
- exports.MMDLoader = MMDLoader;
1433
+
1434
+ export { MMDLoader };