three-stdlib 2.35.2 → 2.35.4

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 (518) hide show
  1. package/_polyfill/CapsuleGeometry.cjs +20 -17
  2. package/_polyfill/CapsuleGeometry.cjs.map +1 -1
  3. package/_polyfill/CapsuleGeometry.js +20 -17
  4. package/_polyfill/CapsuleGeometry.js.map +1 -1
  5. package/_polyfill/constants.cjs +1 -1
  6. package/_polyfill/constants.cjs.map +1 -1
  7. package/_polyfill/constants.js +1 -1
  8. package/_polyfill/constants.js.map +1 -1
  9. package/animation/AnimationClipCreator.cjs +13 -13
  10. package/animation/AnimationClipCreator.cjs.map +1 -1
  11. package/animation/AnimationClipCreator.js +13 -13
  12. package/animation/AnimationClipCreator.js.map +1 -1
  13. package/animation/CCDIKSolver.cjs +11 -11
  14. package/animation/CCDIKSolver.cjs.map +1 -1
  15. package/animation/CCDIKSolver.js +12 -12
  16. package/animation/CCDIKSolver.js.map +1 -1
  17. package/animation/MMDAnimationHelper.cjs +1 -1
  18. package/animation/MMDAnimationHelper.cjs.map +1 -1
  19. package/animation/MMDAnimationHelper.js +1 -1
  20. package/animation/MMDAnimationHelper.js.map +1 -1
  21. package/animation/MMDPhysics.cjs +4 -4
  22. package/animation/MMDPhysics.cjs.map +1 -1
  23. package/animation/MMDPhysics.js +4 -4
  24. package/animation/MMDPhysics.js.map +1 -1
  25. package/controls/ArcballControls.cjs +2 -2
  26. package/controls/ArcballControls.cjs.map +1 -1
  27. package/controls/ArcballControls.js +3 -3
  28. package/controls/ArcballControls.js.map +1 -1
  29. package/controls/FirstPersonControls.cjs +1 -1
  30. package/controls/FirstPersonControls.cjs.map +1 -1
  31. package/controls/FirstPersonControls.js +1 -1
  32. package/controls/FirstPersonControls.js.map +1 -1
  33. package/controls/OrbitControls.cjs +2 -2
  34. package/controls/OrbitControls.cjs.map +1 -1
  35. package/controls/OrbitControls.js +3 -3
  36. package/controls/OrbitControls.js.map +1 -1
  37. package/controls/PointerLockControls.cjs +2 -2
  38. package/controls/PointerLockControls.cjs.map +1 -1
  39. package/controls/PointerLockControls.js +3 -3
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/csm/CSM.cjs +4 -4
  42. package/csm/CSM.cjs.map +1 -1
  43. package/csm/CSM.js +5 -5
  44. package/csm/CSM.js.map +1 -1
  45. package/csm/CSMFrustum.cjs +1 -1
  46. package/csm/CSMFrustum.cjs.map +1 -1
  47. package/csm/CSMFrustum.js +2 -2
  48. package/csm/CSMFrustum.js.map +1 -1
  49. package/deprecated/Geometry.cjs +722 -715
  50. package/deprecated/Geometry.cjs.map +1 -1
  51. package/deprecated/Geometry.js +723 -716
  52. package/deprecated/Geometry.js.map +1 -1
  53. package/effects/AnaglyphEffect.cjs +2 -1
  54. package/effects/AnaglyphEffect.cjs.map +1 -1
  55. package/effects/AnaglyphEffect.js +3 -2
  56. package/effects/AnaglyphEffect.js.map +1 -1
  57. package/effects/OutlineEffect.cjs +2 -1
  58. package/effects/OutlineEffect.cjs.map +1 -1
  59. package/effects/OutlineEffect.js +3 -2
  60. package/effects/OutlineEffect.js.map +1 -1
  61. package/effects/ParallaxBarrierEffect.cjs +2 -1
  62. package/effects/ParallaxBarrierEffect.cjs.map +1 -1
  63. package/effects/ParallaxBarrierEffect.js +3 -2
  64. package/effects/ParallaxBarrierEffect.js.map +1 -1
  65. package/exporters/DRACOExporter.cjs +133 -122
  66. package/exporters/DRACOExporter.cjs.map +1 -1
  67. package/exporters/DRACOExporter.d.ts +23 -21
  68. package/exporters/DRACOExporter.js +133 -122
  69. package/exporters/DRACOExporter.js.map +1 -1
  70. package/exporters/GLTFExporter.cjs +170 -167
  71. package/exporters/GLTFExporter.cjs.map +1 -1
  72. package/exporters/GLTFExporter.js +170 -167
  73. package/exporters/GLTFExporter.js.map +1 -1
  74. package/geometries/LightningStrike.cjs +524 -515
  75. package/geometries/LightningStrike.cjs.map +1 -1
  76. package/geometries/LightningStrike.js +524 -515
  77. package/geometries/LightningStrike.js.map +1 -1
  78. package/geometries/RoundedBoxGeometry.cjs +1 -1
  79. package/geometries/RoundedBoxGeometry.cjs.map +1 -1
  80. package/geometries/RoundedBoxGeometry.js +2 -2
  81. package/geometries/RoundedBoxGeometry.js.map +1 -1
  82. package/helpers/RaycasterHelper.cjs +2 -2
  83. package/helpers/RaycasterHelper.cjs.map +1 -1
  84. package/helpers/RaycasterHelper.js +3 -3
  85. package/helpers/RaycasterHelper.js.map +1 -1
  86. package/helpers/VertexNormalsHelper.cjs +3 -3
  87. package/helpers/VertexNormalsHelper.cjs.map +1 -1
  88. package/helpers/VertexNormalsHelper.js +4 -4
  89. package/helpers/VertexNormalsHelper.js.map +1 -1
  90. package/helpers/VertexTangentsHelper.cjs +2 -2
  91. package/helpers/VertexTangentsHelper.cjs.map +1 -1
  92. package/helpers/VertexTangentsHelper.js +3 -3
  93. package/helpers/VertexTangentsHelper.js.map +1 -1
  94. package/interactive/InteractiveGroup.cjs +1 -1
  95. package/interactive/InteractiveGroup.cjs.map +1 -1
  96. package/interactive/InteractiveGroup.js +2 -2
  97. package/interactive/InteractiveGroup.js.map +1 -1
  98. package/interactive/SelectionBox.cjs +15 -15
  99. package/interactive/SelectionBox.cjs.map +1 -1
  100. package/interactive/SelectionBox.js +16 -16
  101. package/interactive/SelectionBox.js.map +1 -1
  102. package/libs/chevrotain.cjs +1 -1
  103. package/libs/chevrotain.cjs.map +1 -1
  104. package/libs/chevrotain.js +1 -1
  105. package/libs/chevrotain.js.map +1 -1
  106. package/libs/lottie.cjs +1 -1
  107. package/libs/lottie.cjs.map +1 -1
  108. package/libs/lottie.js +1 -1
  109. package/libs/lottie.js.map +1 -1
  110. package/libs/opentype.cjs +1 -1
  111. package/libs/opentype.cjs.map +1 -1
  112. package/libs/opentype.js +1 -1
  113. package/libs/opentype.js.map +1 -1
  114. package/lights/LightProbeGenerator.cjs +5 -5
  115. package/lights/LightProbeGenerator.cjs.map +1 -1
  116. package/lights/LightProbeGenerator.js +5 -5
  117. package/lights/LightProbeGenerator.js.map +1 -1
  118. package/lights/RectAreaLightUniformsLib.cjs +3 -3
  119. package/lights/RectAreaLightUniformsLib.cjs.map +1 -1
  120. package/lights/RectAreaLightUniformsLib.js +3 -3
  121. package/lights/RectAreaLightUniformsLib.js.map +1 -1
  122. package/lines/LineMaterial.cjs +2 -1
  123. package/lines/LineMaterial.cjs.map +1 -1
  124. package/lines/LineMaterial.js +3 -2
  125. package/lines/LineMaterial.js.map +1 -1
  126. package/lines/LineSegments2.cjs +13 -13
  127. package/lines/LineSegments2.cjs.map +1 -1
  128. package/lines/LineSegments2.js +14 -14
  129. package/lines/LineSegments2.js.map +1 -1
  130. package/lines/LineSegmentsGeometry.cjs +2 -2
  131. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  132. package/lines/LineSegmentsGeometry.js +3 -3
  133. package/lines/LineSegmentsGeometry.js.map +1 -1
  134. package/lines/Wireframe.cjs +3 -3
  135. package/lines/Wireframe.cjs.map +1 -1
  136. package/lines/Wireframe.js +4 -4
  137. package/lines/Wireframe.js.map +1 -1
  138. package/loaders/BasisTextureLoader.cjs +441 -435
  139. package/loaders/BasisTextureLoader.cjs.map +1 -1
  140. package/loaders/BasisTextureLoader.js +441 -435
  141. package/loaders/BasisTextureLoader.js.map +1 -1
  142. package/loaders/EXRLoader.cjs +2 -1
  143. package/loaders/EXRLoader.cjs.map +1 -1
  144. package/loaders/EXRLoader.js +3 -2
  145. package/loaders/EXRLoader.js.map +1 -1
  146. package/loaders/FBXLoader.cjs +2 -2
  147. package/loaders/FBXLoader.cjs.map +1 -1
  148. package/loaders/FBXLoader.js +2 -2
  149. package/loaders/FBXLoader.js.map +1 -1
  150. package/loaders/FontLoader.cjs +2 -2
  151. package/loaders/FontLoader.cjs.map +1 -1
  152. package/loaders/FontLoader.d.ts +2 -2
  153. package/loaders/FontLoader.js +2 -2
  154. package/loaders/FontLoader.js.map +1 -1
  155. package/loaders/GLTFLoader.cjs +2 -2
  156. package/loaders/GLTFLoader.cjs.map +1 -1
  157. package/loaders/GLTFLoader.js +2 -2
  158. package/loaders/GLTFLoader.js.map +1 -1
  159. package/loaders/KTX2Loader.cjs +377 -374
  160. package/loaders/KTX2Loader.cjs.map +1 -1
  161. package/loaders/KTX2Loader.js +377 -374
  162. package/loaders/KTX2Loader.js.map +1 -1
  163. package/loaders/LDrawLoader.cjs +5 -4
  164. package/loaders/LDrawLoader.cjs.map +1 -1
  165. package/loaders/LDrawLoader.js +6 -5
  166. package/loaders/LDrawLoader.js.map +1 -1
  167. package/loaders/OBJLoader.cjs +5 -5
  168. package/loaders/OBJLoader.cjs.map +1 -1
  169. package/loaders/OBJLoader.js +6 -6
  170. package/loaders/OBJLoader.js.map +1 -1
  171. package/loaders/PRWMLoader.cjs +46 -43
  172. package/loaders/PRWMLoader.cjs.map +1 -1
  173. package/loaders/PRWMLoader.js +46 -43
  174. package/loaders/PRWMLoader.js.map +1 -1
  175. package/loaders/SVGLoader.cjs +1694 -1688
  176. package/loaders/SVGLoader.cjs.map +1 -1
  177. package/loaders/SVGLoader.js +1694 -1688
  178. package/loaders/SVGLoader.js.map +1 -1
  179. package/loaders/XLoader.cjs +1 -1
  180. package/loaders/XLoader.cjs.map +1 -1
  181. package/loaders/XLoader.js +1 -1
  182. package/loaders/XLoader.js.map +1 -1
  183. package/math/Capsule.cjs +3 -3
  184. package/math/Capsule.cjs.map +1 -1
  185. package/math/Capsule.js +3 -3
  186. package/math/Capsule.js.map +1 -1
  187. package/math/ColorConverter.cjs +9 -9
  188. package/math/ColorConverter.cjs.map +1 -1
  189. package/math/ColorConverter.js +9 -9
  190. package/math/ColorConverter.js.map +1 -1
  191. package/math/ConvexHull.cjs +53 -50
  192. package/math/ConvexHull.cjs.map +1 -1
  193. package/math/ConvexHull.js +53 -50
  194. package/math/ConvexHull.js.map +1 -1
  195. package/math/ImprovedNoise.cjs +1 -1
  196. package/math/ImprovedNoise.cjs.map +1 -1
  197. package/math/ImprovedNoise.js +1 -1
  198. package/math/ImprovedNoise.js.map +1 -1
  199. package/math/MeshSurfaceSampler.cjs +2 -2
  200. package/math/MeshSurfaceSampler.cjs.map +1 -1
  201. package/math/MeshSurfaceSampler.js +2 -2
  202. package/math/MeshSurfaceSampler.js.map +1 -1
  203. package/math/OBB.cjs +14 -14
  204. package/math/OBB.cjs.map +1 -1
  205. package/math/OBB.js +15 -15
  206. package/math/OBB.js.map +1 -1
  207. package/math/Octree.cjs +7 -7
  208. package/math/Octree.cjs.map +1 -1
  209. package/math/Octree.js +8 -8
  210. package/math/Octree.js.map +1 -1
  211. package/misc/ConvexObjectBreaker.cjs +271 -268
  212. package/misc/ConvexObjectBreaker.cjs.map +1 -1
  213. package/misc/ConvexObjectBreaker.js +272 -269
  214. package/misc/ConvexObjectBreaker.js.map +1 -1
  215. package/misc/Gyroscope.cjs +6 -6
  216. package/misc/Gyroscope.cjs.map +1 -1
  217. package/misc/Gyroscope.js +7 -7
  218. package/misc/Gyroscope.js.map +1 -1
  219. package/modifiers/CurveModifier.cjs +1 -1
  220. package/modifiers/CurveModifier.cjs.map +1 -1
  221. package/modifiers/CurveModifier.js +2 -2
  222. package/modifiers/CurveModifier.js.map +1 -1
  223. package/modifiers/SimplifyModifier.cjs +2 -2
  224. package/modifiers/SimplifyModifier.cjs.map +1 -1
  225. package/modifiers/SimplifyModifier.js +2 -2
  226. package/modifiers/SimplifyModifier.js.map +1 -1
  227. package/objects/BatchedMesh.cjs +2 -2
  228. package/objects/BatchedMesh.cjs.map +1 -1
  229. package/objects/BatchedMesh.js +3 -3
  230. package/objects/BatchedMesh.js.map +1 -1
  231. package/objects/GroundProjectedEnv.cjs +2 -1
  232. package/objects/GroundProjectedEnv.cjs.map +1 -1
  233. package/objects/GroundProjectedEnv.js +3 -2
  234. package/objects/GroundProjectedEnv.js.map +1 -1
  235. package/objects/Lensflare.cjs +209 -206
  236. package/objects/Lensflare.cjs.map +1 -1
  237. package/objects/Lensflare.js +209 -206
  238. package/objects/Lensflare.js.map +1 -1
  239. package/objects/Reflector.cjs +154 -146
  240. package/objects/Reflector.cjs.map +1 -1
  241. package/objects/Reflector.js +154 -146
  242. package/objects/Reflector.js.map +1 -1
  243. package/objects/ReflectorForSSRPass.cjs +183 -180
  244. package/objects/ReflectorForSSRPass.cjs.map +1 -1
  245. package/objects/ReflectorForSSRPass.js +183 -180
  246. package/objects/ReflectorForSSRPass.js.map +1 -1
  247. package/objects/Refractor.cjs +164 -161
  248. package/objects/Refractor.cjs.map +1 -1
  249. package/objects/Refractor.js +164 -161
  250. package/objects/Refractor.js.map +1 -1
  251. package/objects/ShadowMesh.cjs +1 -1
  252. package/objects/ShadowMesh.cjs.map +1 -1
  253. package/objects/ShadowMesh.js +2 -2
  254. package/objects/ShadowMesh.js.map +1 -1
  255. package/objects/Sky.cjs +35 -32
  256. package/objects/Sky.cjs.map +1 -1
  257. package/objects/Sky.d.ts +100 -6
  258. package/objects/Sky.js +35 -32
  259. package/objects/Sky.js.map +1 -1
  260. package/objects/Water.cjs +2 -1
  261. package/objects/Water.cjs.map +1 -1
  262. package/objects/Water.js +3 -2
  263. package/objects/Water.js.map +1 -1
  264. package/objects/Water2.cjs +143 -140
  265. package/objects/Water2.cjs.map +1 -1
  266. package/objects/Water2.js +143 -140
  267. package/objects/Water2.js.map +1 -1
  268. package/package.json +1 -1
  269. package/postprocessing/Pass.cjs.map +1 -1
  270. package/postprocessing/Pass.d.ts +2 -2
  271. package/postprocessing/Pass.js.map +1 -1
  272. package/postprocessing/SAOPass.cjs +267 -264
  273. package/postprocessing/SAOPass.cjs.map +1 -1
  274. package/postprocessing/SAOPass.js +267 -264
  275. package/postprocessing/SAOPass.js.map +1 -1
  276. package/postprocessing/SSAOPass.cjs +253 -250
  277. package/postprocessing/SSAOPass.cjs.map +1 -1
  278. package/postprocessing/SSAOPass.js +253 -250
  279. package/postprocessing/SSAOPass.js.map +1 -1
  280. package/postprocessing/SSRPass.cjs +379 -376
  281. package/postprocessing/SSRPass.cjs.map +1 -1
  282. package/postprocessing/SSRPass.js +379 -376
  283. package/postprocessing/SSRPass.js.map +1 -1
  284. package/postprocessing/UnrealBloomPass.cjs +205 -202
  285. package/postprocessing/UnrealBloomPass.cjs.map +1 -1
  286. package/postprocessing/UnrealBloomPass.js +205 -202
  287. package/postprocessing/UnrealBloomPass.js.map +1 -1
  288. package/renderers/CSS2DRenderer.cjs +5 -5
  289. package/renderers/CSS2DRenderer.cjs.map +1 -1
  290. package/renderers/CSS2DRenderer.js +5 -5
  291. package/renderers/CSS2DRenderer.js.map +1 -1
  292. package/renderers/CSS3DRenderer.cjs +5 -5
  293. package/renderers/CSS3DRenderer.cjs.map +1 -1
  294. package/renderers/CSS3DRenderer.js +6 -6
  295. package/renderers/CSS3DRenderer.js.map +1 -1
  296. package/shaders/ACESFilmicToneMappingShader.cjs +71 -46
  297. package/shaders/ACESFilmicToneMappingShader.cjs.map +1 -1
  298. package/shaders/ACESFilmicToneMappingShader.js +71 -46
  299. package/shaders/ACESFilmicToneMappingShader.js.map +1 -1
  300. package/shaders/AfterimageShader.cjs +41 -22
  301. package/shaders/AfterimageShader.cjs.map +1 -1
  302. package/shaders/AfterimageShader.js +41 -22
  303. package/shaders/AfterimageShader.js.map +1 -1
  304. package/shaders/BasicShader.cjs +20 -6
  305. package/shaders/BasicShader.cjs.map +1 -1
  306. package/shaders/BasicShader.js +20 -6
  307. package/shaders/BasicShader.js.map +1 -1
  308. package/shaders/BleachBypassShader.cjs +46 -26
  309. package/shaders/BleachBypassShader.cjs.map +1 -1
  310. package/shaders/BleachBypassShader.js +46 -26
  311. package/shaders/BleachBypassShader.js.map +1 -1
  312. package/shaders/BlendShader.cjs +33 -19
  313. package/shaders/BlendShader.cjs.map +1 -1
  314. package/shaders/BlendShader.js +33 -19
  315. package/shaders/BlendShader.js.map +1 -1
  316. package/shaders/BokehShader.cjs +117 -90
  317. package/shaders/BokehShader.cjs.map +1 -1
  318. package/shaders/BokehShader.js +117 -90
  319. package/shaders/BokehShader.js.map +1 -1
  320. package/shaders/BokehShader2.cjs +333 -232
  321. package/shaders/BokehShader2.cjs.map +1 -1
  322. package/shaders/BokehShader2.js +333 -232
  323. package/shaders/BokehShader2.js.map +1 -1
  324. package/shaders/BrightnessContrastShader.cjs +38 -22
  325. package/shaders/BrightnessContrastShader.cjs.map +1 -1
  326. package/shaders/BrightnessContrastShader.js +38 -22
  327. package/shaders/BrightnessContrastShader.js.map +1 -1
  328. package/shaders/ColorCorrectionShader.cjs +35 -21
  329. package/shaders/ColorCorrectionShader.cjs.map +1 -1
  330. package/shaders/ColorCorrectionShader.js +35 -21
  331. package/shaders/ColorCorrectionShader.js.map +1 -1
  332. package/shaders/ColorifyShader.cjs +34 -19
  333. package/shaders/ColorifyShader.cjs.map +1 -1
  334. package/shaders/ColorifyShader.js +34 -19
  335. package/shaders/ColorifyShader.js.map +1 -1
  336. package/shaders/ConvolutionShader.cjs +43 -24
  337. package/shaders/ConvolutionShader.cjs.map +1 -1
  338. package/shaders/ConvolutionShader.js +43 -24
  339. package/shaders/ConvolutionShader.js.map +1 -1
  340. package/shaders/CopyShader.cjs +30 -16
  341. package/shaders/CopyShader.cjs.map +1 -1
  342. package/shaders/CopyShader.js +30 -16
  343. package/shaders/CopyShader.js.map +1 -1
  344. package/shaders/DOFMipMapShader.cjs +38 -21
  345. package/shaders/DOFMipMapShader.cjs.map +1 -1
  346. package/shaders/DOFMipMapShader.js +38 -21
  347. package/shaders/DOFMipMapShader.js.map +1 -1
  348. package/shaders/DepthLimitedBlurShader.cjs +98 -69
  349. package/shaders/DepthLimitedBlurShader.cjs.map +1 -1
  350. package/shaders/DepthLimitedBlurShader.js +98 -69
  351. package/shaders/DepthLimitedBlurShader.js.map +1 -1
  352. package/shaders/DigitalGlitch.cjs +70 -59
  353. package/shaders/DigitalGlitch.cjs.map +1 -1
  354. package/shaders/DigitalGlitch.js +70 -59
  355. package/shaders/DigitalGlitch.js.map +1 -1
  356. package/shaders/DotScreenShader.cjs +49 -28
  357. package/shaders/DotScreenShader.cjs.map +1 -1
  358. package/shaders/DotScreenShader.js +49 -28
  359. package/shaders/DotScreenShader.js.map +1 -1
  360. package/shaders/FXAAShader.cjs +1098 -1089
  361. package/shaders/FXAAShader.cjs.map +1 -1
  362. package/shaders/FXAAShader.js +1098 -1089
  363. package/shaders/FXAAShader.js.map +1 -1
  364. package/shaders/FilmShader.cjs +57 -29
  365. package/shaders/FilmShader.cjs.map +1 -1
  366. package/shaders/FilmShader.js +57 -29
  367. package/shaders/FilmShader.js.map +1 -1
  368. package/shaders/FocusShader.cjs +70 -43
  369. package/shaders/FocusShader.cjs.map +1 -1
  370. package/shaders/FocusShader.js +70 -43
  371. package/shaders/FocusShader.js.map +1 -1
  372. package/shaders/FreiChenShader.cjs +74 -53
  373. package/shaders/FreiChenShader.cjs.map +1 -1
  374. package/shaders/FreiChenShader.js +74 -53
  375. package/shaders/FreiChenShader.js.map +1 -1
  376. package/shaders/FresnelShader.cjs +55 -35
  377. package/shaders/FresnelShader.cjs.map +1 -1
  378. package/shaders/FresnelShader.js +55 -35
  379. package/shaders/FresnelShader.js.map +1 -1
  380. package/shaders/GammaCorrectionShader.cjs +33 -19
  381. package/shaders/GammaCorrectionShader.cjs.map +1 -1
  382. package/shaders/GammaCorrectionShader.js +33 -19
  383. package/shaders/GammaCorrectionShader.js.map +1 -1
  384. package/shaders/GodRaysShader.cjs +193 -116
  385. package/shaders/GodRaysShader.cjs.map +1 -1
  386. package/shaders/GodRaysShader.js +193 -116
  387. package/shaders/GodRaysShader.js.map +1 -1
  388. package/shaders/HalftoneShader.cjs +270 -192
  389. package/shaders/HalftoneShader.cjs.map +1 -1
  390. package/shaders/HalftoneShader.js +270 -192
  391. package/shaders/HalftoneShader.js.map +1 -1
  392. package/shaders/HorizontalTiltShiftShader.cjs +43 -27
  393. package/shaders/HorizontalTiltShiftShader.cjs.map +1 -1
  394. package/shaders/HorizontalTiltShiftShader.js +43 -27
  395. package/shaders/HorizontalTiltShiftShader.js.map +1 -1
  396. package/shaders/HueSaturationShader.cjs +47 -31
  397. package/shaders/HueSaturationShader.cjs.map +1 -1
  398. package/shaders/HueSaturationShader.js +47 -31
  399. package/shaders/HueSaturationShader.js.map +1 -1
  400. package/shaders/KaleidoShader.cjs +37 -24
  401. package/shaders/KaleidoShader.cjs.map +1 -1
  402. package/shaders/KaleidoShader.js +37 -24
  403. package/shaders/KaleidoShader.js.map +1 -1
  404. package/shaders/LuminosityHighPassShader.cjs +43 -24
  405. package/shaders/LuminosityHighPassShader.cjs.map +1 -1
  406. package/shaders/LuminosityHighPassShader.js +43 -24
  407. package/shaders/LuminosityHighPassShader.js.map +1 -1
  408. package/shaders/LuminosityShader.cjs +34 -17
  409. package/shaders/LuminosityShader.cjs.map +1 -1
  410. package/shaders/LuminosityShader.js +34 -17
  411. package/shaders/LuminosityShader.js.map +1 -1
  412. package/shaders/MirrorShader.cjs +39 -26
  413. package/shaders/MirrorShader.cjs.map +1 -1
  414. package/shaders/MirrorShader.js +39 -26
  415. package/shaders/MirrorShader.js.map +1 -1
  416. package/shaders/NormalMapShader.cjs +36 -21
  417. package/shaders/NormalMapShader.cjs.map +1 -1
  418. package/shaders/NormalMapShader.js +36 -21
  419. package/shaders/NormalMapShader.js.map +1 -1
  420. package/shaders/ParallaxShader.cjs +147 -97
  421. package/shaders/ParallaxShader.cjs.map +1 -1
  422. package/shaders/ParallaxShader.js +147 -97
  423. package/shaders/ParallaxShader.js.map +1 -1
  424. package/shaders/PixelShader.cjs +31 -18
  425. package/shaders/PixelShader.cjs.map +1 -1
  426. package/shaders/PixelShader.js +31 -18
  427. package/shaders/PixelShader.js.map +1 -1
  428. package/shaders/RGBShiftShader.cjs +33 -20
  429. package/shaders/RGBShiftShader.cjs.map +1 -1
  430. package/shaders/RGBShiftShader.js +33 -20
  431. package/shaders/RGBShiftShader.js.map +1 -1
  432. package/shaders/SAOShader.cjs +154 -117
  433. package/shaders/SAOShader.cjs.map +1 -1
  434. package/shaders/SAOShader.js +154 -117
  435. package/shaders/SAOShader.js.map +1 -1
  436. package/shaders/SMAAShader.cjs +358 -270
  437. package/shaders/SMAAShader.cjs.map +1 -1
  438. package/shaders/SMAAShader.js +358 -270
  439. package/shaders/SMAAShader.js.map +1 -1
  440. package/shaders/SSAOShader.cjs +236 -142
  441. package/shaders/SSAOShader.cjs.map +1 -1
  442. package/shaders/SSAOShader.js +236 -142
  443. package/shaders/SSAOShader.js.map +1 -1
  444. package/shaders/SSRShader.cjs +4 -4
  445. package/shaders/SSRShader.cjs.map +1 -1
  446. package/shaders/SSRShader.js +4 -4
  447. package/shaders/SSRShader.js.map +1 -1
  448. package/shaders/SepiaShader.cjs +36 -20
  449. package/shaders/SepiaShader.cjs.map +1 -1
  450. package/shaders/SepiaShader.js +36 -20
  451. package/shaders/SepiaShader.js.map +1 -1
  452. package/shaders/SobelOperatorShader.cjs +64 -37
  453. package/shaders/SobelOperatorShader.cjs.map +1 -1
  454. package/shaders/SobelOperatorShader.js +64 -37
  455. package/shaders/SobelOperatorShader.js.map +1 -1
  456. package/shaders/TechnicolorShader.cjs +29 -16
  457. package/shaders/TechnicolorShader.cjs.map +1 -1
  458. package/shaders/TechnicolorShader.js +29 -16
  459. package/shaders/TechnicolorShader.js.map +1 -1
  460. package/shaders/ToneMapShader.cjs +55 -35
  461. package/shaders/ToneMapShader.cjs.map +1 -1
  462. package/shaders/ToneMapShader.js +55 -35
  463. package/shaders/ToneMapShader.js.map +1 -1
  464. package/shaders/ToonShader.cjs +275 -165
  465. package/shaders/ToonShader.cjs.map +1 -1
  466. package/shaders/ToonShader.js +275 -165
  467. package/shaders/ToonShader.js.map +1 -1
  468. package/shaders/TriangleBlurShader.cjs +50 -27
  469. package/shaders/TriangleBlurShader.cjs.map +1 -1
  470. package/shaders/TriangleBlurShader.js +50 -27
  471. package/shaders/TriangleBlurShader.js.map +1 -1
  472. package/shaders/UnpackDepthRGBAShader.cjs +32 -17
  473. package/shaders/UnpackDepthRGBAShader.cjs.map +1 -1
  474. package/shaders/UnpackDepthRGBAShader.js +32 -17
  475. package/shaders/UnpackDepthRGBAShader.js.map +1 -1
  476. package/shaders/VerticalTiltShiftShader.cjs +43 -27
  477. package/shaders/VerticalTiltShiftShader.cjs.map +1 -1
  478. package/shaders/VerticalTiltShiftShader.js +43 -27
  479. package/shaders/VerticalTiltShiftShader.js.map +1 -1
  480. package/shaders/VignetteShader.cjs +43 -27
  481. package/shaders/VignetteShader.cjs.map +1 -1
  482. package/shaders/VignetteShader.js +43 -27
  483. package/shaders/VignetteShader.js.map +1 -1
  484. package/shaders/VolumeShader.cjs +264 -213
  485. package/shaders/VolumeShader.cjs.map +1 -1
  486. package/shaders/VolumeShader.js +264 -213
  487. package/shaders/VolumeShader.js.map +1 -1
  488. package/shaders/WaterRefractionShader.cjs +63 -35
  489. package/shaders/WaterRefractionShader.cjs.map +1 -1
  490. package/shaders/WaterRefractionShader.js +63 -35
  491. package/shaders/WaterRefractionShader.js.map +1 -1
  492. package/utils/GeometryCompressionUtils.cjs +2 -1
  493. package/utils/GeometryCompressionUtils.cjs.map +1 -1
  494. package/utils/GeometryCompressionUtils.js +3 -2
  495. package/utils/GeometryCompressionUtils.js.map +1 -1
  496. package/utils/RoughnessMipmapper.cjs +3 -3
  497. package/utils/RoughnessMipmapper.cjs.map +1 -1
  498. package/utils/RoughnessMipmapper.js +4 -4
  499. package/utils/RoughnessMipmapper.js.map +1 -1
  500. package/utils/ShadowMapViewer.d.ts +2 -2
  501. package/webxr/ARButton.cjs +109 -106
  502. package/webxr/ARButton.cjs.map +1 -1
  503. package/webxr/ARButton.d.ts +4 -3
  504. package/webxr/ARButton.js +109 -106
  505. package/webxr/ARButton.js.map +1 -1
  506. package/webxr/OculusHandPointerModel.cjs +2 -2
  507. package/webxr/OculusHandPointerModel.cjs.map +1 -1
  508. package/webxr/OculusHandPointerModel.js +2 -2
  509. package/webxr/OculusHandPointerModel.js.map +1 -1
  510. package/webxr/VRButton.cjs +98 -95
  511. package/webxr/VRButton.cjs.map +1 -1
  512. package/webxr/VRButton.d.ts +6 -5
  513. package/webxr/VRButton.js +98 -95
  514. package/webxr/VRButton.js.map +1 -1
  515. package/webxr/XRHandPrimitiveModel.cjs +2 -2
  516. package/webxr/XRHandPrimitiveModel.cjs.map +1 -1
  517. package/webxr/XRHandPrimitiveModel.js +3 -3
  518. package/webxr/XRHandPrimitiveModel.js.map +1 -1
@@ -1,23 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- class CapsuleGeometry extends THREE.LatheGeometry {
5
- constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
6
- const path = new THREE.Path();
7
- path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
8
- path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
9
- super(path.getPoints(capSegments), radialSegments);
10
- this.type = "CapsuleGeometry";
11
- this.parameters = {
12
- radius,
13
- height: length,
14
- capSegments,
15
- radialSegments
16
- };
4
+ const CapsuleGeometry = /* @__PURE__ */ (() => {
5
+ class CapsuleGeometry2 extends THREE.LatheGeometry {
6
+ constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
7
+ const path = new THREE.Path();
8
+ path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
9
+ path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
10
+ super(path.getPoints(capSegments), radialSegments);
11
+ this.type = "CapsuleGeometry";
12
+ this.parameters = {
13
+ radius,
14
+ height: length,
15
+ capSegments,
16
+ radialSegments
17
+ };
18
+ }
19
+ static fromJSON(data) {
20
+ return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
21
+ }
17
22
  }
18
- static fromJSON(data) {
19
- return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments);
20
- }
21
- }
23
+ return CapsuleGeometry2;
24
+ })();
22
25
  exports.CapsuleGeometry = CapsuleGeometry;
23
26
  //# sourceMappingURL=CapsuleGeometry.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nclass CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n}\n\nexport { CapsuleGeometry }\n"],"names":["LatheGeometry","Path"],"mappings":";;;AAEA,MAAM,wBAAwBA,MAAAA,cAAc;AAAA,EAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,UAAM,OAAO,IAAIC,WAAM;AACvB,SAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,SAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,UAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,SAAK,OAAO;AAEZ,SAAK,aAAa;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,OAAO,SAAS,MAAM;AACpB,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,EAC3F;AACH;;"}
1
+ {"version":3,"file":"CapsuleGeometry.cjs","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry","LatheGeometry","Path"],"mappings":";;;AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwBC,MAAAA,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAIC,WAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIF,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;;"}
@@ -1,22 +1,25 @@
1
1
  import { LatheGeometry, Path } from "three";
2
- class CapsuleGeometry extends LatheGeometry {
3
- constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
4
- const path = new Path();
5
- path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
6
- path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
7
- super(path.getPoints(capSegments), radialSegments);
8
- this.type = "CapsuleGeometry";
9
- this.parameters = {
10
- radius,
11
- height: length,
12
- capSegments,
13
- radialSegments
14
- };
2
+ const CapsuleGeometry = /* @__PURE__ */ (() => {
3
+ class CapsuleGeometry2 extends LatheGeometry {
4
+ constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
5
+ const path = new Path();
6
+ path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);
7
+ path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);
8
+ super(path.getPoints(capSegments), radialSegments);
9
+ this.type = "CapsuleGeometry";
10
+ this.parameters = {
11
+ radius,
12
+ height: length,
13
+ capSegments,
14
+ radialSegments
15
+ };
16
+ }
17
+ static fromJSON(data) {
18
+ return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);
19
+ }
15
20
  }
16
- static fromJSON(data) {
17
- return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments);
18
- }
19
- }
21
+ return CapsuleGeometry2;
22
+ })();
20
23
  export {
21
24
  CapsuleGeometry
22
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nclass CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n}\n\nexport { CapsuleGeometry }\n"],"names":[],"mappings":";AAEA,MAAM,wBAAwB,cAAc;AAAA,EAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,UAAM,OAAO,IAAI,KAAM;AACvB,SAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,SAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,UAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,SAAK,OAAO;AAEZ,SAAK,aAAa;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,OAAO,SAAS,MAAM;AACpB,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,EAC3F;AACH;"}
1
+ {"version":3,"file":"CapsuleGeometry.js","sources":["../../src/_polyfill/CapsuleGeometry.js"],"sourcesContent":["import { Path, LatheGeometry } from 'three'\n\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path()\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0)\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5)\n\n super(path.getPoints(capSegments), radialSegments)\n\n this.type = 'CapsuleGeometry'\n\n this.parameters = {\n radius: radius,\n height: length,\n capSegments: capSegments,\n radialSegments: radialSegments,\n }\n }\n\n static fromJSON(data) {\n return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments)\n }\n }\n\n return CapsuleGeometry\n})()\n\nexport { CapsuleGeometry }\n"],"names":["CapsuleGeometry"],"mappings":";AAEK,MAAC,kBAAmC,uBAAM;AAC7C,QAAMA,yBAAwB,cAAc;AAAA,IAC1C,YAAY,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,iBAAiB,GAAG;AACvE,YAAM,OAAO,IAAI,KAAM;AACvB,WAAK,OAAO,GAAG,CAAC,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,CAAC;AACpD,WAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,KAAK,GAAG;AAEnD,YAAM,KAAK,UAAU,WAAW,GAAG,cAAc;AAEjD,WAAK,OAAO;AAEZ,WAAK,aAAa;AAAA,QAChB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAAA,IAED,OAAO,SAAS,MAAM;AACpB,aAAO,IAAIA,iBAAgB,KAAK,QAAQ,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc;AAAA,IAC3F;AAAA,EACF;AAED,SAAOA;AACT,GAAC;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const version = parseInt(THREE.REVISION.replace(/\D+/g, ""));
4
+ const version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\D+/g, "")))();
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":["REVISION"],"mappings":";;;AAEO,MAAM,UAAU,SAASA,MAAAA,SAAS,QAAQ,QAAQ,EAAE,CAAC;;"}
1
+ {"version":3,"file":"constants.cjs","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":["REVISION"],"mappings":";;;AAEa,MAAA,iCAAiC,SAASA,MAAAA,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;;"}
@@ -1,5 +1,5 @@
1
1
  import { REVISION } from "three";
2
- const version = parseInt(REVISION.replace(/\D+/g, ""));
2
+ const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\D+/g, "")))();
3
3
  export {
4
4
  version
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = parseInt(REVISION.replace(/\\D+/g, ''))\n"],"names":[],"mappings":";AAEO,MAAM,UAAU,SAAS,SAAS,QAAQ,QAAQ,EAAE,CAAC;"}
1
+ {"version":3,"file":"constants.js","sources":["../../src/_polyfill/constants.ts"],"sourcesContent":["import { REVISION } from 'three'\n\nexport const version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, '')))()\n"],"names":[],"mappings":";AAEa,MAAA,iCAAiC,SAAS,SAAS,QAAQ,QAAQ,EAAE,CAAC,GAAG;"}
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- class AnimationClipCreator {
5
- static CreateRotationAnimation(period, axis = "x") {
4
+ const AnimationClipCreator = {
5
+ CreateRotationAnimation(period, axis = "x") {
6
6
  const times = [0, period], values = [0, 360];
7
7
  const trackName = ".rotation[" + axis + "]";
8
8
  const track = new THREE.NumberKeyframeTrack(trackName, times, values);
9
9
  return new THREE.AnimationClip(null, period, [track]);
10
- }
11
- static CreateScaleAxisAnimation(period, axis = "x") {
10
+ },
11
+ CreateScaleAxisAnimation(period, axis = "x") {
12
12
  const times = [0, period], values = [0, 1];
13
13
  const trackName = ".scale[" + axis + "]";
14
14
  const track = new THREE.NumberKeyframeTrack(trackName, times, values);
15
15
  return new THREE.AnimationClip(null, period, [track]);
16
- }
17
- static CreateShakeAnimation(duration, shakeScale) {
16
+ },
17
+ CreateShakeAnimation(duration, shakeScale) {
18
18
  const times = [], values = [], tmp = new THREE.Vector3();
19
19
  for (let i = 0; i < duration * 10; i++) {
20
20
  times.push(i / 10);
@@ -23,8 +23,8 @@ class AnimationClipCreator {
23
23
  const trackName = ".position";
24
24
  const track = new THREE.VectorKeyframeTrack(trackName, times, values);
25
25
  return new THREE.AnimationClip(null, duration, [track]);
26
- }
27
- static CreatePulsationAnimation(duration, pulseScale) {
26
+ },
27
+ CreatePulsationAnimation(duration, pulseScale) {
28
28
  const times = [], values = [], tmp = new THREE.Vector3();
29
29
  for (let i = 0; i < duration * 10; i++) {
30
30
  times.push(i / 10);
@@ -34,14 +34,14 @@ class AnimationClipCreator {
34
34
  const trackName = ".scale";
35
35
  const track = new THREE.VectorKeyframeTrack(trackName, times, values);
36
36
  return new THREE.AnimationClip(null, duration, [track]);
37
- }
38
- static CreateVisibilityAnimation(duration) {
37
+ },
38
+ CreateVisibilityAnimation(duration) {
39
39
  const times = [0, duration / 2, duration], values = [true, false, true];
40
40
  const trackName = ".visible";
41
41
  const track = new THREE.BooleanKeyframeTrack(trackName, times, values);
42
42
  return new THREE.AnimationClip(null, duration, [track]);
43
- }
44
- static CreateMaterialColorAnimation(duration, colors) {
43
+ },
44
+ CreateMaterialColorAnimation(duration, colors) {
45
45
  const times = [], values = [], timeStep = duration / colors.length;
46
46
  for (let i = 0; i < colors.length; i++) {
47
47
  times.push(i * timeStep);
@@ -52,6 +52,6 @@ class AnimationClipCreator {
52
52
  const track = new THREE.ColorKeyframeTrack(trackName, times, values);
53
53
  return new THREE.AnimationClip(null, duration, [track]);
54
54
  }
55
- }
55
+ };
56
56
  exports.AnimationClipCreator = AnimationClipCreator;
57
57
  //# sourceMappingURL=AnimationClipCreator.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nclass AnimationClipCreator {\n static CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n}\n\nexport { AnimationClipCreator }\n"],"names":["NumberKeyframeTrack","AnimationClip","Vector3","VectorKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack"],"mappings":";;;AASA,MAAM,qBAAqB;AAAA,EACzB,OAAO,wBAAwB,QAAQ,OAAO,KAAK;AACjD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAIA,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,yBAAyB,QAAQ,OAAO,KAAK;AAClD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAID,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,qBAAqB,UAAU,YAAY;AAChD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,yBAAyB,UAAU,YAAY;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,0BAA0B,UAAU;AACzC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIG,MAAAA,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAIH,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,6BAA6B,UAAU,QAAQ;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAII,MAAAA,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAIJ,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;;"}
1
+ {"version":3,"file":"AnimationClipCreator.cjs","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":["NumberKeyframeTrack","AnimationClip","Vector3","VectorKeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack"],"mappings":";;;AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAIA,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAID,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIC,MAAAA,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAIC,MAAAA,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIC,MAAAA,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAIF,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAIG,MAAAA,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAIH,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAII,MAAAA,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAIJ,MAAAA,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;;"}
@@ -1,18 +1,18 @@
1
1
  import { NumberKeyframeTrack, AnimationClip, Vector3, VectorKeyframeTrack, BooleanKeyframeTrack, ColorKeyframeTrack } from "three";
2
- class AnimationClipCreator {
3
- static CreateRotationAnimation(period, axis = "x") {
2
+ const AnimationClipCreator = {
3
+ CreateRotationAnimation(period, axis = "x") {
4
4
  const times = [0, period], values = [0, 360];
5
5
  const trackName = ".rotation[" + axis + "]";
6
6
  const track = new NumberKeyframeTrack(trackName, times, values);
7
7
  return new AnimationClip(null, period, [track]);
8
- }
9
- static CreateScaleAxisAnimation(period, axis = "x") {
8
+ },
9
+ CreateScaleAxisAnimation(period, axis = "x") {
10
10
  const times = [0, period], values = [0, 1];
11
11
  const trackName = ".scale[" + axis + "]";
12
12
  const track = new NumberKeyframeTrack(trackName, times, values);
13
13
  return new AnimationClip(null, period, [track]);
14
- }
15
- static CreateShakeAnimation(duration, shakeScale) {
14
+ },
15
+ CreateShakeAnimation(duration, shakeScale) {
16
16
  const times = [], values = [], tmp = new Vector3();
17
17
  for (let i = 0; i < duration * 10; i++) {
18
18
  times.push(i / 10);
@@ -21,8 +21,8 @@ class AnimationClipCreator {
21
21
  const trackName = ".position";
22
22
  const track = new VectorKeyframeTrack(trackName, times, values);
23
23
  return new AnimationClip(null, duration, [track]);
24
- }
25
- static CreatePulsationAnimation(duration, pulseScale) {
24
+ },
25
+ CreatePulsationAnimation(duration, pulseScale) {
26
26
  const times = [], values = [], tmp = new Vector3();
27
27
  for (let i = 0; i < duration * 10; i++) {
28
28
  times.push(i / 10);
@@ -32,14 +32,14 @@ class AnimationClipCreator {
32
32
  const trackName = ".scale";
33
33
  const track = new VectorKeyframeTrack(trackName, times, values);
34
34
  return new AnimationClip(null, duration, [track]);
35
- }
36
- static CreateVisibilityAnimation(duration) {
35
+ },
36
+ CreateVisibilityAnimation(duration) {
37
37
  const times = [0, duration / 2, duration], values = [true, false, true];
38
38
  const trackName = ".visible";
39
39
  const track = new BooleanKeyframeTrack(trackName, times, values);
40
40
  return new AnimationClip(null, duration, [track]);
41
- }
42
- static CreateMaterialColorAnimation(duration, colors) {
41
+ },
42
+ CreateMaterialColorAnimation(duration, colors) {
43
43
  const times = [], values = [], timeStep = duration / colors.length;
44
44
  for (let i = 0; i < colors.length; i++) {
45
45
  times.push(i * timeStep);
@@ -50,7 +50,7 @@ class AnimationClipCreator {
50
50
  const track = new ColorKeyframeTrack(trackName, times, values);
51
51
  return new AnimationClip(null, duration, [track]);
52
52
  }
53
- }
53
+ };
54
54
  export {
55
55
  AnimationClipCreator
56
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nclass AnimationClipCreator {\n static CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n }\n\n static CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n\n static CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n }\n}\n\nexport { AnimationClipCreator }\n"],"names":[],"mappings":";AASA,MAAM,qBAAqB;AAAA,EACzB,OAAO,wBAAwB,QAAQ,OAAO,KAAK;AACjD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,yBAAyB,QAAQ,OAAO,KAAK;AAClD,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,OAAO,qBAAqB,UAAU,YAAY;AAChD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,yBAAyB,UAAU,YAAY;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,0BAA0B,UAAU;AACzC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,OAAO,6BAA6B,UAAU,QAAQ;AACpD,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;"}
1
+ {"version":3,"file":"AnimationClipCreator.js","sources":["../../src/animation/AnimationClipCreator.js"],"sourcesContent":["import {\n AnimationClip,\n BooleanKeyframeTrack,\n ColorKeyframeTrack,\n NumberKeyframeTrack,\n Vector3,\n VectorKeyframeTrack,\n} from 'three'\n\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 360]\n\n const trackName = '.rotation[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateScaleAxisAnimation(period, axis = 'x') {\n const times = [0, period],\n values = [0, 1]\n\n const trackName = '.scale[' + axis + ']'\n\n const track = new NumberKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, period, [track])\n },\n\n CreateShakeAnimation(duration, shakeScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n tmp\n .set(Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0, Math.random() * 2.0 - 1.0)\n .multiply(shakeScale)\n .toArray(values, values.length)\n }\n\n const trackName = '.position'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [],\n values = [],\n tmp = new Vector3()\n\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10)\n\n const scaleFactor = Math.random() * pulseScale\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length)\n }\n\n const trackName = '.scale'\n\n const track = new VectorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration],\n values = [true, false, true]\n\n const trackName = '.visible'\n\n const track = new BooleanKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n\n CreateMaterialColorAnimation(duration, colors) {\n const times = [],\n values = [],\n timeStep = duration / colors.length\n\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep)\n\n const color = colors[i]\n values.push(color.r, color.g, color.b)\n }\n\n const trackName = '.material.color'\n\n const track = new ColorKeyframeTrack(trackName, times, values)\n\n return new AnimationClip(null, duration, [track])\n },\n}\n\nexport { AnimationClipCreator }\n"],"names":[],"mappings":";AASK,MAAC,uBAAuB;AAAA,EAC3B,wBAAwB,QAAQ,OAAO,KAAK;AAC1C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,GAAG;AAElB,UAAM,YAAY,eAAe,OAAO;AAExC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,yBAAyB,QAAQ,OAAO,KAAK;AAC3C,UAAM,QAAQ,CAAC,GAAG,MAAM,GACtB,SAAS,CAAC,GAAG,CAAC;AAEhB,UAAM,YAAY,YAAY,OAAO;AAErC,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,QAAQ,CAAC,KAAK,CAAC;AAAA,EAC/C;AAAA,EAED,qBAAqB,UAAU,YAAY;AACzC,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,UACG,IAAI,KAAK,OAAM,IAAK,IAAM,GAAK,KAAK,OAAQ,IAAG,IAAM,GAAK,KAAK,OAAM,IAAK,IAAM,CAAG,EACnF,SAAS,UAAU,EACnB,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACjC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,yBAAyB,UAAU,YAAY;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,MAAM,IAAI,QAAS;AAErB,aAAS,IAAI,GAAG,IAAI,WAAW,IAAI,KAAK;AACtC,YAAM,KAAK,IAAI,EAAE;AAEjB,YAAM,cAAc,KAAK,OAAM,IAAK;AACpC,UAAI,IAAI,aAAa,aAAa,WAAW,EAAE,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7E;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,oBAAoB,WAAW,OAAO,MAAM;AAE9D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,0BAA0B,UAAU;AAClC,UAAM,QAAQ,CAAC,GAAG,WAAW,GAAG,QAAQ,GACtC,SAAS,CAAC,MAAM,OAAO,IAAI;AAE7B,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,qBAAqB,WAAW,OAAO,MAAM;AAE/D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AAAA,EAED,6BAA6B,UAAU,QAAQ;AAC7C,UAAM,QAAQ,CAAE,GACd,SAAS,CAAE,GACX,WAAW,WAAW,OAAO;AAE/B,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,IAAI,QAAQ;AAEvB,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAAA,IACtC;AAED,UAAM,YAAY;AAElB,UAAM,QAAQ,IAAI,mBAAmB,WAAW,OAAO,MAAM;AAE7D,WAAO,IAAI,cAAc,MAAM,UAAU,CAAC,KAAK,CAAC;AAAA,EACjD;AACH;"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
- const _q = new THREE.Quaternion();
5
- const _targetPos = new THREE.Vector3();
6
- const _targetVec = new THREE.Vector3();
7
- const _effectorPos = new THREE.Vector3();
8
- const _effectorVec = new THREE.Vector3();
9
- const _linkPos = new THREE.Vector3();
10
- const _invLinkQ = new THREE.Quaternion();
11
- const _linkScale = new THREE.Vector3();
12
- const _axis = new THREE.Vector3();
13
- const _vector = new THREE.Vector3();
14
- const _matrix = new THREE.Matrix4();
4
+ const _q = /* @__PURE__ */ new THREE.Quaternion();
5
+ const _targetPos = /* @__PURE__ */ new THREE.Vector3();
6
+ const _targetVec = /* @__PURE__ */ new THREE.Vector3();
7
+ const _effectorPos = /* @__PURE__ */ new THREE.Vector3();
8
+ const _effectorVec = /* @__PURE__ */ new THREE.Vector3();
9
+ const _linkPos = /* @__PURE__ */ new THREE.Vector3();
10
+ const _invLinkQ = /* @__PURE__ */ new THREE.Quaternion();
11
+ const _linkScale = /* @__PURE__ */ new THREE.Vector3();
12
+ const _axis = /* @__PURE__ */ new THREE.Vector3();
13
+ const _vector = /* @__PURE__ */ new THREE.Vector3();
14
+ const _matrix = /* @__PURE__ */ new THREE.Matrix4();
15
15
  class CCDIKSolver {
16
16
  /**
17
17
  * @param {THREE.SkinnedMesh} mesh
@@ -1 +1 @@
1
- {"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
1
+ {"version":3,"file":"CCDIKSolver.cjs","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":["Quaternion","Vector3","Matrix4","Object3D","SphereGeometry","MeshBasicMaterial","Color","LineBasicMaterial","BufferGeometry","BufferAttribute","Mesh","Line"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- import { Quaternion, Vector3, Matrix4, Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Mesh, Line, BufferGeometry, BufferAttribute } from "three";
2
- const _q = new Quaternion();
3
- const _targetPos = new Vector3();
4
- const _targetVec = new Vector3();
5
- const _effectorPos = new Vector3();
6
- const _effectorVec = new Vector3();
7
- const _linkPos = new Vector3();
8
- const _invLinkQ = new Quaternion();
9
- const _linkScale = new Vector3();
10
- const _axis = new Vector3();
11
- const _vector = new Vector3();
12
- const _matrix = new Matrix4();
1
+ import { Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Quaternion, Vector3, Matrix4, Mesh, Line, BufferGeometry, BufferAttribute } from "three";
2
+ const _q = /* @__PURE__ */ new Quaternion();
3
+ const _targetPos = /* @__PURE__ */ new Vector3();
4
+ const _targetVec = /* @__PURE__ */ new Vector3();
5
+ const _effectorPos = /* @__PURE__ */ new Vector3();
6
+ const _effectorVec = /* @__PURE__ */ new Vector3();
7
+ const _linkPos = /* @__PURE__ */ new Vector3();
8
+ const _invLinkQ = /* @__PURE__ */ new Quaternion();
9
+ const _linkScale = /* @__PURE__ */ new Vector3();
10
+ const _axis = /* @__PURE__ */ new Vector3();
11
+ const _vector = /* @__PURE__ */ new Vector3();
12
+ const _matrix = /* @__PURE__ */ new Matrix4();
13
13
  class CCDIKSolver {
14
14
  /**
15
15
  * @param {THREE.SkinnedMesh} mesh
@@ -1 +1 @@
1
- {"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = new Quaternion()\nconst _targetPos = new Vector3()\nconst _targetVec = new Vector3()\nconst _effectorPos = new Vector3()\nconst _effectorVec = new Vector3()\nconst _linkPos = new Vector3()\nconst _invLinkQ = new Quaternion()\nconst _linkScale = new Vector3()\nconst _axis = new Vector3()\nconst _vector = new Vector3()\nconst _matrix = new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CCDIKSolver.js","sources":["../../src/animation/CCDIKSolver.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n Color,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Quaternion,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _q = /* @__PURE__ */ new Quaternion()\nconst _targetPos = /* @__PURE__ */ new Vector3()\nconst _targetVec = /* @__PURE__ */ new Vector3()\nconst _effectorPos = /* @__PURE__ */ new Vector3()\nconst _effectorVec = /* @__PURE__ */ new Vector3()\nconst _linkPos = /* @__PURE__ */ new Vector3()\nconst _invLinkQ = /* @__PURE__ */ new Quaternion()\nconst _linkScale = /* @__PURE__ */ new Vector3()\nconst _axis = /* @__PURE__ */ new Vector3()\nconst _vector = /* @__PURE__ */ new Vector3()\nconst _matrix = /* @__PURE__ */ new Matrix4()\n\n/**\n * CCD Algorithm\n * - https://sites.google.com/site/auraliusproject/ccd-algorithm\n *\n * // ik parameter example\n * //\n * // target, effector, index in links are bone index in skeleton.bones.\n * // the bones relation should be\n * // <-- parent child -->\n * // links[ n ], links[ n - 1 ], ..., links[ 0 ], effector\n * iks = [ {\n *\ttarget: 1,\n *\teffector: 2,\n *\tlinks: [ { index: 5, limitation: new Vector3( 1, 0, 0 ) }, { index: 4, enabled: false }, { index : 3 } ],\n *\titeration: 10,\n *\tminAngle: 0.0,\n *\tmaxAngle: 1.0,\n * } ];\n */\n\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh\n this.iks = iks\n\n this._valid()\n }\n\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks\n\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i])\n }\n\n return this\n }\n\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones\n\n // for reference overhead reduction in loop\n const math = Math\n\n const effector = bones[ik.effector]\n const target = bones[ik.target]\n\n // don't use getWorldPosition() here for the performance\n // because it calls updateMatrixWorld( true ) inside.\n _targetPos.setFromMatrixPosition(target.matrixWorld)\n\n const links = ik.links\n const iteration = ik.iteration !== undefined ? ik.iteration : 1\n\n for (let i = 0; i < iteration; i++) {\n let rotated = false\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index]\n\n // skip this link and following links.\n // this skip is used for MMD performance optimization.\n if (links[j].enabled === false) break\n\n const limitation = links[j].limitation\n const rotationMin = links[j].rotationMin\n const rotationMax = links[j].rotationMax\n\n // don't use getWorldPosition/Quaternion() here for the performance\n // because they call updateMatrixWorld( true ) inside.\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale)\n _invLinkQ.invert()\n _effectorPos.setFromMatrixPosition(effector.matrixWorld)\n\n // work in link world\n _effectorVec.subVectors(_effectorPos, _linkPos)\n _effectorVec.applyQuaternion(_invLinkQ)\n _effectorVec.normalize()\n\n _targetVec.subVectors(_targetPos, _linkPos)\n _targetVec.applyQuaternion(_invLinkQ)\n _targetVec.normalize()\n\n let angle = _targetVec.dot(_effectorVec)\n\n if (angle > 1.0) {\n angle = 1.0\n } else if (angle < -1.0) {\n angle = -1.0\n }\n\n angle = math.acos(angle)\n\n // skip if changing angle is too small to prevent vibration of bone\n if (angle < 1e-5) continue\n\n if (ik.minAngle !== undefined && angle < ik.minAngle) {\n angle = ik.minAngle\n }\n\n if (ik.maxAngle !== undefined && angle > ik.maxAngle) {\n angle = ik.maxAngle\n }\n\n _axis.crossVectors(_effectorVec, _targetVec)\n _axis.normalize()\n\n _q.setFromAxisAngle(_axis, angle)\n link.quaternion.multiply(_q)\n\n // TODO: re-consider the limitation specification\n if (limitation !== undefined) {\n let c = link.quaternion.w\n\n if (c > 1.0) c = 1.0\n\n const c2 = math.sqrt(1 - c * c)\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c)\n }\n\n if (rotationMin !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin))\n }\n\n if (rotationMax !== undefined) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax))\n }\n\n link.updateMatrixWorld(true)\n\n rotated = true\n }\n\n if (!rotated) break\n }\n\n return this\n }\n\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks)\n }\n\n // private methods\n\n _valid() {\n const iks = this.iks\n const bones = this.mesh.skeleton.bones\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n const effector = bones[ik.effector]\n const links = ik.links\n let link0, link1\n\n link0 = effector\n\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index]\n\n if (link0.parent !== link1) {\n console.warn('THREE.CCDIKSolver: bone ' + link0.name + ' is not the child of bone ' + link1.name)\n }\n\n link0 = link1\n }\n }\n }\n}\n\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv)\n}\n\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv)\n\n array[index * 3 + 0] = v.x\n array[index * 3 + 1] = v.y\n array[index * 3 + 2] = v.z\n}\n\n/**\n * Visualize IK bones\n *\n * @param {SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super()\n\n this.root = mesh\n this.iks = iks\n\n this.matrix.copy(mesh.matrixWorld)\n this.matrixAutoUpdate = false\n\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8)\n\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(0xff8888),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x88ff88),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(0x8888ff),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(0xff0000),\n depthTest: false,\n depthWrite: false,\n transparent: true,\n })\n\n this._init()\n }\n\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root\n\n if (this.visible) {\n let offset = 0\n\n const iks = this.iks\n const bones = mesh.skeleton.bones\n\n _matrix.copy(mesh.matrixWorld).invert()\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n const targetBone = bones[ik.target]\n const effectorBone = bones[ik.effector]\n\n const targetMesh = this.children[offset++]\n const effectorMesh = this.children[offset++]\n\n targetMesh.position.copy(getPosition(targetBone, _matrix))\n effectorMesh.position.copy(getPosition(effectorBone, _matrix))\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n\n const linkMesh = this.children[offset++]\n\n linkMesh.position.copy(getPosition(linkBone, _matrix))\n }\n\n const line = this.children[offset++]\n const array = line.geometry.attributes.position.array\n\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix)\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix)\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j]\n const linkBone = bones[link.index]\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix)\n }\n\n line.geometry.attributes.position.needsUpdate = true\n }\n }\n\n this.matrix.copy(mesh.matrixWorld)\n\n super.updateMatrixWorld(force)\n }\n\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose()\n\n this.targetSphereMaterial.dispose()\n this.effectorSphereMaterial.dispose()\n this.linkSphereMaterial.dispose()\n this.lineMaterial.dispose()\n\n const children = this.children\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n\n if (child.isLine) child.geometry.dispose()\n }\n }\n\n // private method\n\n _init() {\n const scope = this\n const iks = this.iks\n\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry()\n const vertices = new Float32Array((2 + ik.links.length) * 3)\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial)\n }\n\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial)\n }\n\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial)\n }\n\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial)\n }\n\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i]\n\n this.add(createTargetMesh())\n this.add(createEffectorMesh())\n\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh())\n }\n\n this.add(createLine(ik))\n }\n }\n}\n\nexport { CCDIKSolver, CCDIKHelper }\n"],"names":[],"mappings":"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"}
@@ -638,7 +638,7 @@ class AudioManager {
638
638
  return this.audio.isPlaying && this.currentTime >= this.duration;
639
639
  }
640
640
  }
641
- const _q = new THREE.Quaternion();
641
+ const _q = /* @__PURE__ */ new THREE.Quaternion();
642
642
  class GrantSolver {
643
643
  constructor(mesh, grants = []) {
644
644
  this.mesh = mesh;