super-three 0.133.4 → 0.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -32,7 +32,6 @@ class TDSLoader extends Loader {
32
32
  this.debug = false;
33
33
 
34
34
  this.group = null;
35
- this.position = 0;
36
35
 
37
36
  this.materials = [];
38
37
  this.meshes = [];
@@ -97,7 +96,6 @@ class TDSLoader extends Loader {
97
96
  parse( arraybuffer, path ) {
98
97
 
99
98
  this.group = new Group();
100
- this.position = 0;
101
99
  this.materials = [];
102
100
  this.meshes = [];
103
101
 
@@ -123,31 +121,30 @@ class TDSLoader extends Loader {
123
121
  readFile( arraybuffer, path ) {
124
122
 
125
123
  const data = new DataView( arraybuffer );
126
- const chunk = this.readChunk( data );
124
+ const chunk = new Chunk( data, 0, this.debugMessage );
127
125
 
128
126
  if ( chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC ) {
129
127
 
130
- let next = this.nextChunk( data, chunk );
128
+ let next = chunk.readChunk();
131
129
 
132
- while ( next !== 0 ) {
130
+ while ( next ) {
133
131
 
134
- if ( next === M3D_VERSION ) {
132
+ if ( next.id === M3D_VERSION ) {
135
133
 
136
- const version = this.readDWord( data );
134
+ const version = next.readDWord();
137
135
  this.debugMessage( '3DS file version: ' + version );
138
136
 
139
- } else if ( next === MDATA ) {
137
+ } else if ( next.id === MDATA ) {
140
138
 
141
- this.resetPosition( data );
142
- this.readMeshData( data, path );
139
+ this.readMeshData( next, path );
143
140
 
144
141
  } else {
145
142
 
146
- this.debugMessage( 'Unknown main chunk: ' + next.toString( 16 ) );
143
+ this.debugMessage( 'Unknown main chunk: ' + next.hexId );
147
144
 
148
145
  }
149
146
 
150
- next = this.nextChunk( data, chunk );
147
+ next = chunk.readChunk();
151
148
 
152
149
  }
153
150
 
@@ -161,46 +158,43 @@ class TDSLoader extends Loader {
161
158
  * Read mesh data chunk.
162
159
  *
163
160
  * @method readMeshData
164
- * @param {Dataview} data Dataview in use.
161
+ * @param {Chunk} chunk to read mesh from
165
162
  * @param {String} path Path for external resources.
166
163
  */
167
- readMeshData( data, path ) {
164
+ readMeshData( chunk, path ) {
168
165
 
169
- const chunk = this.readChunk( data );
170
- let next = this.nextChunk( data, chunk );
166
+ let next = chunk.readChunk();
171
167
 
172
- while ( next !== 0 ) {
168
+ while ( next ) {
173
169
 
174
- if ( next === MESH_VERSION ) {
170
+ if ( next.id === MESH_VERSION ) {
175
171
 
176
- const version = + this.readDWord( data );
172
+ const version = + next.readDWord();
177
173
  this.debugMessage( 'Mesh Version: ' + version );
178
174
 
179
- } else if ( next === MASTER_SCALE ) {
175
+ } else if ( next.id === MASTER_SCALE ) {
180
176
 
181
- const scale = this.readFloat( data );
177
+ const scale = next.readFloat();
182
178
  this.debugMessage( 'Master scale: ' + scale );
183
179
  this.group.scale.set( scale, scale, scale );
184
180
 
185
- } else if ( next === NAMED_OBJECT ) {
181
+ } else if ( next.id === NAMED_OBJECT ) {
186
182
 
187
183
  this.debugMessage( 'Named Object' );
188
- this.resetPosition( data );
189
- this.readNamedObject( data );
184
+ this.readNamedObject( next );
190
185
 
191
- } else if ( next === MAT_ENTRY ) {
186
+ } else if ( next.id === MAT_ENTRY ) {
192
187
 
193
188
  this.debugMessage( 'Material' );
194
- this.resetPosition( data );
195
- this.readMaterialEntry( data, path );
189
+ this.readMaterialEntry( next, path );
196
190
 
197
191
  } else {
198
192
 
199
- this.debugMessage( 'Unknown MDATA chunk: ' + next.toString( 16 ) );
193
+ this.debugMessage( 'Unknown MDATA chunk: ' + next.hexId );
200
194
 
201
195
  }
202
196
 
203
- next = this.nextChunk( data, chunk );
197
+ next = chunk.readChunk();
204
198
 
205
199
  }
206
200
 
@@ -210,143 +204,131 @@ class TDSLoader extends Loader {
210
204
  * Read named object chunk.
211
205
  *
212
206
  * @method readNamedObject
213
- * @param {Dataview} data Dataview in use.
207
+ * @param {Chunk} chunk Chunk in use.
214
208
  */
215
- readNamedObject( data ) {
209
+ readNamedObject( chunk ) {
216
210
 
217
- const chunk = this.readChunk( data );
218
- const name = this.readString( data, 64 );
219
- chunk.cur = this.position;
211
+ const name = chunk.readString();
220
212
 
221
- let next = this.nextChunk( data, chunk );
222
- while ( next !== 0 ) {
213
+ let next = chunk.readChunk();
214
+ while ( next ) {
223
215
 
224
- if ( next === N_TRI_OBJECT ) {
216
+ if ( next.id === N_TRI_OBJECT ) {
225
217
 
226
- this.resetPosition( data );
227
- const mesh = this.readMesh( data );
218
+ const mesh = this.readMesh( next );
228
219
  mesh.name = name;
229
220
  this.meshes.push( mesh );
230
221
 
231
222
  } else {
232
223
 
233
- this.debugMessage( 'Unknown named object chunk: ' + next.toString( 16 ) );
224
+ this.debugMessage( 'Unknown named object chunk: ' + next.hexId );
234
225
 
235
226
  }
236
227
 
237
- next = this.nextChunk( data, chunk );
228
+ next = chunk.readChunk( );
238
229
 
239
230
  }
240
231
 
241
- this.endChunk( chunk );
242
-
243
232
  }
244
233
 
245
234
  /**
246
235
  * Read material data chunk and add it to the material list.
247
236
  *
248
237
  * @method readMaterialEntry
249
- * @param {Dataview} data Dataview in use.
238
+ * @param {Chunk} chunk Chunk in use.
250
239
  * @param {String} path Path for external resources.
251
240
  */
252
- readMaterialEntry( data, path ) {
241
+ readMaterialEntry( chunk, path ) {
253
242
 
254
- const chunk = this.readChunk( data );
255
- let next = this.nextChunk( data, chunk );
243
+ let next = chunk.readChunk();
256
244
  const material = new MeshPhongMaterial();
257
245
 
258
- while ( next !== 0 ) {
246
+ while ( next ) {
259
247
 
260
- if ( next === MAT_NAME ) {
248
+ if ( next.id === MAT_NAME ) {
261
249
 
262
- material.name = this.readString( data, 64 );
250
+ material.name = next.readString();
263
251
  this.debugMessage( ' Name: ' + material.name );
264
252
 
265
- } else if ( next === MAT_WIRE ) {
253
+ } else if ( next.id === MAT_WIRE ) {
266
254
 
267
255
  this.debugMessage( ' Wireframe' );
268
256
  material.wireframe = true;
269
257
 
270
- } else if ( next === MAT_WIRE_SIZE ) {
258
+ } else if ( next.id === MAT_WIRE_SIZE ) {
271
259
 
272
- const value = this.readByte( data );
260
+ const value = next.readByte();
273
261
  material.wireframeLinewidth = value;
274
262
  this.debugMessage( ' Wireframe Thickness: ' + value );
275
263
 
276
- } else if ( next === MAT_TWO_SIDE ) {
264
+ } else if ( next.id === MAT_TWO_SIDE ) {
277
265
 
278
266
  material.side = DoubleSide;
279
267
  this.debugMessage( ' DoubleSided' );
280
268
 
281
- } else if ( next === MAT_ADDITIVE ) {
269
+ } else if ( next.id === MAT_ADDITIVE ) {
282
270
 
283
271
  this.debugMessage( ' Additive Blending' );
284
272
  material.blending = AdditiveBlending;
285
273
 
286
- } else if ( next === MAT_DIFFUSE ) {
274
+ } else if ( next.id === MAT_DIFFUSE ) {
287
275
 
288
276
  this.debugMessage( ' Diffuse Color' );
289
- material.color = this.readColor( data );
277
+ material.color = this.readColor( next );
290
278
 
291
- } else if ( next === MAT_SPECULAR ) {
279
+ } else if ( next.id === MAT_SPECULAR ) {
292
280
 
293
281
  this.debugMessage( ' Specular Color' );
294
- material.specular = this.readColor( data );
282
+ material.specular = this.readColor( next );
295
283
 
296
- } else if ( next === MAT_AMBIENT ) {
284
+ } else if ( next.id === MAT_AMBIENT ) {
297
285
 
298
286
  this.debugMessage( ' Ambient color' );
299
- material.color = this.readColor( data );
287
+ material.color = this.readColor( next );
300
288
 
301
- } else if ( next === MAT_SHININESS ) {
289
+ } else if ( next.id === MAT_SHININESS ) {
302
290
 
303
- const shininess = this.readPercentage( data );
291
+ const shininess = this.readPercentage( next );
304
292
  material.shininess = shininess * 100;
305
293
  this.debugMessage( ' Shininess : ' + shininess );
306
294
 
307
- } else if ( next === MAT_TRANSPARENCY ) {
295
+ } else if ( next.id === MAT_TRANSPARENCY ) {
308
296
 
309
- const transparency = this.readPercentage( data );
297
+ const transparency = this.readPercentage( next );
310
298
  material.opacity = 1 - transparency;
311
299
  this.debugMessage( ' Transparency : ' + transparency );
312
300
  material.transparent = material.opacity < 1 ? true : false;
313
301
 
314
- } else if ( next === MAT_TEXMAP ) {
302
+ } else if ( next.id === MAT_TEXMAP ) {
315
303
 
316
304
  this.debugMessage( ' ColorMap' );
317
- this.resetPosition( data );
318
- material.map = this.readMap( data, path );
305
+ material.map = this.readMap( next, path );
319
306
 
320
- } else if ( next === MAT_BUMPMAP ) {
307
+ } else if ( next.id === MAT_BUMPMAP ) {
321
308
 
322
309
  this.debugMessage( ' BumpMap' );
323
- this.resetPosition( data );
324
- material.bumpMap = this.readMap( data, path );
310
+ material.bumpMap = this.readMap( next, path );
325
311
 
326
- } else if ( next === MAT_OPACMAP ) {
312
+ } else if ( next.id === MAT_OPACMAP ) {
327
313
 
328
314
  this.debugMessage( ' OpacityMap' );
329
- this.resetPosition( data );
330
- material.alphaMap = this.readMap( data, path );
315
+ material.alphaMap = this.readMap( next, path );
331
316
 
332
- } else if ( next === MAT_SPECMAP ) {
317
+ } else if ( next.id === MAT_SPECMAP ) {
333
318
 
334
319
  this.debugMessage( ' SpecularMap' );
335
- this.resetPosition( data );
336
- material.specularMap = this.readMap( data, path );
320
+ material.specularMap = this.readMap( next, path );
337
321
 
338
322
  } else {
339
323
 
340
- this.debugMessage( ' Unknown material chunk: ' + next.toString( 16 ) );
324
+ this.debugMessage( ' Unknown material chunk: ' + next.hexId );
341
325
 
342
326
  }
343
327
 
344
- next = this.nextChunk( data, chunk );
328
+ next = chunk.readChunk();
345
329
 
346
330
  }
347
331
 
348
- this.endChunk( chunk );
349
-
350
332
  this.materials[ material.name ] = material;
351
333
 
352
334
  }
@@ -355,13 +337,12 @@ class TDSLoader extends Loader {
355
337
  * Read mesh data chunk.
356
338
  *
357
339
  * @method readMesh
358
- * @param {Dataview} data Dataview in use.
340
+ * @param {Chunk} chunk Chunk in use.
359
341
  * @return {Mesh} The parsed mesh.
360
342
  */
361
- readMesh( data ) {
343
+ readMesh( chunk ) {
362
344
 
363
- const chunk = this.readChunk( data );
364
- let next = this.nextChunk( data, chunk );
345
+ let next = chunk.readChunk( );
365
346
 
366
347
  const geometry = new BufferGeometry();
367
348
 
@@ -369,11 +350,11 @@ class TDSLoader extends Loader {
369
350
  const mesh = new Mesh( geometry, material );
370
351
  mesh.name = 'mesh';
371
352
 
372
- while ( next !== 0 ) {
353
+ while ( next ) {
373
354
 
374
- if ( next === POINT_ARRAY ) {
355
+ if ( next.id === POINT_ARRAY ) {
375
356
 
376
- const points = this.readWord( data );
357
+ const points = next.readWord( );
377
358
 
378
359
  this.debugMessage( ' Vertex: ' + points );
379
360
 
@@ -383,22 +364,21 @@ class TDSLoader extends Loader {
383
364
 
384
365
  for ( let i = 0; i < points; i ++ ) {
385
366
 
386
- vertices.push( this.readFloat( data ) );
387
- vertices.push( this.readFloat( data ) );
388
- vertices.push( this.readFloat( data ) );
367
+ vertices.push( next.readFloat( ) );
368
+ vertices.push( next.readFloat( ) );
369
+ vertices.push( next.readFloat( ) );
389
370
 
390
371
  }
391
372
 
392
373
  geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
393
374
 
394
- } else if ( next === FACE_ARRAY ) {
375
+ } else if ( next.id === FACE_ARRAY ) {
395
376
 
396
- this.resetPosition( data );
397
- this.readFaceArray( data, mesh );
377
+ this.readFaceArray( next, mesh );
398
378
 
399
- } else if ( next === TEX_VERTS ) {
379
+ } else if ( next.id === TEX_VERTS ) {
400
380
 
401
- const texels = this.readWord( data );
381
+ const texels = next.readWord( );
402
382
 
403
383
  this.debugMessage( ' UV: ' + texels );
404
384
 
@@ -406,24 +386,24 @@ class TDSLoader extends Loader {
406
386
 
407
387
  const uvs = [];
408
388
 
409
- for ( let i = 0; i < texels; i ++ ) {
389
+ for ( let i = 0; i < texels; i ++ ) {
410
390
 
411
- uvs.push( this.readFloat( data ) );
412
- uvs.push( this.readFloat( data ) );
391
+ uvs.push( next.readFloat( ) );
392
+ uvs.push( next.readFloat( ) );
413
393
 
414
394
  }
415
395
 
416
396
  geometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
417
397
 
418
398
 
419
- } else if ( next === MESH_MATRIX ) {
399
+ } else if ( next.id === MESH_MATRIX ) {
420
400
 
421
401
  this.debugMessage( ' Tranformation Matrix (TODO)' );
422
402
 
423
403
  const values = [];
424
404
  for ( let i = 0; i < 12; i ++ ) {
425
405
 
426
- values[ i ] = this.readFloat( data );
406
+ values[ i ] = next.readFloat( );
427
407
 
428
408
  }
429
409
 
@@ -463,16 +443,14 @@ class TDSLoader extends Loader {
463
443
 
464
444
  } else {
465
445
 
466
- this.debugMessage( ' Unknown mesh chunk: ' + next.toString( 16 ) );
446
+ this.debugMessage( ' Unknown mesh chunk: ' + next.hexId );
467
447
 
468
448
  }
469
449
 
470
- next = this.nextChunk( data, chunk );
450
+ next = chunk.readChunk( );
471
451
 
472
452
  }
473
453
 
474
- this.endChunk( chunk );
475
-
476
454
  geometry.computeVertexNormals();
477
455
 
478
456
  return mesh;
@@ -483,13 +461,12 @@ class TDSLoader extends Loader {
483
461
  * Read face array data chunk.
484
462
  *
485
463
  * @method readFaceArray
486
- * @param {Dataview} data Dataview in use.
464
+ * @param {Chunk} chunk Chunk in use.
487
465
  * @param {Mesh} mesh Mesh to be filled with the data read.
488
466
  */
489
- readFaceArray( data, mesh ) {
467
+ readFaceArray( chunk, mesh ) {
490
468
 
491
- const chunk = this.readChunk( data );
492
- const faces = this.readWord( data );
469
+ const faces = chunk.readWord( );
493
470
 
494
471
  this.debugMessage( ' Faces: ' + faces );
495
472
 
@@ -497,9 +474,9 @@ class TDSLoader extends Loader {
497
474
 
498
475
  for ( let i = 0; i < faces; ++ i ) {
499
476
 
500
- index.push( this.readWord( data ), this.readWord( data ), this.readWord( data ) );
477
+ index.push( chunk.readWord( ), chunk.readWord( ), chunk.readWord( ) );
501
478
 
502
- this.readWord( data ); // visibility
479
+ chunk.readWord( ); // visibility
503
480
 
504
481
  }
505
482
 
@@ -510,17 +487,15 @@ class TDSLoader extends Loader {
510
487
  let materialIndex = 0;
511
488
  let start = 0;
512
489
 
513
- while ( this.position < chunk.end ) {
490
+ while ( ! chunk.endOfChunk ) {
514
491
 
515
- const subchunk = this.readChunk( data );
492
+ const subchunk = chunk.readChunk( );
516
493
 
517
494
  if ( subchunk.id === MSH_MAT_GROUP ) {
518
495
 
519
496
  this.debugMessage( ' Material Group' );
520
497
 
521
- this.resetPosition( data );
522
-
523
- const group = this.readMaterialGroup( data );
498
+ const group = this.readMaterialGroup( subchunk );
524
499
  const count = group.index.length * 3; // assuming successive indices
525
500
 
526
501
  mesh.geometry.addGroup( start, count, materialIndex );
@@ -540,78 +515,71 @@ class TDSLoader extends Loader {
540
515
 
541
516
  } else {
542
517
 
543
- this.debugMessage( ' Unknown face array chunk: ' + subchunk.toString( 16 ) );
518
+ this.debugMessage( ' Unknown face array chunk: ' + subchunk.hexId );
544
519
 
545
520
  }
546
521
 
547
- this.endChunk( subchunk );
548
-
549
522
  }
550
523
 
551
524
  if ( mesh.material.length === 1 ) mesh.material = mesh.material[ 0 ]; // for backwards compatibility
552
525
 
553
- this.endChunk( chunk );
554
-
555
526
  }
556
527
 
557
528
  /**
558
529
  * Read texture map data chunk.
559
530
  *
560
531
  * @method readMap
561
- * @param {Dataview} data Dataview in use.
532
+ * @param {Chunk} chunk Chunk in use.
562
533
  * @param {String} path Path for external resources.
563
534
  * @return {Texture} Texture read from this data chunk.
564
535
  */
565
- readMap( data, path ) {
536
+ readMap( chunk, path ) {
566
537
 
567
- const chunk = this.readChunk( data );
568
- let next = this.nextChunk( data, chunk );
538
+ let next = chunk.readChunk( );
569
539
  let texture = {};
570
540
 
571
541
  const loader = new TextureLoader( this.manager );
572
542
  loader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );
573
543
 
574
- while ( next !== 0 ) {
544
+ while ( next ) {
575
545
 
576
- if ( next === MAT_MAPNAME ) {
546
+ if ( next.id === MAT_MAPNAME ) {
577
547
 
578
- const name = this.readString( data, 128 );
548
+ const name = next.readString();
579
549
  texture = loader.load( name );
580
550
 
581
551
  this.debugMessage( ' File: ' + path + name );
582
552
 
583
- } else if ( next === MAT_MAP_UOFFSET ) {
553
+ } else if ( next.id === MAT_MAP_UOFFSET ) {
584
554
 
585
- texture.offset.x = this.readFloat( data );
555
+ texture.offset.x = next.readFloat( );
586
556
  this.debugMessage( ' OffsetX: ' + texture.offset.x );
587
557
 
588
- } else if ( next === MAT_MAP_VOFFSET ) {
558
+ } else if ( next.id === MAT_MAP_VOFFSET ) {
589
559
 
590
- texture.offset.y = this.readFloat( data );
560
+ texture.offset.y = next.readFloat( );
591
561
  this.debugMessage( ' OffsetY: ' + texture.offset.y );
592
562
 
593
- } else if ( next === MAT_MAP_USCALE ) {
563
+ } else if ( next.id === MAT_MAP_USCALE ) {
594
564
 
595
- texture.repeat.x = this.readFloat( data );
565
+ texture.repeat.x = next.readFloat( );
596
566
  this.debugMessage( ' RepeatX: ' + texture.repeat.x );
597
567
 
598
- } else if ( next === MAT_MAP_VSCALE ) {
568
+ } else if ( next.id === MAT_MAP_VSCALE ) {
599
569
 
600
- texture.repeat.y = this.readFloat( data );
570
+ texture.repeat.y = next.readFloat( );
601
571
  this.debugMessage( ' RepeatY: ' + texture.repeat.y );
602
572
 
603
573
  } else {
604
574
 
605
- this.debugMessage( ' Unknown map chunk: ' + next.toString( 16 ) );
575
+ this.debugMessage( ' Unknown map chunk: ' + next.hexId );
606
576
 
607
577
  }
608
578
 
609
- next = this.nextChunk( data, chunk );
579
+ next = chunk.readChunk( );
610
580
 
611
581
  }
612
582
 
613
- this.endChunk( chunk );
614
-
615
583
  return texture;
616
584
 
617
585
  }
@@ -620,14 +588,13 @@ class TDSLoader extends Loader {
620
588
  * Read material group data chunk.
621
589
  *
622
590
  * @method readMaterialGroup
623
- * @param {Dataview} data Dataview in use.
591
+ * @param {Chunk} chunk Chunk in use.
624
592
  * @return {Object} Object with name and index of the object.
625
593
  */
626
- readMaterialGroup( data ) {
594
+ readMaterialGroup( chunk ) {
627
595
 
628
- this.readChunk( data );
629
- const name = this.readString( data, 64 );
630
- const numFaces = this.readWord( data );
596
+ const name = chunk.readString();
597
+ const numFaces = chunk.readWord();
631
598
 
632
599
  this.debugMessage( ' Name: ' + name );
633
600
  this.debugMessage( ' Faces: ' + numFaces );
@@ -635,7 +602,7 @@ class TDSLoader extends Loader {
635
602
  const index = [];
636
603
  for ( let i = 0; i < numFaces; ++ i ) {
637
604
 
638
- index.push( this.readWord( data ) );
605
+ index.push( chunk.readWord( ) );
639
606
 
640
607
  }
641
608
 
@@ -647,29 +614,29 @@ class TDSLoader extends Loader {
647
614
  * Read a color value.
648
615
  *
649
616
  * @method readColor
650
- * @param {DataView} data Dataview.
617
+ * @param {Chunk} chunk Chunk.
651
618
  * @return {Color} Color value read..
652
619
  */
653
- readColor( data ) {
620
+ readColor( chunk ) {
654
621
 
655
- const chunk = this.readChunk( data );
622
+ const subChunk = chunk.readChunk( );
656
623
  const color = new Color();
657
624
 
658
- if ( chunk.id === COLOR_24 || chunk.id === LIN_COLOR_24 ) {
625
+ if ( subChunk.id === COLOR_24 || subChunk.id === LIN_COLOR_24 ) {
659
626
 
660
- const r = this.readByte( data );
661
- const g = this.readByte( data );
662
- const b = this.readByte( data );
627
+ const r = subChunk.readByte( );
628
+ const g = subChunk.readByte( );
629
+ const b = subChunk.readByte( );
663
630
 
664
631
  color.setRGB( r / 255, g / 255, b / 255 );
665
632
 
666
633
  this.debugMessage( ' Color: ' + color.r + ', ' + color.g + ', ' + color.b );
667
634
 
668
- } else if ( chunk.id === COLOR_F || chunk.id === LIN_COLOR_F ) {
635
+ } else if ( subChunk.id === COLOR_F || subChunk.id === LIN_COLOR_F ) {
669
636
 
670
- const r = this.readFloat( data );
671
- const g = this.readFloat( data );
672
- const b = this.readFloat( data );
637
+ const r = subChunk.readFloat( );
638
+ const g = subChunk.readFloat( );
639
+ const b = subChunk.readFloat( );
673
640
 
674
641
  color.setRGB( r, g, b );
675
642
 
@@ -677,88 +644,146 @@ class TDSLoader extends Loader {
677
644
 
678
645
  } else {
679
646
 
680
- this.debugMessage( ' Unknown color chunk: ' + chunk.toString( 16 ) );
647
+ this.debugMessage( ' Unknown color chunk: ' + subChunk.hexId );
681
648
 
682
649
  }
683
650
 
684
- this.endChunk( chunk );
685
651
  return color;
686
652
 
687
653
  }
688
654
 
689
655
  /**
690
- * Read next chunk of data.
656
+ * Read percentage value.
691
657
  *
692
- * @method readChunk
693
- * @param {DataView} data Dataview.
694
- * @return {Object} Chunk of data read.
658
+ * @method readPercentage
659
+ * @param {Chunk} chunk Chunk to read data from.
660
+ * @return {Number} Data read from the dataview.
695
661
  */
696
- readChunk( data ) {
662
+ readPercentage( chunk ) {
697
663
 
698
- const chunk = {};
664
+ const subChunk = chunk.readChunk( );
699
665
 
700
- chunk.cur = this.position;
701
- chunk.id = this.readWord( data );
702
- chunk.size = this.readDWord( data );
703
- chunk.end = chunk.cur + chunk.size;
704
- chunk.cur += 6;
666
+ switch ( subChunk.id ) {
705
667
 
706
- return chunk;
668
+ case INT_PERCENTAGE:
669
+ return ( subChunk.readShort( ) / 100 );
670
+ break;
671
+
672
+ case FLOAT_PERCENTAGE:
673
+ return subChunk.readFloat( );
674
+ break;
675
+
676
+ default:
677
+ this.debugMessage( ' Unknown percentage chunk: ' + subChunk.hexId );
678
+ return 0;
679
+
680
+ }
707
681
 
708
682
  }
709
683
 
710
684
  /**
711
- * Set position to the end of the current chunk of data.
685
+ * Print debug message to the console.
712
686
  *
713
- * @method endChunk
714
- * @param {Object} chunk Data chunk.
687
+ * Is controlled by a flag to show or hide debug messages.
688
+ *
689
+ * @method debugMessage
690
+ * @param {Object} message Debug message to print to the console.
715
691
  */
716
- endChunk( chunk ) {
692
+ debugMessage( message ) {
717
693
 
718
- this.position = chunk.end;
694
+ if ( this.debug ) {
695
+
696
+ console.log( message );
697
+
698
+ }
719
699
 
720
700
  }
721
701
 
702
+ }
703
+
704
+
705
+ /** Read data/sub-chunks from chunk */
706
+ class Chunk {
707
+
722
708
  /**
723
- * Move to the next data chunk.
709
+ * Create a new chunk
724
710
  *
725
- * @method nextChunk
726
- * @param {DataView} data Dataview.
727
- * @param {Object} chunk Data chunk.
711
+ * @class Chunk
712
+ * @param {DataView} data DataView to read from.
713
+ * @param {Number} position in data.
714
+ * @param {Function} debugMessage logging callback.
728
715
  */
729
- nextChunk( data, chunk ) {
716
+ constructor( data, position, debugMessage ) {
730
717
 
731
- if ( chunk.cur >= chunk.end ) {
718
+ this.data = data;
719
+ // the offset to the begin of this chunk
720
+ this.offset = position;
721
+ // the current reading position
722
+ this.position = position;
723
+ this.debugMessage = debugMessage;
732
724
 
733
- return 0;
725
+ if ( this.debugMessage instanceof Function ) {
726
+
727
+ this.debugMessage = function () {};
728
+
729
+ }
730
+
731
+ this.id = this.readWord();
732
+ this.size = this.readDWord();
733
+ this.end = this.offset + this.size;
734
+
735
+ if ( this.end > data.byteLength ) {
736
+
737
+ this.debugMessage( 'Bad chunk size for chunk at ' + position );
734
738
 
735
739
  }
736
740
 
737
- this.position = chunk.cur;
741
+ }
742
+
743
+ /**
744
+ * read a sub cchunk.
745
+ *
746
+ * @method readChunk
747
+ * @return {Chunk | null} next sub chunk
748
+ */
749
+ readChunk() {
750
+
751
+ if ( this.endOfChunk ) {
752
+
753
+ return null;
754
+
755
+ }
738
756
 
739
757
  try {
740
758
 
741
- const next = this.readChunk( data );
742
- chunk.cur += next.size;
743
- return next.id;
759
+ const next = new Chunk( this.data, this.position, this.debugMessage );
760
+ this.position += next.size;
761
+ return next;
744
762
 
745
763
  } catch ( e ) {
746
764
 
747
765
  this.debugMessage( 'Unable to read chunk at ' + this.position );
748
- return 0;
766
+ return null;
749
767
 
750
768
  }
751
769
 
752
770
  }
753
771
 
754
772
  /**
755
- * Reset dataview position.
773
+ * return the ID of this chunk as Hex
756
774
  *
757
- * @method resetPosition
775
+ * @method idToString
776
+ * @return {String} hex-string of id
758
777
  */
759
- resetPosition() {
778
+ get hexId() {
760
779
 
761
- this.position -= 6;
780
+ return this.id.toString( 16 );
781
+
782
+ }
783
+
784
+ get endOfChunk() {
785
+
786
+ return this.position >= this.end;
762
787
 
763
788
  }
764
789
 
@@ -766,12 +791,11 @@ class TDSLoader extends Loader {
766
791
  * Read byte value.
767
792
  *
768
793
  * @method readByte
769
- * @param {DataView} data Dataview to read data from.
770
794
  * @return {Number} Data read from the dataview.
771
795
  */
772
- readByte( data ) {
796
+ readByte() {
773
797
 
774
- const v = data.getUint8( this.position, true );
798
+ const v = this.data.getUint8( this.position, true );
775
799
  this.position += 1;
776
800
  return v;
777
801
 
@@ -781,20 +805,20 @@ class TDSLoader extends Loader {
781
805
  * Read 32 bit float value.
782
806
  *
783
807
  * @method readFloat
784
- * @param {DataView} data Dataview to read data from.
785
808
  * @return {Number} Data read from the dataview.
786
809
  */
787
- readFloat( data ) {
810
+ readFloat() {
788
811
 
789
812
  try {
790
813
 
791
- const v = data.getFloat32( this.position, true );
814
+ const v = this.data.getFloat32( this.position, true );
792
815
  this.position += 4;
793
816
  return v;
794
817
 
795
818
  } catch ( e ) {
796
819
 
797
- this.debugMessage( e + ' ' + this.position + ' ' + data.byteLength );
820
+ this.debugMessage( e + ' ' + this.position + ' ' + this.data.byteLength );
821
+ return 0;
798
822
 
799
823
  }
800
824
 
@@ -804,12 +828,11 @@ class TDSLoader extends Loader {
804
828
  * Read 32 bit signed integer value.
805
829
  *
806
830
  * @method readInt
807
- * @param {DataView} data Dataview to read data from.
808
831
  * @return {Number} Data read from the dataview.
809
832
  */
810
- readInt( data ) {
833
+ readInt() {
811
834
 
812
- const v = data.getInt32( this.position, true );
835
+ const v = this.data.getInt32( this.position, true );
813
836
  this.position += 4;
814
837
  return v;
815
838
 
@@ -819,12 +842,11 @@ class TDSLoader extends Loader {
819
842
  * Read 16 bit signed integer value.
820
843
  *
821
844
  * @method readShort
822
- * @param {DataView} data Dataview to read data from.
823
845
  * @return {Number} Data read from the dataview.
824
846
  */
825
- readShort( data ) {
847
+ readShort() {
826
848
 
827
- const v = data.getInt16( this.position, true );
849
+ const v = this.data.getInt16( this.position, true );
828
850
  this.position += 2;
829
851
  return v;
830
852
 
@@ -834,12 +856,11 @@ class TDSLoader extends Loader {
834
856
  * Read 64 bit unsigned integer value.
835
857
  *
836
858
  * @method readDWord
837
- * @param {DataView} data Dataview to read data from.
838
859
  * @return {Number} Data read from the dataview.
839
860
  */
840
- readDWord( data ) {
861
+ readDWord() {
841
862
 
842
- const v = data.getUint32( this.position, true );
863
+ const v = this.data.getUint32( this.position, true );
843
864
  this.position += 4;
844
865
  return v;
845
866
 
@@ -849,39 +870,30 @@ class TDSLoader extends Loader {
849
870
  * Read 32 bit unsigned integer value.
850
871
  *
851
872
  * @method readWord
852
- * @param {DataView} data Dataview to read data from.
853
873
  * @return {Number} Data read from the dataview.
854
874
  */
855
- readWord( data ) {
875
+ readWord() {
856
876
 
857
- const v = data.getUint16( this.position, true );
877
+ const v = this.data.getUint16( this.position, true );
858
878
  this.position += 2;
859
879
  return v;
860
880
 
861
881
  }
862
882
 
863
883
  /**
864
- * Read string value.
884
+ * Read NULL terminated ASCII string value from chunk-pos.
865
885
  *
866
886
  * @method readString
867
- * @param {DataView} data Dataview to read data from.
868
- * @param {Number} maxLength Max size of the string to be read.
869
887
  * @return {String} Data read from the dataview.
870
888
  */
871
- readString( data, maxLength ) {
889
+ readString() {
872
890
 
873
891
  let s = '';
874
-
875
- for ( let i = 0; i < maxLength; i ++ ) {
876
-
877
- const c = this.readByte( data );
878
- if ( ! c ) {
879
-
880
- break;
881
-
882
- }
892
+ let c = this.readByte();
893
+ while ( c ) {
883
894
 
884
895
  s += String.fromCharCode( c );
896
+ c = this.readByte();
885
897
 
886
898
  }
887
899
 
@@ -889,57 +901,6 @@ class TDSLoader extends Loader {
889
901
 
890
902
  }
891
903
 
892
- /**
893
- * Read percentage value.
894
- *
895
- * @method readPercentage
896
- * @param {DataView} data Dataview to read data from.
897
- * @return {Number} Data read from the dataview.
898
- */
899
- readPercentage( data ) {
900
-
901
- const chunk = this.readChunk( data );
902
- let value;
903
-
904
- switch ( chunk.id ) {
905
-
906
- case INT_PERCENTAGE:
907
- value = ( this.readShort( data ) / 100 );
908
- break;
909
-
910
- case FLOAT_PERCENTAGE:
911
- value = this.readFloat( data );
912
- break;
913
-
914
- default:
915
- this.debugMessage( ' Unknown percentage chunk: ' + chunk.toString( 16 ) );
916
-
917
- }
918
-
919
- this.endChunk( chunk );
920
-
921
- return value;
922
-
923
- }
924
-
925
- /**
926
- * Print debug message to the console.
927
- *
928
- * Is controlled by a flag to show or hide debug messages.
929
- *
930
- * @method debugMessage
931
- * @param {Object} message Debug message to print to the console.
932
- */
933
- debugMessage( message ) {
934
-
935
- if ( this.debug ) {
936
-
937
- console.log( message );
938
-
939
- }
940
-
941
- }
942
-
943
904
  }
944
905
 
945
906
  // const NULL_CHUNK = 0x0000;