@needle-tools/three 0.145.4 → 0.146.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +32586 -35951
  3. package/build/three.js +32600 -35965
  4. package/build/three.min.js +6 -7
  5. package/build/three.module.js +1547 -1154
  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 +75 -19
  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/WebGLLights.js +0 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  382. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  383. package/src/renderers/webgl/WebGLState.js +31 -1
  384. package/src/renderers/webgl/WebGLTextures.js +71 -18
  385. package/src/renderers/webgl/WebGLUniforms.js +116 -20
  386. package/src/renderers/webgl/WebGLUtils.js +1 -1
  387. package/src/renderers/webxr/WebXRController.js +46 -13
  388. package/src/renderers/webxr/WebXRManager.js +85 -3
  389. package/src/scenes/Scene.js +8 -0
  390. package/src/textures/CompressedArrayTexture.js +18 -0
  391. package/examples/js/libs/lottie_canvas.js +0 -12751
  392. package/examples/js/shaders/PixelShader.js +0 -51
  393. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -42,7 +42,6 @@
42
42
 
43
43
  if ( Math.abs( num ) < 1e-6 ) num = 0;
44
44
  let a = num.toString();
45
-
46
45
  if ( a.indexOf( '.' ) === - 1 ) {
47
46
 
48
47
  a += '.';
@@ -60,7 +59,6 @@
60
59
  function toStringsFromArray( array ) {
61
60
 
62
61
  const a = [];
63
-
64
62
  for ( let i = 0, il = array.length; i < il; i ++ ) {
65
63
 
66
64
  a.push( toStringsFromNumber( array[ i ] ) );
@@ -84,16 +82,15 @@
84
82
  array.push( ( skin.name !== '' ? skin.name.replace( /\s/g, '_' ) : 'skin' ) + '.osm;' );
85
83
  array.push( bones.length + ';' );
86
84
  array.push( '' );
87
-
88
85
  for ( let i = 0, il = bones.length; i < il; i ++ ) {
89
86
 
90
87
  const bone = bones[ i ];
91
88
  const bone2 = bones2[ i ];
89
+
92
90
  /*
93
91
  * use the bone matrix saved before solving IK.
94
92
  * see CCDIKSolver for the detail.
95
93
  */
96
-
97
94
  if ( useOriginalBones === true && bone.userData.ik !== undefined && bone.userData.ik.originalMatrix !== undefined ) {
98
95
 
99
96
  matrix.fromArray( bone.userData.ik.originalMatrix );
@@ -107,8 +104,9 @@
107
104
  position.setFromMatrixPosition( matrix );
108
105
  quaternion.setFromRotationMatrix( matrix );
109
106
  const pArray = position.sub( bone2.position ).toArray();
110
- const qArray = quaternion2.copy( bone2.quaternion ).conjugate().multiply( quaternion ).toArray(); // right to left
107
+ const qArray = quaternion2.copy( bone2.quaternion ).conjugate().multiply( quaternion ).toArray();
111
108
 
109
+ // right to left
112
110
  pArray[ 2 ] = - pArray[ 2 ];
113
111
  qArray[ 0 ] = - qArray[ 0 ];
114
112
  qArray[ 1 ] = - qArray[ 1 ];
@@ -126,21 +124,18 @@
126
124
 
127
125
  }
128
126
 
129
- } // Unicode to Shift_JIS table
130
-
127
+ }
131
128
 
129
+ // Unicode to Shift_JIS table
132
130
  let u2sTable;
133
-
134
131
  function unicodeToShiftjis( str ) {
135
132
 
136
133
  if ( u2sTable === undefined ) {
137
134
 
138
135
  const encoder = new MMDParser.CharsetEncoder(); // eslint-disable-line no-undef
139
-
140
136
  const table = encoder.s2uTable;
141
137
  u2sTable = {};
142
138
  const keys = Object.keys( table );
143
-
144
139
  for ( let i = 0, il = keys.length; i < il; i ++ ) {
145
140
 
146
141
  let key = keys[ i ];
@@ -153,12 +148,10 @@
153
148
  }
154
149
 
155
150
  const array = [];
156
-
157
151
  for ( let i = 0, il = str.length; i < il; i ++ ) {
158
152
 
159
153
  const code = str.charCodeAt( i );
160
154
  const value = u2sTable[ code ];
161
-
162
155
  if ( value === undefined ) {
163
156
 
164
157
  throw new Error( 'cannot convert charcode 0x' + code.toString( 16 ) );
@@ -13,73 +13,83 @@
13
13
  const normal = new THREE.Vector3();
14
14
  const uv = new THREE.Vector2();
15
15
  const face = [];
16
-
17
16
  function parseMesh( mesh ) {
18
17
 
19
18
  let nbVertex = 0;
20
19
  let nbNormals = 0;
21
20
  let nbVertexUvs = 0;
22
21
  const geometry = mesh.geometry;
23
- const normalMatrixWorld = new THREE.Matrix3(); // shortcuts
22
+ const normalMatrixWorld = new THREE.Matrix3();
24
23
 
24
+ // shortcuts
25
25
  const vertices = geometry.getAttribute( 'position' );
26
26
  const normals = geometry.getAttribute( 'normal' );
27
27
  const uvs = geometry.getAttribute( 'uv' );
28
- const indices = geometry.getIndex(); // name of the mesh object
28
+ const indices = geometry.getIndex();
29
29
 
30
- output += 'o ' + mesh.name + '\n'; // name of the mesh material
30
+ // name of the mesh object
31
+ output += 'o ' + mesh.name + '\n';
31
32
 
33
+ // name of the mesh material
32
34
  if ( mesh.material && mesh.material.name ) {
33
35
 
34
36
  output += 'usemtl ' + mesh.material.name + '\n';
35
37
 
36
- } // vertices
38
+ }
37
39
 
40
+ // vertices
38
41
 
39
42
  if ( vertices !== undefined ) {
40
43
 
41
44
  for ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {
42
45
 
43
- vertex.fromBufferAttribute( vertices, i ); // transform the vertex to world space
46
+ vertex.fromBufferAttribute( vertices, i );
44
47
 
45
- vertex.applyMatrix4( mesh.matrixWorld ); // transform the vertex to export format
48
+ // transform the vertex to world space
49
+ vertex.applyMatrix4( mesh.matrixWorld );
46
50
 
51
+ // transform the vertex to export format
47
52
  output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
48
53
 
49
54
  }
50
55
 
51
- } // uvs
56
+ }
52
57
 
58
+ // uvs
53
59
 
54
60
  if ( uvs !== undefined ) {
55
61
 
56
62
  for ( let i = 0, l = uvs.count; i < l; i ++, nbVertexUvs ++ ) {
57
63
 
58
- uv.fromBufferAttribute( uvs, i ); // transform the uv to export format
64
+ uv.fromBufferAttribute( uvs, i );
59
65
 
66
+ // transform the uv to export format
60
67
  output += 'vt ' + uv.x + ' ' + uv.y + '\n';
61
68
 
62
69
  }
63
70
 
64
- } // normals
71
+ }
65
72
 
73
+ // normals
66
74
 
67
75
  if ( normals !== undefined ) {
68
76
 
69
77
  normalMatrixWorld.getNormalMatrix( mesh.matrixWorld );
70
-
71
78
  for ( let i = 0, l = normals.count; i < l; i ++, nbNormals ++ ) {
72
79
 
73
- normal.fromBufferAttribute( normals, i ); // transform the normal to world space
80
+ normal.fromBufferAttribute( normals, i );
74
81
 
75
- normal.applyMatrix3( normalMatrixWorld ).normalize(); // transform the normal to export format
82
+ // transform the normal to world space
83
+ normal.applyMatrix3( normalMatrixWorld ).normalize();
76
84
 
85
+ // transform the normal to export format
77
86
  output += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\n';
78
87
 
79
88
  }
80
89
 
81
- } // faces
90
+ }
82
91
 
92
+ // faces
83
93
 
84
94
  if ( indices !== null ) {
85
95
 
@@ -90,9 +100,9 @@
90
100
  const j = indices.getX( i + m ) + 1;
91
101
  face[ m ] = indexVertex + j + ( normals || uvs ? '/' + ( uvs ? indexVertexUvs + j : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );
92
102
 
93
- } // transform the face to export format
94
-
103
+ }
95
104
 
105
+ // transform the face to export format
96
106
  output += 'f ' + face.join( ' ' ) + '\n';
97
107
 
98
108
  }
@@ -106,16 +116,16 @@
106
116
  const j = i + m + 1;
107
117
  face[ m ] = indexVertex + j + ( normals || uvs ? '/' + ( uvs ? indexVertexUvs + j : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );
108
118
 
109
- } // transform the face to export format
110
-
119
+ }
111
120
 
121
+ // transform the face to export format
112
122
  output += 'f ' + face.join( ' ' ) + '\n';
113
123
 
114
124
  }
115
125
 
116
- } // update index
117
-
126
+ }
118
127
 
128
+ // update index
119
129
  indexVertex += nbVertex;
120
130
  indexVertexUvs += nbVertexUvs;
121
131
  indexNormals += nbNormals;
@@ -126,20 +136,23 @@
126
136
 
127
137
  let nbVertex = 0;
128
138
  const geometry = line.geometry;
129
- const type = line.type; // shortcuts
139
+ const type = line.type;
130
140
 
131
- const vertices = geometry.getAttribute( 'position' ); // name of the line object
141
+ // shortcuts
142
+ const vertices = geometry.getAttribute( 'position' );
132
143
 
144
+ // name of the line object
133
145
  output += 'o ' + line.name + '\n';
134
-
135
146
  if ( vertices !== undefined ) {
136
147
 
137
148
  for ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {
138
149
 
139
- vertex.fromBufferAttribute( vertices, i ); // transform the vertex to world space
150
+ vertex.fromBufferAttribute( vertices, i );
140
151
 
141
- vertex.applyMatrix4( line.matrixWorld ); // transform the vertex to export format
152
+ // transform the vertex to world space
153
+ vertex.applyMatrix4( line.matrixWorld );
142
154
 
155
+ // transform the vertex to export format
143
156
  output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\n';
144
157
 
145
158
  }
@@ -149,7 +162,6 @@
149
162
  if ( type === 'Line' ) {
150
163
 
151
164
  output += 'l ';
152
-
153
165
  for ( let j = 1, l = vertices.count; j <= l; j ++ ) {
154
166
 
155
167
  output += indexVertex + j + ' ';
@@ -168,9 +180,9 @@
168
180
 
169
181
  }
170
182
 
171
- } // update index
172
-
183
+ }
173
184
 
185
+ // update index
174
186
  indexVertex += nbVertex;
175
187
 
176
188
  }
@@ -182,7 +194,6 @@
182
194
  const vertices = geometry.getAttribute( 'position' );
183
195
  const colors = geometry.getAttribute( 'color' );
184
196
  output += 'o ' + points.name + '\n';
185
-
186
197
  if ( vertices !== undefined ) {
187
198
 
188
199
  for ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {
@@ -190,7 +201,6 @@
190
201
  vertex.fromBufferAttribute( vertices, i );
191
202
  vertex.applyMatrix4( points.matrixWorld );
192
203
  output += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z;
193
-
194
204
  if ( colors !== undefined ) {
195
205
 
196
206
  color.fromBufferAttribute( colors, i ).convertLinearToSRGB();
@@ -203,7 +213,6 @@
203
213
  }
204
214
 
205
215
  output += 'p ';
206
-
207
216
  for ( let j = 1, l = vertices.count; j <= l; j ++ ) {
208
217
 
209
218
  output += indexVertex + j + ' ';
@@ -212,9 +221,9 @@
212
221
 
213
222
  output += '\n';
214
223
 
215
- } // update index
216
-
224
+ }
217
225
 
226
+ // update index
218
227
  indexVertex += nbVertex;
219
228
 
220
229
  }
@@ -26,7 +26,6 @@
26
26
 
27
27
  const mesh = child;
28
28
  const geometry = mesh.geometry;
29
-
30
29
  if ( geometry.hasAttribute( 'position' ) === true ) {
31
30
 
32
31
  cb( mesh, geometry );
@@ -37,9 +36,9 @@
37
36
 
38
37
  } );
39
38
 
40
- } // Default options
41
-
39
+ }
42
40
 
41
+ // Default options
43
42
  const defaultOptions = {
44
43
  binary: false,
45
44
  excludeAttributes: [],
@@ -51,9 +50,10 @@
51
50
  let includeIndices = true;
52
51
  let includeNormals = false;
53
52
  let includeColors = false;
54
- let includeUVs = false; // count the vertices, check which properties are used,
55
- // and cache the BufferGeometry
53
+ let includeUVs = false;
56
54
 
55
+ // count the vertices, check which properties are used,
56
+ // and cache the BufferGeometry
57
57
  let vertexCount = 0;
58
58
  let faceCount = 0;
59
59
  object.traverse( function ( child ) {
@@ -67,7 +67,6 @@
67
67
  const uvs = geometry.getAttribute( 'uv' );
68
68
  const colors = geometry.getAttribute( 'color' );
69
69
  const indices = geometry.getIndex();
70
-
71
70
  if ( vertices === undefined ) {
72
71
 
73
72
  return;
@@ -96,7 +95,6 @@
96
95
  includeNormals = includeNormals && excludeAttributes.indexOf( 'normal' ) === - 1;
97
96
  includeColors = includeColors && excludeAttributes.indexOf( 'color' ) === - 1;
98
97
  includeUVs = includeUVs && excludeAttributes.indexOf( 'uv' ) === - 1;
99
-
100
98
  if ( includeIndices && faceCount !== Math.floor( faceCount ) ) {
101
99
 
102
100
  // point cloud meshes will not have an index array and may not have a
@@ -108,9 +106,9 @@
108
106
  }
109
107
 
110
108
  const indexByteCount = 4;
111
- let header = 'ply\n' + `format ${options.binary ? options.littleEndian ? 'binary_little_endian' : 'binary_big_endian' : 'ascii'} 1.0\n` + `element vertex ${vertexCount}\n` + // position
109
+ let header = 'ply\n' + `format ${options.binary ? options.littleEndian ? 'binary_little_endian' : 'binary_big_endian' : 'ascii'} 1.0\n` + `element vertex ${vertexCount}\n` +
110
+ // position
112
111
  'property float x\n' + 'property float y\n' + 'property float z\n';
113
-
114
112
  if ( includeNormals === true ) {
115
113
 
116
114
  // normal
@@ -139,23 +137,25 @@
139
137
 
140
138
  }
141
139
 
142
- header += 'end_header\n'; // Generate attribute data
140
+ header += 'end_header\n';
143
141
 
142
+ // Generate attribute data
144
143
  const vertex = new THREE.Vector3();
145
144
  const normalMatrixWorld = new THREE.Matrix3();
146
145
  let result = null;
147
-
148
146
  if ( options.binary === true ) {
149
147
 
150
148
  // Binary File Generation
151
- const headerBin = new TextEncoder().encode( header ); // 3 position values at 4 bytes
149
+ const headerBin = new TextEncoder().encode( header );
150
+
151
+ // 3 position values at 4 bytes
152
152
  // 3 normal values at 4 bytes
153
153
  // 3 color channels with 1 byte
154
154
  // 2 uv values at 4 bytes
155
+ const vertexListLength = vertexCount * ( 4 * 3 + ( includeNormals ? 4 * 3 : 0 ) + ( includeColors ? 3 : 0 ) + ( includeUVs ? 4 * 2 : 0 ) );
155
156
 
156
- const vertexListLength = vertexCount * ( 4 * 3 + ( includeNormals ? 4 * 3 : 0 ) + ( includeColors ? 3 : 0 ) + ( includeUVs ? 4 * 2 : 0 ) ); // 1 byte shape desciptor
157
+ // 1 byte shape desciptor
157
158
  // 3 vertex indices at ${indexByteCount} bytes
158
-
159
159
  const faceListLength = includeIndices ? faceCount * ( indexByteCount * 3 + 1 ) : 0;
160
160
  const output = new DataView( new ArrayBuffer( headerBin.length + vertexListLength + faceListLength ) );
161
161
  new Uint8Array( output.buffer ).set( headerBin, 0 );
@@ -170,19 +170,20 @@
170
170
  const colors = geometry.getAttribute( 'color' );
171
171
  const indices = geometry.getIndex();
172
172
  normalMatrixWorld.getNormalMatrix( mesh.matrixWorld );
173
-
174
173
  for ( let i = 0, l = vertices.count; i < l; i ++ ) {
175
174
 
176
175
  vertex.fromBufferAttribute( vertices, i );
177
- vertex.applyMatrix4( mesh.matrixWorld ); // Position information
176
+ vertex.applyMatrix4( mesh.matrixWorld );
178
177
 
178
+ // Position information
179
179
  output.setFloat32( vOffset, vertex.x, options.littleEndian );
180
180
  vOffset += 4;
181
181
  output.setFloat32( vOffset, vertex.y, options.littleEndian );
182
182
  vOffset += 4;
183
183
  output.setFloat32( vOffset, vertex.z, options.littleEndian );
184
- vOffset += 4; // Normal information
184
+ vOffset += 4;
185
185
 
186
+ // Normal information
186
187
  if ( includeNormals === true ) {
187
188
 
188
189
  if ( normals != null ) {
@@ -207,9 +208,9 @@
207
208
 
208
209
  }
209
210
 
210
- } // UV information
211
-
211
+ }
212
212
 
213
+ // UV information
213
214
  if ( includeUVs === true ) {
214
215
 
215
216
  if ( uvs != null ) {
@@ -228,9 +229,9 @@
228
229
 
229
230
  }
230
231
 
231
- } // THREE.Color information
232
-
232
+ }
233
233
 
234
+ // THREE.Color information
234
235
  if ( includeColors === true ) {
235
236
 
236
237
  if ( colors != null ) {
@@ -261,6 +262,7 @@
261
262
  if ( includeIndices === true ) {
262
263
 
263
264
  // Create the face list
265
+
264
266
  if ( indices !== null ) {
265
267
 
266
268
  for ( let i = 0, l = indices.count; i < l; i += 3 ) {
@@ -293,10 +295,10 @@
293
295
 
294
296
  }
295
297
 
296
- } // Save the amount of verts we've already written so we can offset
297
- // the face index on the next mesh
298
-
298
+ }
299
299
 
300
+ // Save the amount of verts we've already written so we can offset
301
+ // the face index on the next mesh
300
302
  writtenVertices += vertices.count;
301
303
 
302
304
  } );
@@ -316,15 +318,18 @@
316
318
  const uvs = geometry.getAttribute( 'uv' );
317
319
  const colors = geometry.getAttribute( 'color' );
318
320
  const indices = geometry.getIndex();
319
- normalMatrixWorld.getNormalMatrix( mesh.matrixWorld ); // form each line
321
+ normalMatrixWorld.getNormalMatrix( mesh.matrixWorld );
320
322
 
323
+ // form each line
321
324
  for ( let i = 0, l = vertices.count; i < l; i ++ ) {
322
325
 
323
326
  vertex.fromBufferAttribute( vertices, i );
324
- vertex.applyMatrix4( mesh.matrixWorld ); // Position information
327
+ vertex.applyMatrix4( mesh.matrixWorld );
325
328
 
326
- let line = vertex.x + ' ' + vertex.y + ' ' + vertex.z; // Normal information
329
+ // Position information
330
+ let line = vertex.x + ' ' + vertex.y + ' ' + vertex.z;
327
331
 
332
+ // Normal information
328
333
  if ( includeNormals === true ) {
329
334
 
330
335
  if ( normals != null ) {
@@ -339,9 +344,9 @@
339
344
 
340
345
  }
341
346
 
342
- } // UV information
343
-
347
+ }
344
348
 
349
+ // UV information
345
350
  if ( includeUVs === true ) {
346
351
 
347
352
  if ( uvs != null ) {
@@ -354,9 +359,9 @@
354
359
 
355
360
  }
356
361
 
357
- } // THREE.Color information
358
-
362
+ }
359
363
 
364
+ // THREE.Color information
360
365
  if ( includeColors === true ) {
361
366
 
362
367
  if ( colors != null ) {
@@ -374,9 +379,9 @@
374
379
 
375
380
  vertexList += line + '\n';
376
381
 
377
- } // Create the face list
378
-
382
+ }
379
383
 
384
+ // Create the face list
380
385
  if ( includeIndices === true ) {
381
386
 
382
387
  if ( indices !== null ) {
@@ -13,7 +13,9 @@
13
13
 
14
14
  parse( scene, options = {} ) {
15
15
 
16
- const binary = options.binary !== undefined ? options.binary : false; //
16
+ const binary = options.binary !== undefined ? options.binary : false;
17
+
18
+ //
17
19
 
18
20
  const objects = [];
19
21
  let triangles = 0;
@@ -57,17 +59,16 @@
57
59
  const cb = new THREE.Vector3();
58
60
  const ab = new THREE.Vector3();
59
61
  const normal = new THREE.Vector3();
60
-
61
62
  for ( let i = 0, il = objects.length; i < il; i ++ ) {
62
63
 
63
64
  const object = objects[ i ].object3d;
64
65
  const geometry = objects[ i ].geometry;
65
66
  const index = geometry.index;
66
67
  const positionAttribute = geometry.getAttribute( 'position' );
67
-
68
68
  if ( index !== null ) {
69
69
 
70
70
  // indexed geometry
71
+
71
72
  for ( let j = 0; j < index.count; j += 3 ) {
72
73
 
73
74
  const a = index.getX( j + 0 );
@@ -80,6 +81,7 @@
80
81
  } else {
81
82
 
82
83
  // non-indexed geometry
84
+
83
85
  for ( let j = 0; j < positionAttribute.count; j += 3 ) {
84
86
 
85
87
  const a = j + 0;
@@ -100,13 +102,11 @@
100
102
  }
101
103
 
102
104
  return output;
103
-
104
105
  function writeFace( a, b, c, positionAttribute, object ) {
105
106
 
106
107
  vA.fromBufferAttribute( positionAttribute, a );
107
108
  vB.fromBufferAttribute( positionAttribute, b );
108
109
  vC.fromBufferAttribute( positionAttribute, c );
109
-
110
110
  if ( object.isSkinnedMesh === true ) {
111
111
 
112
112
  object.boneTransform( a, vA );
@@ -122,7 +122,6 @@
122
122
  writeVertex( vA );
123
123
  writeVertex( vB );
124
124
  writeVertex( vC );
125
-
126
125
  if ( binary === true ) {
127
126
 
128
127
  output.setUint16( offset, 0, true );
@@ -143,7 +142,6 @@
143
142
  ab.subVectors( vA, vB );
144
143
  cb.cross( ab ).normalize();
145
144
  normal.copy( cb ).normalize();
146
-
147
145
  if ( binary === true ) {
148
146
 
149
147
  output.setFloat32( offset, normal.x, true );