three-stdlib 2.16.0 → 2.16.1

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 (1218) 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.js +152 -82
  25. package/controls/OrbitControls.cjs.js +1 -0
  26. package/controls/OrbitControls.js +481 -232
  27. package/controls/PointerLockControls.cjs.js +1 -0
  28. package/controls/PointerLockControls.js +99 -63
  29. package/controls/TrackballControls.cjs.js +1 -0
  30. package/controls/TrackballControls.js +383 -211
  31. package/controls/TransformControls.cjs.js +1 -0
  32. package/controls/TransformControls.js +782 -575
  33. package/controls/experimental/CameraControls.cjs.js +1 -0
  34. package/controls/experimental/CameraControls.js +609 -329
  35. package/csm/CSM.cjs.js +1 -0
  36. package/csm/CSM.js +108 -47
  37. package/csm/CSMFrustum.cjs.js +1 -0
  38. package/csm/CSMFrustum.js +29 -14
  39. package/csm/CSMHelper.cjs.js +1 -0
  40. package/csm/CSMHelper.js +34 -20
  41. package/csm/CSMShader.cjs.js +1 -0
  42. package/csm/CSMShader.js +11 -7
  43. package/curves/CurveExtras.cjs.js +1 -0
  44. package/curves/CurveExtras.js +115 -73
  45. package/curves/NURBSCurve.cjs.js +1 -0
  46. package/curves/NURBSCurve.js +43 -15
  47. package/curves/NURBSSurface.cjs.js +1 -0
  48. package/curves/NURBSSurface.js +27 -11
  49. package/curves/NURBSUtils.cjs.js +1 -0
  50. package/curves/NURBSUtils.js +203 -54
  51. package/custom.d.cjs.js +1 -0
  52. package/{shaders/types.mjs → custom.d.js} +0 -0
  53. package/deprecated/Geometry.cjs.js +1 -0
  54. package/deprecated/Geometry.js +486 -191
  55. package/effects/AnaglyphEffect.cjs.js +1 -0
  56. package/effects/AnaglyphEffect.js +60 -95
  57. package/effects/AsciiEffect.cjs.js +1 -0
  58. package/effects/AsciiEffect.js +110 -80
  59. package/effects/OutlineEffect.cjs.js +1 -0
  60. package/effects/OutlineEffect.js +204 -121
  61. package/effects/ParallaxBarrierEffect.cjs.js +1 -0
  62. package/effects/ParallaxBarrierEffect.js +38 -39
  63. package/effects/PeppersGhostEffect.cjs.js +1 -0
  64. package/effects/PeppersGhostEffect.js +68 -19
  65. package/effects/StereoEffect.cjs.js +1 -0
  66. package/effects/StereoEffect.js +16 -12
  67. package/environments/RoomEnvironment.cjs.js +1 -0
  68. package/environments/RoomEnvironment.js +47 -52
  69. package/exporters/ColladaExporter.cjs.js +1 -0
  70. package/exporters/ColladaExporter.js +241 -115
  71. package/exporters/DRACOExporter.cjs.js +1 -0
  72. package/exporters/DRACOExporter.js +121 -67
  73. package/exporters/GLTFExporter.cjs.js +1 -0
  74. package/exporters/GLTFExporter.js +1014 -463
  75. package/exporters/MMDExporter.cjs.js +1 -0
  76. package/exporters/MMDExporter.js +102 -44
  77. package/exporters/OBJExporter.cjs.js +1 -0
  78. package/exporters/OBJExporter.js +140 -78
  79. package/exporters/PLYExporter.cjs.js +1 -0
  80. package/exporters/PLYExporter.js +154 -93
  81. package/exporters/STLExporter.cjs.js +1 -0
  82. package/exporters/STLExporter.js +81 -30
  83. package/exporters/USDZExporter.cjs.js +1 -0
  84. package/exporters/USDZExporter.js +144 -84
  85. package/geometries/BoxLineGeometry.cjs.js +1 -0
  86. package/geometries/BoxLineGeometry.js +14 -7
  87. package/geometries/ConvexGeometry.cjs.js +1 -0
  88. package/geometries/ConvexGeometry.js +23 -14
  89. package/geometries/DecalGeometry.cjs.js +1 -0
  90. package/geometries/DecalGeometry.js +162 -108
  91. package/geometries/LightningStrike.cjs.js +1 -0
  92. package/geometries/LightningStrike.js +294 -101
  93. package/geometries/ParametricGeometries.cjs.js +1 -0
  94. package/geometries/ParametricGeometries.js +76 -26
  95. package/geometries/ParametricGeometry.cjs.js +1 -0
  96. package/geometries/ParametricGeometry.js +48 -24
  97. package/geometries/RoundedBoxGeometry.cjs.js +1 -0
  98. package/geometries/RoundedBoxGeometry.js +64 -33
  99. package/geometries/TeapotGeometry.cjs.js +1 -0
  100. package/geometries/TeapotGeometry.js +174 -1434
  101. package/geometries/TextGeometry.cjs.js +1 -0
  102. package/geometries/TextGeometry.js +17 -9
  103. package/helpers/LightProbeHelper.cjs.js +1 -0
  104. package/helpers/LightProbeHelper.js +21 -53
  105. package/helpers/PositionalAudioHelper.cjs.js +1 -0
  106. package/helpers/PositionalAudioHelper.js +30 -23
  107. package/helpers/RectAreaLightHelper.cjs.js +1 -0
  108. package/helpers/RectAreaLightHelper.js +33 -17
  109. package/helpers/VertexNormalsHelper.cjs.js +1 -0
  110. package/helpers/VertexNormalsHelper.js +41 -20
  111. package/helpers/VertexTangentsHelper.cjs.js +1 -0
  112. package/helpers/VertexTangentsHelper.js +36 -18
  113. package/index.cjs.js +1 -0
  114. package/index.js +333 -969
  115. package/interactive/InteractiveGroup.cjs.js +1 -0
  116. package/interactive/InteractiveGroup.d.ts +5 -0
  117. package/interactive/InteractiveGroup.js +87 -0
  118. package/interactive/SelectionBox.cjs.js +1 -0
  119. package/interactive/SelectionBox.js +46 -31
  120. package/interactive/SelectionHelper.cjs.js +1 -0
  121. package/interactive/SelectionHelper.js +21 -16
  122. package/libs/MeshoptDecoder.cjs.js +1 -0
  123. package/libs/MeshoptDecoder.js +58 -147
  124. package/libs/MotionControllers.cjs.js +1 -0
  125. package/libs/MotionControllers.js +208 -66
  126. package/lights/LightProbeGenerator.cjs.js +1 -0
  127. package/lights/LightProbeGenerator.js +96 -40
  128. package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
  129. package/lights/RectAreaLightUniformsLib.js +9 -32842
  130. package/lines/Line2.cjs.js +1 -0
  131. package/lines/Line2.js +12 -9
  132. package/lines/LineGeometry.cjs.js +1 -0
  133. package/lines/LineGeometry.js +19 -7
  134. package/lines/LineMaterial.cjs.js +1 -0
  135. package/lines/LineMaterial.js +89 -51
  136. package/lines/LineSegments2.cjs.js +1 -0
  137. package/lines/LineSegments2.js +165 -56
  138. package/lines/LineSegmentsGeometry.cjs.js +1 -0
  139. package/lines/LineSegmentsGeometry.js +71 -29
  140. package/lines/Wireframe.cjs.js +1 -0
  141. package/lines/Wireframe.js +29 -15
  142. package/lines/WireframeGeometry2.cjs.js +1 -0
  143. package/lines/WireframeGeometry2.js +9 -8
  144. package/loaders/3DMLoader.cjs.js +1 -0
  145. package/loaders/3DMLoader.js +469 -234
  146. package/loaders/3MFLoader.cjs.js +1 -0
  147. package/loaders/3MFLoader.js +555 -340
  148. package/loaders/AMFLoader.cjs.js +1 -0
  149. package/loaders/AMFLoader.js +219 -114
  150. package/loaders/AssimpLoader.cjs.js +1 -0
  151. package/loaders/AssimpLoader.js +725 -328
  152. package/loaders/BVHLoader.cjs.js +1 -0
  153. package/loaders/BVHLoader.js +200 -94
  154. package/loaders/BasisTextureLoader.cjs.js +1 -0
  155. package/loaders/BasisTextureLoader.js +357 -229
  156. package/loaders/ColladaLoader.cjs.js +1 -0
  157. package/loaders/ColladaLoader.js +1522 -932
  158. package/loaders/DDSLoader.cjs.js +1 -0
  159. package/loaders/DDSLoader.js +108 -42
  160. package/loaders/DRACOLoader.cjs.js +1 -0
  161. package/loaders/DRACOLoader.js +210 -103
  162. package/loaders/EXRLoader.cjs.js +1 -0
  163. package/loaders/EXRLoader.js +809 -461
  164. package/loaders/FBXLoader.cjs.js +1 -0
  165. package/loaders/FBXLoader.js +1397 -842
  166. package/loaders/FontLoader.cjs.js +1 -0
  167. package/loaders/FontLoader.js +66 -33
  168. package/loaders/GCodeLoader.cjs.js +1 -0
  169. package/loaders/GCodeLoader.js +111 -63
  170. package/loaders/GLTFLoader.cjs.js +1 -0
  171. package/loaders/GLTFLoader.js +1484 -771
  172. package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
  173. package/loaders/HDRCubeTextureLoader.js +50 -45
  174. package/loaders/KMZLoader.cjs.js +1 -0
  175. package/loaders/KMZLoader.js +55 -42
  176. package/loaders/KTX2Loader.cjs.js +1 -0
  177. package/loaders/KTX2Loader.js +362 -229
  178. package/loaders/KTXLoader.cjs.js +1 -0
  179. package/loaders/KTXLoader.js +99 -37
  180. package/loaders/LDrawLoader.cjs.js +1 -0
  181. package/loaders/LDrawLoader.js +746 -313
  182. package/loaders/LUT3dlLoader.cjs.js +1 -0
  183. package/loaders/LUT3dlLoader.js +62 -50
  184. package/loaders/LUTCubeLoader.cjs.js +1 -0
  185. package/loaders/LUTCubeLoader.js +56 -45
  186. package/loaders/LWOLoader.cjs.js +1 -0
  187. package/loaders/LWOLoader.js +339 -227
  188. package/loaders/LottieLoader.cjs.js +1 -0
  189. package/loaders/LottieLoader.js +38 -36
  190. package/loaders/MD2Loader.cjs.js +1 -0
  191. package/loaders/MD2Loader.js +91 -248
  192. package/loaders/MDDLoader.cjs.js +1 -0
  193. package/loaders/MDDLoader.js +45 -25
  194. package/loaders/MMDLoader.cjs.js +1 -0
  195. package/loaders/MMDLoader.js +795 -359
  196. package/loaders/MTLLoader.cjs.js +1 -0
  197. package/loaders/MTLLoader.js +201 -91
  198. package/loaders/NRRDLoader.cjs.js +1 -0
  199. package/loaders/NRRDLoader.js +263 -182
  200. package/loaders/NodeMaterialLoader.cjs.js +1 -0
  201. package/loaders/NodeMaterialLoader.js +14 -121
  202. package/loaders/OBJLoader.cjs.js +1 -0
  203. package/loaders/OBJLoader.js +283 -161
  204. package/loaders/PCDLoader.cjs.js +1 -0
  205. package/loaders/PCDLoader.js +164 -145
  206. package/loaders/PDBLoader.cjs.js +1 -0
  207. package/loaders/PDBLoader.js +63 -45
  208. package/loaders/PLYLoader.cjs.js +1 -0
  209. package/loaders/PLYLoader.js +203 -106
  210. package/loaders/PRWMLoader.cjs.js +1 -0
  211. package/loaders/PRWMLoader.js +110 -73
  212. package/loaders/PVRLoader.cjs.js +1 -0
  213. package/loaders/PVRLoader.js +93 -32
  214. package/loaders/RGBELoader.cjs.js +1 -0
  215. package/loaders/RGBELoader.js +233 -96
  216. package/loaders/RGBMLoader.cjs.js +1 -0
  217. package/loaders/RGBMLoader.js +514 -344
  218. package/loaders/STLLoader.cjs.js +1 -0
  219. package/loaders/STLLoader.js +165 -59
  220. package/loaders/SVGLoader.cjs.js +1 -0
  221. package/loaders/SVGLoader.js +851 -481
  222. package/loaders/TDSLoader.cjs.js +1 -0
  223. package/loaders/TDSLoader.js +527 -137
  224. package/loaders/TGALoader.cjs.js +1 -0
  225. package/loaders/TGALoader.js +205 -94
  226. package/loaders/TTFLoader.cjs.js +1 -0
  227. package/loaders/TTFLoader.js +79 -58
  228. package/loaders/TiltLoader.cjs.js +1 -0
  229. package/loaders/TiltLoader.js +167 -129
  230. package/loaders/VOXLoader.cjs.js +1 -0
  231. package/loaders/VOXLoader.js +84 -320
  232. package/loaders/VRMLLoader.cjs.js +1 -0
  233. package/loaders/VRMLLoader.js +1268 -786
  234. package/loaders/VRMLoader.cjs.js +1 -0
  235. package/loaders/VRMLoader.js +31 -23
  236. package/loaders/VTKLoader.cjs.js +1 -0
  237. package/loaders/VTKLoader.js +407 -219
  238. package/loaders/XLoader.cjs.js +1 -0
  239. package/loaders/XLoader.js +1259 -1083
  240. package/loaders/XYZLoader.cjs.js +1 -0
  241. package/loaders/XYZLoader.js +34 -28
  242. package/loaders/lwo/IFFParser.cjs.js +1 -0
  243. package/loaders/lwo/IFFParser.js +492 -238
  244. package/loaders/lwo/LWO2Parser.cjs.js +1 -0
  245. package/loaders/lwo/LWO2Parser.js +279 -176
  246. package/loaders/lwo/LWO3Parser.cjs.js +1 -0
  247. package/loaders/lwo/LWO3Parser.js +247 -160
  248. package/math/Capsule.cjs.js +1 -0
  249. package/math/Capsule.js +43 -56
  250. package/math/ColorConverter.cjs.js +1 -0
  251. package/math/ColorConverter.js +32 -18
  252. package/math/ConvexHull.cjs.js +1 -0
  253. package/math/ConvexHull.js +357 -97
  254. package/math/ImprovedNoise.cjs.js +1 -0
  255. package/math/ImprovedNoise.js +32 -282
  256. package/math/Lut.cjs.js +1 -0
  257. package/math/Lut.js +35 -51
  258. package/math/MeshSurfaceSampler.cjs.js +1 -0
  259. package/math/MeshSurfaceSampler.js +68 -25
  260. package/math/OBB.cjs.js +1 -0
  261. package/math/OBB.js +152 -91
  262. package/math/Octree.cjs.js +1 -0
  263. package/math/Octree.js +139 -76
  264. package/math/SimplexNoise.cjs.js +1 -0
  265. package/math/SimplexNoise.js +238 -217
  266. package/misc/ConvexObjectBreaker.cjs.js +1 -0
  267. package/misc/ConvexObjectBreaker.js +185 -79
  268. package/misc/GPUComputationRenderer.cjs.js +1 -0
  269. package/misc/GPUComputationRenderer.js +194 -69
  270. package/misc/Gyroscope.cjs.js +1 -0
  271. package/misc/Gyroscope.js +22 -16
  272. package/misc/MD2Character.cjs.js +1 -0
  273. package/misc/MD2Character.js +74 -52
  274. package/misc/MD2CharacterComplex.cjs.js +1 -0
  275. package/misc/MD2CharacterComplex.js +163 -112
  276. package/misc/MorphAnimMesh.cjs.js +1 -0
  277. package/misc/MorphAnimMesh.js +28 -20
  278. package/misc/MorphBlendMesh.cjs.js +1 -0
  279. package/misc/MorphBlendMesh.js +69 -45
  280. package/misc/ProgressiveLightmap.cjs.js +1 -0
  281. package/misc/ProgressiveLightmap.js +187 -70
  282. package/misc/RollerCoaster.cjs.js +1 -0
  283. package/misc/RollerCoaster.js +135 -106
  284. package/misc/TubePainter.cjs.js +1 -0
  285. package/misc/TubePainter.js +92 -74
  286. package/misc/Volume.cjs.js +1 -0
  287. package/misc/Volume.js +270 -108
  288. package/misc/VolumeSlice.cjs.js +1 -0
  289. package/misc/VolumeSlice.js +122 -34
  290. package/misc/WebGL.cjs.js +1 -0
  291. package/misc/WebGL.js +34 -37
  292. package/modifiers/CurveModifier.cjs.js +1 -0
  293. package/modifiers/CurveModifier.js +151 -46
  294. package/modifiers/EdgeSplitModifier.cjs.js +1 -0
  295. package/modifiers/EdgeSplitModifier.js +90 -46
  296. package/modifiers/SimplifyModifier.cjs.js +1 -0
  297. package/modifiers/SimplifyModifier.js +202 -77
  298. package/modifiers/TessellateModifier.cjs.js +1 -0
  299. package/modifiers/TessellateModifier.js +90 -65
  300. package/nodes/Nodes.cjs.js +1 -0
  301. package/nodes/Nodes.js +140 -274
  302. package/nodes/ShaderNode.cjs.js +1 -0
  303. package/nodes/ShaderNode.js +196 -296
  304. package/nodes/accessors/BufferNode.cjs.js +1 -0
  305. package/nodes/accessors/BufferNode.js +8 -4
  306. package/nodes/accessors/CameraNode.cjs.js +1 -0
  307. package/nodes/accessors/CameraNode.js +25 -20
  308. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  309. package/nodes/accessors/CubeTextureNode.js +26 -14
  310. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  311. package/nodes/accessors/MaterialNode.js +53 -43
  312. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  313. package/nodes/accessors/MaterialReferenceNode.js +6 -3
  314. package/nodes/accessors/ModelNode.cjs.js +1 -0
  315. package/nodes/accessors/ModelNode.js +5 -3
  316. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  317. package/nodes/accessors/ModelViewProjectionNode.js +13 -14
  318. package/nodes/accessors/NormalNode.cjs.js +1 -0
  319. package/nodes/accessors/NormalNode.js +39 -40
  320. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  321. package/nodes/accessors/Object3DNode.js +50 -40
  322. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  323. package/nodes/accessors/PointUVNode.js +9 -5
  324. package/nodes/accessors/PositionNode.cjs.js +1 -0
  325. package/nodes/accessors/PositionNode.js +41 -42
  326. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  327. package/nodes/accessors/ReferenceNode.js +17 -10
  328. package/nodes/accessors/ReflectNode.cjs.js +1 -0
  329. package/nodes/accessors/ReflectNode.js +26 -23
  330. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  331. package/nodes/accessors/SkinningNode.js +48 -46
  332. package/nodes/accessors/TextureNode.cjs.js +1 -0
  333. package/nodes/accessors/TextureNode.js +29 -14
  334. package/nodes/accessors/UVNode.cjs.js +1 -0
  335. package/nodes/accessors/UVNode.js +11 -5
  336. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  337. package/nodes/core/ArrayUniformNode.js +7 -3
  338. package/nodes/core/AttributeNode.cjs.js +1 -0
  339. package/nodes/core/AttributeNode.js +12 -5
  340. package/nodes/core/BypassNode.cjs.js +1 -0
  341. package/nodes/core/BypassNode.js +12 -5
  342. package/nodes/core/CodeNode.cjs.js +1 -0
  343. package/nodes/core/CodeNode.js +12 -4
  344. package/nodes/core/ConstNode.cjs.js +1 -0
  345. package/nodes/core/ConstNode.js +7 -3
  346. package/nodes/core/ContextNode.cjs.js +1 -0
  347. package/nodes/core/ContextNode.js +8 -3
  348. package/nodes/core/ExpressionNode.cjs.js +1 -0
  349. package/nodes/core/ExpressionNode.js +9 -5
  350. package/nodes/core/FunctionCallNode.cjs.js +1 -0
  351. package/nodes/core/FunctionCallNode.js +15 -6
  352. package/nodes/core/FunctionNode.cjs.js +1 -0
  353. package/nodes/core/FunctionNode.js +25 -10
  354. package/nodes/core/InputNode.cjs.js +1 -0
  355. package/nodes/core/InputNode.js +23 -12
  356. package/nodes/core/Node.cjs.js +1 -0
  357. package/nodes/core/Node.js +75 -35
  358. package/nodes/core/NodeAttribute.cjs.js +1 -0
  359. package/nodes/core/NodeAttribute.js +4 -2
  360. package/nodes/core/NodeBuilder.cjs.js +1 -0
  361. package/nodes/core/NodeBuilder.js +224 -110
  362. package/nodes/core/NodeCode.cjs.js +1 -0
  363. package/nodes/core/NodeCode.js +7 -4
  364. package/nodes/core/NodeFrame.cjs.js +1 -0
  365. package/nodes/core/NodeFrame.js +12 -9
  366. package/nodes/core/NodeFunction.cjs.js +1 -0
  367. package/nodes/core/NodeFunction.js +17 -0
  368. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  369. package/nodes/core/NodeFunctionInput.js +5 -3
  370. package/nodes/core/NodeKeywords.cjs.js +1 -0
  371. package/nodes/core/NodeKeywords.js +16 -5
  372. package/nodes/core/NodeParser.cjs.js +1 -0
  373. package/nodes/core/NodeParser.js +8 -0
  374. package/nodes/core/NodeUniform.cjs.js +1 -0
  375. package/nodes/core/NodeUniform.js +7 -3
  376. package/nodes/core/NodeUtils.cjs.js +1 -0
  377. package/nodes/core/NodeUtils.js +43 -39
  378. package/nodes/core/NodeVar.cjs.js +1 -0
  379. package/nodes/core/NodeVar.js +4 -2
  380. package/nodes/core/NodeVary.cjs.js +1 -0
  381. package/nodes/core/NodeVary.js +4 -2
  382. package/nodes/core/PropertyNode.cjs.js +1 -0
  383. package/nodes/core/PropertyNode.js +10 -4
  384. package/nodes/core/TempNode.cjs.js +1 -0
  385. package/nodes/core/TempNode.js +11 -5
  386. package/nodes/core/UniformNode.cjs.js +1 -0
  387. package/nodes/core/UniformNode.js +10 -4
  388. package/nodes/core/VarNode.cjs.js +1 -0
  389. package/nodes/core/VarNode.js +11 -3
  390. package/nodes/core/VaryNode.cjs.js +1 -0
  391. package/nodes/core/VaryNode.js +15 -6
  392. package/nodes/core/constants.cjs.js +1 -0
  393. package/nodes/core/constants.js +7 -20
  394. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  395. package/nodes/display/ColorSpaceNode.js +38 -34
  396. package/nodes/display/NormalMapNode.cjs.js +1 -0
  397. package/nodes/display/NormalMapNode.js +53 -35
  398. package/nodes/fog/FogNode.cjs.js +1 -0
  399. package/nodes/fog/FogNode.js +9 -5
  400. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  401. package/nodes/fog/FogRangeNode.js +9 -5
  402. package/nodes/functions/BSDFs.cjs.js +1 -0
  403. package/nodes/functions/BSDFs.js +118 -61
  404. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  405. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  406. package/nodes/lights/LightContextNode.cjs.js +1 -0
  407. package/nodes/lights/LightContextNode.js +23 -14
  408. package/nodes/lights/LightNode.cjs.js +1 -0
  409. package/nodes/lights/LightNode.js +31 -27
  410. package/nodes/lights/LightsNode.cjs.js +1 -0
  411. package/nodes/lights/LightsNode.js +28 -9
  412. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  413. package/nodes/loaders/NodeLoader.js +42 -27
  414. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  415. package/nodes/loaders/NodeMaterialLoader.js +10 -4
  416. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  417. package/nodes/loaders/NodeObjectLoader.js +19 -9
  418. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  419. package/nodes/materials/LineBasicNodeMaterial.js +10 -5
  420. package/nodes/materials/Materials.cjs.js +1 -0
  421. package/nodes/materials/Materials.js +17 -14
  422. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  423. package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
  424. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
  425. package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
  426. package/nodes/materials/NodeMaterial.cjs.js +1 -0
  427. package/nodes/materials/NodeMaterial.js +36 -20
  428. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  429. package/nodes/materials/PointsNodeMaterial.js +10 -5
  430. package/nodes/math/CondNode.cjs.js +1 -0
  431. package/nodes/math/CondNode.js +23 -11
  432. package/nodes/math/MathNode.cjs.js +1 -0
  433. package/nodes/math/MathNode.js +142 -98
  434. package/nodes/math/OperatorNode.cjs.js +1 -0
  435. package/nodes/math/OperatorNode.js +46 -24
  436. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  437. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  438. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  439. package/nodes/parsers/GLSLNodeParser.js +13 -0
  440. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  441. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  442. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  443. package/nodes/parsers/WGSLNodeParser.js +13 -0
  444. package/nodes/procedural/CheckerNode.cjs.js +1 -0
  445. package/nodes/procedural/CheckerNode.js +19 -13
  446. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  447. package/nodes/utils/ArrayElementNode.js +8 -4
  448. package/nodes/utils/ConvertNode.cjs.js +1 -0
  449. package/nodes/utils/ConvertNode.js +8 -3
  450. package/nodes/utils/JoinNode.cjs.js +1 -0
  451. package/nodes/utils/JoinNode.js +11 -7
  452. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  453. package/nodes/utils/MatcapUVNode.js +11 -8
  454. package/nodes/utils/OscNode.cjs.js +1 -0
  455. package/nodes/utils/OscNode.js +33 -27
  456. package/nodes/utils/SplitNode.cjs.js +1 -0
  457. package/nodes/utils/SplitNode.js +20 -6
  458. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  459. package/nodes/utils/SpriteSheetUVNode.js +23 -23
  460. package/nodes/utils/TimerNode.cjs.js +1 -0
  461. package/nodes/utils/TimerNode.js +24 -20
  462. package/objects/GroundProjectedEnv.cjs.js +1 -0
  463. package/objects/GroundProjectedEnv.js +37 -22
  464. package/objects/Lensflare.cjs.js +1 -0
  465. package/objects/Lensflare.js +156 -86
  466. package/objects/LightningStorm.cjs.js +1 -0
  467. package/objects/LightningStorm.js +102 -38
  468. package/objects/MarchingCubes.cjs.js +1 -0
  469. package/objects/MarchingCubes.js +303 -150
  470. package/objects/Reflector.cjs.js +1 -0
  471. package/objects/Reflector.js +72 -50
  472. package/objects/ReflectorForSSRPass.cjs.js +1 -0
  473. package/objects/ReflectorForSSRPass.js +131 -80
  474. package/objects/ReflectorRTT.cjs.js +1 -0
  475. package/objects/ReflectorRTT.js +7 -6
  476. package/objects/Refractor.cjs.js +1 -0
  477. package/objects/Refractor.js +106 -64
  478. package/objects/ShadowMesh.cjs.js +1 -0
  479. package/objects/ShadowMesh.js +17 -8
  480. package/objects/Sky.cjs.js +1 -0
  481. package/objects/Sky.js +80 -119
  482. package/objects/Water.cjs.js +1 -0
  483. package/objects/Water.js +127 -83
  484. package/objects/Water2.cjs.js +1 -0
  485. package/objects/Water2.js +108 -72
  486. package/offscreen/jank.cjs.js +1 -0
  487. package/offscreen/jank.js +14 -10
  488. package/offscreen/offscreen.cjs.js +1 -0
  489. package/offscreen/offscreen.js +5 -4
  490. package/offscreen/scene.cjs.js +1 -0
  491. package/offscreen/scene.js +48 -45
  492. package/package.json +3 -3
  493. package/physics/AmmoPhysics.cjs.js +1 -0
  494. package/physics/AmmoPhysics.js +71 -30
  495. package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
  496. package/postprocessing/AdaptiveToneMappingPass.js +123 -97
  497. package/postprocessing/AfterimagePass.cjs.js +1 -0
  498. package/postprocessing/AfterimagePass.js +49 -28
  499. package/postprocessing/BloomPass.cjs.js +1 -0
  500. package/postprocessing/BloomPass.js +69 -43
  501. package/postprocessing/BokehPass.cjs.js +1 -0
  502. package/postprocessing/BokehPass.js +69 -39
  503. package/postprocessing/ClearPass.cjs.js +1 -0
  504. package/postprocessing/ClearPass.js +25 -10
  505. package/postprocessing/CubeTexturePass.cjs.js +1 -0
  506. package/postprocessing/CubeTexturePass.js +27 -28
  507. package/postprocessing/DotScreenPass.cjs.js +1 -0
  508. package/postprocessing/DotScreenPass.js +32 -24
  509. package/postprocessing/EffectComposer.cjs.js +1 -0
  510. package/postprocessing/EffectComposer.js +86 -39
  511. package/postprocessing/FilmPass.cjs.js +1 -0
  512. package/postprocessing/FilmPass.js +30 -25
  513. package/postprocessing/GlitchPass.cjs.js +1 -0
  514. package/postprocessing/GlitchPass.js +61 -38
  515. package/postprocessing/HalftonePass.cjs.js +1 -0
  516. package/postprocessing/HalftonePass.js +39 -19
  517. package/postprocessing/LUTPass.cjs.js +1 -0
  518. package/postprocessing/LUTPass.js +38 -13
  519. package/postprocessing/MaskPass.cjs.js +1 -0
  520. package/postprocessing/MaskPass.js +38 -19
  521. package/postprocessing/OutlinePass.cjs.js +1 -0
  522. package/postprocessing/OutlinePass.js +277 -135
  523. package/postprocessing/Pass.cjs.js +1 -0
  524. package/postprocessing/Pass.js +44 -20
  525. package/postprocessing/RenderPass.cjs.js +1 -0
  526. package/postprocessing/RenderPass.js +36 -13
  527. package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
  528. package/postprocessing/RenderPixelatedPass.js +58 -44
  529. package/postprocessing/SAOPass.cjs.js +1 -0
  530. package/postprocessing/SAOPass.js +189 -154
  531. package/postprocessing/SMAAPass.cjs.js +1 -0
  532. package/postprocessing/SMAAPass.js +84 -64
  533. package/postprocessing/SSAARenderPass.cjs.js +1 -0
  534. package/postprocessing/SSAARenderPass.js +69 -121
  535. package/postprocessing/SSAOPass.cjs.js +1 -0
  536. package/postprocessing/SSAOPass.js +172 -123
  537. package/postprocessing/SSRPass.cjs.js +1 -0
  538. package/postprocessing/SSRPass.js +280 -211
  539. package/postprocessing/SavePass.cjs.js +1 -0
  540. package/postprocessing/SavePass.js +25 -20
  541. package/postprocessing/ShaderPass.cjs.js +1 -0
  542. package/postprocessing/ShaderPass.js +30 -14
  543. package/postprocessing/TAARenderPass.cjs.js +1 -0
  544. package/postprocessing/TAARenderPass.js +61 -42
  545. package/postprocessing/TexturePass.cjs.js +1 -0
  546. package/postprocessing/TexturePass.js +22 -21
  547. package/postprocessing/UnrealBloomPass.cjs.js +1 -0
  548. package/postprocessing/UnrealBloomPass.js +213 -105
  549. package/renderers/CSS2DRenderer.cjs.js +1 -0
  550. package/renderers/CSS2DRenderer.js +56 -44
  551. package/renderers/CSS3DRenderer.cjs.js +1 -0
  552. package/renderers/CSS3DRenderer.js +86 -53
  553. package/renderers/Projector.cjs.js +1 -0
  554. package/renderers/Projector.js +274 -107
  555. package/renderers/SVGRenderer.cjs.js +1 -0
  556. package/renderers/SVGRenderer.js +182 -72
  557. package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
  558. package/renderers/nodes/accessors/CameraNode.js +40 -29
  559. package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
  560. package/renderers/nodes/accessors/ModelNode.js +37 -28
  561. package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  562. package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
  563. package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
  564. package/renderers/nodes/accessors/NormalNode.js +45 -35
  565. package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
  566. package/renderers/nodes/accessors/PositionNode.js +19 -18
  567. package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
  568. package/renderers/nodes/accessors/UVNode.js +10 -5
  569. package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
  570. package/renderers/nodes/core/AttributeNode.js +14 -5
  571. package/renderers/nodes/core/InputNode.cjs.js +1 -0
  572. package/renderers/nodes/core/InputNode.js +14 -4
  573. package/renderers/nodes/core/Node.cjs.js +1 -0
  574. package/renderers/nodes/core/Node.js +17 -7
  575. package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
  576. package/renderers/nodes/core/NodeAttribute.js +6 -3
  577. package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
  578. package/renderers/nodes/core/NodeBuilder.js +154 -87
  579. package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
  580. package/renderers/nodes/core/NodeFrame.js +12 -9
  581. package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
  582. package/renderers/nodes/core/NodeSlot.js +3 -2
  583. package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
  584. package/renderers/nodes/core/NodeUniform.js +9 -4
  585. package/renderers/nodes/core/NodeVary.cjs.js +1 -0
  586. package/renderers/nodes/core/NodeVary.js +7 -4
  587. package/renderers/nodes/core/VaryNode.cjs.js +1 -0
  588. package/renderers/nodes/core/VaryNode.js +12 -6
  589. package/renderers/nodes/core/constants.cjs.js +1 -0
  590. package/renderers/nodes/core/constants.js +13 -16
  591. package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
  592. package/renderers/nodes/inputs/ColorNode.js +11 -5
  593. package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
  594. package/renderers/nodes/inputs/FloatNode.js +11 -5
  595. package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
  596. package/renderers/nodes/inputs/Matrix3Node.js +13 -7
  597. package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
  598. package/renderers/nodes/inputs/Matrix4Node.js +13 -7
  599. package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
  600. package/renderers/nodes/inputs/TextureNode.js +15 -7
  601. package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
  602. package/renderers/nodes/inputs/Vector2Node.js +11 -5
  603. package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
  604. package/renderers/nodes/inputs/Vector3Node.js +13 -7
  605. package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
  606. package/renderers/nodes/inputs/Vector4Node.js +13 -7
  607. package/renderers/nodes/math/MathNode.cjs.js +1 -0
  608. package/renderers/nodes/math/MathNode.js +30 -20
  609. package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
  610. package/renderers/nodes/math/OperatorNode.js +20 -4
  611. package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
  612. package/renderers/nodes/utils/SwitchNode.js +9 -4
  613. package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
  614. package/renderers/nodes/utils/TimerNode.js +10 -5
  615. package/renderers/webgpu/WebGPU.cjs.js +1 -0
  616. package/renderers/webgpu/WebGPU.js +16 -14
  617. package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
  618. package/renderers/webgpu/WebGPUAttributes.js +23 -16
  619. package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
  620. package/renderers/webgpu/WebGPUBackground.js +30 -13
  621. package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
  622. package/renderers/webgpu/WebGPUBinding.js +7 -4
  623. package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
  624. package/renderers/webgpu/WebGPUBindings.js +57 -21
  625. package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
  626. package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
  627. package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
  628. package/renderers/webgpu/WebGPUGeometries.js +15 -5
  629. package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
  630. package/renderers/webgpu/WebGPUInfo.js +8 -3
  631. package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
  632. package/renderers/webgpu/WebGPUObjects.js +10 -5
  633. package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
  634. package/renderers/webgpu/WebGPUProperties.js +11 -5
  635. package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
  636. package/renderers/webgpu/WebGPURenderLists.js +36 -20
  637. package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
  638. package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
  639. package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
  640. package/renderers/webgpu/WebGPURenderer.js +262 -124
  641. package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
  642. package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
  643. package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
  644. package/renderers/webgpu/WebGPUSampler.js +12 -7
  645. package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
  646. package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
  647. package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
  648. package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
  649. package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
  650. package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
  651. package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
  652. package/renderers/webgpu/WebGPUTextures.js +333 -186
  653. package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
  654. package/renderers/webgpu/WebGPUUniform.js +51 -25
  655. package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
  656. package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
  657. package/renderers/webgpu/constants.cjs.js +1 -0
  658. package/renderers/webgpu/constants.js +181 -190
  659. package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
  660. package/renderers/webgpu/nodes/ShaderLib.js +2 -2
  661. package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
  662. package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
  663. package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
  664. package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
  665. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
  666. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
  667. package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
  668. package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
  669. package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
  670. package/shaders/ACESFilmicToneMappingShader.js +24 -44
  671. package/shaders/AfterimageShader.cjs.js +1 -0
  672. package/shaders/AfterimageShader.js +18 -28
  673. package/shaders/BasicShader.cjs.js +1 -0
  674. package/shaders/BasicShader.js +7 -9
  675. package/shaders/BleachBypassShader.cjs.js +1 -0
  676. package/shaders/BleachBypassShader.js +15 -31
  677. package/shaders/BlendShader.cjs.js +1 -0
  678. package/shaders/BlendShader.js +19 -26
  679. package/shaders/BokehShader.cjs.js +1 -0
  680. package/shaders/BokehShader.js +36 -98
  681. package/shaders/BokehShader2.cjs.js +1 -0
  682. package/shaders/BokehShader2.js +90 -261
  683. package/shaders/BrightnessContrastShader.cjs.js +1 -0
  684. package/shaders/BrightnessContrastShader.js +19 -28
  685. package/shaders/ColorCorrectionShader.cjs.js +1 -0
  686. package/shaders/ColorCorrectionShader.js +22 -26
  687. package/shaders/ColorifyShader.cjs.js +1 -0
  688. package/shaders/ColorifyShader.js +16 -24
  689. package/shaders/ConvolutionShader.cjs.js +1 -0
  690. package/shaders/ConvolutionShader.js +36 -40
  691. package/shaders/CopyShader.cjs.js +1 -0
  692. package/shaders/CopyShader.js +13 -21
  693. package/shaders/DOFMipMapShader.cjs.js +1 -0
  694. package/shaders/DOFMipMapShader.js +21 -28
  695. package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
  696. package/shaders/DepthLimitedBlurShader.js +40 -85
  697. package/shaders/DigitalGlitch.cjs.js +1 -0
  698. package/shaders/DigitalGlitch.js +46 -74
  699. package/shaders/DotScreenShader.cjs.js +1 -0
  700. package/shaders/DotScreenShader.js +27 -35
  701. package/shaders/FXAAShader.cjs.js +1 -0
  702. package/shaders/FXAAShader.js +19 -1094
  703. package/shaders/FilmShader.cjs.js +1 -0
  704. package/shaders/FilmShader.js +52 -38
  705. package/shaders/FocusShader.cjs.js +1 -0
  706. package/shaders/FocusShader.js +24 -51
  707. package/shaders/FreiChenShader.cjs.js +1 -0
  708. package/shaders/FreiChenShader.js +24 -57
  709. package/shaders/FresnelShader.cjs.js +1 -0
  710. package/shaders/FresnelShader.js +22 -43
  711. package/shaders/GammaCorrectionShader.cjs.js +1 -0
  712. package/shaders/GammaCorrectionShader.js +11 -19
  713. package/shaders/GodRaysShader.cjs.js +1 -0
  714. package/shaders/GodRaysShader.js +94 -103
  715. package/shaders/HalftoneShader.cjs.js +1 -0
  716. package/shaders/HalftoneShader.js +65 -208
  717. package/shaders/HorizontalBlurShader.cjs.js +1 -0
  718. package/shaders/HorizontalBlurShader.js +23 -7
  719. package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
  720. package/shaders/HorizontalTiltShiftShader.js +21 -33
  721. package/shaders/HueSaturationShader.cjs.js +1 -0
  722. package/shaders/HueSaturationShader.js +21 -37
  723. package/shaders/KaleidoShader.cjs.js +1 -0
  724. package/shaders/KaleidoShader.js +22 -30
  725. package/shaders/LuminosityHighPassShader.cjs.js +1 -0
  726. package/shaders/LuminosityHighPassShader.js +27 -33
  727. package/shaders/LuminosityShader.cjs.js +1 -0
  728. package/shaders/LuminosityShader.js +11 -21
  729. package/shaders/MirrorShader.cjs.js +1 -0
  730. package/shaders/MirrorShader.js +16 -31
  731. package/shaders/NormalMapShader.cjs.js +1 -0
  732. package/shaders/NormalMapShader.js +23 -27
  733. package/shaders/ParallaxShader.cjs.js +1 -0
  734. package/shaders/ParallaxShader.js +48 -107
  735. package/shaders/PixelShader.cjs.js +1 -0
  736. package/shaders/PixelShader.js +16 -24
  737. package/shaders/RGBShiftShader.cjs.js +1 -0
  738. package/shaders/RGBShiftShader.js +22 -26
  739. package/shaders/SAOShader.cjs.js +1 -0
  740. package/shaders/SAOShader.js +48 -132
  741. package/shaders/SMAAShader.cjs.js +1 -0
  742. package/shaders/SMAAShader.js +135 -256
  743. package/shaders/SSAOShader.cjs.js +1 -0
  744. package/shaders/SSAOShader.js +81 -153
  745. package/shaders/SSRShader.cjs.js +1 -0
  746. package/shaders/SSRShader.js +87 -32
  747. package/shaders/SepiaShader.cjs.js +1 -0
  748. package/shaders/SepiaShader.js +15 -25
  749. package/shaders/SobelOperatorShader.cjs.js +1 -0
  750. package/shaders/SobelOperatorShader.js +29 -40
  751. package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
  752. package/shaders/SubsurfaceScatteringShader.js +39 -53
  753. package/shaders/TechnicolorShader.cjs.js +1 -0
  754. package/shaders/TechnicolorShader.js +13 -20
  755. package/shaders/ToneMapShader.cjs.js +1 -0
  756. package/shaders/ToneMapShader.js +28 -44
  757. package/shaders/ToonShader.cjs.js +1 -0
  758. package/shaders/ToonShader.js +96 -172
  759. package/shaders/TriangleBlurShader.cjs.js +1 -0
  760. package/shaders/TriangleBlurShader.js +23 -32
  761. package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
  762. package/shaders/UnpackDepthRGBAShader.js +14 -22
  763. package/shaders/VerticalBlurShader.cjs.js +1 -0
  764. package/shaders/VerticalBlurShader.js +23 -7
  765. package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
  766. package/shaders/VerticalTiltShiftShader.js +21 -33
  767. package/shaders/VignetteShader.cjs.js +1 -0
  768. package/shaders/VignetteShader.js +28 -24
  769. package/shaders/VolumeShader.cjs.js +1 -0
  770. package/shaders/VolumeShader.js +77 -174
  771. package/shaders/WaterRefractionShader.cjs.js +1 -0
  772. package/shaders/WaterRefractionShader.js +6 -38
  773. package/shaders/types.cjs.js +1 -0
  774. package/shaders/types.js +1 -1
  775. package/textures/FlakesTexture.cjs.js +1 -0
  776. package/textures/FlakesTexture.js +10 -8
  777. package/types/helpers.cjs.js +1 -0
  778. package/types/helpers.js +2 -3
  779. package/types/shared.cjs.js +1 -0
  780. package/types/shared.js +1 -0
  781. package/types/utils.cjs.js +1 -0
  782. package/types/utils.js +1 -0
  783. package/utils/BufferGeometryUtils.cjs.js +1 -0
  784. package/utils/BufferGeometryUtils.js +325 -251
  785. package/utils/GeometryCompressionUtils.cjs.js +1 -0
  786. package/utils/GeometryCompressionUtils.js +239 -241
  787. package/utils/GeometryUtils.cjs.js +1 -0
  788. package/utils/GeometryUtils.js +94 -41
  789. package/utils/LDrawUtils.cjs.js +1 -0
  790. package/utils/LDrawUtils.d.ts +5 -0
  791. package/utils/LDrawUtils.js +144 -0
  792. package/utils/RoughnessMipmapper.cjs.js +1 -0
  793. package/utils/RoughnessMipmapper.js +82 -38
  794. package/utils/SceneUtils.cjs.js +1 -0
  795. package/utils/SceneUtils.js +20 -15
  796. package/utils/ShadowMapViewer.cjs.js +1 -0
  797. package/utils/ShadowMapViewer.js +95 -49
  798. package/utils/SkeletonUtils.cjs.js +1 -0
  799. package/utils/SkeletonUtils.js +165 -74
  800. package/utils/UVsDebug.cjs.js +1 -0
  801. package/utils/UVsDebug.js +62 -32
  802. package/utils/WorkerPool.cjs.js +1 -0
  803. package/utils/WorkerPool.js +33 -13
  804. package/webxr/ARButton.cjs.js +1 -0
  805. package/webxr/ARButton.js +98 -72
  806. package/webxr/OculusHandModel.cjs.js +1 -0
  807. package/webxr/OculusHandModel.js +37 -18
  808. package/webxr/OculusHandPointerModel.cjs.js +1 -0
  809. package/webxr/OculusHandPointerModel.js +80 -58
  810. package/webxr/Text2D.cjs.js +1 -0
  811. package/webxr/Text2D.js +19 -37
  812. package/webxr/VRButton.cjs.js +1 -0
  813. package/webxr/VRButton.js +90 -59
  814. package/webxr/XRControllerModelFactory.cjs.js +1 -0
  815. package/webxr/XRControllerModelFactory.js +116 -58
  816. package/webxr/XREstimatedLight.cjs.js +1 -0
  817. package/webxr/XREstimatedLight.js +66 -39
  818. package/webxr/XRHandMeshModel.cjs.js +1 -0
  819. package/webxr/XRHandMeshModel.js +29 -40
  820. package/webxr/XRHandModelFactory.cjs.js +1 -0
  821. package/webxr/XRHandModelFactory.js +31 -28
  822. package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
  823. package/webxr/XRHandPrimitiveModel.js +27 -41
  824. package/animation/AnimationClipCreator.mjs +0 -57
  825. package/animation/CCDIKSolver.mjs +0 -223
  826. package/animation/MMDAnimationHelper.mjs +0 -514
  827. package/animation/MMDPhysics.mjs +0 -769
  828. package/cameras/CinematicCamera.mjs +0 -129
  829. package/controls/ArcballControls.mjs +0 -1737
  830. package/controls/DeviceOrientationControls.mjs +0 -74
  831. package/controls/DragControls.mjs +0 -172
  832. package/controls/FirstPersonControls.mjs +0 -220
  833. package/controls/FlyControls.mjs +0 -239
  834. package/controls/OrbitControls.mjs +0 -731
  835. package/controls/PointerLockControls.mjs +0 -88
  836. package/controls/TrackballControls.mjs +0 -481
  837. package/controls/TransformControls.mjs +0 -1068
  838. package/controls/experimental/CameraControls.mjs +0 -673
  839. package/csm/CSM.mjs +0 -244
  840. package/csm/CSMFrustum.mjs +0 -75
  841. package/csm/CSMHelper.mjs +0 -114
  842. package/csm/CSMShader.mjs +0 -251
  843. package/curves/CurveExtras.mjs +0 -224
  844. package/curves/NURBSCurve.mjs +0 -35
  845. package/curves/NURBSSurface.mjs +0 -28
  846. package/curves/NURBSUtils.mjs +0 -226
  847. package/deprecated/Geometry.mjs +0 -966
  848. package/effects/AnaglyphEffect.mjs +0 -120
  849. package/effects/AsciiEffect.mjs +0 -173
  850. package/effects/OutlineEffect.mjs +0 -295
  851. package/effects/ParallaxBarrierEffect.mjs +0 -64
  852. package/effects/PeppersGhostEffect.mjs +0 -85
  853. package/effects/StereoEffect.mjs +0 -32
  854. package/environments/RoomEnvironment.mjs +0 -78
  855. package/exporters/ColladaExporter.mjs +0 -299
  856. package/exporters/DRACOExporter.mjs +0 -132
  857. package/exporters/GLTFExporter.mjs +0 -1381
  858. package/exporters/MMDExporter.mjs +0 -102
  859. package/exporters/OBJExporter.mjs +0 -166
  860. package/exporters/PLYExporter.mjs +0 -278
  861. package/exporters/STLExporter.mjs +0 -129
  862. package/exporters/USDZExporter.mjs +0 -328
  863. package/geometries/BoxLineGeometry.mjs +0 -45
  864. package/geometries/ConvexGeometry.mjs +0 -29
  865. package/geometries/DecalGeometry.mjs +0 -184
  866. package/geometries/LightningStrike.mjs +0 -547
  867. package/geometries/ParametricGeometries.mjs +0 -129
  868. package/geometries/ParametricGeometry.mjs +0 -63
  869. package/geometries/RoundedBoxGeometry.mjs +0 -91
  870. package/geometries/TeapotGeometry.mjs +0 -1557
  871. package/geometries/TextGeometry.mjs +0 -23
  872. package/helpers/LightProbeHelper.mjs +0 -72
  873. package/helpers/PositionalAudioHelper.mjs +0 -68
  874. package/helpers/RectAreaLightHelper.mjs +0 -44
  875. package/helpers/VertexNormalsHelper.mjs +0 -54
  876. package/helpers/VertexTangentsHelper.mjs +0 -45
  877. package/index.mjs +0 -969
  878. package/interactive/SelectionBox.mjs +0 -137
  879. package/interactive/SelectionHelper.mjs +0 -54
  880. package/libs/MeshoptDecoder.mjs +0 -210
  881. package/libs/MotionControllers.mjs +0 -261
  882. package/lights/LightProbeGenerator.mjs +0 -145
  883. package/lights/RectAreaLightUniformsLib.mjs +0 -32842
  884. package/lines/Line2.mjs +0 -13
  885. package/lines/LineGeometry.mjs +0 -44
  886. package/lines/LineMaterial.mjs +0 -539
  887. package/lines/LineSegments2.mjs +0 -202
  888. package/lines/LineSegmentsGeometry.mjs +0 -124
  889. package/lines/Wireframe.mjs +0 -31
  890. package/lines/WireframeGeometry2.mjs +0 -13
  891. package/loaders/3DMLoader.mjs +0 -802
  892. package/loaders/3MFLoader.mjs +0 -837
  893. package/loaders/AMFLoader.mjs +0 -284
  894. package/loaders/AssimpLoader.mjs +0 -1396
  895. package/loaders/BVHLoader.mjs +0 -207
  896. package/loaders/BasisTextureLoader.mjs +0 -474
  897. package/loaders/ColladaLoader.mjs +0 -2403
  898. package/loaders/DDSLoader.mjs +0 -148
  899. package/loaders/DRACOLoader.mjs +0 -340
  900. package/loaders/EXRLoader.mjs +0 -1351
  901. package/loaders/FBXLoader.mjs +0 -2362
  902. package/loaders/FontLoader.mjs +0 -111
  903. package/loaders/GCodeLoader.mjs +0 -141
  904. package/loaders/GLTFLoader.mjs +0 -2316
  905. package/loaders/HDRCubeTextureLoader.mjs +0 -77
  906. package/loaders/KMZLoader.mjs +0 -75
  907. package/loaders/KTX2Loader.mjs +0 -427
  908. package/loaders/KTXLoader.mjs +0 -87
  909. package/loaders/LDrawLoader.mjs +0 -1409
  910. package/loaders/LUT3dlLoader.mjs +0 -100
  911. package/loaders/LUTCubeLoader.mjs +0 -104
  912. package/loaders/LWOLoader.mjs +0 -625
  913. package/loaders/LottieLoader.mjs +0 -47
  914. package/loaders/MD2Loader.mjs +0 -359
  915. package/loaders/MDDLoader.mjs +0 -58
  916. package/loaders/MMDLoader.mjs +0 -998
  917. package/loaders/MTLLoader.mjs +0 -280
  918. package/loaders/NRRDLoader.mjs +0 -401
  919. package/loaders/NodeMaterialLoader.mjs +0 -146
  920. package/loaders/OBJLoader.mjs +0 -487
  921. package/loaders/PCDLoader.mjs +0 -248
  922. package/loaders/PDBLoader.mjs +0 -246
  923. package/loaders/PLYLoader.mjs +0 -317
  924. package/loaders/PRWMLoader.mjs +0 -160
  925. package/loaders/PVRLoader.mjs +0 -131
  926. package/loaders/RGBELoader.mjs +0 -244
  927. package/loaders/RGBMLoader.mjs +0 -998
  928. package/loaders/STLLoader.mjs +0 -190
  929. package/loaders/SVGLoader.mjs +0 -1709
  930. package/loaders/TDSLoader.mjs +0 -480
  931. package/loaders/TGALoader.mjs +0 -285
  932. package/loaders/TTFLoader.mjs +0 -131
  933. package/loaders/TiltLoader.mjs +0 -373
  934. package/loaders/VOXLoader.mjs +0 -431
  935. package/loaders/VRMLLoader.mjs +0 -2093
  936. package/loaders/VRMLoader.mjs +0 -38
  937. package/loaders/VTKLoader.mjs +0 -646
  938. package/loaders/XLoader.mjs +0 -1258
  939. package/loaders/XYZLoader.mjs +0 -60
  940. package/loaders/lwo/IFFParser.mjs +0 -697
  941. package/loaders/lwo/LWO2Parser.mjs +0 -327
  942. package/loaders/lwo/LWO3Parser.mjs +0 -298
  943. package/math/Capsule.mjs +0 -100
  944. package/math/ColorConverter.mjs +0 -51
  945. package/math/ConvexHull.mjs +0 -574
  946. package/math/ImprovedNoise.mjs +0 -302
  947. package/math/Lut.mjs +0 -135
  948. package/math/MeshSurfaceSampler.mjs +0 -107
  949. package/math/OBB.mjs +0 -235
  950. package/math/Octree.mjs +0 -278
  951. package/math/SimplexNoise.mjs +0 -425
  952. package/misc/ConvexObjectBreaker.mjs +0 -292
  953. package/misc/GPUComputationRenderer.mjs +0 -171
  954. package/misc/Gyroscope.mjs +0 -35
  955. package/misc/MD2Character.mjs +0 -162
  956. package/misc/MD2CharacterComplex.mjs +0 -328
  957. package/misc/MorphAnimMesh.mjs +0 -40
  958. package/misc/MorphBlendMesh.mjs +0 -179
  959. package/misc/ProgressiveLightmap.mjs +0 -166
  960. package/misc/RollerCoaster.mjs +0 -346
  961. package/misc/TubePainter.mjs +0 -123
  962. package/misc/Volume.mjs +0 -244
  963. package/misc/VolumeSlice.mjs +0 -106
  964. package/misc/WebGL.mjs +0 -74
  965. package/modifiers/CurveModifier.mjs +0 -182
  966. package/modifiers/EdgeSplitModifier.mjs +0 -162
  967. package/modifiers/SimplifyModifier.mjs +0 -282
  968. package/modifiers/TessellateModifier.mjs +0 -206
  969. package/nodes/Nodes.mjs +0 -400
  970. package/nodes/ShaderNode.mjs +0 -408
  971. package/nodes/accessors/BufferNode.mjs +0 -15
  972. package/nodes/accessors/CameraNode.mjs +0 -44
  973. package/nodes/accessors/CubeTextureNode.mjs +0 -42
  974. package/nodes/accessors/MaterialNode.mjs +0 -71
  975. package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
  976. package/nodes/accessors/ModelNode.mjs +0 -9
  977. package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
  978. package/nodes/accessors/NormalNode.mjs +0 -62
  979. package/nodes/accessors/Object3DNode.mjs +0 -76
  980. package/nodes/accessors/PointUVNode.mjs +0 -13
  981. package/nodes/accessors/PositionNode.mjs +0 -65
  982. package/nodes/accessors/ReferenceNode.mjs +0 -37
  983. package/nodes/accessors/ReflectNode.mjs +0 -43
  984. package/nodes/accessors/SkinningNode.mjs +0 -58
  985. package/nodes/accessors/TextureNode.mjs +0 -54
  986. package/nodes/accessors/UVNode.mjs +0 -23
  987. package/nodes/core/ArrayUniformNode.mjs +0 -14
  988. package/nodes/core/AttributeNode.mjs +0 -30
  989. package/nodes/core/BypassNode.mjs +0 -22
  990. package/nodes/core/CodeNode.mjs +0 -28
  991. package/nodes/core/ConstNode.mjs +0 -14
  992. package/nodes/core/ContextNode.mjs +0 -22
  993. package/nodes/core/ExpressionNode.mjs +0 -19
  994. package/nodes/core/FunctionCallNode.mjs +0 -37
  995. package/nodes/core/FunctionNode.mjs +0 -56
  996. package/nodes/core/InputNode.mjs +0 -38
  997. package/nodes/core/Node.mjs +0 -139
  998. package/nodes/core/NodeAttribute.mjs +0 -10
  999. package/nodes/core/NodeBuilder.mjs +0 -395
  1000. package/nodes/core/NodeCode.mjs +0 -11
  1001. package/nodes/core/NodeFrame.mjs +0 -35
  1002. package/nodes/core/NodeFunctionInput.mjs +0 -13
  1003. package/nodes/core/NodeKeywords.mjs +0 -44
  1004. package/nodes/core/NodeUniform.mjs +0 -18
  1005. package/nodes/core/NodeUtils.mjs +0 -57
  1006. package/nodes/core/NodeVar.mjs +0 -10
  1007. package/nodes/core/NodeVary.mjs +0 -10
  1008. package/nodes/core/PropertyNode.mjs +0 -21
  1009. package/nodes/core/TempNode.mjs +0 -25
  1010. package/nodes/core/UniformNode.mjs +0 -23
  1011. package/nodes/core/VarNode.mjs +0 -31
  1012. package/nodes/core/VaryNode.mjs +0 -30
  1013. package/nodes/core/constants.mjs +0 -24
  1014. package/nodes/display/ColorSpaceNode.mjs +0 -63
  1015. package/nodes/display/NormalMapNode.mjs +0 -54
  1016. package/nodes/fog/FogNode.mjs +0 -15
  1017. package/nodes/fog/FogRangeNode.mjs +0 -17
  1018. package/nodes/functions/BSDFs.mjs +0 -64
  1019. package/nodes/lights/LightContextNode.mjs +0 -35
  1020. package/nodes/lights/LightNode.mjs +0 -58
  1021. package/nodes/lights/LightsNode.mjs +0 -59
  1022. package/nodes/loaders/NodeLoader.mjs +0 -66
  1023. package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
  1024. package/nodes/loaders/NodeObjectLoader.mjs +0 -40
  1025. package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
  1026. package/nodes/materials/Materials.mjs +0 -28
  1027. package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
  1028. package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
  1029. package/nodes/materials/NodeMaterial.mjs +0 -64
  1030. package/nodes/materials/PointsNodeMaterial.mjs +0 -30
  1031. package/nodes/math/CondNode.mjs +0 -38
  1032. package/nodes/math/MathNode.mjs +0 -163
  1033. package/nodes/math/OperatorNode.mjs +0 -103
  1034. package/nodes/procedural/CheckerNode.mjs +0 -21
  1035. package/nodes/utils/ArrayElementNode.mjs +0 -19
  1036. package/nodes/utils/ConvertNode.mjs +0 -25
  1037. package/nodes/utils/JoinNode.mjs +0 -26
  1038. package/nodes/utils/MatcapUVNode.mjs +0 -16
  1039. package/nodes/utils/OscNode.mjs +0 -50
  1040. package/nodes/utils/SplitNode.mjs +0 -45
  1041. package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
  1042. package/nodes/utils/TimerNode.mjs +0 -44
  1043. package/objects/GroundProjectedEnv.mjs +0 -130
  1044. package/objects/Lensflare.mjs +0 -262
  1045. package/objects/LightningStorm.mjs +0 -110
  1046. package/objects/MarchingCubes.mjs +0 -457
  1047. package/objects/Reflector.mjs +0 -166
  1048. package/objects/ReflectorForSSRPass.mjs +0 -247
  1049. package/objects/ReflectorRTT.mjs +0 -10
  1050. package/objects/Refractor.mjs +0 -178
  1051. package/objects/ShadowMesh.mjs +0 -41
  1052. package/objects/Sky.mjs +0 -124
  1053. package/objects/Water.mjs +0 -235
  1054. package/objects/Water2.mjs +0 -252
  1055. package/offscreen/jank.mjs +0 -27
  1056. package/offscreen/offscreen.mjs +0 -5
  1057. package/offscreen/scene.mjs +0 -52
  1058. package/physics/AmmoPhysics.mjs +0 -165
  1059. package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
  1060. package/postprocessing/AfterimagePass.mjs +0 -55
  1061. package/postprocessing/BloomPass.mjs +0 -90
  1062. package/postprocessing/BokehPass.mjs +0 -76
  1063. package/postprocessing/ClearPass.mjs +0 -27
  1064. package/postprocessing/CubeTexturePass.mjs +0 -49
  1065. package/postprocessing/DotScreenPass.mjs +0 -40
  1066. package/postprocessing/EffectComposer.mjs +0 -139
  1067. package/postprocessing/FilmPass.mjs +0 -42
  1068. package/postprocessing/GlitchPass.mjs +0 -75
  1069. package/postprocessing/HalftonePass.mjs +0 -44
  1070. package/postprocessing/LUTPass.mjs +0 -136
  1071. package/postprocessing/MaskPass.mjs +0 -60
  1072. package/postprocessing/OutlinePass.mjs +0 -438
  1073. package/postprocessing/Pass.mjs +0 -37
  1074. package/postprocessing/RenderPass.mjs +0 -48
  1075. package/postprocessing/RenderPixelatedPass.mjs +0 -199
  1076. package/postprocessing/SAOPass.mjs +0 -282
  1077. package/postprocessing/SMAAPass.mjs +0 -112
  1078. package/postprocessing/SSAARenderPass.mjs +0 -170
  1079. package/postprocessing/SSAOPass.mjs +0 -265
  1080. package/postprocessing/SSRPass.mjs +0 -432
  1081. package/postprocessing/SavePass.mjs +0 -37
  1082. package/postprocessing/ShaderPass.mjs +0 -39
  1083. package/postprocessing/TAARenderPass.mjs +0 -88
  1084. package/postprocessing/TexturePass.mjs +0 -39
  1085. package/postprocessing/UnrealBloomPass.mjs +0 -220
  1086. package/renderers/CSS2DRenderer.mjs +0 -112
  1087. package/renderers/CSS3DRenderer.mjs +0 -133
  1088. package/renderers/Projector.mjs +0 -511
  1089. package/renderers/SVGRenderer.mjs +0 -306
  1090. package/renderers/nodes/accessors/CameraNode.mjs +0 -63
  1091. package/renderers/nodes/accessors/ModelNode.mjs +0 -61
  1092. package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
  1093. package/renderers/nodes/accessors/NormalNode.mjs +0 -61
  1094. package/renderers/nodes/accessors/PositionNode.mjs +0 -30
  1095. package/renderers/nodes/accessors/UVNode.mjs +0 -13
  1096. package/renderers/nodes/core/AttributeNode.mjs +0 -35
  1097. package/renderers/nodes/core/InputNode.mjs +0 -31
  1098. package/renderers/nodes/core/Node.mjs +0 -34
  1099. package/renderers/nodes/core/NodeAttribute.mjs +0 -10
  1100. package/renderers/nodes/core/NodeBuilder.mjs +0 -243
  1101. package/renderers/nodes/core/NodeFrame.mjs +0 -35
  1102. package/renderers/nodes/core/NodeSlot.mjs +0 -10
  1103. package/renderers/nodes/core/NodeUniform.mjs +0 -18
  1104. package/renderers/nodes/core/NodeVary.mjs +0 -11
  1105. package/renderers/nodes/core/VaryNode.mjs +0 -22
  1106. package/renderers/nodes/core/constants.mjs +0 -22
  1107. package/renderers/nodes/inputs/ColorNode.mjs +0 -11
  1108. package/renderers/nodes/inputs/FloatNode.mjs +0 -11
  1109. package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
  1110. package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
  1111. package/renderers/nodes/inputs/TextureNode.mjs +0 -20
  1112. package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
  1113. package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
  1114. package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
  1115. package/renderers/nodes/math/MathNode.mjs +0 -55
  1116. package/renderers/nodes/math/OperatorNode.mjs +0 -42
  1117. package/renderers/nodes/utils/SwitchNode.mjs +0 -20
  1118. package/renderers/nodes/utils/TimerNode.mjs +0 -14
  1119. package/renderers/webgpu/WebGPU.mjs +0 -24
  1120. package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
  1121. package/renderers/webgpu/WebGPUBackground.mjs +0 -61
  1122. package/renderers/webgpu/WebGPUBinding.mjs +0 -14
  1123. package/renderers/webgpu/WebGPUBindings.mjs +0 -155
  1124. package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
  1125. package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
  1126. package/renderers/webgpu/WebGPUInfo.mjs +0 -46
  1127. package/renderers/webgpu/WebGPUObjects.mjs +0 -25
  1128. package/renderers/webgpu/WebGPUProperties.mjs +0 -22
  1129. package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
  1130. package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
  1131. package/renderers/webgpu/WebGPURenderer.mjs +0 -574
  1132. package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
  1133. package/renderers/webgpu/WebGPUSampler.mjs +0 -15
  1134. package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
  1135. package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
  1136. package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
  1137. package/renderers/webgpu/WebGPUTextures.mjs +0 -484
  1138. package/renderers/webgpu/WebGPUUniform.mjs +0 -81
  1139. package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
  1140. package/renderers/webgpu/constants.mjs +0 -230
  1141. package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
  1142. package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
  1143. package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
  1144. package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
  1145. package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
  1146. package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
  1147. package/shaders/AfterimageShader.mjs +0 -32
  1148. package/shaders/BasicShader.mjs +0 -12
  1149. package/shaders/BleachBypassShader.mjs +0 -35
  1150. package/shaders/BlendShader.mjs +0 -30
  1151. package/shaders/BokehShader.mjs +0 -106
  1152. package/shaders/BokehShader2.mjs +0 -269
  1153. package/shaders/BrightnessContrastShader.mjs +0 -32
  1154. package/shaders/ColorCorrectionShader.mjs +0 -30
  1155. package/shaders/ColorifyShader.mjs +0 -28
  1156. package/shaders/ConvolutionShader.mjs +0 -55
  1157. package/shaders/CopyShader.mjs +0 -25
  1158. package/shaders/DOFMipMapShader.mjs +0 -32
  1159. package/shaders/DepthLimitedBlurShader.mjs +0 -114
  1160. package/shaders/DigitalGlitch.mjs +0 -78
  1161. package/shaders/DotScreenShader.mjs +0 -39
  1162. package/shaders/FXAAShader.mjs +0 -1098
  1163. package/shaders/FilmShader.mjs +0 -42
  1164. package/shaders/FocusShader.mjs +0 -55
  1165. package/shaders/FreiChenShader.mjs +0 -61
  1166. package/shaders/FresnelShader.mjs +0 -47
  1167. package/shaders/GammaCorrectionShader.mjs +0 -23
  1168. package/shaders/GodRaysShader.mjs +0 -146
  1169. package/shaders/HalftoneShader.mjs +0 -212
  1170. package/shaders/HorizontalBlurShader.mjs +0 -43
  1171. package/shaders/HorizontalTiltShiftShader.mjs +0 -37
  1172. package/shaders/HueSaturationShader.mjs +0 -41
  1173. package/shaders/KaleidoShader.mjs +0 -34
  1174. package/shaders/LuminosityHighPassShader.mjs +0 -37
  1175. package/shaders/LuminosityShader.mjs +0 -25
  1176. package/shaders/MirrorShader.mjs +0 -35
  1177. package/shaders/NormalMapShader.mjs +0 -31
  1178. package/shaders/ParallaxShader.mjs +0 -113
  1179. package/shaders/PixelShader.mjs +0 -28
  1180. package/shaders/RGBShiftShader.mjs +0 -30
  1181. package/shaders/SAOShader.mjs +0 -144
  1182. package/shaders/SMAAShader.mjs +0 -272
  1183. package/shaders/SSAOShader.mjs +0 -172
  1184. package/shaders/SSRShader.mjs +0 -324
  1185. package/shaders/SepiaShader.mjs +0 -29
  1186. package/shaders/SobelOperatorShader.mjs +0 -44
  1187. package/shaders/SubsurfaceScatteringShader.mjs +0 -59
  1188. package/shaders/TechnicolorShader.mjs +0 -24
  1189. package/shaders/ToneMapShader.mjs +0 -48
  1190. package/shaders/ToonShader.mjs +0 -188
  1191. package/shaders/TriangleBlurShader.mjs +0 -36
  1192. package/shaders/UnpackDepthRGBAShader.mjs +0 -26
  1193. package/shaders/VerticalBlurShader.mjs +0 -44
  1194. package/shaders/VerticalTiltShiftShader.mjs +0 -37
  1195. package/shaders/VignetteShader.mjs +0 -28
  1196. package/shaders/VolumeShader.mjs +0 -178
  1197. package/shaders/WaterRefractionShader.mjs +0 -57
  1198. package/textures/FlakesTexture.mjs +0 -30
  1199. package/types/helpers.mjs +0 -4
  1200. package/utils/BufferGeometryUtils.mjs +0 -570
  1201. package/utils/GeometryCompressionUtils.mjs +0 -547
  1202. package/utils/GeometryUtils.mjs +0 -108
  1203. package/utils/RoughnessMipmapper.mjs +0 -213
  1204. package/utils/SceneUtils.mjs +0 -36
  1205. package/utils/ShadowMapViewer.mjs +0 -114
  1206. package/utils/SkeletonUtils.mjs +0 -292
  1207. package/utils/UVsDebug.mjs +0 -85
  1208. package/utils/WorkerPool.mjs +0 -62
  1209. package/webxr/ARButton.mjs +0 -119
  1210. package/webxr/OculusHandModel.mjs +0 -71
  1211. package/webxr/OculusHandPointerModel.mjs +0 -207
  1212. package/webxr/Text2D.mjs +0 -31
  1213. package/webxr/VRButton.mjs +0 -105
  1214. package/webxr/XRControllerModelFactory.mjs +0 -146
  1215. package/webxr/XREstimatedLight.mjs +0 -126
  1216. package/webxr/XRHandMeshModel.mjs +0 -73
  1217. package/webxr/XRHandModelFactory.mjs +0 -61
  1218. 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 };