@plastic-software/three 0.167.4 → 0.174.0

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 (747) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36217 -23964
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46744
  7. package/build/three.module.min.js +2 -3
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50671
  11. package/build/three.webgpu.min.js +2 -3
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  631. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  632. package/src/renderers/webgl/WebGLBackground.js +24 -1
  633. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  634. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  635. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  637. package/src/renderers/webgl/WebGLProgram.js +27 -29
  638. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  639. package/src/renderers/webgl/WebGLState.js +68 -11
  640. package/src/renderers/webgl/WebGLTextures.js +49 -10
  641. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  642. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  643. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  644. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  645. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  646. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  648. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  649. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  650. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  651. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  652. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  653. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  654. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  655. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  656. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  657. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  658. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  659. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  660. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  661. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  662. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  663. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  664. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  665. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  666. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  667. package/src/renderers/webxr/WebXRManager.js +54 -32
  668. package/src/scenes/Fog.js +60 -0
  669. package/src/scenes/FogExp2.js +51 -0
  670. package/src/scenes/Scene.js +87 -0
  671. package/src/textures/Data3DTexture.js +2 -2
  672. package/src/textures/DepthTexture.js +2 -0
  673. package/src/textures/Source.js +2 -2
  674. package/src/textures/Texture.js +368 -5
  675. package/src/textures/VideoFrameTexture.js +35 -0
  676. package/src/utils.js +33 -1
  677. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  678. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  679. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  680. package/examples/jsm/controls/Controls.js +0 -32
  681. package/examples/jsm/exporters/MMDExporter.js +0 -217
  682. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  683. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  684. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  685. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  686. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  687. package/examples/jsm/loaders/TiltLoader.js +0 -520
  688. package/examples/jsm/objects/InstancedPoints.js +0 -21
  689. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  690. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  691. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  692. package/src/nodes/accessors/BitangentNode.js +0 -13
  693. package/src/nodes/accessors/CameraNode.js +0 -19
  694. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  695. package/src/nodes/accessors/NormalNode.js +0 -14
  696. package/src/nodes/accessors/PositionNode.js +0 -10
  697. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  698. package/src/nodes/accessors/TangentNode.js +0 -23
  699. package/src/nodes/accessors/UVNode.js +0 -3
  700. package/src/nodes/core/NodeKeywords.js +0 -80
  701. package/src/nodes/core/UniformGroup.js +0 -13
  702. package/src/nodes/display/AfterImageNode.js +0 -152
  703. package/src/nodes/display/AnamorphicNode.js +0 -145
  704. package/src/nodes/display/BlendModeNode.js +0 -128
  705. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  706. package/src/nodes/display/DenoiseNode.js +0 -198
  707. package/src/nodes/display/DotScreenNode.js +0 -75
  708. package/src/nodes/display/FXAANode.js +0 -327
  709. package/src/nodes/display/FilmNode.js +0 -52
  710. package/src/nodes/display/GTAONode.js +0 -324
  711. package/src/nodes/display/GaussianBlurNode.js +0 -207
  712. package/src/nodes/display/Lut3DNode.js +0 -53
  713. package/src/nodes/display/RGBShiftNode.js +0 -49
  714. package/src/nodes/display/SepiaNode.js +0 -18
  715. package/src/nodes/display/TransitionNode.js +0 -76
  716. package/src/nodes/display/ViewportNode.js +0 -137
  717. package/src/nodes/fog/FogExp2Node.js +0 -34
  718. package/src/nodes/fog/FogNode.js +0 -48
  719. package/src/nodes/fog/FogRangeNode.js +0 -35
  720. package/src/nodes/lighting/LightNode.js +0 -57
  721. package/src/nodes/loaders/NodeLoader.js +0 -110
  722. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  723. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  724. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  725. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  726. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  727. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  728. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  729. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  730. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  731. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  732. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  733. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  734. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  735. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  736. package/src/nodes/materials/NodeMaterial.js +0 -680
  737. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  738. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  739. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  740. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  741. package/src/nodes/math/CondNode.js +0 -139
  742. package/src/nodes/math/HashNode.js +0 -34
  743. package/src/nodes/procedural/CheckerNode.js +0 -42
  744. package/src/nodes/utils/DiscardNode.js +0 -28
  745. package/src/nodes/utils/OscNode.js +0 -81
  746. package/src/nodes/utils/PackingNode.js +0 -55
  747. package/src/nodes/utils/TimerNode.js +0 -94
@@ -26,8 +26,6 @@ import {
26
26
  Quaternion,
27
27
  REVISION
28
28
  } from 'three';
29
- import { decompress } from './../utils/TextureUtils.js';
30
-
31
29
 
32
30
  /**
33
31
  * The KHR_mesh_quantization extension allows these extra attribute component types
@@ -68,6 +66,8 @@ class GLTFExporter {
68
66
 
69
67
  constructor() {
70
68
 
69
+ this.textureUtils = null;
70
+
71
71
  this.pluginCallbacks = [];
72
72
 
73
73
  this.register( function ( writer ) {
@@ -180,9 +180,18 @@ class GLTFExporter {
180
180
 
181
181
  }
182
182
 
183
+ setTextureUtils( utils ) {
184
+
185
+ this.textureUtils = utils;
186
+
187
+ return this;
188
+
189
+ }
190
+
183
191
  /**
184
192
  * Parse scenes and generate GLTF output
185
- * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
193
+ *
194
+ * @param {Scene|Array<Scene>} input Scene or Array of THREE.Scenes
186
195
  * @param {Function} onDone Callback on completed
187
196
  * @param {Function} onError Callback on errors
188
197
  * @param {Object} options options
@@ -199,7 +208,8 @@ class GLTFExporter {
199
208
  }
200
209
 
201
210
  writer.setPlugins( plugins );
202
- writer.write( input, onDone, options ).catch( onError );
211
+ writer.setTextureUtils( this.textureUtils );
212
+ writer.writeAsync( input, onDone, options ).catch( onError );
203
213
 
204
214
  }
205
215
 
@@ -296,7 +306,7 @@ const GLB_CHUNK_TYPE_BIN = 0x004E4942;
296
306
  * Compare two arrays
297
307
  * @param {Array} array1 Array 1 to compare
298
308
  * @param {Array} array2 Array 2 to compare
299
- * @return {Boolean} Returns true if both arrays are equal
309
+ * @return {boolean} Returns true if both arrays are equal
300
310
  */
301
311
  function equalArray( array1, array2 ) {
302
312
 
@@ -323,7 +333,7 @@ function stringToArrayBuffer( text ) {
323
333
  * Is identity matrix
324
334
  *
325
335
  * @param {Matrix4} matrix
326
- * @returns {Boolean} Returns true, if parameter is identity matrix
336
+ * @returns {boolean} Returns true, if parameter is identity matrix
327
337
  */
328
338
  function isIdentityMatrix( matrix ) {
329
339
 
@@ -333,9 +343,10 @@ function isIdentityMatrix( matrix ) {
333
343
 
334
344
  /**
335
345
  * Get the min and max vectors from the given attribute
346
+ *
336
347
  * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count
337
- * @param {Integer} start
338
- * @param {Integer} count
348
+ * @param {number} start Start index
349
+ * @param {number} count Range to cover
339
350
  * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)
340
351
  */
341
352
  function getMinMax( attribute, start, count ) {
@@ -389,8 +400,8 @@ function getMinMax( attribute, start, count ) {
389
400
  * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.
390
401
  * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment
391
402
  *
392
- * @param {Integer} bufferSize The size the original buffer.
393
- * @returns {Integer} new buffer size with required padding.
403
+ * @param {number} bufferSize The size the original buffer. Should be an integer.
404
+ * @returns {number} new buffer size with required padding as an integer.
394
405
  *
395
406
  */
396
407
  function getPaddedBufferSize( bufferSize ) {
@@ -403,7 +414,7 @@ function getPaddedBufferSize( bufferSize ) {
403
414
  * Returns a buffer aligned to 4-byte boundary.
404
415
  *
405
416
  * @param {ArrayBuffer} arrayBuffer Buffer to pad
406
- * @param {Integer} paddingByte (Optional)
417
+ * @param {number} [paddingByte=0] Should be an integer
407
418
  * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer
408
419
  */
409
420
  function getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {
@@ -516,6 +527,8 @@ class GLTFWriter {
516
527
  images: new Map()
517
528
  };
518
529
 
530
+ this.textureUtils = null;
531
+
519
532
  }
520
533
 
521
534
  setPlugins( plugins ) {
@@ -524,13 +537,20 @@ class GLTFWriter {
524
537
 
525
538
  }
526
539
 
540
+ setTextureUtils( utils ) {
541
+
542
+ this.textureUtils = utils;
543
+
544
+ }
545
+
527
546
  /**
528
547
  * Parse scenes and generate GLTF output
529
- * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes
530
- * @param {Function} onDone Callback on completed
531
- * @param {Object} options options
548
+ *
549
+ * @param {Scene|Array<Scene>} input Scene or Array of THREE.Scenes
550
+ * @param {Function} onDone Callback on completed
551
+ * @param {Object} options options
532
552
  */
533
- async write( input, onDone, options = {} ) {
553
+ async writeAsync( input, onDone, options = {} ) {
534
554
 
535
555
  this.options = Object.assign( {
536
556
  // default options
@@ -549,7 +569,7 @@ class GLTFWriter {
549
569
 
550
570
  }
551
571
 
552
- this.processInput( input );
572
+ await this.processInputAsync( input );
553
573
 
554
574
  await Promise.all( this.pending );
555
575
 
@@ -692,8 +712,10 @@ class GLTFWriter {
692
712
 
693
713
  /**
694
714
  * Returns ids for buffer attributes.
695
- * @param {Object} object
696
- * @return {Integer}
715
+ *
716
+ * @param {Object} attribute
717
+ * @param {boolean} [isRelativeCopy=false]
718
+ * @return {number} An integer
697
719
  */
698
720
  getUID( attribute, isRelativeCopy = false ) {
699
721
 
@@ -718,7 +740,7 @@ class GLTFWriter {
718
740
  * Checks if normal attribute values are normalized.
719
741
  *
720
742
  * @param {BufferAttribute} normal
721
- * @returns {Boolean}
743
+ * @returns {boolean}
722
744
  */
723
745
  isNormalizedNormalAttribute( normal ) {
724
746
 
@@ -823,7 +845,7 @@ class GLTFWriter {
823
845
 
824
846
  }
825
847
 
826
- buildMetalRoughTexture( metalnessMap, roughnessMap ) {
848
+ async buildMetalRoughTextureAsync( metalnessMap, roughnessMap ) {
827
849
 
828
850
  if ( metalnessMap === roughnessMap ) return metalnessMap;
829
851
 
@@ -847,17 +869,15 @@ class GLTFWriter {
847
869
 
848
870
  }
849
871
 
850
- console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
851
-
852
872
  if ( metalnessMap instanceof CompressedTexture ) {
853
873
 
854
- metalnessMap = decompress( metalnessMap );
874
+ metalnessMap = await this.decompressTextureAsync( metalnessMap );
855
875
 
856
876
  }
857
877
 
858
878
  if ( roughnessMap instanceof CompressedTexture ) {
859
879
 
860
- roughnessMap = decompress( roughnessMap );
880
+ roughnessMap = await this.decompressTextureAsync( roughnessMap );
861
881
 
862
882
  }
863
883
 
@@ -927,14 +947,29 @@ class GLTFWriter {
927
947
 
928
948
  }
929
949
 
950
+ console.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );
951
+
930
952
  return texture;
931
953
 
932
954
  }
933
955
 
956
+
957
+ async decompressTextureAsync( texture, maxTextureSize = Infinity ) {
958
+
959
+ if ( this.textureUtils === null ) {
960
+
961
+ throw new Error( 'THREE.GLTFExporter: setTextureUtils() must be called to process compressed textures.' );
962
+
963
+ }
964
+
965
+ return await this.textureUtils.decompress( texture, maxTextureSize );
966
+
967
+ }
968
+
934
969
  /**
935
970
  * Process a buffer to append to the default one.
936
971
  * @param {ArrayBuffer} buffer
937
- * @return {Integer}
972
+ * @return {0}
938
973
  */
939
974
  processBuffer( buffer ) {
940
975
 
@@ -952,11 +987,11 @@ class GLTFWriter {
952
987
 
953
988
  /**
954
989
  * Process and generate a BufferView
955
- * @param {BufferAttribute} attribute
956
- * @param {number} componentType
957
- * @param {number} start
958
- * @param {number} count
959
- * @param {number} target (Optional) Target usage of the BufferView
990
+ * @param {BufferAttribute} attribute
991
+ * @param {number} componentType
992
+ * @param {number} start
993
+ * @param {number} count
994
+ * @param {?number} target Target usage of the BufferView
960
995
  * @return {Object}
961
996
  */
962
997
  processBufferView( attribute, componentType, start, count, target ) {
@@ -1110,7 +1145,7 @@ class GLTFWriter {
1110
1145
  /**
1111
1146
  * Process and generate a BufferView from an image Blob.
1112
1147
  * @param {Blob} blob
1113
- * @return {Promise<Integer>}
1148
+ * @return {Promise<number>} An integer
1114
1149
  */
1115
1150
  processBufferViewImage( blob ) {
1116
1151
 
@@ -1144,11 +1179,11 @@ class GLTFWriter {
1144
1179
 
1145
1180
  /**
1146
1181
  * Process attribute to generate an accessor
1147
- * @param {BufferAttribute} attribute Attribute to process
1148
- * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range
1149
- * @param {Integer} start (Optional)
1150
- * @param {Integer} count (Optional)
1151
- * @return {Integer|null} Index of the processed accessor on the "accessors" array
1182
+ * @param {BufferAttribute} attribute Attribute to process
1183
+ * @param {?BufferGeometry} geometry Geometry used for truncated draw range
1184
+ * @param {number} [start=0]
1185
+ * @param {number} [count=Infinity]
1186
+ * @return {?number} Index of the processed accessor on the "accessors" array
1152
1187
  */
1153
1188
  processAccessor( attribute, geometry, start, count ) {
1154
1189
 
@@ -1243,10 +1278,10 @@ class GLTFWriter {
1243
1278
  /**
1244
1279
  * Process image
1245
1280
  * @param {Image} image to process
1246
- * @param {Integer} format of the image (RGBAFormat)
1247
- * @param {Boolean} flipY before writing out the image
1248
- * @param {String} mimeType export format
1249
- * @return {Integer} Index of the processed texture in the "images" array
1281
+ * @param {number} format Identifier of the format (RGBAFormat)
1282
+ * @param {boolean} flipY before writing out the image
1283
+ * @param {string} mimeType export format
1284
+ * @return {number} Index of the processed texture in the "images" array
1250
1285
  */
1251
1286
  processImage( image, format, flipY, mimeType = 'image/png' ) {
1252
1287
 
@@ -1383,7 +1418,7 @@ class GLTFWriter {
1383
1418
  /**
1384
1419
  * Process sampler
1385
1420
  * @param {Texture} map Texture to process
1386
- * @return {Integer} Index of the processed texture in the "samplers" array
1421
+ * @return {number} Index of the processed texture in the "samplers" array
1387
1422
  */
1388
1423
  processSampler( map ) {
1389
1424
 
@@ -1405,9 +1440,9 @@ class GLTFWriter {
1405
1440
  /**
1406
1441
  * Process texture
1407
1442
  * @param {Texture} map Map to process
1408
- * @return {Integer} Index of the processed texture in the "textures" array
1443
+ * @return {Promise<number>} Index of the processed texture in the "textures" array
1409
1444
  */
1410
- processTexture( map ) {
1445
+ async processTextureAsync( map ) {
1411
1446
 
1412
1447
  const writer = this;
1413
1448
  const options = writer.options;
@@ -1421,7 +1456,7 @@ class GLTFWriter {
1421
1456
  // make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture
1422
1457
  if ( map instanceof CompressedTexture ) {
1423
1458
 
1424
- map = decompress( map, options.maxTextureSize );
1459
+ map = await this.decompressTextureAsync( map, options.maxTextureSize );
1425
1460
 
1426
1461
  }
1427
1462
 
@@ -1436,9 +1471,9 @@ class GLTFWriter {
1436
1471
 
1437
1472
  if ( map.name ) textureDef.name = map.name;
1438
1473
 
1439
- this._invokeAll( function ( ext ) {
1474
+ await this._invokeAllAsync( async function ( ext ) {
1440
1475
 
1441
- ext.writeTexture && ext.writeTexture( map, textureDef );
1476
+ ext.writeTexture && await ext.writeTexture( map, textureDef );
1442
1477
 
1443
1478
  } );
1444
1479
 
@@ -1451,9 +1486,9 @@ class GLTFWriter {
1451
1486
  /**
1452
1487
  * Process material
1453
1488
  * @param {THREE.Material} material Material to process
1454
- * @return {Integer|null} Index of the processed material in the "materials" array
1489
+ * @return {Promise<number|null>} Index of the processed material in the "materials" array
1455
1490
  */
1456
- processMaterial( material ) {
1491
+ async processMaterialAsync( material ) {
1457
1492
 
1458
1493
  const cache = this.cache;
1459
1494
  const json = this.json;
@@ -1494,19 +1529,19 @@ class GLTFWriter {
1494
1529
 
1495
1530
  } else {
1496
1531
 
1497
- materialDef.pbrMetallicRoughness.metallicFactor = 0.5;
1498
- materialDef.pbrMetallicRoughness.roughnessFactor = 0.5;
1532
+ materialDef.pbrMetallicRoughness.metallicFactor = 0;
1533
+ materialDef.pbrMetallicRoughness.roughnessFactor = 1;
1499
1534
 
1500
1535
  }
1501
1536
 
1502
1537
  // pbrMetallicRoughness.metallicRoughnessTexture
1503
1538
  if ( material.metalnessMap || material.roughnessMap ) {
1504
1539
 
1505
- const metalRoughTexture = this.buildMetalRoughTexture( material.metalnessMap, material.roughnessMap );
1540
+ const metalRoughTexture = await this.buildMetalRoughTextureAsync( material.metalnessMap, material.roughnessMap );
1506
1541
 
1507
1542
  const metalRoughMapDef = {
1508
- index: this.processTexture( metalRoughTexture ),
1509
- channel: metalRoughTexture.channel
1543
+ index: await this.processTextureAsync( metalRoughTexture ),
1544
+ texCoord: metalRoughTexture.channel
1510
1545
  };
1511
1546
  this.applyTextureTransform( metalRoughMapDef, metalRoughTexture );
1512
1547
  materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
@@ -1517,7 +1552,7 @@ class GLTFWriter {
1517
1552
  if ( material.map ) {
1518
1553
 
1519
1554
  const baseColorMapDef = {
1520
- index: this.processTexture( material.map ),
1555
+ index: await this.processTextureAsync( material.map ),
1521
1556
  texCoord: material.map.channel
1522
1557
  };
1523
1558
  this.applyTextureTransform( baseColorMapDef, material.map );
@@ -1540,7 +1575,7 @@ class GLTFWriter {
1540
1575
  if ( material.emissiveMap ) {
1541
1576
 
1542
1577
  const emissiveMapDef = {
1543
- index: this.processTexture( material.emissiveMap ),
1578
+ index: await this.processTextureAsync( material.emissiveMap ),
1544
1579
  texCoord: material.emissiveMap.channel
1545
1580
  };
1546
1581
  this.applyTextureTransform( emissiveMapDef, material.emissiveMap );
@@ -1554,7 +1589,7 @@ class GLTFWriter {
1554
1589
  if ( material.normalMap ) {
1555
1590
 
1556
1591
  const normalMapDef = {
1557
- index: this.processTexture( material.normalMap ),
1592
+ index: await this.processTextureAsync( material.normalMap ),
1558
1593
  texCoord: material.normalMap.channel
1559
1594
  };
1560
1595
 
@@ -1575,7 +1610,7 @@ class GLTFWriter {
1575
1610
  if ( material.aoMap ) {
1576
1611
 
1577
1612
  const occlusionMapDef = {
1578
- index: this.processTexture( material.aoMap ),
1613
+ index: await this.processTextureAsync( material.aoMap ),
1579
1614
  texCoord: material.aoMap.channel
1580
1615
  };
1581
1616
 
@@ -1612,9 +1647,9 @@ class GLTFWriter {
1612
1647
 
1613
1648
  this.serializeUserData( material, materialDef );
1614
1649
 
1615
- this._invokeAll( function ( ext ) {
1650
+ await this._invokeAllAsync( async function ( ext ) {
1616
1651
 
1617
- ext.writeMaterial && ext.writeMaterial( material, materialDef );
1652
+ ext.writeMaterialAsync && await ext.writeMaterialAsync( material, materialDef );
1618
1653
 
1619
1654
  } );
1620
1655
 
@@ -1627,9 +1662,9 @@ class GLTFWriter {
1627
1662
  /**
1628
1663
  * Process mesh
1629
1664
  * @param {THREE.Mesh} mesh Mesh to process
1630
- * @return {Integer|null} Index of the processed mesh in the "meshes" array
1665
+ * @return {Promise<number|null>} Index of the processed mesh in the "meshes" array
1631
1666
  */
1632
- processMesh( mesh ) {
1667
+ async processMeshAsync( mesh ) {
1633
1668
 
1634
1669
  const cache = this.cache;
1635
1670
  const json = this.json;
@@ -1733,7 +1768,9 @@ class GLTFWriter {
1733
1768
 
1734
1769
  }
1735
1770
 
1736
- // JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.
1771
+ // Enforce glTF vertex attribute requirements:
1772
+ // - JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT
1773
+ // - Only custom attributes may be INT or UNSIGNED_INT
1737
1774
  modifiedAttribute = null;
1738
1775
  const array = attribute.array;
1739
1776
 
@@ -1744,6 +1781,11 @@ class GLTFWriter {
1744
1781
  console.warn( 'GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.' );
1745
1782
  modifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );
1746
1783
 
1784
+ } else if ( ( array instanceof Uint32Array || array instanceof Int32Array ) && ! attributeName.startsWith( '_' ) ) {
1785
+
1786
+ console.warn( `GLTFExporter: Attribute "${ attributeName }" converted to type FLOAT.` );
1787
+ modifiedAttribute = GLTFExporter.Utils.toFloat32BufferAttribute( attribute );
1788
+
1747
1789
  }
1748
1790
 
1749
1791
  const accessor = this.processAccessor( modifiedAttribute || attribute, geometry );
@@ -1930,7 +1972,7 @@ class GLTFWriter {
1930
1972
 
1931
1973
  }
1932
1974
 
1933
- const material = this.processMaterial( materials[ groups[ i ].materialIndex ] );
1975
+ const material = await this.processMaterialAsync( materials[ groups[ i ].materialIndex ] );
1934
1976
 
1935
1977
  if ( material !== null ) primitive.material = material;
1936
1978
 
@@ -1948,7 +1990,7 @@ class GLTFWriter {
1948
1990
 
1949
1991
  if ( ! json.meshes ) json.meshes = [];
1950
1992
 
1951
- this._invokeAll( function ( ext ) {
1993
+ await this._invokeAllAsync( function ( ext ) {
1952
1994
 
1953
1995
  ext.writeMesh && ext.writeMesh( mesh, meshDef );
1954
1996
 
@@ -2025,7 +2067,7 @@ class GLTFWriter {
2025
2067
  /**
2026
2068
  * Process camera
2027
2069
  * @param {THREE.Camera} camera Camera to process
2028
- * @return {Integer} Index of the processed mesh in the "camera" array
2070
+ * @return {number} Index of the processed mesh in the "camera" array
2029
2071
  */
2030
2072
  processCamera( camera ) {
2031
2073
 
@@ -2225,10 +2267,10 @@ class GLTFWriter {
2225
2267
 
2226
2268
  /**
2227
2269
  * Process Object3D node
2228
- * @param {THREE.Object3D} node Object3D to processNode
2229
- * @return {Integer} Index of the node in the nodes list
2270
+ * @param {THREE.Object3D} object Object3D to processNodeAsync
2271
+ * @return {Promise<number>} Index of the node in the nodes list
2230
2272
  */
2231
- processNode( object ) {
2273
+ async processNodeAsync( object ) {
2232
2274
 
2233
2275
  const json = this.json;
2234
2276
  const options = this.options;
@@ -2285,7 +2327,7 @@ class GLTFWriter {
2285
2327
 
2286
2328
  if ( object.isMesh || object.isLine || object.isPoints ) {
2287
2329
 
2288
- const meshIndex = this.processMesh( object );
2330
+ const meshIndex = await this.processMeshAsync( object );
2289
2331
 
2290
2332
  if ( meshIndex !== null ) nodeDef.mesh = meshIndex;
2291
2333
 
@@ -2307,7 +2349,7 @@ class GLTFWriter {
2307
2349
 
2308
2350
  if ( child.visible || options.onlyVisible === false ) {
2309
2351
 
2310
- const nodeIndex = this.processNode( child );
2352
+ const nodeIndex = await this.processNodeAsync( child );
2311
2353
 
2312
2354
  if ( nodeIndex !== null ) children.push( nodeIndex );
2313
2355
 
@@ -2319,7 +2361,7 @@ class GLTFWriter {
2319
2361
 
2320
2362
  }
2321
2363
 
2322
- this._invokeAll( function ( ext ) {
2364
+ await this._invokeAllAsync( function ( ext ) {
2323
2365
 
2324
2366
  ext.writeNode && ext.writeNode( object, nodeDef );
2325
2367
 
@@ -2333,9 +2375,9 @@ class GLTFWriter {
2333
2375
 
2334
2376
  /**
2335
2377
  * Process Scene
2336
- * @param {Scene} node Scene to process
2378
+ * @param {Scene} scene Scene to process
2337
2379
  */
2338
- processScene( scene ) {
2380
+ async processSceneAsync( scene ) {
2339
2381
 
2340
2382
  const json = this.json;
2341
2383
  const options = this.options;
@@ -2361,7 +2403,7 @@ class GLTFWriter {
2361
2403
 
2362
2404
  if ( child.visible || options.onlyVisible === false ) {
2363
2405
 
2364
- const nodeIndex = this.processNode( child );
2406
+ const nodeIndex = await this.processNodeAsync( child );
2365
2407
 
2366
2408
  if ( nodeIndex !== null ) nodes.push( nodeIndex );
2367
2409
 
@@ -2377,9 +2419,9 @@ class GLTFWriter {
2377
2419
 
2378
2420
  /**
2379
2421
  * Creates a Scene to hold a list of objects and parse it
2380
- * @param {Array} objects List of objects to process
2422
+ * @param {Array<THREE.Object3D>} objects List of objects to process
2381
2423
  */
2382
- processObjects( objects ) {
2424
+ async processObjectsAsync( objects ) {
2383
2425
 
2384
2426
  const scene = new Scene();
2385
2427
  scene.name = 'AuxScene';
@@ -2392,20 +2434,20 @@ class GLTFWriter {
2392
2434
 
2393
2435
  }
2394
2436
 
2395
- this.processScene( scene );
2437
+ await this.processSceneAsync( scene );
2396
2438
 
2397
2439
  }
2398
2440
 
2399
2441
  /**
2400
2442
  * @param {THREE.Object3D|Array<THREE.Object3D>} input
2401
2443
  */
2402
- processInput( input ) {
2444
+ async processInputAsync( input ) {
2403
2445
 
2404
2446
  const options = this.options;
2405
2447
 
2406
2448
  input = input instanceof Array ? input : [ input ];
2407
2449
 
2408
- this._invokeAll( function ( ext ) {
2450
+ await this._invokeAllAsync( function ( ext ) {
2409
2451
 
2410
2452
  ext.beforeParse && ext.beforeParse( input );
2411
2453
 
@@ -2417,7 +2459,7 @@ class GLTFWriter {
2417
2459
 
2418
2460
  if ( input[ i ] instanceof Scene ) {
2419
2461
 
2420
- this.processScene( input[ i ] );
2462
+ await this.processSceneAsync( input[ i ] );
2421
2463
 
2422
2464
  } else {
2423
2465
 
@@ -2427,7 +2469,11 @@ class GLTFWriter {
2427
2469
 
2428
2470
  }
2429
2471
 
2430
- if ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );
2472
+ if ( objectsWithoutScene.length > 0 ) {
2473
+
2474
+ await this.processObjectsAsync( objectsWithoutScene );
2475
+
2476
+ }
2431
2477
 
2432
2478
  for ( let i = 0; i < this.skins.length; ++ i ) {
2433
2479
 
@@ -2441,7 +2487,7 @@ class GLTFWriter {
2441
2487
 
2442
2488
  }
2443
2489
 
2444
- this._invokeAll( function ( ext ) {
2490
+ await this._invokeAllAsync( function ( ext ) {
2445
2491
 
2446
2492
  ext.afterParse && ext.afterParse( input );
2447
2493
 
@@ -2449,11 +2495,11 @@ class GLTFWriter {
2449
2495
 
2450
2496
  }
2451
2497
 
2452
- _invokeAll( func ) {
2498
+ async _invokeAllAsync( func ) {
2453
2499
 
2454
2500
  for ( let i = 0, il = this.plugins.length; i < il; i ++ ) {
2455
2501
 
2456
- func( this.plugins[ i ] );
2502
+ await func( this.plugins[ i ] );
2457
2503
 
2458
2504
  }
2459
2505
 
@@ -2570,7 +2616,7 @@ class GLTFMaterialsUnlitExtension {
2570
2616
 
2571
2617
  }
2572
2618
 
2573
- writeMaterial( material, materialDef ) {
2619
+ async writeMaterialAsync( material, materialDef ) {
2574
2620
 
2575
2621
  if ( ! material.isMeshBasicMaterial ) return;
2576
2622
 
@@ -2603,7 +2649,7 @@ class GLTFMaterialsClearcoatExtension {
2603
2649
 
2604
2650
  }
2605
2651
 
2606
- writeMaterial( material, materialDef ) {
2652
+ async writeMaterialAsync( material, materialDef ) {
2607
2653
 
2608
2654
  if ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;
2609
2655
 
@@ -2617,7 +2663,7 @@ class GLTFMaterialsClearcoatExtension {
2617
2663
  if ( material.clearcoatMap ) {
2618
2664
 
2619
2665
  const clearcoatMapDef = {
2620
- index: writer.processTexture( material.clearcoatMap ),
2666
+ index: await writer.processTextureAsync( material.clearcoatMap ),
2621
2667
  texCoord: material.clearcoatMap.channel
2622
2668
  };
2623
2669
  writer.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );
@@ -2630,7 +2676,7 @@ class GLTFMaterialsClearcoatExtension {
2630
2676
  if ( material.clearcoatRoughnessMap ) {
2631
2677
 
2632
2678
  const clearcoatRoughnessMapDef = {
2633
- index: writer.processTexture( material.clearcoatRoughnessMap ),
2679
+ index: await writer.processTextureAsync( material.clearcoatRoughnessMap ),
2634
2680
  texCoord: material.clearcoatRoughnessMap.channel
2635
2681
  };
2636
2682
  writer.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );
@@ -2641,7 +2687,7 @@ class GLTFMaterialsClearcoatExtension {
2641
2687
  if ( material.clearcoatNormalMap ) {
2642
2688
 
2643
2689
  const clearcoatNormalMapDef = {
2644
- index: writer.processTexture( material.clearcoatNormalMap ),
2690
+ index: await writer.processTextureAsync( material.clearcoatNormalMap ),
2645
2691
  texCoord: material.clearcoatNormalMap.channel
2646
2692
  };
2647
2693
 
@@ -2676,7 +2722,7 @@ class GLTFMaterialsDispersionExtension {
2676
2722
 
2677
2723
  }
2678
2724
 
2679
- writeMaterial( material, materialDef ) {
2725
+ async writeMaterialAsync( material, materialDef ) {
2680
2726
 
2681
2727
  if ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;
2682
2728
 
@@ -2710,7 +2756,7 @@ class GLTFMaterialsIridescenceExtension {
2710
2756
 
2711
2757
  }
2712
2758
 
2713
- writeMaterial( material, materialDef ) {
2759
+ async writeMaterialAsync( material, materialDef ) {
2714
2760
 
2715
2761
  if ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;
2716
2762
 
@@ -2724,7 +2770,7 @@ class GLTFMaterialsIridescenceExtension {
2724
2770
  if ( material.iridescenceMap ) {
2725
2771
 
2726
2772
  const iridescenceMapDef = {
2727
- index: writer.processTexture( material.iridescenceMap ),
2773
+ index: await writer.processTextureAsync( material.iridescenceMap ),
2728
2774
  texCoord: material.iridescenceMap.channel
2729
2775
  };
2730
2776
  writer.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );
@@ -2739,7 +2785,7 @@ class GLTFMaterialsIridescenceExtension {
2739
2785
  if ( material.iridescenceThicknessMap ) {
2740
2786
 
2741
2787
  const iridescenceThicknessMapDef = {
2742
- index: writer.processTexture( material.iridescenceThicknessMap ),
2788
+ index: await writer.processTextureAsync( material.iridescenceThicknessMap ),
2743
2789
  texCoord: material.iridescenceThicknessMap.channel
2744
2790
  };
2745
2791
  writer.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );
@@ -2770,7 +2816,7 @@ class GLTFMaterialsTransmissionExtension {
2770
2816
 
2771
2817
  }
2772
2818
 
2773
- writeMaterial( material, materialDef ) {
2819
+ async writeMaterialAsync( material, materialDef ) {
2774
2820
 
2775
2821
  if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
2776
2822
 
@@ -2784,7 +2830,7 @@ class GLTFMaterialsTransmissionExtension {
2784
2830
  if ( material.transmissionMap ) {
2785
2831
 
2786
2832
  const transmissionMapDef = {
2787
- index: writer.processTexture( material.transmissionMap ),
2833
+ index: await writer.processTextureAsync( material.transmissionMap ),
2788
2834
  texCoord: material.transmissionMap.channel
2789
2835
  };
2790
2836
  writer.applyTextureTransform( transmissionMapDef, material.transmissionMap );
@@ -2815,7 +2861,7 @@ class GLTFMaterialsVolumeExtension {
2815
2861
 
2816
2862
  }
2817
2863
 
2818
- writeMaterial( material, materialDef ) {
2864
+ async writeMaterialAsync( material, materialDef ) {
2819
2865
 
2820
2866
  if ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;
2821
2867
 
@@ -2829,7 +2875,7 @@ class GLTFMaterialsVolumeExtension {
2829
2875
  if ( material.thicknessMap ) {
2830
2876
 
2831
2877
  const thicknessMapDef = {
2832
- index: writer.processTexture( material.thicknessMap ),
2878
+ index: await writer.processTextureAsync( material.thicknessMap ),
2833
2879
  texCoord: material.thicknessMap.channel
2834
2880
  };
2835
2881
  writer.applyTextureTransform( thicknessMapDef, material.thicknessMap );
@@ -2868,7 +2914,7 @@ class GLTFMaterialsIorExtension {
2868
2914
 
2869
2915
  }
2870
2916
 
2871
- writeMaterial( material, materialDef ) {
2917
+ async writeMaterialAsync( material, materialDef ) {
2872
2918
 
2873
2919
  if ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;
2874
2920
 
@@ -2902,7 +2948,7 @@ class GLTFMaterialsSpecularExtension {
2902
2948
 
2903
2949
  }
2904
2950
 
2905
- writeMaterial( material, materialDef ) {
2951
+ async writeMaterialAsync( material, materialDef ) {
2906
2952
 
2907
2953
  if ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&
2908
2954
  material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&
@@ -2916,7 +2962,7 @@ class GLTFMaterialsSpecularExtension {
2916
2962
  if ( material.specularIntensityMap ) {
2917
2963
 
2918
2964
  const specularIntensityMapDef = {
2919
- index: writer.processTexture( material.specularIntensityMap ),
2965
+ index: await writer.processTextureAsync( material.specularIntensityMap ),
2920
2966
  texCoord: material.specularIntensityMap.channel
2921
2967
  };
2922
2968
  writer.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );
@@ -2927,7 +2973,7 @@ class GLTFMaterialsSpecularExtension {
2927
2973
  if ( material.specularColorMap ) {
2928
2974
 
2929
2975
  const specularColorMapDef = {
2930
- index: writer.processTexture( material.specularColorMap ),
2976
+ index: await writer.processTextureAsync( material.specularColorMap ),
2931
2977
  texCoord: material.specularColorMap.channel
2932
2978
  };
2933
2979
  writer.applyTextureTransform( specularColorMapDef, material.specularColorMap );
@@ -2961,7 +3007,7 @@ class GLTFMaterialsSheenExtension {
2961
3007
 
2962
3008
  }
2963
3009
 
2964
- writeMaterial( material, materialDef ) {
3010
+ async writeMaterialAsync( material, materialDef ) {
2965
3011
 
2966
3012
  if ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;
2967
3013
 
@@ -2973,7 +3019,7 @@ class GLTFMaterialsSheenExtension {
2973
3019
  if ( material.sheenRoughnessMap ) {
2974
3020
 
2975
3021
  const sheenRoughnessMapDef = {
2976
- index: writer.processTexture( material.sheenRoughnessMap ),
3022
+ index: await writer.processTextureAsync( material.sheenRoughnessMap ),
2977
3023
  texCoord: material.sheenRoughnessMap.channel
2978
3024
  };
2979
3025
  writer.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );
@@ -2984,7 +3030,7 @@ class GLTFMaterialsSheenExtension {
2984
3030
  if ( material.sheenColorMap ) {
2985
3031
 
2986
3032
  const sheenColorMapDef = {
2987
- index: writer.processTexture( material.sheenColorMap ),
3033
+ index: await writer.processTextureAsync( material.sheenColorMap ),
2988
3034
  texCoord: material.sheenColorMap.channel
2989
3035
  };
2990
3036
  writer.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );
@@ -3018,7 +3064,7 @@ class GLTFMaterialsAnisotropyExtension {
3018
3064
 
3019
3065
  }
3020
3066
 
3021
- writeMaterial( material, materialDef ) {
3067
+ async writeMaterialAsync( material, materialDef ) {
3022
3068
 
3023
3069
  if ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;
3024
3070
 
@@ -3029,7 +3075,7 @@ class GLTFMaterialsAnisotropyExtension {
3029
3075
 
3030
3076
  if ( material.anisotropyMap ) {
3031
3077
 
3032
- const anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };
3078
+ const anisotropyMapDef = { index: await writer.processTextureAsync( material.anisotropyMap ) };
3033
3079
  writer.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );
3034
3080
  extensionDef.anisotropyTexture = anisotropyMapDef;
3035
3081
 
@@ -3061,7 +3107,7 @@ class GLTFMaterialsEmissiveStrengthExtension {
3061
3107
 
3062
3108
  }
3063
3109
 
3064
- writeMaterial( material, materialDef ) {
3110
+ async writeMaterialAsync( material, materialDef ) {
3065
3111
 
3066
3112
  if ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;
3067
3113
 
@@ -3096,7 +3142,7 @@ class GLTFMaterialsBumpExtension {
3096
3142
 
3097
3143
  }
3098
3144
 
3099
- writeMaterial( material, materialDef ) {
3145
+ async writeMaterialAsync( material, materialDef ) {
3100
3146
 
3101
3147
  if ( ! material.isMeshStandardMaterial || (
3102
3148
  material.bumpScale === 1 &&
@@ -3110,7 +3156,7 @@ class GLTFMaterialsBumpExtension {
3110
3156
  if ( material.bumpMap ) {
3111
3157
 
3112
3158
  const bumpMapDef = {
3113
- index: writer.processTexture( material.bumpMap ),
3159
+ index: await writer.processTextureAsync( material.bumpMap ),
3114
3160
  texCoord: material.bumpMap.channel
3115
3161
  };
3116
3162
  writer.applyTextureTransform( bumpMapDef, material.bumpMap );
@@ -3382,6 +3428,32 @@ GLTFExporter.Utils = {
3382
3428
 
3383
3429
  return clip;
3384
3430
 
3431
+ },
3432
+
3433
+ toFloat32BufferAttribute: function ( srcAttribute ) {
3434
+
3435
+ const dstAttribute = new BufferAttribute( new Float32Array( srcAttribute.count * srcAttribute.itemSize ), srcAttribute.itemSize, false );
3436
+
3437
+ if ( ! srcAttribute.normalized && ! srcAttribute.isInterleavedBufferAttribute ) {
3438
+
3439
+ dstAttribute.array.set( srcAttribute.array );
3440
+
3441
+ return dstAttribute;
3442
+
3443
+ }
3444
+
3445
+ for ( let i = 0, il = srcAttribute.count; i < il; i ++ ) {
3446
+
3447
+ for ( let j = 0; j < srcAttribute.itemSize; j ++ ) {
3448
+
3449
+ dstAttribute.setComponent( i, j, srcAttribute.getComponent( i, j ) );
3450
+
3451
+ }
3452
+
3453
+ }
3454
+
3455
+ return dstAttribute;
3456
+
3385
3457
  }
3386
3458
 
3387
3459
  };