@needle-tools/three 0.145.2 → 0.146.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +3559 -6924
  3. package/build/three.js +3559 -6924
  4. package/build/three.min.js +1 -2
  5. package/build/three.module.js +732 -339
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +49 -66
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +85 -95
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +84 -169
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +143 -261
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +110 -25
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +25 -12
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +22 -33
  60. package/examples/js/interactive/InteractiveGroup.js +6 -12
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +38 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +201 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +286 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +354 -405
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/MaterialXLoader.js +392 -0
  98. package/examples/js/loaders/NRRDLoader.js +44 -84
  99. package/examples/js/loaders/OBJLoader.js +50 -65
  100. package/examples/js/loaders/PCDLoader.js +34 -29
  101. package/examples/js/loaders/PDBLoader.js +17 -13
  102. package/examples/js/loaders/PLYLoader.js +9 -39
  103. package/examples/js/loaders/PRWMLoader.js +11 -22
  104. package/examples/js/loaders/PVRLoader.js +7 -16
  105. package/examples/js/loaders/RGBELoader.js +36 -61
  106. package/examples/js/loaders/RGBMLoader.js +26 -87
  107. package/examples/js/loaders/STLLoader.js +20 -27
  108. package/examples/js/loaders/SVGLoader.js +361 -233
  109. package/examples/js/loaders/TDSLoader.js +81 -118
  110. package/examples/js/loaders/TGALoader.js +39 -41
  111. package/examples/js/loaders/TIFFLoader.js +0 -1
  112. package/examples/js/loaders/TTFLoader.js +0 -8
  113. package/examples/js/loaders/TiltLoader.js +14 -15
  114. package/examples/js/loaders/VOXLoader.js +8 -16
  115. package/examples/js/loaders/VRMLLoader.js +243 -340
  116. package/examples/js/loaders/VTKLoader.js +101 -118
  117. package/examples/js/loaders/XYZLoader.js +2 -4
  118. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  119. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  120. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  121. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  122. package/examples/js/math/Capsule.js +0 -17
  123. package/examples/js/math/ColorConverter.js +3 -3
  124. package/examples/js/math/ConvexHull.js +183 -139
  125. package/examples/js/math/ImprovedNoise.js +1 -1
  126. package/examples/js/math/Lut.js +8 -15
  127. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  128. package/examples/js/math/OBB.js +90 -49
  129. package/examples/js/math/Octree.js +2 -57
  130. package/examples/js/math/SimplexNoise.js +74 -88
  131. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  132. package/examples/js/misc/GPUComputationRenderer.js +14 -18
  133. package/examples/js/misc/Gyroscope.js +5 -9
  134. package/examples/js/misc/MD2Character.js +14 -23
  135. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  136. package/examples/js/misc/MorphAnimMesh.js +0 -6
  137. package/examples/js/misc/MorphBlendMesh.js +3 -30
  138. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  139. package/examples/js/misc/RollerCoaster.js +17 -24
  140. package/examples/js/misc/TubePainter.js +18 -12
  141. package/examples/js/misc/Volume.js +16 -45
  142. package/examples/js/misc/VolumeSlice.js +14 -24
  143. package/examples/js/modifiers/CurveModifier.js +19 -21
  144. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  145. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  146. package/examples/js/modifiers/TessellateModifier.js +2 -9
  147. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  148. package/examples/js/objects/Lensflare.js +47 -38
  149. package/examples/js/objects/LightningStorm.js +10 -13
  150. package/examples/js/objects/MarchingCubes.js +80 -59
  151. package/examples/js/objects/Reflector.js +22 -20
  152. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  153. package/examples/js/objects/Refractor.js +52 -30
  154. package/examples/js/objects/ShadowMesh.js +1 -2
  155. package/examples/js/objects/Sky.js +2 -7
  156. package/examples/js/objects/Water.js +23 -18
  157. package/examples/js/objects/Water2.js +20 -19
  158. package/examples/js/physics/AmmoPhysics.js +23 -20
  159. package/examples/js/physics/OimoPhysics.js +19 -17
  160. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  161. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  162. package/examples/js/postprocessing/BloomPass.js +38 -17
  163. package/examples/js/postprocessing/BokehPass.js +29 -12
  164. package/examples/js/postprocessing/ClearPass.js +1 -6
  165. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  166. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  167. package/examples/js/postprocessing/EffectComposer.js +25 -32
  168. package/examples/js/postprocessing/FilmPass.js +7 -5
  169. package/examples/js/postprocessing/GlitchPass.js +10 -11
  170. package/examples/js/postprocessing/HalftonePass.js +9 -9
  171. package/examples/js/postprocessing/LUTPass.js +2 -15
  172. package/examples/js/postprocessing/MaskPass.js +20 -17
  173. package/examples/js/postprocessing/OutlinePass.js +45 -36
  174. package/examples/js/postprocessing/Pass.js +11 -14
  175. package/examples/js/postprocessing/RenderPass.js +3 -7
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -6
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +234 -168
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  254. package/examples/jsm/capabilities/WebGPU.js +3 -1
  255. package/examples/jsm/controls/OrbitControls.js +44 -4
  256. package/examples/jsm/exporters/GLTFExporter.js +17 -131
  257. package/examples/jsm/exporters/USDZExporter.js +94 -28
  258. package/examples/jsm/interactive/HTMLMesh.js +2 -0
  259. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  260. package/examples/jsm/loaders/3DMLoader.js +1 -2
  261. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  262. package/examples/jsm/loaders/FBXLoader.js +16 -2
  263. package/examples/jsm/loaders/GLTFLoader.js +204 -377
  264. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  265. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  266. package/examples/jsm/loaders/LottieLoader.js +4 -2
  267. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  268. package/examples/jsm/loaders/PCDLoader.js +1 -1
  269. package/examples/jsm/loaders/PLYLoader.js +68 -16
  270. package/examples/jsm/loaders/SVGLoader.js +227 -14
  271. package/examples/jsm/loaders/USDZLoader.js +31 -16
  272. package/examples/jsm/nodes/Nodes.js +14 -2
  273. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  274. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  275. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  276. package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
  277. package/examples/jsm/nodes/core/Node.js +1 -1
  278. package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
  279. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  280. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  281. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  282. package/examples/jsm/nodes/core/constants.js +13 -13
  283. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  284. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  285. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  286. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  287. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  288. package/examples/jsm/nodes/materials/Materials.js +9 -7
  289. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  290. package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
  291. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  292. package/examples/jsm/nodes/math/MathNode.js +5 -0
  293. package/examples/jsm/nodes/math/OperatorNode.js +6 -1
  294. package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
  295. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
  296. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
  297. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  298. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  299. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  300. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  301. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  302. package/examples/jsm/nodes/utils/TimerNode.js +1 -1
  303. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  304. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  305. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  306. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  307. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  308. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  309. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  310. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  311. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  312. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  313. package/examples/jsm/postprocessing/OutlinePass.js +10 -0
  314. package/examples/jsm/postprocessing/Pass.js +2 -0
  315. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  316. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  317. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  318. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  319. package/examples/jsm/postprocessing/SavePass.js +17 -1
  320. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  321. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  322. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  323. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  324. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +39 -16
  325. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  326. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  327. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  328. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  329. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
  330. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  331. package/examples/jsm/shaders/VelocityShader.js +128 -0
  332. package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
  333. package/examples/jsm/utils/SceneUtils.js +129 -4
  334. package/examples/jsm/utils/TextureUtils.js +85 -0
  335. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  336. package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
  337. package/package.json +11 -12
  338. package/src/Three.js +1 -0
  339. package/src/audio/AudioContext.js +5 -5
  340. package/src/cameras/CubeCamera.js +14 -14
  341. package/src/constants.js +1 -1
  342. package/src/core/InstancedBufferGeometry.js +1 -7
  343. package/src/extras/Earcut.js +67 -67
  344. package/src/helpers/DirectionalLightHelper.js +5 -1
  345. package/src/helpers/HemisphereLightHelper.js +4 -1
  346. package/src/helpers/PointLightHelper.js +2 -1
  347. package/src/helpers/SpotLightHelper.js +4 -2
  348. package/src/lights/PointLight.js +2 -2
  349. package/src/lights/SpotLight.js +2 -2
  350. package/src/loaders/FileLoader.js +4 -1
  351. package/src/loaders/ObjectLoader.js +5 -1
  352. package/src/materials/Material.js +1 -1
  353. package/src/math/Color.js +5 -5
  354. package/src/math/Matrix3.js +53 -18
  355. package/src/math/Ray.js +2 -5
  356. package/src/math/Sphere.js +19 -26
  357. package/src/objects/InstancedMesh.js +7 -0
  358. package/src/objects/LOD.js +25 -6
  359. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  360. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  361. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  362. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  363. package/src/renderers/WebGLRenderTarget.js +1 -1
  364. package/src/renderers/WebGLRenderer.js +36 -62
  365. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  367. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  369. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  370. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  371. package/src/renderers/shaders/ShaderChunk.js +3 -0
  372. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  373. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  374. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  375. package/src/renderers/shaders/ShaderLib.js +20 -6
  376. package/src/renderers/shaders/UniformsLib.js +1 -1
  377. package/src/renderers/shaders/UniformsUtils.js +15 -0
  378. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  379. package/src/renderers/webgl/WebGLBackground.js +15 -7
  380. package/src/renderers/webgl/WebGLCubeUVMaps.js +1 -1
  381. package/src/renderers/webgl/WebGLLights.js +0 -4
  382. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  383. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  384. package/src/renderers/webgl/WebGLState.js +31 -1
  385. package/src/renderers/webgl/WebGLTextures.js +71 -18
  386. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  387. package/src/renderers/webgl/WebGLUtils.js +1 -1
  388. package/src/renderers/webxr/WebXRController.js +46 -13
  389. package/src/renderers/webxr/WebXRManager.js +85 -3
  390. package/src/scenes/Scene.js +8 -0
  391. package/src/textures/CompressedArrayTexture.js +18 -0
  392. package/examples/js/libs/lottie_canvas.js +0 -12751
  393. package/examples/js/shaders/PixelShader.js +0 -51
  394. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -5,7 +5,6 @@
5
5
  *
6
6
  * @param {Object} parameters
7
7
  */
8
-
9
8
  class PackedPhongMaterial extends THREE.MeshPhongMaterial {
10
9
 
11
10
  constructor( parameters ) {
@@ -91,10 +90,13 @@
91
90
  #if USE_PACKED_POSITION == 0
92
91
  transformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;
93
92
  #endif
94
- #endif`, THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.displacementmap_vertex, THREE.ShaderChunk.project_vertex, THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.clipping_planes_vertex, 'vViewPosition = - mvPosition.xyz;', THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.shadowmap_vertex, THREE.ShaderChunk.fog_vertex, '}' ].join( '\n' ); // Use the original THREE.MeshPhongMaterial's fragmentShader.
93
+ #endif`, THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.displacementmap_vertex, THREE.ShaderChunk.project_vertex, THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.clipping_planes_vertex, 'vViewPosition = - mvPosition.xyz;', THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.shadowmap_vertex, THREE.ShaderChunk.fog_vertex, '}' ].join( '\n' );
95
94
 
96
- this.fragmentShader = [ '#define PHONG', 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform vec3 specular;', 'uniform float shininess;', 'uniform float opacity;', THREE.ShaderChunk.common, THREE.ShaderChunk.packing, THREE.ShaderChunk.dithering_pars_fragment, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.uv_pars_fragment, THREE.ShaderChunk.uv2_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.aomap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.emissivemap_pars_fragment, THREE.ShaderChunk.envmap_common_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.bsdfs, THREE.ShaderChunk.lights_pars_begin, THREE.ShaderChunk.normal_pars_fragment, THREE.ShaderChunk.lights_phong_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.bumpmap_pars_fragment, THREE.ShaderChunk.normalmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, THREE.ShaderChunk.clipping_planes_pars_fragment, 'void main() {', THREE.ShaderChunk.clipping_planes_fragment, 'vec4 diffuseColor = vec4( diffuse, opacity );', 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );', 'vec3 totalEmissiveRadiance = emissive;', THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, THREE.ShaderChunk.normal_fragment_begin, THREE.ShaderChunk.normal_fragment_maps, THREE.ShaderChunk.emissivemap_fragment, // accumulation
97
- THREE.ShaderChunk.lights_phong_fragment, THREE.ShaderChunk.lights_fragment_begin, THREE.ShaderChunk.lights_fragment_maps, THREE.ShaderChunk.lights_fragment_end, // modulation
95
+ // Use the original THREE.MeshPhongMaterial's fragmentShader.
96
+ this.fragmentShader = [ '#define PHONG', 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform vec3 specular;', 'uniform float shininess;', 'uniform float opacity;', THREE.ShaderChunk.common, THREE.ShaderChunk.packing, THREE.ShaderChunk.dithering_pars_fragment, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.uv_pars_fragment, THREE.ShaderChunk.uv2_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.aomap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.emissivemap_pars_fragment, THREE.ShaderChunk.envmap_common_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.bsdfs, THREE.ShaderChunk.lights_pars_begin, THREE.ShaderChunk.normal_pars_fragment, THREE.ShaderChunk.lights_phong_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.bumpmap_pars_fragment, THREE.ShaderChunk.normalmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, THREE.ShaderChunk.clipping_planes_pars_fragment, 'void main() {', THREE.ShaderChunk.clipping_planes_fragment, 'vec4 diffuseColor = vec4( diffuse, opacity );', 'ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );', 'vec3 totalEmissiveRadiance = emissive;', THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, THREE.ShaderChunk.normal_fragment_begin, THREE.ShaderChunk.normal_fragment_maps, THREE.ShaderChunk.emissivemap_fragment,
97
+ // accumulation
98
+ THREE.ShaderChunk.lights_phong_fragment, THREE.ShaderChunk.lights_fragment_begin, THREE.ShaderChunk.lights_fragment_maps, THREE.ShaderChunk.lights_fragment_end,
99
+ // modulation
98
100
  THREE.ShaderChunk.aomap_fragment, 'vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;', THREE.ShaderChunk.envmap_fragment, 'gl_FragColor = vec4( outgoingLight, diffuseColor.a );', THREE.ShaderChunk.tonemapping_fragment, THREE.ShaderChunk.encodings_fragment, THREE.ShaderChunk.fog_fragment, THREE.ShaderChunk.premultiplied_alpha_fragment, THREE.ShaderChunk.dithering_fragment, '}' ].join( '\n' );
99
101
  this.setValues( parameters );
100
102
 
@@ -1,12 +1,13 @@
1
1
  ( function () {
2
2
 
3
+ const _color = /*@__PURE__*/new THREE.Color();
4
+ const _matrix = /*@__PURE__*/new THREE.Matrix4();
3
5
  function createMeshesFromInstancedMesh( instancedMesh ) {
4
6
 
5
7
  const group = new THREE.Group();
6
8
  const count = instancedMesh.count;
7
9
  const geometry = instancedMesh.geometry;
8
10
  const material = instancedMesh.material;
9
-
10
11
  for ( let i = 0; i < count; i ++ ) {
11
12
 
12
13
  const mesh = new THREE.Mesh( geometry, material );
@@ -33,12 +34,16 @@
33
34
  }
34
35
 
35
36
  const object = new THREE.Group();
36
- object.copy( mesh ); // merge groups (which automatically sorts them)
37
+ object.copy( mesh );
38
+
39
+ // merge groups (which automatically sorts them)
37
40
 
38
41
  const geometry = THREE.mergeGroups( mesh.geometry );
39
42
  const index = geometry.index;
40
43
  const groups = geometry.groups;
41
- const attributeNames = Object.keys( geometry.attributes ); // create a mesh for each group by extracting the buffer data into a new geometry
44
+ const attributeNames = Object.keys( geometry.attributes );
45
+
46
+ // create a mesh for each group by extracting the buffer data into a new geometry
42
47
 
43
48
  for ( let i = 0; i < groups.length; i ++ ) {
44
49
 
@@ -46,7 +51,9 @@
46
51
  const start = group.start;
47
52
  const end = start + group.count;
48
53
  const newGeometry = new THREE.BufferGeometry();
49
- const newMaterial = mesh.material[ group.materialIndex ]; // process all buffer attributes
54
+ const newMaterial = mesh.material[ group.materialIndex ];
55
+
56
+ // process all buffer attributes
50
57
 
51
58
  for ( let j = 0; j < attributeNames.length; j ++ ) {
52
59
 
@@ -57,7 +64,6 @@
57
64
  const type = attribute.array.constructor;
58
65
  const newArray = new type( newLength );
59
66
  const newAttribute = new THREE.BufferAttribute( newArray, itemSize );
60
-
61
67
  for ( let k = start, n = 0; k < end; k ++, n ++ ) {
62
68
 
63
69
  const ind = index.getX( k );
@@ -84,7 +90,6 @@
84
90
  function createMultiMaterialObject( geometry, materials ) {
85
91
 
86
92
  const group = new THREE.Group();
87
-
88
93
  for ( let i = 0, l = materials.length; i < l; i ++ ) {
89
94
 
90
95
  group.add( new THREE.Mesh( geometry, materials[ i ] ) );
@@ -95,9 +100,115 @@
95
100
 
96
101
  }
97
102
 
103
+ function reduceVertices( object, func, initialValue ) {
104
+
105
+ let value = initialValue;
106
+ const vertex = new THREE.Vector3();
107
+ object.updateWorldMatrix( true, true );
108
+ object.traverseVisible( child => {
109
+
110
+ const {
111
+ geometry
112
+ } = child;
113
+ if ( geometry !== undefined ) {
114
+
115
+ const {
116
+ position
117
+ } = geometry.attributes;
118
+ if ( position !== undefined ) {
119
+
120
+ for ( let i = 0, l = position.count; i < l; i ++ ) {
121
+
122
+ vertex.fromBufferAttribute( position, i );
123
+ if ( child.isSkinnedMesh ) {
124
+
125
+ child.boneTransform( i, vertex );
126
+
127
+ } else {
128
+
129
+ vertex.applyMatrix4( child.matrixWorld );
130
+
131
+ }
132
+
133
+ value = func( value, vertex );
134
+
135
+ }
136
+
137
+ }
138
+
139
+ }
140
+
141
+ } );
142
+ return value;
143
+
144
+ }
145
+
146
+ /**
147
+ * @param {InstancedMesh}
148
+ * @param {function(int, int):int}
149
+ */
150
+ function sortInstancedMesh( mesh, compareFn ) {
151
+
152
+ // store copy of instanced attributes for lookups
153
+
154
+ const instanceMatrixRef = THREE.deepCloneAttribute( mesh.instanceMatrix );
155
+ const instanceColorRef = mesh.instanceColor ? THREE.deepCloneAttribute( mesh.instanceColor ) : null;
156
+ const attributeRefs = new Map();
157
+ for ( const name in mesh.geometry.attributes ) {
158
+
159
+ const attribute = mesh.geometry.attributes[ name ];
160
+ if ( attribute.isInstancedBufferAttribute ) {
161
+
162
+ attributeRefs.set( attribute, THREE.deepCloneAttribute( attribute ) );
163
+
164
+ }
165
+
166
+ }
167
+
168
+ // compute sort order
169
+
170
+ const tokens = [];
171
+ for ( let i = 0; i < mesh.count; i ++ ) tokens.push( i );
172
+ tokens.sort( compareFn );
173
+
174
+ // apply sort order
175
+
176
+ for ( let i = 0; i < tokens.length; i ++ ) {
177
+
178
+ const refIndex = tokens[ i ];
179
+ _matrix.fromArray( instanceMatrixRef.array, refIndex * mesh.instanceMatrix.itemSize );
180
+ _matrix.toArray( mesh.instanceMatrix.array, i * mesh.instanceMatrix.itemSize );
181
+ if ( mesh.instanceColor ) {
182
+
183
+ _color.fromArray( instanceColorRef.array, refIndex * mesh.instanceColor.itemSize );
184
+ _color.toArray( mesh.instanceColor.array, i * mesh.instanceColor.itemSize );
185
+
186
+ }
187
+
188
+ for ( const name in mesh.geometry.attributes ) {
189
+
190
+ const attribute = mesh.geometry.attributes[ name ];
191
+ if ( attribute.isInstancedBufferAttribute ) {
192
+
193
+ const attributeRef = attributeRefs.get( attribute );
194
+ attribute.setX( i, attributeRef.getX( refIndex ) );
195
+ if ( attribute.itemSize > 1 ) attribute.setY( i, attributeRef.getY( refIndex ) );
196
+ if ( attribute.itemSize > 2 ) attribute.setZ( i, attributeRef.getZ( refIndex ) );
197
+ if ( attribute.itemSize > 3 ) attribute.setW( i, attributeRef.getW( refIndex ) );
198
+
199
+ }
200
+
201
+ }
202
+
203
+ }
204
+
205
+ }
206
+
98
207
  THREE.SceneUtils = {};
99
208
  THREE.SceneUtils.createMeshesFromInstancedMesh = createMeshesFromInstancedMesh;
100
209
  THREE.SceneUtils.createMeshesFromMultiMaterialMesh = createMeshesFromMultiMaterialMesh;
101
210
  THREE.SceneUtils.createMultiMaterialObject = createMultiMaterialObject;
211
+ THREE.SceneUtils.reduceVertices = reduceVertices;
212
+ THREE.SceneUtils.sortInstancedMesh = sortInstancedMesh;
102
213
 
103
214
  } )();
@@ -34,8 +34,9 @@
34
34
  //- Internals
35
35
  const scope = this;
36
36
  const doRenderLabel = light.name !== undefined && light.name !== '';
37
- let userAutoClearSetting; //Holds the initial position and dimension of the HUD
37
+ let userAutoClearSetting;
38
38
 
39
+ //Holds the initial position and dimension of the HUD
39
40
  const frame = {
40
41
  x: 10,
41
42
  y: 10,
@@ -44,8 +45,9 @@
44
45
  };
45
46
  const camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 10 );
46
47
  camera.position.set( 0, 0, 2 );
47
- const scene = new THREE.Scene(); //HUD for shadow map
48
+ const scene = new THREE.Scene();
48
49
 
50
+ //HUD for shadow map
49
51
  const shader = THREE.UnpackDepthRGBAShader;
50
52
  const uniforms = THREE.UniformsUtils.clone( shader.uniforms );
51
53
  const material = new THREE.ShaderMaterial( {
@@ -55,10 +57,10 @@
55
57
  } );
56
58
  const plane = new THREE.PlaneGeometry( frame.width, frame.height );
57
59
  const mesh = new THREE.Mesh( plane, material );
58
- scene.add( mesh ); //Label for light's name
60
+ scene.add( mesh );
59
61
 
62
+ //Label for light's name
60
63
  let labelCanvas, labelMesh;
61
-
62
64
  if ( doRenderLabel ) {
63
65
 
64
66
  labelCanvas = document.createElement( 'canvas' );
@@ -90,12 +92,13 @@
90
92
 
91
93
  scope.position.set( scope.position.x, scope.position.y );
92
94
 
93
- } //- API
94
- // Set to false to disable displaying this shadow map
95
-
95
+ }
96
96
 
97
- this.enabled = true; // Set the size of the displayed shadow map on the HUD
97
+ //- API
98
+ // Set to false to disable displaying this shadow map
99
+ this.enabled = true;
98
100
 
101
+ // Set the size of the displayed shadow map on the HUD
99
102
  this.size = {
100
103
  width: frame.width,
101
104
  height: frame.height,
@@ -103,13 +106,15 @@
103
106
 
104
107
  this.width = width;
105
108
  this.height = height;
106
- mesh.scale.set( this.width / frame.width, this.height / frame.height, 1 ); //Reset the position as it is off when we scale stuff
109
+ mesh.scale.set( this.width / frame.width, this.height / frame.height, 1 );
107
110
 
111
+ //Reset the position as it is off when we scale stuff
108
112
  resetPosition();
109
113
 
110
114
  }
111
- }; // Set the position of the displayed shadow map on the HUD
115
+ };
112
116
 
117
+ // Set the position of the displayed shadow map on the HUD
113
118
  this.position = {
114
119
  x: frame.x,
115
120
  y: frame.y,
@@ -124,7 +129,6 @@
124
129
 
125
130
  }
126
131
  };
127
-
128
132
  this.render = function ( renderer ) {
129
133
 
130
134
  if ( this.enabled ) {
@@ -137,7 +141,6 @@
137
141
  uniforms.tDiffuse.value = light.shadow.map.texture;
138
142
  userAutoClearSetting = renderer.autoClear;
139
143
  renderer.autoClear = false; // To allow render overlay
140
-
141
144
  renderer.clearDepth();
142
145
  renderer.render( scene, camera );
143
146
  renderer.autoClear = userAutoClearSetting; //Restore user's setting
@@ -166,9 +169,9 @@
166
169
  this.position.set( this.position.x, this.position.y );
167
170
  this.size.set( this.size.width, this.size.height );
168
171
 
169
- }; //Force an update to set position/size
170
-
172
+ };
171
173
 
174
+ //Force an update to set position/size
172
175
  this.update();
173
176
 
174
177
  }
@@ -16,7 +16,9 @@
16
16
  options.names = options.names || {};
17
17
  const sourceBones = source.isObject3D ? source.skeleton.bones : getBones( source ),
18
18
  bones = target.isObject3D ? target.skeleton.bones : getBones( target );
19
- let bindBones, bone, name, boneTo, bonesPosition; // reset bones
19
+ let bindBones, bone, name, boneTo, bonesPosition;
20
+
21
+ // reset bones
20
22
 
21
23
  if ( target.isObject3D ) {
22
24
 
@@ -32,7 +34,6 @@
32
34
  if ( options.preservePosition ) {
33
35
 
34
36
  bonesPosition = [];
35
-
36
37
  for ( let i = 0; i < bones.length; i ++ ) {
37
38
 
38
39
  bonesPosition.push( bones[ i ].position.clone() );
@@ -44,8 +45,11 @@
44
45
  if ( options.preserveMatrix ) {
45
46
 
46
47
  // reset matrix
48
+
47
49
  target.updateMatrixWorld();
48
- target.matrixWorld.identity(); // reset children matrix
50
+ target.matrixWorld.identity();
51
+
52
+ // reset children matrix
49
53
 
50
54
  for ( let i = 0; i < target.children.length; ++ i ) {
51
55
 
@@ -58,12 +62,10 @@
58
62
  if ( options.offsets ) {
59
63
 
60
64
  bindBones = [];
61
-
62
65
  for ( let i = 0; i < bones.length; ++ i ) {
63
66
 
64
67
  bone = bones[ i ];
65
68
  name = options.names[ bone.name ] || bone.name;
66
-
67
69
  if ( options.offsets[ name ] ) {
68
70
 
69
71
  bone.matrix.multiply( options.offsets[ name ] );
@@ -84,11 +86,9 @@
84
86
  name = options.names[ bone.name ] || bone.name;
85
87
  boneTo = getBoneByName( name, sourceBones );
86
88
  globalMatrix.copy( bone.matrixWorld );
87
-
88
89
  if ( boneTo ) {
89
90
 
90
91
  boneTo.updateMatrixWorld();
91
-
92
92
  if ( options.useTargetMatrix ) {
93
93
 
94
94
  relativeMatrix.copy( boneTo.matrixWorld );
@@ -98,14 +98,16 @@
98
98
  relativeMatrix.copy( target.matrixWorld ).invert();
99
99
  relativeMatrix.multiply( boneTo.matrixWorld );
100
100
 
101
- } // ignore scale to extract rotation
101
+ }
102
102
 
103
+ // ignore scale to extract rotation
103
104
 
104
105
  scale.setFromMatrixScale( relativeMatrix );
105
- relativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) ); // apply to global matrix
106
+ relativeMatrix.scale( scale.set( 1 / scale.x, 1 / scale.y, 1 / scale.z ) );
106
107
 
107
- globalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );
108
+ // apply to global matrix
108
109
 
110
+ globalMatrix.makeRotationFromQuaternion( quat.setFromRotationMatrix( relativeMatrix ) );
109
111
  if ( target.isObject3D ) {
110
112
 
111
113
  const boneIndex = bones.indexOf( bone ),
@@ -146,7 +148,6 @@
146
148
 
147
149
  bone = bones[ i ];
148
150
  name = options.names[ bone.name ] || bone.name;
149
-
150
151
  if ( name !== options.hip ) {
151
152
 
152
153
  bone.position.copy( bonesPosition[ i ] );
@@ -160,6 +161,7 @@
160
161
  if ( options.preserveMatrix ) {
161
162
 
162
163
  // restore matrix
164
+
163
165
  target.updateMatrixWorld( true );
164
166
 
165
167
  }
@@ -171,7 +173,6 @@
171
173
  options.useFirstFramePosition = options.useFirstFramePosition !== undefined ? options.useFirstFramePosition : false;
172
174
  options.fps = options.fps !== undefined ? options.fps : 30;
173
175
  options.names = options.names || [];
174
-
175
176
  if ( ! source.isObject3D ) {
176
177
 
177
178
  source = getHelperFromSkeleton( source );
@@ -188,24 +189,20 @@
188
189
  mixer.clipAction( clip ).play();
189
190
  mixer.update( 0 );
190
191
  source.updateMatrixWorld();
191
-
192
192
  for ( let i = 0; i < numFrames; ++ i ) {
193
193
 
194
194
  const time = i * delta;
195
195
  retarget( target, source, options );
196
-
197
196
  for ( let j = 0; j < bones.length; ++ j ) {
198
197
 
199
198
  name = options.names[ bones[ j ].name ] || bones[ j ].name;
200
199
  boneTo = getBoneByName( name, source.skeleton );
201
-
202
200
  if ( boneTo ) {
203
201
 
204
202
  bone = bones[ j ];
205
203
  boneData = boneDatas[ j ] = boneDatas[ j ] || {
206
204
  bone: bone
207
205
  };
208
-
209
206
  if ( options.hip === name ) {
210
207
 
211
208
  if ( ! boneData.pos ) {
@@ -258,7 +255,6 @@
258
255
  for ( let i = 0; i < boneDatas.length; ++ i ) {
259
256
 
260
257
  boneData = boneDatas[ i ];
261
-
262
258
  if ( boneData ) {
263
259
 
264
260
  if ( boneData.pos ) {
@@ -296,7 +292,6 @@
296
292
  sourceDir = new THREE.Vector2();
297
293
  options.hip = options.hip !== undefined ? options.hip : 'hip';
298
294
  options.names = options.names || {};
299
-
300
295
  if ( ! source.isObject3D ) {
301
296
 
302
297
  source = getHelperFromSkeleton( source );
@@ -310,13 +305,11 @@
310
305
  offsets = [];
311
306
  let bone, boneTo, name, i;
312
307
  target.skeleton.pose();
313
-
314
308
  for ( i = 0; i < bones.length; ++ i ) {
315
309
 
316
310
  bone = bones[ i ];
317
311
  name = options.names[ bone.name ] || bone.name;
318
312
  boneTo = getBoneByName( name, sourceBones );
319
-
320
313
  if ( boneTo && name !== options.hip ) {
321
314
 
322
315
  const boneParent = getNearestBone( bone.parent, nameKeys ),
@@ -347,11 +340,9 @@
347
340
  function renameBones( skeleton, names ) {
348
341
 
349
342
  const bones = getBones( skeleton );
350
-
351
343
  for ( let i = 0; i < bones.length; ++ i ) {
352
344
 
353
345
  const bone = bones[ i ];
354
-
355
346
  if ( names[ bone.name ] ) {
356
347
 
357
348
  bone.name = names[ bone.name ];
@@ -402,13 +393,11 @@
402
393
  result = {
403
394
  name: name
404
395
  };
405
-
406
396
  for ( let i = 0; i < tracks.length; ++ i ) {
407
397
 
408
398
  // 1 is track name
409
399
  // 2 is track type
410
400
  const trackData = regexp.exec( tracks[ i ].name );
411
-
412
401
  if ( trackData && name === trackData[ 1 ] ) {
413
402
 
414
403
  result[ trackData[ 2 ] ] = i;
@@ -426,11 +415,9 @@
426
415
  const sourceBones = getBones( skeleton ),
427
416
  targetBones = getBones( targetSkeleton ),
428
417
  bones = [];
429
-
430
418
  search: for ( let i = 0; i < sourceBones.length; i ++ ) {
431
419
 
432
420
  const boneName = sourceBones[ i ].name;
433
-
434
421
  for ( let j = 0; j < targetBones.length; j ++ ) {
435
422
 
436
423
  if ( boneName === targetBones[ j ].name ) {
@@ -482,7 +469,6 @@
482
469
  function parallelTraverse( a, b, callback ) {
483
470
 
484
471
  callback( a, b );
485
-
486
472
  for ( let i = 0; i < a.children.length; i ++ ) {
487
473
 
488
474
  parallelTraverse( a.children[ i ], b.children[ i ], callback );
@@ -11,6 +11,7 @@
11
11
  function UVsDebug( geometry, size = 1024 ) {
12
12
 
13
13
  // handles wrapping of uv.x > 1 only
14
+
14
15
  const abc = 'abc';
15
16
  const a = new THREE.Vector2();
16
17
  const b = new THREE.Vector2();
@@ -18,23 +19,24 @@
18
19
  const face = [];
19
20
  const canvas = document.createElement( 'canvas' );
20
21
  const width = size; // power of 2 required for wrapping
21
-
22
22
  const height = size;
23
23
  canvas.width = width;
24
24
  canvas.height = height;
25
25
  const ctx = canvas.getContext( '2d' );
26
26
  ctx.lineWidth = 1;
27
27
  ctx.strokeStyle = 'rgb( 63, 63, 63 )';
28
- ctx.textAlign = 'center'; // paint background white
28
+ ctx.textAlign = 'center';
29
+
30
+ // paint background white
29
31
 
30
32
  ctx.fillStyle = 'rgb( 255, 255, 255 )';
31
33
  ctx.fillRect( 0, 0, width, height );
32
34
  const index = geometry.index;
33
35
  const uvAttribute = geometry.attributes.uv;
34
-
35
36
  if ( index ) {
36
37
 
37
38
  // indexed geometry
39
+
38
40
  for ( let i = 0, il = index.count; i < il; i += 3 ) {
39
41
 
40
42
  face[ 0 ] = index.getX( i );
@@ -50,6 +52,7 @@
50
52
  } else {
51
53
 
52
54
  // non-indexed geometry
55
+
53
56
  for ( let i = 0, il = uvAttribute.count; i < il; i += 3 ) {
54
57
 
55
58
  face[ 0 ] = i;
@@ -65,19 +68,17 @@
65
68
  }
66
69
 
67
70
  return canvas;
68
-
69
71
  function processFace( face, uvs, index ) {
70
72
 
71
73
  // draw contour of face
74
+
72
75
  ctx.beginPath();
73
76
  a.set( 0, 0 );
74
-
75
77
  for ( let j = 0, jl = uvs.length; j < jl; j ++ ) {
76
78
 
77
79
  const uv = uvs[ j ];
78
80
  a.x += uv.x;
79
81
  a.y += uv.y;
80
-
81
82
  if ( j === 0 ) {
82
83
 
83
84
  ctx.moveTo( uv.x * ( width - 2 ) + 0.5, ( 1 - uv.y ) * ( height - 2 ) + 0.5 );
@@ -91,24 +92,31 @@
91
92
  }
92
93
 
93
94
  ctx.closePath();
94
- ctx.stroke(); // calculate center of face
95
+ ctx.stroke();
96
+
97
+ // calculate center of face
98
+
99
+ a.divideScalar( uvs.length );
95
100
 
96
- a.divideScalar( uvs.length ); // label the face number
101
+ // label the face number
97
102
 
98
103
  ctx.font = '18px Arial';
99
104
  ctx.fillStyle = 'rgb( 63, 63, 63 )';
100
105
  ctx.fillText( index, a.x * width, ( 1 - a.y ) * height );
101
-
102
106
  if ( a.x > 0.95 ) {
103
107
 
104
108
  // wrap x // 0.95 is arbitrary
109
+
105
110
  ctx.fillText( index, a.x % 1 * width, ( 1 - a.y ) * height );
106
111
 
107
- } //
112
+ }
108
113
 
114
+ //
109
115
 
110
116
  ctx.font = '12px Arial';
111
- ctx.fillStyle = 'rgb( 191, 191, 191 )'; // label uv edge orders
117
+ ctx.fillStyle = 'rgb( 191, 191, 191 )';
118
+
119
+ // label uv edge orders
112
120
 
113
121
  for ( let j = 0, jl = uvs.length; j < jl; j ++ ) {
114
122
 
@@ -116,10 +124,10 @@
116
124
  b.addVectors( a, uv ).divideScalar( 2 );
117
125
  const vnum = face[ j ];
118
126
  ctx.fillText( abc[ j ] + vnum, b.x * width, ( 1 - b.y ) * height );
119
-
120
127
  if ( b.x > 0.95 ) {
121
128
 
122
129
  // wrap x
130
+
123
131
  ctx.fillText( abc[ j ] + vnum, b.x % 1 * width, ( 1 - b.y ) * height );
124
132
 
125
133
  }
@@ -3,6 +3,7 @@
3
3
  /**
4
4
  * @author Deepkolos / https://github.com/deepkolos
5
5
  */
6
+
6
7
  class WorkerPool {
7
8
 
8
9
  constructor( pool = 4 ) {
@@ -14,7 +15,6 @@
14
15
  this.workerStatus = 0;
15
16
 
16
17
  }
17
-
18
18
  _initWorker( workerId ) {
19
19
 
20
20
  if ( ! this.workers[ workerId ] ) {
@@ -26,20 +26,16 @@
26
26
  }
27
27
 
28
28
  }
29
-
30
29
  _getIdleWorker() {
31
30
 
32
31
  for ( let i = 0; i < this.pool; i ++ ) if ( ! ( this.workerStatus & 1 << i ) ) return i;
33
-
34
32
  return - 1;
35
33
 
36
34
  }
37
-
38
35
  _onMessage( workerId, msg ) {
39
36
 
40
37
  const resolve = this.workersResolve[ workerId ];
41
38
  resolve && resolve( msg );
42
-
43
39
  if ( this.queue.length ) {
44
40
 
45
41
  const {
@@ -57,29 +53,24 @@
57
53
  }
58
54
 
59
55
  }
60
-
61
56
  setWorkerCreator( workerCreator ) {
62
57
 
63
58
  this.workerCreator = workerCreator;
64
59
 
65
60
  }
66
-
67
61
  setWorkerLimit( pool ) {
68
62
 
69
63
  this.pool = pool;
70
64
 
71
65
  }
72
-
73
66
  postMessage( msg, transfer ) {
74
67
 
75
68
  return new Promise( resolve => {
76
69
 
77
70
  const workerId = this._getIdleWorker();
78
-
79
71
  if ( workerId !== - 1 ) {
80
72
 
81
73
  this._initWorker( workerId );
82
-
83
74
  this.workerStatus |= 1 << workerId;
84
75
  this.workersResolve[ workerId ] = resolve;
85
76
  this.workers[ workerId ].postMessage( msg, transfer );
@@ -97,7 +88,6 @@
97
88
  } );
98
89
 
99
90
  }
100
-
101
91
  dispose() {
102
92
 
103
93
  this.workers.forEach( worker => worker.terminate() );
@@ -217,7 +217,7 @@ class CCDIKSolver {
217
217
  */
218
218
  createHelper() {
219
219
 
220
- return new CCDIKHelper( this.mesh, this.mesh.geometry.userData.MMD.iks );
220
+ return new CCDIKHelper( this.mesh, this.iks );
221
221
 
222
222
  }
223
223