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
@@ -30,14 +30,75 @@ class LatheGeometry extends BufferGeometry {
30
30
  const indices = [];
31
31
  const vertices = [];
32
32
  const uvs = [];
33
+ const initNormals = [];
34
+ const normals = [];
33
35
 
34
36
  // helper variables
35
37
 
36
38
  const inverseSegments = 1.0 / segments;
37
39
  const vertex = new Vector3();
38
40
  const uv = new Vector2();
41
+ const normal = new Vector3();
42
+ const curNormal = new Vector3();
43
+ const prevNormal = new Vector3();
44
+ let dx = 0;
45
+ let dy = 0;
39
46
 
40
- // generate vertices and uvs
47
+ // pre-compute normals for initial "meridian"
48
+
49
+ for ( let j = 0; j <= ( points.length - 1 ); j ++ ) {
50
+
51
+ switch ( j ) {
52
+
53
+ case 0: // special handling for 1st vertex on path
54
+
55
+ dx = points[ j + 1 ].x - points[ j ].x;
56
+ dy = points[ j + 1 ].y - points[ j ].y;
57
+
58
+ normal.x = dy * 1.0;
59
+ normal.y = - dx;
60
+ normal.z = dy * 0.0;
61
+
62
+ prevNormal.copy( normal );
63
+
64
+ normal.normalize();
65
+
66
+ initNormals.push( normal.x, normal.y, normal.z );
67
+
68
+ break;
69
+
70
+ case ( points.length - 1 ): // special handling for last Vertex on path
71
+
72
+ initNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );
73
+
74
+ break;
75
+
76
+ default: // default handling for all vertices in between
77
+
78
+ dx = points[ j + 1 ].x - points[ j ].x;
79
+ dy = points[ j + 1 ].y - points[ j ].y;
80
+
81
+ normal.x = dy * 1.0;
82
+ normal.y = - dx;
83
+ normal.z = dy * 0.0;
84
+
85
+ curNormal.copy( normal );
86
+
87
+ normal.x += prevNormal.x;
88
+ normal.y += prevNormal.y;
89
+ normal.z += prevNormal.z;
90
+
91
+ normal.normalize();
92
+
93
+ initNormals.push( normal.x, normal.y, normal.z );
94
+
95
+ prevNormal.copy( curNormal );
96
+
97
+ }
98
+
99
+ }
100
+
101
+ // generate vertices, uvs and normals
41
102
 
42
103
  for ( let i = 0; i <= segments; i ++ ) {
43
104
 
@@ -63,6 +124,13 @@ class LatheGeometry extends BufferGeometry {
63
124
 
64
125
  uvs.push( uv.x, uv.y );
65
126
 
127
+ // normal
128
+
129
+ const x = initNormals[ 3 * j + 0 ] * sin;
130
+ const y = initNormals[ 3 * j + 1 ];
131
+ const z = initNormals[ 3 * j + 0 ] * cos;
132
+
133
+ normals.push( x, y, z );
66
134
 
67
135
  }
68
136
 
@@ -95,52 +163,7 @@ class LatheGeometry extends BufferGeometry {
95
163
  this.setIndex( indices );
96
164
  this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
97
165
  this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
98
-
99
- // generate normals
100
-
101
- this.computeVertexNormals();
102
-
103
- // if the geometry is closed, we need to average the normals along the seam.
104
- // because the corresponding vertices are identical (but still have different UVs).
105
-
106
- if ( phiLength === Math.PI * 2 ) {
107
-
108
- const normals = this.attributes.normal.array;
109
- const n1 = new Vector3();
110
- const n2 = new Vector3();
111
- const n = new Vector3();
112
-
113
- // this is the buffer offset for the last line of vertices
114
-
115
- const base = segments * points.length * 3;
116
-
117
- for ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {
118
-
119
- // select the normal of the vertex in the first line
120
-
121
- n1.x = normals[ j + 0 ];
122
- n1.y = normals[ j + 1 ];
123
- n1.z = normals[ j + 2 ];
124
-
125
- // select the normal of the vertex in the last line
126
-
127
- n2.x = normals[ base + j + 0 ];
128
- n2.y = normals[ base + j + 1 ];
129
- n2.z = normals[ base + j + 2 ];
130
-
131
- // average normals
132
-
133
- n.addVectors( n1, n2 ).normalize();
134
-
135
- // assign the new values to both normals
136
-
137
- normals[ j + 0 ] = normals[ base + j + 0 ] = n.x;
138
- normals[ j + 1 ] = normals[ base + j + 1 ] = n.y;
139
- normals[ j + 2 ] = normals[ base + j + 2 ] = n.z;
140
-
141
- }
142
-
143
- }
166
+ this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
144
167
 
145
168
  }
146
169
 
@@ -13,7 +13,7 @@ const _camera = /*@__PURE__*/ new Camera();
13
13
  * - shows frustum, line of sight and up of the camera
14
14
  * - suitable for fast updates
15
15
  * - based on frustum visualization in lightgl.js shadowmap example
16
- * http://evanw.github.com/lightgl.js/tests/shadowmap.html
16
+ * https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html
17
17
  */
18
18
 
19
19
  class CameraHelper extends LineSegments {
@@ -19,19 +19,17 @@ class FileLoader extends Loader {
19
19
 
20
20
  url = this.manager.resolveURL( url );
21
21
 
22
- const scope = this;
23
-
24
22
  const cached = Cache.get( url );
25
23
 
26
24
  if ( cached !== undefined ) {
27
25
 
28
- scope.manager.itemStart( url );
26
+ this.manager.itemStart( url );
29
27
 
30
- setTimeout( function () {
28
+ setTimeout( () => {
31
29
 
32
30
  if ( onLoad ) onLoad( cached );
33
31
 
34
- scope.manager.itemEnd( url );
32
+ this.manager.itemEnd( url );
35
33
 
36
34
  }, 0 );
37
35
 
@@ -55,225 +53,181 @@ class FileLoader extends Loader {
55
53
 
56
54
  }
57
55
 
58
- // Check for data: URI
59
- const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
60
- const dataUriRegexResult = url.match( dataUriRegex );
61
- let request;
62
-
63
- // Safari can not handle Data URIs through XMLHttpRequest so process manually
64
- if ( dataUriRegexResult ) {
65
-
66
- const mimeType = dataUriRegexResult[ 1 ];
67
- const isBase64 = !! dataUriRegexResult[ 2 ];
68
-
69
- let data = dataUriRegexResult[ 3 ];
70
- data = decodeURIComponent( data );
71
-
72
- if ( isBase64 ) data = atob( data );
56
+ // Initialise array for duplicate requests
57
+ loading[ url ] = [];
73
58
 
74
- try {
59
+ loading[ url ].push( {
60
+ onLoad: onLoad,
61
+ onProgress: onProgress,
62
+ onError: onError,
63
+ } );
75
64
 
76
- let response;
77
- const responseType = ( this.responseType || '' ).toLowerCase();
78
-
79
- switch ( responseType ) {
80
-
81
- case 'arraybuffer':
82
- case 'blob':
65
+ // create request
66
+ const req = new Request( url, {
67
+ headers: new Headers( this.requestHeader ),
68
+ credentials: this.withCredentials ? 'include' : 'same-origin',
69
+ // An abort controller could be added within a future PR
70
+ } );
83
71
 
84
- const view = new Uint8Array( data.length );
72
+ // start the fetch
73
+ fetch( req )
74
+ .then( response => {
85
75
 
86
- for ( let i = 0; i < data.length; i ++ ) {
76
+ if ( response.status === 200 || response.status === 0 ) {
87
77
 
88
- view[ i ] = data.charCodeAt( i );
89
-
90
- }
91
-
92
- if ( responseType === 'blob' ) {
93
-
94
- response = new Blob( [ view.buffer ], { type: mimeType } );
95
-
96
- } else {
97
-
98
- response = view.buffer;
99
-
100
- }
101
-
102
- break;
103
-
104
- case 'document':
105
-
106
- const parser = new DOMParser();
107
- response = parser.parseFromString( data, mimeType );
108
-
109
- break;
78
+ // Some browsers return HTTP Status 0 when using non-http protocol
79
+ // e.g. 'file://' or 'data://'. Handle as success.
110
80
 
111
- case 'json':
81
+ if ( response.status === 0 ) {
112
82
 
113
- response = JSON.parse( data );
83
+ console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
114
84
 
115
- break;
85
+ }
116
86
 
117
- default: // 'text' or other
87
+ if ( typeof ReadableStream === 'undefined' || response.body.getReader === undefined ) {
118
88
 
119
- response = data;
89
+ return response;
120
90
 
121
- break;
91
+ }
122
92
 
123
- }
93
+ const callbacks = loading[ url ];
94
+ const reader = response.body.getReader();
95
+ const contentLength = response.headers.get( 'Content-Length' );
96
+ const total = contentLength ? parseInt( contentLength ) : 0;
97
+ const lengthComputable = total !== 0;
98
+ let loaded = 0;
124
99
 
125
- // Wait for next browser tick like standard XMLHttpRequest event dispatching does
126
- setTimeout( function () {
100
+ // periodically read data into the new stream tracking while download progress
101
+ const stream = new ReadableStream( {
102
+ start( controller ) {
127
103
 
128
- if ( onLoad ) onLoad( response );
104
+ readData();
129
105
 
130
- scope.manager.itemEnd( url );
106
+ function readData() {
131
107
 
132
- }, 0 );
108
+ reader.read().then( ( { done, value } ) => {
133
109
 
134
- } catch ( error ) {
110
+ if ( done ) {
135
111
 
136
- // Wait for next browser tick like standard XMLHttpRequest event dispatching does
137
- setTimeout( function () {
112
+ controller.close();
138
113
 
139
- if ( onError ) onError( error );
114
+ } else {
140
115
 
141
- scope.manager.itemError( url );
142
- scope.manager.itemEnd( url );
116
+ loaded += value.byteLength;
143
117
 
144
- }, 0 );
118
+ const event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );
119
+ for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
145
120
 
146
- }
121
+ const callback = callbacks[ i ];
122
+ if ( callback.onProgress ) callback.onProgress( event );
147
123
 
148
- } else {
124
+ }
149
125
 
150
- // Initialise array for duplicate requests
126
+ controller.enqueue( value );
127
+ readData();
151
128
 
152
- loading[ url ] = [];
129
+ }
153
130
 
154
- loading[ url ].push( {
131
+ } );
155
132
 
156
- onLoad: onLoad,
157
- onProgress: onProgress,
158
- onError: onError
133
+ }
159
134
 
160
- } );
135
+ }
161
136
 
162
- request = new XMLHttpRequest();
137
+ } );
163
138
 
164
- request.open( 'GET', url, true );
139
+ return new Response( stream );
165
140
 
166
- request.addEventListener( 'load', function ( event ) {
141
+ } else {
167
142
 
168
- const response = this.response;
143
+ throw Error( `fetch for "${response.url}" responded with ${response.status}: ${response.statusText}` );
169
144
 
170
- const callbacks = loading[ url ];
145
+ }
171
146
 
172
- delete loading[ url ];
147
+ } )
148
+ .then( response => {
173
149
 
174
- if ( this.status === 200 || this.status === 0 ) {
150
+ switch ( this.responseType ) {
175
151
 
176
- // Some browsers return HTTP Status 0 when using non-http protocol
177
- // e.g. 'file://' or 'data://'. Handle as success.
152
+ case 'arraybuffer':
178
153
 
179
- if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
154
+ return response.arrayBuffer();
180
155
 
181
- // Add to cache only on HTTP success, so that we do not cache
182
- // error response bodies as proper responses to requests.
183
- Cache.add( url, response );
156
+ case 'blob':
184
157
 
185
- for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
158
+ return response.blob();
186
159
 
187
- const callback = callbacks[ i ];
188
- if ( callback.onLoad ) callback.onLoad( response );
160
+ case 'document':
189
161
 
190
- }
162
+ return response.text()
163
+ .then( text => {
191
164
 
192
- scope.manager.itemEnd( url );
165
+ const parser = new DOMParser();
166
+ return parser.parseFromString( text, this.mimeType );
193
167
 
194
- } else {
168
+ } );
195
169
 
196
- for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
170
+ case 'json':
197
171
 
198
- const callback = callbacks[ i ];
199
- if ( callback.onError ) callback.onError( event );
172
+ return response.json();
200
173
 
201
- }
174
+ default:
202
175
 
203
- scope.manager.itemError( url );
204
- scope.manager.itemEnd( url );
176
+ return response.text();
205
177
 
206
178
  }
207
179
 
208
- }, false );
180
+ } )
181
+ .then( data => {
209
182
 
210
- request.addEventListener( 'progress', function ( event ) {
183
+ // Add to cache only on HTTP success, so that we do not cache
184
+ // error response bodies as proper responses to requests.
185
+ Cache.add( url, data );
211
186
 
212
187
  const callbacks = loading[ url ];
188
+ delete loading[ url ];
213
189
 
214
190
  for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
215
191
 
216
192
  const callback = callbacks[ i ];
217
- if ( callback.onProgress ) callback.onProgress( event );
193
+ if ( callback.onLoad ) callback.onLoad( data );
218
194
 
219
195
  }
220
196
 
221
- }, false );
197
+ } )
198
+ .catch( err => {
222
199
 
223
- request.addEventListener( 'error', function ( event ) {
200
+ // Abort errors and other errors are handled the same
224
201
 
225
202
  const callbacks = loading[ url ];
226
203
 
227
- delete loading[ url ];
228
-
229
- for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
204
+ if ( callbacks === undefined ) {
230
205
 
231
- const callback = callbacks[ i ];
232
- if ( callback.onError ) callback.onError( event );
206
+ // When onLoad was called and url was deleted in `loading`
207
+ this.manager.itemError( url );
208
+ throw err;
233
209
 
234
210
  }
235
211
 
236
- scope.manager.itemError( url );
237
- scope.manager.itemEnd( url );
238
-
239
- }, false );
240
-
241
- request.addEventListener( 'abort', function ( event ) {
242
-
243
- const callbacks = loading[ url ];
244
-
245
212
  delete loading[ url ];
246
213
 
247
214
  for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
248
215
 
249
216
  const callback = callbacks[ i ];
250
- if ( callback.onError ) callback.onError( event );
217
+ if ( callback.onError ) callback.onError( err );
251
218
 
252
219
  }
253
220
 
254
- scope.manager.itemError( url );
255
- scope.manager.itemEnd( url );
221
+ this.manager.itemError( url );
256
222
 
257
- }, false );
223
+ } )
224
+ .finally( () => {
258
225
 
259
- if ( this.responseType !== undefined ) request.responseType = this.responseType;
260
- if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;
226
+ this.manager.itemEnd( url );
261
227
 
262
- if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );
263
-
264
- for ( const header in this.requestHeader ) {
265
-
266
- request.setRequestHeader( header, this.requestHeader[ header ] );
267
-
268
- }
269
-
270
- request.send( null );
271
-
272
- }
273
-
274
- scope.manager.itemStart( url );
228
+ } );
275
229
 
276
- return request;
230
+ this.manager.itemStart( url );
277
231
 
278
232
  }
279
233
 
@@ -40,8 +40,7 @@ class ImageLoader extends Loader {
40
40
 
41
41
  function onImageLoad() {
42
42
 
43
- image.removeEventListener( 'load', onImageLoad, false );
44
- image.removeEventListener( 'error', onImageError, false );
43
+ removeEventListeners();
45
44
 
46
45
  Cache.add( url, this );
47
46
 
@@ -53,8 +52,7 @@ class ImageLoader extends Loader {
53
52
 
54
53
  function onImageError( event ) {
55
54
 
56
- image.removeEventListener( 'load', onImageLoad, false );
57
- image.removeEventListener( 'error', onImageError, false );
55
+ removeEventListeners();
58
56
 
59
57
  if ( onError ) onError( event );
60
58
 
@@ -63,6 +61,13 @@ class ImageLoader extends Loader {
63
61
 
64
62
  }
65
63
 
64
+ function removeEventListeners() {
65
+
66
+ image.removeEventListener( 'load', onImageLoad, false );
67
+ image.removeEventListener( 'error', onImageError, false );
68
+
69
+ }
70
+
66
71
  image.addEventListener( 'load', onImageLoad, false );
67
72
  image.addEventListener( 'error', onImageError, false );
68
73
 
@@ -44,6 +44,32 @@ class LoaderUtils {
44
44
 
45
45
  }
46
46
 
47
+ static resolveURL( url, path ) {
48
+
49
+ // Invalid URL
50
+ if ( typeof url !== 'string' || url === '' ) return '';
51
+
52
+ // Host Relative URL
53
+ if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {
54
+
55
+ path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' );
56
+
57
+ }
58
+
59
+ // Absolute URL http://,https://,//
60
+ if ( /^(https?:)?\/\//i.test( url ) ) return url;
61
+
62
+ // Data URI
63
+ if ( /^data:.*,.*$/i.test( url ) ) return url;
64
+
65
+ // Blob URL
66
+ if ( /^blob:.*$/i.test( url ) ) return url;
67
+
68
+ // Relative URL
69
+ return path + url;
70
+
71
+ }
72
+
47
73
  }
48
74
 
49
75
  export { LoaderUtils };
@@ -75,19 +75,19 @@ class MaterialLoader extends Loader {
75
75
  if ( json.roughness !== undefined ) material.roughness = json.roughness;
76
76
  if ( json.metalness !== undefined ) material.metalness = json.metalness;
77
77
  if ( json.sheen !== undefined ) material.sheen = json.sheen;
78
- if ( json.sheenTint !== undefined ) material.sheenTint = new Color().setHex( json.sheenTint );
78
+ if ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );
79
79
  if ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;
80
80
  if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );
81
81
  if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );
82
82
  if ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;
83
- if ( json.specularTint !== undefined && material.specularTint !== undefined ) material.specularTint.setHex( json.specularTint );
83
+ if ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );
84
84
  if ( json.shininess !== undefined ) material.shininess = json.shininess;
85
85
  if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;
86
86
  if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;
87
87
  if ( json.transmission !== undefined ) material.transmission = json.transmission;
88
88
  if ( json.thickness !== undefined ) material.thickness = json.thickness;
89
89
  if ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;
90
- if ( json.attenuationTint !== undefined && material.attenuationTint !== undefined ) material.attenuationTint.setHex( json.attenuationTint );
90
+ if ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );
91
91
  if ( json.fog !== undefined ) material.fog = json.fog;
92
92
  if ( json.flatShading !== undefined ) material.flatShading = json.flatShading;
93
93
  if ( json.blending !== undefined ) material.blending = json.blending;
@@ -95,12 +95,12 @@ class MaterialLoader extends Loader {
95
95
  if ( json.side !== undefined ) material.side = json.side;
96
96
  if ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;
97
97
  if ( json.opacity !== undefined ) material.opacity = json.opacity;
98
- if ( json.format !== undefined ) material.format = json.format;
99
98
  if ( json.transparent !== undefined ) material.transparent = json.transparent;
100
99
  if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;
101
100
  if ( json.depthTest !== undefined ) material.depthTest = json.depthTest;
102
101
  if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;
103
102
  if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;
103
+ if ( json.alphaWrite !== undefined ) material.alphaWrite = json.alphaWrite;
104
104
 
105
105
  if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;
106
106
  if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;
@@ -264,7 +264,7 @@ class MaterialLoader extends Loader {
264
264
 
265
265
  if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );
266
266
  if ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );
267
- if ( json.specularTintMap !== undefined ) material.specularTintMap = getTexture( json.specularTintMap );
267
+ if ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );
268
268
 
269
269
  if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );
270
270
  if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;
@@ -288,6 +288,9 @@ class MaterialLoader extends Loader {
288
288
  if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );
289
289
  if ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );
290
290
 
291
+ if ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );
292
+ if ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );
293
+
291
294
  return material;
292
295
 
293
296
  }
@@ -706,6 +706,8 @@ class ObjectLoader extends Loader {
706
706
  if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;
707
707
  if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;
708
708
 
709
+ if ( data.userData !== undefined ) texture.userData = data.userData;
710
+
709
711
  textures[ data.uuid ] = texture;
710
712
 
711
713
  }