@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -62,6 +62,7 @@ const SRGB_TO_LINEAR = Array( 1024 )
62
62
  * ```
63
63
  *
64
64
  * @augments Loader
65
+ * @three_import import { UltraHDRLoader } from 'three/addons/loaders/UltraHDRLoader.js';
65
66
  */
66
67
  class UltraHDRLoader extends Loader {
67
68
 
@@ -30,6 +30,7 @@ import {
30
30
  * }
31
31
  * ```
32
32
  * @augments Loader
33
+ * @three_import import { VOXLoader } from 'three/addons/loaders/VOXLoader.js';
33
34
  */
34
35
  class VOXLoader extends Loader {
35
36
 
@@ -46,6 +46,7 @@ import chevrotain from '../libs/chevrotain.module.min.js';
46
46
  * ```
47
47
  *
48
48
  * @augments Loader
49
+ * @three_import import { VRMLLoader } from 'three/addons/loaders/VRMLLoader.js';
49
50
  */
50
51
  class VRMLLoader extends Loader {
51
52
 
@@ -3140,7 +3141,7 @@ class VRMLLoader extends Loader {
3140
3141
 
3141
3142
  color.fromBufferAttribute( attribute, i );
3142
3143
 
3143
- ColorManagement.toWorkingColorSpace( color, SRGBColorSpace );
3144
+ ColorManagement.colorSpaceToWorking( color, SRGBColorSpace );
3144
3145
 
3145
3146
  attribute.setXYZ( i, color.r, color.g, color.b );
3146
3147
 
@@ -3247,7 +3248,7 @@ class VRMLLoader extends Loader {
3247
3248
 
3248
3249
  color.copy( colorA ).lerp( colorB, t );
3249
3250
 
3250
- ColorManagement.toWorkingColorSpace( color, SRGBColorSpace );
3251
+ ColorManagement.colorSpaceToWorking( color, SRGBColorSpace );
3251
3252
 
3252
3253
  colorAttribute.setXYZ( index, color.r, color.g, color.b );
3253
3254
 
@@ -26,6 +26,7 @@ import * as fflate from '../libs/fflate.module.js';
26
26
  * ```
27
27
  *
28
28
  * @augments Loader
29
+ * @three_import import { VTKLoader } from 'three/addons/loaders/VTKLoader.js';
29
30
  */
30
31
  class VTKLoader extends Loader {
31
32
 
@@ -26,6 +26,7 @@ import {
26
26
  * ```
27
27
  *
28
28
  * @augments Loader
29
+ * @three_import import { XYZLoader } from 'three/addons/loaders/XYZLoader.js';
29
30
  */
30
31
  class XYZLoader extends Loader {
31
32
 
@@ -86,7 +86,7 @@ class IFFParser {
86
86
 
87
87
  this.debugger.offset = this.reader.offset;
88
88
 
89
- var topForm = this.reader.getIDTag();
89
+ const topForm = this.reader.getIDTag();
90
90
 
91
91
  if ( topForm !== 'FORM' ) {
92
92
 
@@ -95,12 +95,12 @@ class IFFParser {
95
95
 
96
96
  }
97
97
 
98
- var length = this.reader.getUint32();
98
+ const length = this.reader.getUint32();
99
99
 
100
100
  this.debugger.dataOffset = this.reader.offset;
101
101
  this.debugger.length = length;
102
102
 
103
- var type = this.reader.getIDTag();
103
+ const type = this.reader.getIDTag();
104
104
 
105
105
  if ( type === 'LWO2' ) {
106
106
 
@@ -129,7 +129,7 @@ class IFFParser {
129
129
  // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }
130
130
  parseForm( length ) {
131
131
 
132
- var type = this.reader.getIDTag();
132
+ const type = this.reader.getIDTag();
133
133
 
134
134
  switch ( type ) {
135
135
 
@@ -350,9 +350,9 @@ class IFFParser {
350
350
 
351
351
  this.reader.skip( 8 ); // unknown Uint32 x2
352
352
 
353
- var name = this.reader.getString();
353
+ const name = this.reader.getString();
354
354
 
355
- var surface = {
355
+ const surface = {
356
356
  attributes: {}, // LWO2 style non-node attributes will go here
357
357
  connections: {},
358
358
  name: name,
@@ -372,9 +372,9 @@ class IFFParser {
372
372
 
373
373
  parseSurfaceLwo2( length ) {
374
374
 
375
- var name = this.reader.getString();
375
+ const name = this.reader.getString();
376
376
 
377
- var surface = {
377
+ const surface = {
378
378
  attributes: {}, // LWO2 style non-node attributes will go here
379
379
  connections: {},
380
380
  name: name,
@@ -398,9 +398,9 @@ class IFFParser {
398
398
  // some subnodes can be renamed, but Input and Surface cannot
399
399
 
400
400
  this.reader.skip( 8 ); // NRNM + length
401
- var name = this.reader.getString();
401
+ const name = this.reader.getString();
402
402
 
403
- var node = {
403
+ const node = {
404
404
  name: name
405
405
  };
406
406
  this.currentForm = node;
@@ -425,7 +425,7 @@ class IFFParser {
425
425
  parseEntryForm( length ) {
426
426
 
427
427
  this.reader.skip( 8 ); // NAME + length
428
- var name = this.reader.getString();
428
+ const name = this.reader.getString();
429
429
  this.currentForm = this.currentNode.attributes;
430
430
 
431
431
  this.setupForm( name, length );
@@ -438,7 +438,7 @@ class IFFParser {
438
438
 
439
439
  this.reader.skip( 8 ); // unknown + length
440
440
 
441
- var valueType = this.reader.getString();
441
+ const valueType = this.reader.getString();
442
442
 
443
443
  if ( valueType === 'double' ) {
444
444
 
@@ -480,7 +480,7 @@ class IFFParser {
480
480
 
481
481
  if ( ! this.currentForm.maps ) this.currentForm.maps = [];
482
482
 
483
- var map = {};
483
+ const map = {};
484
484
  this.currentForm.maps.push( map );
485
485
  this.currentForm = map;
486
486
 
@@ -541,7 +541,7 @@ class IFFParser {
541
541
  // level and they have a different format in each case
542
542
  parseClip( length ) {
543
543
 
544
- var tag = this.reader.getIDTag();
544
+ const tag = this.reader.getIDTag();
545
545
 
546
546
  // inside surface node
547
547
  if ( tag === 'FORM' ) {
@@ -562,7 +562,7 @@ class IFFParser {
562
562
 
563
563
  this.reader.skip( 8 ); // unknown
564
564
 
565
- var texture = {
565
+ const texture = {
566
566
  index: this.reader.getUint32()
567
567
  };
568
568
  this.tree.textures.push( texture );
@@ -572,7 +572,7 @@ class IFFParser {
572
572
 
573
573
  parseClipLwo2( length ) {
574
574
 
575
- var texture = {
575
+ const texture = {
576
576
  index: this.reader.getUint32(),
577
577
  fileName: ''
578
578
  };
@@ -580,8 +580,8 @@ class IFFParser {
580
580
  // search STIL block
581
581
  while ( true ) {
582
582
 
583
- var tag = this.reader.getIDTag();
584
- var n_length = this.reader.getUint16();
583
+ const tag = this.reader.getIDTag();
584
+ const n_length = this.reader.getUint16();
585
585
  if ( tag === 'STIL' ) {
586
586
 
587
587
  texture.fileName = this.reader.getString();
@@ -611,7 +611,7 @@ class IFFParser {
611
611
 
612
612
  parseXVAL( type, length ) {
613
613
 
614
- var endOffset = this.reader.offset + length - 4;
614
+ const endOffset = this.reader.offset + length - 4;
615
615
  this.reader.skip( 8 );
616
616
 
617
617
  this.currentForm[ type ] = this.reader.getFloat32();
@@ -622,7 +622,7 @@ class IFFParser {
622
622
 
623
623
  parseXVAL3( type, length ) {
624
624
 
625
- var endOffset = this.reader.offset + length - 4;
625
+ const endOffset = this.reader.offset + length - 4;
626
626
  this.reader.skip( 8 );
627
627
 
628
628
  this.currentForm[ type ] = {
@@ -651,10 +651,10 @@ class IFFParser {
651
651
  // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]
652
652
  parseLayer( length ) {
653
653
 
654
- var number = this.reader.getUint16();
655
- var flags = this.reader.getUint16(); // If the least significant bit of flags is set, the layer is hidden.
656
- var pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be superfluous, as the geometry is translated when pivot is present
657
- var layer = {
654
+ const number = this.reader.getUint16();
655
+ const flags = this.reader.getUint16(); // If the least significant bit of flags is set, the layer is hidden.
656
+ const pivot = this.reader.getFloat32Array( 3 ); // Note: this seems to be superfluous, as the geometry is translated when pivot is present
657
+ const layer = {
658
658
  number: number,
659
659
  flags: flags, // If the least significant bit of flags is set, the layer is hidden.
660
660
  pivot: [ - pivot[ 0 ], pivot[ 1 ], pivot[ 2 ] ], // Note: this seems to be superfluous, as the geometry is translated when pivot is present
@@ -664,7 +664,7 @@ class IFFParser {
664
664
  this.tree.layers.push( layer );
665
665
  this.currentLayer = layer;
666
666
 
667
- var parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength
667
+ const parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength
668
668
 
669
669
  // if we have not reached then end of the layer block, there must be a parent defined
670
670
  this.currentLayer.parent = ( parsedLength < length ) ? this.reader.getUint16() : - 1; // omitted or -1 for no parent
@@ -677,7 +677,7 @@ class IFFParser {
677
677
  parsePoints( length ) {
678
678
 
679
679
  this.currentPoints = [];
680
- for ( var i = 0; i < length / 4; i += 3 ) {
680
+ for ( let i = 0; i < length / 4; i += 3 ) {
681
681
 
682
682
  // x -> -x to match three.js right handed coords
683
683
  this.currentPoints.push( - this.reader.getFloat32(), this.reader.getFloat32(), this.reader.getFloat32() );
@@ -698,9 +698,9 @@ class IFFParser {
698
698
  // VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }
699
699
  parseVertexMapping( length, discontinuous ) {
700
700
 
701
- var finalOffset = this.reader.offset + length;
701
+ const finalOffset = this.reader.offset + length;
702
702
 
703
- var channelName = this.reader.getString();
703
+ const channelName = this.reader.getString();
704
704
 
705
705
  if ( this.reader.offset === finalOffset ) {
706
706
 
@@ -713,12 +713,12 @@ class IFFParser {
713
713
  // otherwise reset to initial length and parse normal VMAP CHUNK
714
714
  this.reader.setOffset( this.reader.offset - stringOffset( channelName ) );
715
715
 
716
- var type = this.reader.getIDTag();
716
+ const type = this.reader.getIDTag();
717
717
 
718
718
  this.reader.getUint16(); // dimension
719
- var name = this.reader.getString();
719
+ const name = this.reader.getString();
720
720
 
721
- var remainingLength = length - 6 - stringOffset( name );
721
+ const remainingLength = length - 6 - stringOffset( name );
722
722
 
723
723
  switch ( type ) {
724
724
 
@@ -749,9 +749,9 @@ class IFFParser {
749
749
 
750
750
  parseUVMapping( name, finalOffset, discontinuous ) {
751
751
 
752
- var uvIndices = [];
753
- var polyIndices = [];
754
- var uvs = [];
752
+ const uvIndices = [];
753
+ const polyIndices = [];
754
+ const uvs = [];
755
755
 
756
756
  while ( this.reader.offset < finalOffset ) {
757
757
 
@@ -788,8 +788,8 @@ class IFFParser {
788
788
 
789
789
  parseMorphTargets( name, finalOffset, type ) {
790
790
 
791
- var indices = [];
792
- var points = [];
791
+ const indices = [];
792
+ const points = [];
793
793
 
794
794
  type = ( type === 'MORF' ) ? 'relative' : 'absolute';
795
795
 
@@ -815,27 +815,27 @@ class IFFParser {
815
815
  // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }
816
816
  parsePolygonList( length ) {
817
817
 
818
- var finalOffset = this.reader.offset + length;
819
- var type = this.reader.getIDTag();
818
+ const finalOffset = this.reader.offset + length;
819
+ const type = this.reader.getIDTag();
820
820
 
821
- var indices = [];
821
+ const indices = [];
822
822
 
823
823
  // hold a list of polygon sizes, to be split up later
824
- var polygonDimensions = [];
824
+ const polygonDimensions = [];
825
825
 
826
826
  while ( this.reader.offset < finalOffset ) {
827
827
 
828
- var numverts = this.reader.getUint16();
828
+ let numverts = this.reader.getUint16();
829
829
 
830
- //var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now
830
+ //const flags = numverts & 64512; // 6 high order bits are flags - ignoring for now
831
831
  numverts = numverts & 1023; // remaining ten low order bits are vertex num
832
832
  polygonDimensions.push( numverts );
833
833
 
834
- for ( var j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );
834
+ for ( let j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );
835
835
 
836
836
  }
837
837
 
838
- var geometryData = {
838
+ const geometryData = {
839
839
  type: type,
840
840
  vertexIndices: indices,
841
841
  polygonDimensions: polygonDimensions,
@@ -862,8 +862,8 @@ class IFFParser {
862
862
  // PTAG { type[ID4], ( poly[VX], tag[U2] ) * }
863
863
  parsePolygonTagMapping( length ) {
864
864
 
865
- var finalOffset = this.reader.offset + length;
866
- var type = this.reader.getIDTag();
865
+ const finalOffset = this.reader.offset + length;
866
+ const type = this.reader.getIDTag();
867
867
  if ( type === 'SURF' ) this.parseMaterialIndices( finalOffset );
868
868
  else { //PART, SMGP, COLR not supported
869
869
 
@@ -880,8 +880,8 @@ class IFFParser {
880
880
 
881
881
  while ( this.reader.offset < finalOffset ) {
882
882
 
883
- var polygonIndex = this.reader.getVariableLengthIndex();
884
- var materialIndex = this.reader.getUint16();
883
+ const polygonIndex = this.reader.getVariableLengthIndex();
884
+ const materialIndex = this.reader.getUint16();
885
885
 
886
886
  this.currentLayer.geometry.materialIndices.push( polygonIndex, materialIndex );
887
887
 
@@ -896,7 +896,7 @@ class IFFParser {
896
896
  // print the chunk plus some bytes padding either side
897
897
  // printBuffer( this.reader.dv.buffer, this.reader.offset - 20, length + 40 );
898
898
 
899
- var data = this.reader.getString( length );
899
+ const data = this.reader.getString( length );
900
900
 
901
901
  this.currentForm[ blockID ] = data;
902
902
 
@@ -951,7 +951,7 @@ class DataViewReader {
951
951
 
952
952
  getUint8() {
953
953
 
954
- var value = this.dv.getUint8( this.offset );
954
+ const value = this.dv.getUint8( this.offset );
955
955
  this.offset += 1;
956
956
  return value;
957
957
 
@@ -959,7 +959,7 @@ class DataViewReader {
959
959
 
960
960
  getUint16() {
961
961
 
962
- var value = this.dv.getUint16( this.offset );
962
+ const value = this.dv.getUint16( this.offset );
963
963
  this.offset += 2;
964
964
  return value;
965
965
 
@@ -967,7 +967,7 @@ class DataViewReader {
967
967
 
968
968
  getInt32() {
969
969
 
970
- var value = this.dv.getInt32( this.offset, false );
970
+ const value = this.dv.getInt32( this.offset, false );
971
971
  this.offset += 4;
972
972
  return value;
973
973
 
@@ -975,7 +975,7 @@ class DataViewReader {
975
975
 
976
976
  getUint32() {
977
977
 
978
- var value = this.dv.getUint32( this.offset, false );
978
+ const value = this.dv.getUint32( this.offset, false );
979
979
  this.offset += 4;
980
980
  return value;
981
981
 
@@ -983,17 +983,15 @@ class DataViewReader {
983
983
 
984
984
  getUint64() {
985
985
 
986
- var low, high;
987
-
988
- high = this.getUint32();
989
- low = this.getUint32();
986
+ const low = this.getUint32();
987
+ const high = this.getUint32();
990
988
  return high * 0x100000000 + low;
991
989
 
992
990
  }
993
991
 
994
992
  getFloat32() {
995
993
 
996
- var value = this.dv.getFloat32( this.offset, false );
994
+ const value = this.dv.getFloat32( this.offset, false );
997
995
  this.offset += 4;
998
996
  return value;
999
997
 
@@ -1001,9 +999,9 @@ class DataViewReader {
1001
999
 
1002
1000
  getFloat32Array( size ) {
1003
1001
 
1004
- var a = [];
1002
+ const a = [];
1005
1003
 
1006
- for ( var i = 0; i < size; i ++ ) {
1004
+ for ( let i = 0; i < size; i ++ ) {
1007
1005
 
1008
1006
  a.push( this.getFloat32() );
1009
1007
 
@@ -1015,7 +1013,7 @@ class DataViewReader {
1015
1013
 
1016
1014
  getFloat64() {
1017
1015
 
1018
- var value = this.dv.getFloat64( this.offset, this.littleEndian );
1016
+ const value = this.dv.getFloat64( this.offset, this.littleEndian );
1019
1017
  this.offset += 8;
1020
1018
  return value;
1021
1019
 
@@ -1023,9 +1021,9 @@ class DataViewReader {
1023
1021
 
1024
1022
  getFloat64Array( size ) {
1025
1023
 
1026
- var a = [];
1024
+ const a = [];
1027
1025
 
1028
- for ( var i = 0; i < size; i ++ ) {
1026
+ for ( let i = 0; i < size; i ++ ) {
1029
1027
 
1030
1028
  a.push( this.getFloat64() );
1031
1029
 
@@ -1043,7 +1041,7 @@ class DataViewReader {
1043
1041
  // the four-byte form is being used and the first byte should be discarded or masked out.
1044
1042
  getVariableLengthIndex() {
1045
1043
 
1046
- var firstByte = this.getUint8();
1044
+ const firstByte = this.getUint8();
1047
1045
 
1048
1046
  if ( firstByte === 255 ) {
1049
1047
 
@@ -1099,7 +1097,7 @@ class DataViewReader {
1099
1097
 
1100
1098
  getStringArray( size ) {
1101
1099
 
1102
- var a = this.getString( size );
1100
+ let a = this.getString( size );
1103
1101
  a = a.split( '\0' );
1104
1102
 
1105
1103
  return a.filter( Boolean ); // return array with any empty strings removed
@@ -1118,6 +1116,14 @@ class Debugger {
1118
1116
  this.active = false;
1119
1117
  this.depth = 0;
1120
1118
  this.formList = [];
1119
+ this.offset = 0;
1120
+
1121
+ this.node = 0; // 0 = FORM, 1 = CHUNK, 2 = SUBNODE
1122
+ this.nodeID = 'FORM';
1123
+
1124
+ this.dataOffset = 0;
1125
+ this.length = 0;
1126
+ this.skipped = false;
1121
1127
 
1122
1128
  }
1123
1129
 
@@ -1131,7 +1137,7 @@ class Debugger {
1131
1137
 
1132
1138
  if ( ! this.active ) return;
1133
1139
 
1134
- var nodeType;
1140
+ let nodeType;
1135
1141
 
1136
1142
  switch ( this.node ) {
1137
1143
 
@@ -1174,7 +1180,7 @@ class Debugger {
1174
1180
 
1175
1181
  if ( ! this.active ) return;
1176
1182
 
1177
- for ( var i = this.formList.length - 1; i >= 0; i -- ) {
1183
+ for ( let i = this.formList.length - 1; i >= 0; i -- ) {
1178
1184
 
1179
1185
  if ( this.offset >= this.formList[ i ] ) {
1180
1186
 
@@ -1192,17 +1198,11 @@ class Debugger {
1192
1198
 
1193
1199
  // ************** UTILITY FUNCTIONS **************
1194
1200
 
1195
- function isEven( num ) {
1196
-
1197
- return num % 2;
1198
-
1199
- }
1200
-
1201
1201
  // calculate the length of the string in the buffer
1202
1202
  // this will be string.length + nullbyte + optional padbyte to make the length even
1203
1203
  function stringOffset( string ) {
1204
1204
 
1205
- return string.length + 1 + ( isEven( string.length + 1 ) ? 1 : 0 );
1205
+ return string.length + 1 + ( ( string.length + 1 ) % 2 );
1206
1206
 
1207
1207
  }
1208
1208