@needle-tools/three 0.145.2 → 0.146.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 (394) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +3559 -6924
  3. package/build/three.js +3559 -6924
  4. package/build/three.min.js +1 -2
  5. package/build/three.module.js +732 -339
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +94 -28
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLCubeUVMaps.js +1 -1
  381. package/src/renderers/webgl/WebGLLights.js +0 -4
  382. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  383. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  384. package/src/renderers/webgl/WebGLState.js +31 -1
  385. package/src/renderers/webgl/WebGLTextures.js +71 -18
  386. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  387. package/src/renderers/webgl/WebGLUtils.js +1 -1
  388. package/src/renderers/webxr/WebXRController.js +46 -13
  389. package/src/renderers/webxr/WebXRManager.js +85 -3
  390. package/src/scenes/Scene.js +8 -0
  391. package/src/textures/CompressedArrayTexture.js +18 -0
  392. package/examples/js/libs/lottie_canvas.js +0 -12751
  393. package/examples/js/shaders/PixelShader.js +0 -51
  394. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -12,7 +12,6 @@
12
12
  * TODO
13
13
  * - more precise grant skinning support.
14
14
  */
15
-
16
15
  class MMDAnimationHelper {
17
16
 
18
17
  /**
@@ -43,16 +42,14 @@
43
42
  physics: true,
44
43
  cameraAnimation: true
45
44
  };
45
+ this.onBeforePhysics = function /* mesh */ () {};
46
46
 
47
- this.onBeforePhysics = function
48
- /* mesh */
49
- () {}; // experimental
50
-
51
-
47
+ // experimental
52
48
  this.sharedPhysics = false;
53
49
  this.masterPhysics = null;
54
50
 
55
51
  }
52
+
56
53
  /**
57
54
  * Adds an Three.js Object to helper and setups animation.
58
55
  * The anmation durations of added objects are synched
@@ -69,8 +66,6 @@
69
66
  * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
70
67
  * @return {MMDAnimationHelper}
71
68
  */
72
-
73
-
74
69
  add( object, params = {} ) {
75
70
 
76
71
  if ( object.isSkinnedMesh ) {
@@ -95,14 +90,13 @@
95
90
  return this;
96
91
 
97
92
  }
93
+
98
94
  /**
99
95
  * Removes an Three.js Object from helper.
100
96
  *
101
97
  * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
102
98
  * @return {MMDAnimationHelper}
103
99
  */
104
-
105
-
106
100
  remove( object ) {
107
101
 
108
102
  if ( object.isSkinnedMesh ) {
@@ -127,18 +121,16 @@
127
121
  return this;
128
122
 
129
123
  }
124
+
130
125
  /**
131
126
  * Updates the animation.
132
127
  *
133
128
  * @param {Number} delta
134
129
  * @return {MMDAnimationHelper}
135
130
  */
136
-
137
-
138
131
  update( delta ) {
139
132
 
140
133
  if ( this.audioManager !== null ) this.audioManager.control( delta );
141
-
142
134
  for ( let i = 0; i < this.meshes.length; i ++ ) {
143
135
 
144
136
  this._animateMesh( this.meshes[ i ], delta );
@@ -150,6 +142,7 @@
150
142
  return this;
151
143
 
152
144
  }
145
+
153
146
  /**
154
147
  * Changes the pose of SkinnedMesh as VPD specifies.
155
148
  *
@@ -161,15 +154,12 @@
161
154
  * @param {boolean} params.grant - Default is true.
162
155
  * @return {MMDAnimationHelper}
163
156
  */
164
-
165
-
166
157
  pose( mesh, vpd, params = {} ) {
167
158
 
168
159
  if ( params.resetPose !== false ) mesh.pose();
169
160
  const bones = mesh.skeleton.bones;
170
161
  const boneParams = vpd.bones;
171
162
  const boneNameDictionary = {};
172
-
173
163
  for ( let i = 0, il = bones.length; i < il; i ++ ) {
174
164
 
175
165
  boneNameDictionary[ bones[ i ].name ] = i;
@@ -178,7 +168,6 @@
178
168
 
179
169
  const vector = new THREE.Vector3();
180
170
  const quaternion = new THREE.Quaternion();
181
-
182
171
  for ( let i = 0, il = boneParams.length; i < il; i ++ ) {
183
172
 
184
173
  const boneParam = boneParams[ i ];
@@ -190,15 +179,14 @@
190
179
 
191
180
  }
192
181
 
193
- mesh.updateMatrixWorld( true ); // PMX animation system special path
182
+ mesh.updateMatrixWorld( true );
194
183
 
184
+ // PMX animation system special path
195
185
  if ( this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {
196
186
 
197
187
  const sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );
198
-
199
188
  const ikSolver = params.ik !== false ? this._createCCDIKSolver( mesh ) : null;
200
189
  const grantSolver = params.grant !== false ? this.createGrantSolver( mesh ) : null;
201
-
202
190
  this._animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver );
203
191
 
204
192
  } else {
@@ -220,6 +208,7 @@
220
208
  return this;
221
209
 
222
210
  }
211
+
223
212
  /**
224
213
  * Enabes/Disables an animation feature.
225
214
  *
@@ -227,8 +216,6 @@
227
216
  * @param {boolean} enabled
228
217
  * @return {MMDAnimationHelper}
229
218
  */
230
-
231
-
232
219
  enable( key, enabled ) {
233
220
 
234
221
  if ( this.enabled[ key ] === undefined ) {
@@ -238,7 +225,6 @@
238
225
  }
239
226
 
240
227
  this.enabled[ key ] = enabled;
241
-
242
228
  if ( key === 'physics' ) {
243
229
 
244
230
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
@@ -252,20 +238,20 @@
252
238
  return this;
253
239
 
254
240
  }
241
+
255
242
  /**
256
243
  * Creates an GrantSolver instance.
257
244
  *
258
245
  * @param {THREE.SkinnedMesh} mesh
259
246
  * @return {GrantSolver}
260
247
  */
261
-
262
-
263
248
  createGrantSolver( mesh ) {
264
249
 
265
250
  return new GrantSolver( mesh, mesh.geometry.userData.MMD.grants );
266
251
 
267
- } // private methods
252
+ }
268
253
 
254
+ // private methods
269
255
 
270
256
  _addMesh( mesh, params ) {
271
257
 
@@ -279,9 +265,7 @@
279
265
  this.objects.set( mesh, {
280
266
  looped: false
281
267
  } );
282
-
283
268
  this._setupMeshAnimation( mesh, params.animation );
284
-
285
269
  if ( params.physics !== false ) {
286
270
 
287
271
  this._setupMeshPhysics( mesh, params );
@@ -291,7 +275,6 @@
291
275
  return this;
292
276
 
293
277
  }
294
-
295
278
  _setupCamera( camera, params ) {
296
279
 
297
280
  if ( this.camera === camera ) {
@@ -304,7 +287,6 @@
304
287
  this.camera = camera;
305
288
  camera.add( this.cameraTarget );
306
289
  this.objects.set( camera, {} );
307
-
308
290
  if ( params.animation !== undefined ) {
309
291
 
310
292
  this._setupCameraAnimation( camera, params.animation );
@@ -314,7 +296,6 @@
314
296
  return this;
315
297
 
316
298
  }
317
-
318
299
  _setupAudio( audio, params ) {
319
300
 
320
301
  if ( this.audio === audio ) {
@@ -332,12 +313,10 @@
332
313
  return this;
333
314
 
334
315
  }
335
-
336
316
  _removeMesh( mesh ) {
337
317
 
338
318
  let found = false;
339
319
  let writeIndex = 0;
340
-
341
320
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
342
321
 
343
322
  if ( this.meshes[ i ] === mesh ) {
@@ -362,7 +341,6 @@
362
341
  return this;
363
342
 
364
343
  }
365
-
366
344
  _clearCamera( camera ) {
367
345
 
368
346
  if ( camera !== this.camera ) {
@@ -377,7 +355,6 @@
377
355
  return this;
378
356
 
379
357
  }
380
-
381
358
  _clearAudio( audio ) {
382
359
 
383
360
  if ( audio !== this.audio ) {
@@ -392,23 +369,20 @@
392
369
  return this;
393
370
 
394
371
  }
395
-
396
372
  _setupMeshAnimation( mesh, animation ) {
397
373
 
398
374
  const objects = this.objects.get( mesh );
399
-
400
375
  if ( animation !== undefined ) {
401
376
 
402
377
  const animations = Array.isArray( animation ) ? animation : [ animation ];
403
378
  objects.mixer = new THREE.AnimationMixer( mesh );
404
-
405
379
  for ( let i = 0, il = animations.length; i < il; i ++ ) {
406
380
 
407
381
  objects.mixer.clipAction( animations[ i ] ).play();
408
382
 
409
- } // TODO: find a workaround not to access ._clip looking like a private property
410
-
383
+ }
411
384
 
385
+ // TODO: find a workaround not to access ._clip looking like a private property
412
386
  objects.mixer.addEventListener( 'loop', function ( event ) {
413
387
 
414
388
  const tracks = event.action._clip.tracks;
@@ -424,13 +398,11 @@
424
398
  return this;
425
399
 
426
400
  }
427
-
428
401
  _setupCameraAnimation( camera, animation ) {
429
402
 
430
403
  const animations = Array.isArray( animation ) ? animation : [ animation ];
431
404
  const objects = this.objects.get( camera );
432
405
  objects.mixer = new THREE.AnimationMixer( camera );
433
-
434
406
  for ( let i = 0, il = animations.length; i < il; i ++ ) {
435
407
 
436
408
  objects.mixer.clipAction( animations[ i ] ).play();
@@ -438,35 +410,31 @@
438
410
  }
439
411
 
440
412
  }
441
-
442
413
  _setupMeshPhysics( mesh, params ) {
443
414
 
444
- const objects = this.objects.get( mesh ); // shared physics is experimental
415
+ const objects = this.objects.get( mesh );
416
+
417
+ // shared physics is experimental
445
418
 
446
419
  if ( params.world === undefined && this.sharedPhysics ) {
447
420
 
448
421
  const masterPhysics = this._getMasterPhysics();
449
-
450
422
  if ( masterPhysics !== null ) world = masterPhysics.world; // eslint-disable-line no-undef
451
423
 
452
424
  }
453
425
 
454
426
  objects.physics = this._createMMDPhysics( mesh, params );
455
-
456
427
  if ( objects.mixer && params.animationWarmup !== false ) {
457
428
 
458
429
  this._animateMesh( mesh, 0 );
459
-
460
430
  objects.physics.reset();
461
431
 
462
432
  }
463
433
 
464
434
  objects.physics.warmup( params.warmup !== undefined ? params.warmup : 60 );
465
-
466
435
  this._optimizeIK( mesh, true );
467
436
 
468
437
  }
469
-
470
438
  _animateMesh( mesh, delta ) {
471
439
 
472
440
  const objects = this.objects.get( mesh );
@@ -475,23 +443,20 @@
475
443
  const grantSolver = objects.grantSolver;
476
444
  const physics = objects.physics;
477
445
  const looped = objects.looped;
478
-
479
446
  if ( mixer && this.enabled.animation ) {
480
447
 
481
448
  // alternate solution to save/restore bones but less performant?
482
449
  //mesh.pose();
483
450
  //this._updatePropertyMixersBuffer( mesh );
484
- this._restoreBones( mesh );
485
451
 
452
+ this._restoreBones( mesh );
486
453
  mixer.update( delta );
454
+ this._saveBones( mesh );
487
455
 
488
- this._saveBones( mesh ); // PMX animation system special path
489
-
490
-
456
+ // PMX animation system special path
491
457
  if ( this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === 'pmx' ) {
492
458
 
493
459
  if ( ! objects.sortedBonesData ) objects.sortedBonesData = this._sortBoneDataArray( mesh.geometry.userData.MMD.bones.slice() );
494
-
495
460
  this._animatePMXMesh( mesh, objects.sortedBonesData, ikSolver && this.enabled.ik ? ikSolver : null, grantSolver && this.enabled.grant ? grantSolver : null );
496
461
 
497
462
  } else {
@@ -527,11 +492,11 @@
527
492
 
528
493
  }
529
494
 
530
- } // Sort bones in order by 1. transformationClass and 2. bone index.
495
+ }
496
+
497
+ // Sort bones in order by 1. transformationClass and 2. bone index.
531
498
  // In PMX animation system, bone transformations should be processed
532
499
  // in this order.
533
-
534
-
535
500
  _sortBoneDataArray( boneDataArray ) {
536
501
 
537
502
  return boneDataArray.sort( function ( a, b ) {
@@ -548,21 +513,19 @@
548
513
 
549
514
  } );
550
515
 
551
- } // PMX Animation system is a bit too complex and doesn't great match to
516
+ }
517
+
518
+ // PMX Animation system is a bit too complex and doesn't great match to
552
519
  // Three.js Animation system. This method attempts to simulate it as much as
553
520
  // possible but doesn't perfectly simulate.
554
521
  // This method is more costly than the regular one so
555
522
  // you are recommended to set constructor parameter "pmxAnimation: true"
556
523
  // only if your PMX model animation doesn't work well.
557
524
  // If you need better method you would be required to write your own.
558
-
559
-
560
525
  _animatePMXMesh( mesh, sortedBonesData, ikSolver, grantSolver ) {
561
526
 
562
527
  _quaternionIndex = 0;
563
-
564
528
  _grantResultMap.clear();
565
-
566
529
  for ( let i = 0, il = sortedBonesData.length; i < il; i ++ ) {
567
530
 
568
531
  updateOne( mesh, sortedBonesData[ i ].index, ikSolver, grantSolver );
@@ -573,11 +536,9 @@
573
536
  return this;
574
537
 
575
538
  }
576
-
577
539
  _animateCamera( camera, delta ) {
578
540
 
579
541
  const mixer = this.objects.get( camera ).mixer;
580
-
581
542
  if ( mixer && this.enabled.cameraAnimation ) {
582
543
 
583
544
  mixer.update( delta );
@@ -589,21 +550,17 @@
589
550
  }
590
551
 
591
552
  }
592
-
593
553
  _optimizeIK( mesh, physicsEnabled ) {
594
554
 
595
555
  const iks = mesh.geometry.userData.MMD.iks;
596
556
  const bones = mesh.geometry.userData.MMD.bones;
597
-
598
557
  for ( let i = 0, il = iks.length; i < il; i ++ ) {
599
558
 
600
559
  const ik = iks[ i ];
601
560
  const links = ik.links;
602
-
603
561
  for ( let j = 0, jl = links.length; j < jl; j ++ ) {
604
562
 
605
563
  const link = links[ j ];
606
-
607
564
  if ( physicsEnabled === true ) {
608
565
 
609
566
  // disable IK of the bone the corresponding rigidBody type of which is 1 or 2
@@ -621,7 +578,6 @@
621
578
  }
622
579
 
623
580
  }
624
-
625
581
  _createCCDIKSolver( mesh ) {
626
582
 
627
583
  if ( THREE.CCDIKSolver === undefined ) {
@@ -633,7 +589,6 @@
633
589
  return new THREE.CCDIKSolver( mesh, mesh.geometry.userData.MMD.iks );
634
590
 
635
591
  }
636
-
637
592
  _createMMDPhysics( mesh, params ) {
638
593
 
639
594
  if ( THREE.MMDPhysics === undefined ) {
@@ -645,29 +600,28 @@
645
600
  return new THREE.MMDPhysics( mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params );
646
601
 
647
602
  }
603
+
648
604
  /*
649
605
  * Detects the longest duration and then sets it to them to sync.
650
606
  * TODO: Not to access private properties ( ._actions and ._clip )
651
607
  */
652
-
653
-
654
608
  _syncDuration() {
655
609
 
656
610
  let max = 0.0;
657
611
  const objects = this.objects;
658
612
  const meshes = this.meshes;
659
613
  const camera = this.camera;
660
- const audioManager = this.audioManager; // get the longest duration
614
+ const audioManager = this.audioManager;
615
+
616
+ // get the longest duration
661
617
 
662
618
  for ( let i = 0, il = meshes.length; i < il; i ++ ) {
663
619
 
664
620
  const mixer = this.objects.get( meshes[ i ] ).mixer;
665
621
  if ( mixer === undefined ) continue;
666
-
667
622
  for ( let j = 0; j < mixer._actions.length; j ++ ) {
668
623
 
669
624
  const clip = mixer._actions[ j ]._clip;
670
-
671
625
  if ( ! objects.has( clip ) ) {
672
626
 
673
627
  objects.set( clip, {
@@ -685,13 +639,11 @@
685
639
  if ( camera !== null ) {
686
640
 
687
641
  const mixer = this.objects.get( camera ).mixer;
688
-
689
642
  if ( mixer !== undefined ) {
690
643
 
691
644
  for ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {
692
645
 
693
646
  const clip = mixer._actions[ i ]._clip;
694
-
695
647
  if ( ! objects.has( clip ) ) {
696
648
 
697
649
  objects.set( clip, {
@@ -714,13 +666,14 @@
714
666
 
715
667
  }
716
668
 
717
- max += this.configuration.afterglow; // update the duration
669
+ max += this.configuration.afterglow;
670
+
671
+ // update the duration
718
672
 
719
673
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
720
674
 
721
675
  const mixer = this.objects.get( this.meshes[ i ] ).mixer;
722
676
  if ( mixer === undefined ) continue;
723
-
724
677
  for ( let j = 0, jl = mixer._actions.length; j < jl; j ++ ) {
725
678
 
726
679
  mixer._actions[ j ]._clip.duration = max;
@@ -732,7 +685,6 @@
732
685
  if ( camera !== null ) {
733
686
 
734
687
  const mixer = this.objects.get( camera ).mixer;
735
-
736
688
  if ( mixer !== undefined ) {
737
689
 
738
690
  for ( let i = 0, il = mixer._actions.length; i < il; i ++ ) {
@@ -751,15 +703,15 @@
751
703
 
752
704
  }
753
705
 
754
- } // workaround
706
+ }
755
707
 
708
+ // workaround
756
709
 
757
710
  _updatePropertyMixersBuffer( mesh ) {
758
711
 
759
712
  const mixer = this.objects.get( mesh ).mixer;
760
713
  const propertyMixers = mixer._bindings;
761
714
  const accuIndex = mixer._accuIndex;
762
-
763
715
  for ( let i = 0, il = propertyMixers.length; i < il; i ++ ) {
764
716
 
765
717
  const propertyMixer = propertyMixers[ i ];
@@ -771,6 +723,7 @@
771
723
  }
772
724
 
773
725
  }
726
+
774
727
  /*
775
728
  * Avoiding these two issues by restore/save bones before/after mixer animation.
776
729
  *
@@ -780,14 +733,11 @@
780
733
  *
781
734
  * 2. Applying Grant two or more times without reset the posing breaks model.
782
735
  */
783
-
784
-
785
736
  _saveBones( mesh ) {
786
737
 
787
738
  const objects = this.objects.get( mesh );
788
739
  const bones = mesh.skeleton.bones;
789
740
  let backupBones = objects.backupBones;
790
-
791
741
  if ( backupBones === undefined ) {
792
742
 
793
743
  backupBones = new Float32Array( bones.length * 7 );
@@ -804,14 +754,12 @@
804
754
  }
805
755
 
806
756
  }
807
-
808
757
  _restoreBones( mesh ) {
809
758
 
810
759
  const objects = this.objects.get( mesh );
811
760
  const backupBones = objects.backupBones;
812
761
  if ( backupBones === undefined ) return;
813
762
  const bones = mesh.skeleton.bones;
814
-
815
763
  for ( let i = 0, il = bones.length; i < il; i ++ ) {
816
764
 
817
765
  const bone = bones[ i ];
@@ -820,17 +768,16 @@
820
768
 
821
769
  }
822
770
 
823
- } // experimental
771
+ }
824
772
 
773
+ // experimental
825
774
 
826
775
  _getMasterPhysics() {
827
776
 
828
777
  if ( this.masterPhysics !== null ) return this.masterPhysics;
829
-
830
778
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
831
779
 
832
780
  const physics = this.meshes[ i ].physics;
833
-
834
781
  if ( physics !== undefined && physics !== null ) {
835
782
 
836
783
  this.masterPhysics = physics;
@@ -843,19 +790,14 @@
843
790
  return null;
844
791
 
845
792
  }
846
-
847
793
  _updateSharedPhysics( delta ) {
848
794
 
849
795
  if ( this.meshes.length === 0 || ! this.enabled.physics || ! this.sharedPhysics ) return;
850
-
851
796
  const physics = this._getMasterPhysics();
852
-
853
797
  if ( physics === null ) return;
854
-
855
798
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
856
799
 
857
800
  const p = this.meshes[ i ].physics;
858
-
859
801
  if ( p !== null && p !== undefined ) {
860
802
 
861
803
  p.updateRigidBodies();
@@ -865,11 +807,9 @@
865
807
  }
866
808
 
867
809
  physics.stepSimulation( delta );
868
-
869
810
  for ( let i = 0, il = this.meshes.length; i < il; i ++ ) {
870
811
 
871
812
  const p = this.meshes[ i ].physics;
872
-
873
813
  if ( p !== null && p !== undefined ) {
874
814
 
875
815
  p.updateBones();
@@ -880,12 +820,11 @@
880
820
 
881
821
  }
882
822
 
883
- } // Keep working quaternions for less GC
884
-
823
+ }
885
824
 
825
+ // Keep working quaternions for less GC
886
826
  const _quaternions = [];
887
827
  let _quaternionIndex = 0;
888
-
889
828
  function getQuaternion() {
890
829
 
891
830
  if ( _quaternionIndex >= _quaternions.length ) {
@@ -896,33 +835,33 @@
896
835
 
897
836
  return _quaternions[ _quaternionIndex ++ ];
898
837
 
899
- } // Save rotation whose grant and IK are already applied
900
- // used by grant children
901
-
838
+ }
902
839
 
840
+ // Save rotation whose grant and IK are already applied
841
+ // used by grant children
903
842
  const _grantResultMap = new Map();
904
-
905
843
  function updateOne( mesh, boneIndex, ikSolver, grantSolver ) {
906
844
 
907
845
  const bones = mesh.skeleton.bones;
908
846
  const bonesData = mesh.geometry.userData.MMD.bones;
909
847
  const boneData = bonesData[ boneIndex ];
910
- const bone = bones[ boneIndex ]; // Return if already updated by being referred as a grant parent.
848
+ const bone = bones[ boneIndex ];
911
849
 
850
+ // Return if already updated by being referred as a grant parent.
912
851
  if ( _grantResultMap.has( boneIndex ) ) return;
913
- const quaternion = getQuaternion(); // Initialize grant result here to prevent infinite loop.
852
+ const quaternion = getQuaternion();
853
+
854
+ // Initialize grant result here to prevent infinite loop.
914
855
  // If it's referred before updating with actual result later
915
856
  // result without applyting IK or grant is gotten
916
857
  // but better than composing of infinite loop.
858
+ _grantResultMap.set( boneIndex, quaternion.copy( bone.quaternion ) );
917
859
 
918
- _grantResultMap.set( boneIndex, quaternion.copy( bone.quaternion ) ); // @TODO: Support global grant and grant position
919
-
920
-
860
+ // @TODO: Support global grant and grant position
921
861
  if ( grantSolver && boneData.grant && ! boneData.grant.isLocal && boneData.grant.affectRotation ) {
922
862
 
923
863
  const parentIndex = boneData.grant.parentIndex;
924
864
  const ratio = boneData.grant.ratio;
925
-
926
865
  if ( ! _grantResultMap.has( parentIndex ) ) {
927
866
 
928
867
  updateOne( mesh, parentIndex, ikSolver, grantSolver );
@@ -938,16 +877,15 @@
938
877
  // @TODO: Updating world matrices every time solving an IK bone is
939
878
  // costly. Optimize if possible.
940
879
  mesh.updateMatrixWorld( true );
941
- ikSolver.updateOne( boneData.ik ); // No confident, but it seems the grant results with ik links should be updated?
880
+ ikSolver.updateOne( boneData.ik );
942
881
 
882
+ // No confident, but it seems the grant results with ik links should be updated?
943
883
  const links = boneData.ik.links;
944
-
945
884
  for ( let i = 0, il = links.length; i < il; i ++ ) {
946
885
 
947
886
  const link = links[ i ];
948
887
  if ( link.enabled === false ) continue;
949
888
  const linkIndex = link.index;
950
-
951
889
  if ( _grantResultMap.has( linkIndex ) ) {
952
890
 
953
891
  _grantResultMap.set( linkIndex, _grantResultMap.get( linkIndex ).copy( bones[ linkIndex ].quaternion ) );
@@ -956,13 +894,14 @@
956
894
 
957
895
  }
958
896
 
959
- } // Update with the actual result here
960
-
897
+ }
961
898
 
899
+ // Update with the actual result here
962
900
  quaternion.copy( bone.quaternion );
963
901
 
964
- } //
902
+ }
965
903
 
904
+ //
966
905
 
967
906
  class AudioManager {
968
907
 
@@ -981,12 +920,11 @@
981
920
  this.duration = this.audioDuration + this.delayTime;
982
921
 
983
922
  }
923
+
984
924
  /**
985
925
  * @param {Number} delta
986
926
  * @return {AudioManager}
987
927
  */
988
-
989
-
990
928
  control( delta ) {
991
929
 
992
930
  this.elapsed += delta;
@@ -995,26 +933,26 @@
995
933
  if ( this._shouldStartAudio() ) this.audio.play();
996
934
  return this;
997
935
 
998
- } // private methods
936
+ }
999
937
 
938
+ // private methods
1000
939
 
1001
940
  _shouldStartAudio() {
1002
941
 
1003
942
  if ( this.audio.isPlaying ) return false;
1004
-
1005
943
  while ( this.currentTime >= this.duration ) {
1006
944
 
1007
945
  this.currentTime -= this.duration;
1008
946
 
1009
947
  }
1010
948
 
1011
- if ( this.currentTime < this.delayTime ) return false; // 'duration' can be bigger than 'audioDuration + delayTime' because of sync configuration
949
+ if ( this.currentTime < this.delayTime ) return false;
1012
950
 
951
+ // 'duration' can be bigger than 'audioDuration + delayTime' because of sync configuration
1013
952
  if ( this.currentTime - this.delayTime > this.audioDuration ) return false;
1014
953
  return true;
1015
954
 
1016
955
  }
1017
-
1018
956
  _shouldStopAudio() {
1019
957
 
1020
958
  return this.audio.isPlaying && this.currentTime >= this.duration;
@@ -1022,8 +960,8 @@
1022
960
  }
1023
961
 
1024
962
  }
1025
-
1026
963
  const _q = new THREE.Quaternion();
964
+
1027
965
  /**
1028
966
  * Solver for Grant (Fuyo in Japanese. I just google translated because
1029
967
  * Fuyo may be MMD specific term and may not be common word in 3D CG terms.)
@@ -1032,8 +970,6 @@
1032
970
  * @param {THREE.SkinnedMesh} mesh
1033
971
  * @param {Array<Object>} grants
1034
972
  */
1035
-
1036
-
1037
973
  class GrantSolver {
1038
974
 
1039
975
  constructor( mesh, grants = [] ) {
@@ -1042,16 +978,14 @@
1042
978
  this.grants = grants;
1043
979
 
1044
980
  }
981
+
1045
982
  /**
1046
983
  * Solve all the grant bones
1047
984
  * @return {GrantSolver}
1048
985
  */
1049
-
1050
-
1051
986
  update() {
1052
987
 
1053
988
  const grants = this.grants;
1054
-
1055
989
  for ( let i = 0, il = grants.length; i < il; i ++ ) {
1056
990
 
1057
991
  this.updateOne( grants[ i ] );
@@ -1061,25 +995,23 @@
1061
995
  return this;
1062
996
 
1063
997
  }
998
+
1064
999
  /**
1065
1000
  * Solve a grant bone
1066
1001
  * @param {Object} grant - grant parameter
1067
1002
  * @return {GrantSolver}
1068
1003
  */
1069
-
1070
-
1071
1004
  updateOne( grant ) {
1072
1005
 
1073
1006
  const bones = this.mesh.skeleton.bones;
1074
1007
  const bone = bones[ grant.index ];
1075
1008
  const parentBone = bones[ grant.parentIndex ];
1076
-
1077
1009
  if ( grant.isLocal ) {
1078
1010
 
1079
1011
  // TODO: implement
1080
- if ( grant.affectPosition ) {} // TODO: implement
1081
-
1012
+ if ( grant.affectPosition ) {}
1082
1013
 
1014
+ // TODO: implement
1083
1015
  if ( grant.affectRotation ) {}
1084
1016
 
1085
1017
  } else {
@@ -1098,13 +1030,10 @@
1098
1030
  return this;
1099
1031
 
1100
1032
  }
1101
-
1102
1033
  addGrantRotation( bone, q, ratio ) {
1103
1034
 
1104
1035
  _q.set( 0, 0, 0, 1 );
1105
-
1106
1036
  _q.slerp( q, ratio );
1107
-
1108
1037
  bone.quaternion.multiply( _q );
1109
1038
  return this;
1110
1039