super-three 0.157.1 → 0.160.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +6 -4
  2. package/build/three.cjs +3100 -1537
  3. package/build/three.js +3100 -1537
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +3093 -1538
  6. package/build/three.module.min.js +1 -1
  7. package/examples/jsm/Addons.js +291 -0
  8. package/examples/jsm/controls/FlyControls.js +26 -0
  9. package/examples/jsm/controls/OrbitControls.js +62 -41
  10. package/examples/jsm/controls/TransformControls.js +27 -11
  11. package/examples/jsm/csm/CSMShader.js +53 -48
  12. package/examples/jsm/exporters/GLTFExporter.js +151 -3
  13. package/examples/jsm/exporters/USDZExporter.js +27 -19
  14. package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
  15. package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
  16. package/examples/jsm/helpers/TextureHelper.js +237 -0
  17. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  18. package/examples/jsm/libs/lottie_canvas.module.js +6 -1
  19. package/examples/jsm/libs/opentype.module.js +13 -75
  20. package/examples/jsm/libs/surfaceNet.js +201 -0
  21. package/examples/jsm/lines/LineMaterial.js +16 -33
  22. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  23. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  24. package/examples/jsm/loaders/FBXLoader.js +294 -124
  25. package/examples/jsm/loaders/GLTFLoader.js +83 -6
  26. package/examples/jsm/loaders/LUTImageLoader.js +162 -0
  27. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  28. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  29. package/examples/jsm/loaders/SVGLoader.js +4 -4
  30. package/examples/jsm/loaders/USDZLoader.js +3 -17
  31. package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
  32. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  33. package/examples/jsm/math/Capsule.js +0 -55
  34. package/examples/jsm/math/Octree.js +85 -7
  35. package/examples/jsm/misc/Timer.js +119 -0
  36. package/examples/jsm/misc/TubePainter.js +3 -6
  37. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  38. package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
  39. package/examples/jsm/modifiers/TessellateModifier.js +3 -3
  40. package/examples/jsm/nodes/Nodes.js +16 -12
  41. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  42. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  43. package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
  44. package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
  45. package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
  46. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  47. package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
  48. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  49. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  50. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  52. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
  54. package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
  55. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  56. package/examples/jsm/nodes/code/FunctionNode.js +1 -1
  57. package/examples/jsm/nodes/core/AssignNode.js +72 -0
  58. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  59. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  60. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  61. package/examples/jsm/nodes/core/LightingModel.js +3 -1
  62. package/examples/jsm/nodes/core/Node.js +13 -15
  63. package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
  64. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  65. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  66. package/examples/jsm/nodes/core/NodeUtils.js +7 -9
  67. package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
  68. package/examples/jsm/nodes/core/ParameterNode.js +33 -0
  69. package/examples/jsm/nodes/core/PropertyNode.js +15 -6
  70. package/examples/jsm/nodes/core/StackNode.js +7 -17
  71. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  72. package/examples/jsm/nodes/core/TempNode.js +1 -1
  73. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  74. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  75. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  76. package/examples/jsm/nodes/core/VarNode.js +7 -34
  77. package/examples/jsm/nodes/core/VaryingNode.js +3 -7
  78. package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
  79. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  80. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  81. package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
  82. package/examples/jsm/nodes/display/PassNode.js +182 -0
  83. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  84. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  85. package/examples/jsm/nodes/display/ViewportNode.js +17 -10
  86. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
  87. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
  88. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
  89. package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
  90. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
  91. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
  92. package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
  93. package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
  94. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
  95. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
  97. package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
  98. package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
  99. package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
  100. package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
  101. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
  102. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
  103. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
  104. package/examples/jsm/nodes/materials/Materials.js +1 -0
  105. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  106. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
  107. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  108. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
  109. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
  110. package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
  111. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  112. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  113. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  114. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  115. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  116. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  117. package/examples/jsm/nodes/math/MathNode.js +2 -0
  118. package/examples/jsm/nodes/math/OperatorNode.js +24 -27
  119. package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
  120. package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
  121. package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
  122. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  123. package/examples/jsm/nodes/utils/JoinNode.js +11 -1
  124. package/examples/jsm/nodes/utils/LoopNode.js +36 -24
  125. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  126. package/examples/jsm/nodes/utils/SplitNode.js +10 -2
  127. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  128. package/examples/jsm/objects/InstancedPoints.js +21 -0
  129. package/examples/jsm/objects/Lensflare.js +20 -0
  130. package/examples/jsm/objects/QuadMesh.js +60 -0
  131. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
  132. package/examples/jsm/objects/Refractor.js +3 -0
  133. package/examples/jsm/objects/Sky.js +5 -3
  134. package/examples/jsm/objects/Water.js +5 -2
  135. package/examples/jsm/objects/Water2.js +3 -0
  136. package/examples/jsm/physics/AmmoPhysics.js +21 -0
  137. package/examples/jsm/physics/RapierPhysics.js +21 -0
  138. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  139. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  140. package/examples/jsm/postprocessing/LUTPass.js +2 -1
  141. package/examples/jsm/postprocessing/OutputPass.js +3 -0
  142. package/examples/jsm/postprocessing/Pass.js +14 -3
  143. package/examples/jsm/postprocessing/SAOPass.js +0 -1
  144. package/examples/jsm/postprocessing/SMAAPass.js +0 -2
  145. package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
  146. package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
  147. package/examples/jsm/renderers/SVGRenderer.js +9 -6
  148. package/examples/jsm/renderers/common/Animation.js +10 -21
  149. package/examples/jsm/renderers/common/Backend.js +19 -3
  150. package/examples/jsm/renderers/common/Background.js +20 -22
  151. package/examples/jsm/renderers/common/Bindings.js +31 -22
  152. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  153. package/examples/jsm/renderers/common/Color4.js +37 -0
  154. package/examples/jsm/renderers/common/Geometries.js +4 -4
  155. package/examples/jsm/renderers/common/Info.js +12 -2
  156. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  157. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  158. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  159. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  160. package/examples/jsm/renderers/common/RenderObject.js +21 -2
  161. package/examples/jsm/renderers/common/RenderObjects.js +5 -3
  162. package/examples/jsm/renderers/common/Renderer.js +137 -37
  163. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  164. package/examples/jsm/renderers/common/Textures.js +8 -37
  165. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  166. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  167. package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
  168. package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
  169. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
  170. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
  171. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  172. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  173. package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
  174. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  175. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  176. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  177. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  178. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  179. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
  180. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  181. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
  182. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  183. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  184. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  185. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  186. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
  187. package/examples/jsm/shaders/AfterimageShader.js +2 -0
  188. package/examples/jsm/shaders/BasicShader.js +2 -0
  189. package/examples/jsm/shaders/BlendShader.js +2 -0
  190. package/examples/jsm/shaders/BokehShader.js +2 -0
  191. package/examples/jsm/shaders/BokehShader2.js +4 -0
  192. package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
  193. package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
  194. package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
  195. package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
  196. package/examples/jsm/shaders/FXAAShader.js +135 -133
  197. package/examples/jsm/shaders/FilmShader.js +1 -1
  198. package/examples/jsm/shaders/FocusShader.js +2 -0
  199. package/examples/jsm/shaders/FreiChenShader.js +2 -0
  200. package/examples/jsm/shaders/GTAOShader.js +424 -0
  201. package/examples/jsm/shaders/GodRaysShader.js +8 -0
  202. package/examples/jsm/shaders/HalftoneShader.js +2 -0
  203. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
  204. package/examples/jsm/shaders/HueSaturationShader.js +2 -0
  205. package/examples/jsm/shaders/KaleidoShader.js +2 -0
  206. package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
  207. package/examples/jsm/shaders/LuminosityShader.js +2 -0
  208. package/examples/jsm/shaders/MMDToonShader.js +2 -0
  209. package/examples/jsm/shaders/MirrorShader.js +2 -0
  210. package/examples/jsm/shaders/NormalMapShader.js +2 -0
  211. package/examples/jsm/shaders/OutputShader.js +8 -5
  212. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  213. package/examples/jsm/shaders/SAOShader.js +7 -3
  214. package/examples/jsm/shaders/SMAAShader.js +6 -0
  215. package/examples/jsm/shaders/SSAOShader.js +8 -3
  216. package/examples/jsm/shaders/SSRShader.js +6 -0
  217. package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
  218. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
  219. package/examples/jsm/shaders/TechnicolorShader.js +2 -0
  220. package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
  221. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
  222. package/examples/jsm/shaders/VelocityShader.js +2 -0
  223. package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
  224. package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
  225. package/examples/jsm/transpiler/AST.js +270 -0
  226. package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
  227. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  228. package/examples/jsm/transpiler/TSLEncoder.js +715 -0
  229. package/examples/jsm/transpiler/Transpiler.js +18 -0
  230. package/examples/jsm/utils/SortUtils.js +158 -0
  231. package/examples/jsm/utils/TextureUtils.js +33 -21
  232. package/examples/jsm/webxr/ARButton.js +14 -0
  233. package/examples/jsm/webxr/VRButton.js +24 -9
  234. package/examples/jsm/webxr/XRButton.js +27 -11
  235. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  236. package/package.json +8 -6
  237. package/src/Three.js +1 -0
  238. package/src/constants.js +8 -1
  239. package/src/core/BufferAttribute.js +21 -2
  240. package/src/core/InterleavedBuffer.js +21 -1
  241. package/src/core/Object3D.js +60 -12
  242. package/src/core/UniformsGroup.js +7 -1
  243. package/src/extras/PMREMGenerator.js +7 -1
  244. package/src/extras/curves/LineCurve3.js +4 -0
  245. package/src/loaders/AudioLoader.js +1 -1
  246. package/src/loaders/BufferGeometryLoader.js +0 -7
  247. package/src/loaders/ImageBitmapLoader.js +25 -1
  248. package/src/loaders/MaterialLoader.js +10 -2
  249. package/src/loaders/ObjectLoader.js +49 -0
  250. package/src/materials/Material.js +27 -13
  251. package/src/materials/ShaderMaterial.js +2 -1
  252. package/src/math/Box3.js +35 -18
  253. package/src/math/ColorManagement.js +0 -16
  254. package/src/math/Quaternion.js +5 -4
  255. package/src/math/Sphere.js +2 -0
  256. package/src/math/Triangle.js +17 -5
  257. package/src/math/Vector3.js +11 -12
  258. package/src/objects/BatchedMesh.js +1020 -0
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +6 -7
  261. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  262. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  263. package/src/renderers/WebGLRenderer.js +165 -43
  264. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
  265. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  266. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  267. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
  268. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  269. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  270. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  271. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  272. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
  273. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  274. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  275. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  276. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  277. package/src/renderers/shaders/ShaderChunk.js +4 -0
  278. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  279. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  280. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  281. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  282. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  283. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  286. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  287. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  288. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  289. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  290. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  291. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  292. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  293. package/src/renderers/webgl/WebGLLights.js +11 -2
  294. package/src/renderers/webgl/WebGLProgram.js +100 -51
  295. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  296. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  297. package/src/renderers/webgl/WebGLState.js +25 -4
  298. package/src/renderers/webgl/WebGLTextures.js +7 -11
  299. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  300. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  301. package/src/renderers/webxr/WebXRManager.js +16 -0
  302. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
  303. package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
@@ -62,7 +62,8 @@ import {
62
62
  Vector2,
63
63
  Vector3,
64
64
  VectorKeyframeTrack,
65
- SRGBColorSpace
65
+ SRGBColorSpace,
66
+ InstancedBufferAttribute
66
67
  } from 'three';
67
68
  import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
68
69
 
@@ -150,6 +151,12 @@ class GLTFLoader extends Loader {
150
151
 
151
152
  } );
152
153
 
154
+ this.register( function ( parser ) {
155
+
156
+ return new GLTFMaterialsBumpExtension( parser );
157
+
158
+ } );
159
+
153
160
  this.register( function ( parser ) {
154
161
 
155
162
  return new GLTFLightsExtension( parser );
@@ -182,7 +189,13 @@ class GLTFLoader extends Loader {
182
189
 
183
190
  } else if ( this.path !== '' ) {
184
191
 
185
- resourcePath = this.path;
192
+ // If a base path is set, resources will be relative paths from that plus the relative path of the gltf file
193
+ // Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'
194
+ // resourcePath = 'https://my-cnd-server.com/assets/models/'
195
+ // referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'
196
+ // referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'
197
+ const relativeUrl = LoaderUtils.extractUrlBase( url );
198
+ resourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );
186
199
 
187
200
  } else {
188
201
 
@@ -361,6 +374,9 @@ class GLTFLoader extends Loader {
361
374
  for ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {
362
375
 
363
376
  const plugin = this.pluginCallbacks[ i ]( parser );
377
+
378
+ if ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );
379
+
364
380
  plugins[ plugin.name ] = plugin;
365
381
 
366
382
  // Workaround to avoid determining as unknown extension
@@ -487,6 +503,7 @@ const EXTENSIONS = {
487
503
  KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',
488
504
  KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
489
505
  KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
506
+ EXT_MATERIALS_BUMP: 'EXT_materials_bump',
490
507
  EXT_TEXTURE_WEBP: 'EXT_texture_webp',
491
508
  EXT_TEXTURE_AVIF: 'EXT_texture_avif',
492
509
  EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
@@ -942,7 +959,7 @@ class GLTFMaterialsSheenExtension {
942
959
  if ( extension.sheenColorFactor !== undefined ) {
943
960
 
944
961
  const colorFactor = extension.sheenColorFactor;
945
- materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor [ 2 ], LinearSRGBColorSpace );
962
+ materialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );
946
963
 
947
964
  }
948
965
 
@@ -1197,6 +1214,61 @@ class GLTFMaterialsSpecularExtension {
1197
1214
 
1198
1215
  }
1199
1216
 
1217
+
1218
+ /**
1219
+ * Materials bump Extension
1220
+ *
1221
+ * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump
1222
+ */
1223
+ class GLTFMaterialsBumpExtension {
1224
+
1225
+ constructor( parser ) {
1226
+
1227
+ this.parser = parser;
1228
+ this.name = EXTENSIONS.EXT_MATERIALS_BUMP;
1229
+
1230
+ }
1231
+
1232
+ getMaterialType( materialIndex ) {
1233
+
1234
+ const parser = this.parser;
1235
+ const materialDef = parser.json.materials[ materialIndex ];
1236
+
1237
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
1238
+
1239
+ return MeshPhysicalMaterial;
1240
+
1241
+ }
1242
+
1243
+ extendMaterialParams( materialIndex, materialParams ) {
1244
+
1245
+ const parser = this.parser;
1246
+ const materialDef = parser.json.materials[ materialIndex ];
1247
+
1248
+ if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
1249
+
1250
+ return Promise.resolve();
1251
+
1252
+ }
1253
+
1254
+ const pending = [];
1255
+
1256
+ const extension = materialDef.extensions[ this.name ];
1257
+
1258
+ materialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;
1259
+
1260
+ if ( extension.bumpTexture !== undefined ) {
1261
+
1262
+ pending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );
1263
+
1264
+ }
1265
+
1266
+ return Promise.all( pending );
1267
+
1268
+ }
1269
+
1270
+ }
1271
+
1200
1272
  /**
1201
1273
  * Materials anisotropy Extension
1202
1274
  *
@@ -1679,7 +1751,12 @@ class GLTFMeshGpuInstancing {
1679
1751
  // Add instance attributes to the geometry, excluding TRS.
1680
1752
  for ( const attributeName in attributes ) {
1681
1753
 
1682
- if ( attributeName !== 'TRANSLATION' &&
1754
+ if ( attributeName === '_COLOR_0' ) {
1755
+
1756
+ const attr = attributes[ attributeName ];
1757
+ instancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );
1758
+
1759
+ } else if ( attributeName !== 'TRANSLATION' &&
1683
1760
  attributeName !== 'ROTATION' &&
1684
1761
  attributeName !== 'SCALE' ) {
1685
1762
 
@@ -1846,7 +1923,7 @@ class GLTFDracoMeshCompressionExtension {
1846
1923
 
1847
1924
  return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {
1848
1925
 
1849
- return new Promise( function ( resolve ) {
1926
+ return new Promise( function ( resolve, reject ) {
1850
1927
 
1851
1928
  dracoLoader.decodeDracoFile( bufferView, function ( geometry ) {
1852
1929
 
@@ -1861,7 +1938,7 @@ class GLTFDracoMeshCompressionExtension {
1861
1938
 
1862
1939
  resolve( geometry );
1863
1940
 
1864
- }, threeAttributeMap, attributeTypeMap );
1941
+ }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );
1865
1942
 
1866
1943
  } );
1867
1944
 
@@ -0,0 +1,162 @@
1
+ import {
2
+ Loader,
3
+ TextureLoader,
4
+ DataTexture,
5
+ Data3DTexture,
6
+ RGBAFormat,
7
+ UnsignedByteType,
8
+ ClampToEdgeWrapping,
9
+ LinearFilter,
10
+ } from 'three';
11
+
12
+ export class LUTImageLoader extends Loader {
13
+
14
+ constructor( flipVertical = false ) {
15
+ //The NeutralLUT.png has green at the bottom for Unreal ang green at the top for Unity URP Color Lookup
16
+ //post-processing. If you're using lut image strips from a Unity pipeline then pass true to the constructor
17
+
18
+ super();
19
+
20
+ this.flip = flipVertical;
21
+
22
+ }
23
+
24
+ load( url, onLoad, onProgress, onError ) {
25
+
26
+ const loader = new TextureLoader( this.manager );
27
+
28
+ loader.setCrossOrigin( this.crossOrigin );
29
+
30
+ loader.setPath( this.path );
31
+ loader.load( url, texture => {
32
+
33
+ try {
34
+
35
+ let imageData;
36
+
37
+ if ( texture.image.width < texture.image.height ) {
38
+
39
+ imageData = this.getImageData( texture );
40
+
41
+ } else {
42
+
43
+ imageData = this.horz2Vert( texture );
44
+
45
+ }
46
+
47
+ onLoad( this.parse( imageData.data, Math.min( texture.image.width, texture.image.height ) ) );
48
+
49
+ } catch ( e ) {
50
+
51
+ if ( onError ) {
52
+
53
+ onError( e );
54
+
55
+ } else {
56
+
57
+ console.error( e );
58
+
59
+ }
60
+
61
+ this.manager.itemError( url );
62
+
63
+ }
64
+
65
+ }, onProgress, onError );
66
+
67
+ }
68
+
69
+ getImageData( texture ) {
70
+
71
+ const width = texture.image.width;
72
+ const height = texture.image.height;
73
+
74
+ const canvas = document.createElement( 'canvas' );
75
+ canvas.width = width;
76
+ canvas.height = height;
77
+
78
+ const context = canvas.getContext( '2d' );
79
+
80
+ if ( this.flip === true ) {
81
+
82
+ context.scale( 1, - 1 );
83
+ context.translate( 0, - height );
84
+
85
+ }
86
+
87
+ context.drawImage( texture.image, 0, 0 );
88
+
89
+ return context.getImageData( 0, 0, width, height );
90
+
91
+ }
92
+
93
+ horz2Vert( texture ) {
94
+
95
+ const width = texture.image.height;
96
+ const height = texture.image.width;
97
+
98
+ const canvas = document.createElement( 'canvas' );
99
+ canvas.width = width;
100
+ canvas.height = height;
101
+
102
+ const context = canvas.getContext( '2d' );
103
+
104
+ if ( this.flip === true ) {
105
+
106
+ context.scale( 1, - 1 );
107
+ context.translate( 0, - height );
108
+
109
+ }
110
+
111
+ for ( let i = 0; i < width; i ++ ) {
112
+
113
+ const sy = i * width;
114
+ const dy = ( this.flip ) ? height - i * width : i * width;
115
+ context.drawImage( texture.image, sy, 0, width, width, 0, dy, width, width );
116
+
117
+ }
118
+
119
+ return context.getImageData( 0, 0, width, height );
120
+
121
+ }
122
+
123
+ parse( dataArray, size ) {
124
+
125
+ const data = new Uint8Array( dataArray );
126
+ const texture = new DataTexture();
127
+ texture.image.data = data;
128
+ texture.image.width = size;
129
+ texture.image.height = size * size;
130
+ texture.format = RGBAFormat;
131
+ texture.type = UnsignedByteType;
132
+ texture.magFilter = LinearFilter;
133
+ texture.minFilter = LinearFilter;
134
+ texture.wrapS = ClampToEdgeWrapping;
135
+ texture.wrapT = ClampToEdgeWrapping;
136
+ texture.generateMipmaps = false;
137
+ texture.needsUpdate = true;
138
+
139
+ const texture3D = new Data3DTexture();
140
+ texture3D.image.data = data;
141
+ texture3D.image.width = size;
142
+ texture3D.image.height = size;
143
+ texture3D.image.depth = size;
144
+ texture3D.format = RGBAFormat;
145
+ texture3D.type = UnsignedByteType;
146
+ texture3D.magFilter = LinearFilter;
147
+ texture3D.minFilter = LinearFilter;
148
+ texture3D.wrapS = ClampToEdgeWrapping;
149
+ texture3D.wrapT = ClampToEdgeWrapping;
150
+ texture3D.wrapR = ClampToEdgeWrapping;
151
+ texture3D.generateMipmaps = false;
152
+ texture3D.needsUpdate = true;
153
+
154
+ return {
155
+ size,
156
+ texture,
157
+ texture3D,
158
+ };
159
+
160
+ }
161
+
162
+ }
@@ -19,13 +19,13 @@ import {
19
19
  mx_safepower, mx_contrast,
20
20
  mx_srgb_texture_to_lin_rec709,
21
21
  saturation
22
- } from 'three/nodes';
22
+ } from '../nodes/Nodes.js';
23
23
 
24
24
  const colorSpaceLib = {
25
25
  mx_srgb_texture_to_lin_rec709
26
26
  };
27
27
 
28
- class MtlXElement {
28
+ class MXElement {
29
29
 
30
30
  constructor( name, nodeFunc, params = null ) {
31
31
 
@@ -39,41 +39,41 @@ class MtlXElement {
39
39
 
40
40
  // Ref: https://github.com/mrdoob/three.js/issues/24674
41
41
 
42
- const MtlXElements = [
42
+ const MXElements = [
43
43
 
44
44
  // << Math >>
45
- new MtlXElement( 'add', add, [ 'in1', 'in2' ] ),
46
- new MtlXElement( 'subtract', sub, [ 'in1', 'in2' ] ),
47
- new MtlXElement( 'multiply', mul, [ 'in1', 'in2' ] ),
48
- new MtlXElement( 'divide', div, [ 'in1', 'in2' ] ),
49
- new MtlXElement( 'modulo', mod, [ 'in1', 'in2' ] ),
50
- new MtlXElement( 'absval', abs, [ 'in1', 'in2' ] ),
51
- new MtlXElement( 'sign', sign, [ 'in1', 'in2' ] ),
52
- new MtlXElement( 'floor', floor, [ 'in1', 'in2' ] ),
53
- new MtlXElement( 'ceil', ceil, [ 'in1', 'in2' ] ),
54
- new MtlXElement( 'round', round, [ 'in1', 'in2' ] ),
55
- new MtlXElement( 'power', pow, [ 'in1', 'in2' ] ),
56
- new MtlXElement( 'sin', sin, [ 'in' ] ),
57
- new MtlXElement( 'cos', cos, [ 'in' ] ),
58
- new MtlXElement( 'tan', tan, [ 'in' ] ),
59
- new MtlXElement( 'asin', asin, [ 'in' ] ),
60
- new MtlXElement( 'acos', acos, [ 'in' ] ),
61
- new MtlXElement( 'atan2', atan2, [ 'in1', 'in2' ] ),
62
- new MtlXElement( 'sqrt', sqrt, [ 'in' ] ),
45
+ new MXElement( 'add', add, [ 'in1', 'in2' ] ),
46
+ new MXElement( 'subtract', sub, [ 'in1', 'in2' ] ),
47
+ new MXElement( 'multiply', mul, [ 'in1', 'in2' ] ),
48
+ new MXElement( 'divide', div, [ 'in1', 'in2' ] ),
49
+ new MXElement( 'modulo', mod, [ 'in1', 'in2' ] ),
50
+ new MXElement( 'absval', abs, [ 'in1', 'in2' ] ),
51
+ new MXElement( 'sign', sign, [ 'in1', 'in2' ] ),
52
+ new MXElement( 'floor', floor, [ 'in1', 'in2' ] ),
53
+ new MXElement( 'ceil', ceil, [ 'in1', 'in2' ] ),
54
+ new MXElement( 'round', round, [ 'in1', 'in2' ] ),
55
+ new MXElement( 'power', pow, [ 'in1', 'in2' ] ),
56
+ new MXElement( 'sin', sin, [ 'in' ] ),
57
+ new MXElement( 'cos', cos, [ 'in' ] ),
58
+ new MXElement( 'tan', tan, [ 'in' ] ),
59
+ new MXElement( 'asin', asin, [ 'in' ] ),
60
+ new MXElement( 'acos', acos, [ 'in' ] ),
61
+ new MXElement( 'atan2', atan2, [ 'in1', 'in2' ] ),
62
+ new MXElement( 'sqrt', sqrt, [ 'in' ] ),
63
63
  //new MtlXElement( 'ln', ... ),
64
- new MtlXElement( 'exp', exp, [ 'in' ] ),
65
- new MtlXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
66
- new MtlXElement( 'min', min, [ 'in1', 'in2' ] ),
67
- new MtlXElement( 'max', max, [ 'in1', 'in2' ] ),
68
- new MtlXElement( 'normalize', normalize, [ 'in' ] ),
69
- new MtlXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
70
- new MtlXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
71
- new MtlXElement( 'crossproduct', cross, [ 'in' ] ),
64
+ new MXElement( 'exp', exp, [ 'in' ] ),
65
+ new MXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
66
+ new MXElement( 'min', min, [ 'in1', 'in2' ] ),
67
+ new MXElement( 'max', max, [ 'in1', 'in2' ] ),
68
+ new MXElement( 'normalize', normalize, [ 'in' ] ),
69
+ new MXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
70
+ new MXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
71
+ new MXElement( 'crossproduct', cross, [ 'in' ] ),
72
72
  //new MtlXElement( 'transformpoint', ... ),
73
73
  //new MtlXElement( 'transformvector', ... ),
74
74
  //new MtlXElement( 'transformnormal', ... ),
75
75
  //new MtlXElement( 'transformmatrix', ... ),
76
- new MtlXElement( 'normalmap', normalMap, [ 'in', 'scale' ] ),
76
+ new MXElement( 'normalmap', normalMap, [ 'in', 'scale' ] ),
77
77
  //new MtlXElement( 'transpose', ... ),
78
78
  //new MtlXElement( 'determinant', ... ),
79
79
  //new MtlXElement( 'invertmatrix', ... ),
@@ -83,44 +83,44 @@ const MtlXElements = [
83
83
  //new MtlXElement( 'dot', ... ),
84
84
 
85
85
  // << Adjustment >>
86
- new MtlXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
87
- new MtlXElement( 'smoothstep', smoothstep, [ 'in', 'low', 'high' ] ),
86
+ new MXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
87
+ new MXElement( 'smoothstep', smoothstep, [ 'in', 'low', 'high' ] ),
88
88
  //new MtlXElement( 'curveadjust', ... ),
89
89
  //new MtlXElement( 'curvelookup', ... ),
90
- new MtlXElement( 'luminance', luminance, [ 'in', 'lumacoeffs' ] ),
91
- new MtlXElement( 'rgbtohsv', mx_rgbtohsv, [ 'in' ] ),
92
- new MtlXElement( 'hsvtorgb', mx_hsvtorgb, [ 'in' ] ),
90
+ new MXElement( 'luminance', luminance, [ 'in', 'lumacoeffs' ] ),
91
+ new MXElement( 'rgbtohsv', mx_rgbtohsv, [ 'in' ] ),
92
+ new MXElement( 'hsvtorgb', mx_hsvtorgb, [ 'in' ] ),
93
93
 
94
94
  // << Mix >>
95
- new MtlXElement( 'mix', mix, [ 'bg', 'fg', 'mix' ] ),
95
+ new MXElement( 'mix', mix, [ 'bg', 'fg', 'mix' ] ),
96
96
 
97
97
  // << Channel >>
98
- new MtlXElement( 'combine2', vec2, [ 'in1', 'in2' ] ),
99
- new MtlXElement( 'combine3', vec3, [ 'in1', 'in2', 'in3' ] ),
100
- new MtlXElement( 'combine4', vec4, [ 'in1', 'in2', 'in3', 'in4' ] ),
98
+ new MXElement( 'combine2', vec2, [ 'in1', 'in2' ] ),
99
+ new MXElement( 'combine3', vec3, [ 'in1', 'in2', 'in3' ] ),
100
+ new MXElement( 'combine4', vec4, [ 'in1', 'in2', 'in3', 'in4' ] ),
101
101
 
102
102
  // << Procedural >>
103
- new MtlXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
104
- new MtlXElement( 'ramptb', mx_ramptb, [ 'valuet', 'valueb', 'texcoord' ] ),
105
- new MtlXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'texcoord' ] ),
106
- new MtlXElement( 'splittb', mx_splittb, [ 'valuet', 'valueb', 'texcoord' ] ),
107
- new MtlXElement( 'noise2d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
108
- new MtlXElement( 'noise3d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
109
- new MtlXElement( 'fractal3d', mx_fractal_noise_float, [ 'position', 'octaves', 'lacunarity', 'diminish', 'amplitude' ] ),
110
- new MtlXElement( 'cellnoise2d', mx_cell_noise_float, [ 'texcoord' ] ),
111
- new MtlXElement( 'cellnoise3d', mx_cell_noise_float, [ 'texcoord' ] ),
112
- new MtlXElement( 'worleynoise2d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
113
- new MtlXElement( 'worleynoise3d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
103
+ new MXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
104
+ new MXElement( 'ramptb', mx_ramptb, [ 'valuet', 'valueb', 'texcoord' ] ),
105
+ new MXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'texcoord' ] ),
106
+ new MXElement( 'splittb', mx_splittb, [ 'valuet', 'valueb', 'texcoord' ] ),
107
+ new MXElement( 'noise2d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
108
+ new MXElement( 'noise3d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
109
+ new MXElement( 'fractal3d', mx_fractal_noise_float, [ 'position', 'octaves', 'lacunarity', 'diminish', 'amplitude' ] ),
110
+ new MXElement( 'cellnoise2d', mx_cell_noise_float, [ 'texcoord' ] ),
111
+ new MXElement( 'cellnoise3d', mx_cell_noise_float, [ 'texcoord' ] ),
112
+ new MXElement( 'worleynoise2d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
113
+ new MXElement( 'worleynoise3d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
114
114
 
115
115
  // << Supplemental >>
116
116
  //new MtlXElement( 'tiledimage', ... ),
117
117
  //new MtlXElement( 'triplanarprojection', triplanarTextures, [ 'filex', 'filey', 'filez' ] ),
118
118
  //new MtlXElement( 'ramp4', ... ),
119
119
  //new MtlXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset' ] ),
120
- new MtlXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
121
- new MtlXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
120
+ new MXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
121
+ new MXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
122
122
  //new MtlXElement( 'hsvadjust', ... ),
123
- new MtlXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
123
+ new MXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
124
124
  //new MtlXElement( 'extract', ... ),
125
125
  //new MtlXElement( 'separate2', ... ),
126
126
  //new MtlXElement( 'separate3', ... ),
@@ -129,7 +129,7 @@ const MtlXElements = [
129
129
  ];
130
130
 
131
131
  const MtlXLibrary = {};
132
- MtlXElements.forEach( element => MtlXLibrary[ element.name ] = element );
132
+ MXElements.forEach( element => MtlXLibrary[ element.name ] = element );
133
133
 
134
134
  class MaterialXLoader extends Loader {
135
135
 
@@ -588,11 +588,30 @@ class MaterialXNode {
588
588
 
589
589
  //
590
590
 
591
+ let normalNode = null;
592
+
593
+ if ( inputs.normal ) normalNode = inputs.normal;
594
+
595
+ //
596
+
597
+ let emissiveNode = null;
598
+
599
+ if ( inputs.emission ) emissiveNode = inputs.emission;
600
+ if ( inputs.emissionColor ) {
601
+
602
+ emissiveNode = emissiveNode ? mul( emissiveNode, inputs.emissionColor ) : emissiveNode;
603
+
604
+ }
605
+
606
+ //
607
+
591
608
  material.colorNode = colorNode || color( 0.8, 0.8, 0.8 );
592
609
  material.roughnessNode = roughnessNode || float( 0.2 );
593
610
  material.metalnessNode = metalnessNode || float( 0 );
594
611
  material.clearcoatNode = clearcoatNode || float( 0 );
595
612
  material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
613
+ if ( normalNode ) material.normalNode = normalNode;
614
+ if ( emissiveNode ) material.emissiveNode = emissiveNode;
596
615
 
597
616
  }
598
617
 
@@ -76,12 +76,6 @@ class NRRDLoader extends Loader {
76
76
 
77
77
  function scan( type, chunks ) {
78
78
 
79
- if ( chunks === undefined || chunks === null ) {
80
-
81
- chunks = 1;
82
-
83
- }
84
-
85
79
  let _chunkSize = 1;
86
80
  let _array_type = Uint8Array;
87
81
 
@@ -138,13 +132,6 @@ class NRRDLoader extends Loader {
138
132
 
139
133
  }
140
134
 
141
- if ( chunks == 1 ) {
142
-
143
- // if only one chunk was requested, just return one value
144
- return _bytes[ 0 ];
145
-
146
- }
147
-
148
135
  // return the byte array
149
136
  return _bytes;
150
137
 
@@ -2968,8 +2968,8 @@ class SVGLoader extends Loader {
2968
2968
  // Bevel join triangle
2969
2969
 
2970
2970
  addVertex( currentPointR, u, 1 );
2971
- addVertex( nextPointR, u, 0 );
2972
- addVertex( innerPoint, u, 0.5 );
2971
+ addVertex( innerPoint, u, 0 );
2972
+ addVertex( nextPointR, u, 1 );
2973
2973
 
2974
2974
  }
2975
2975
 
@@ -3106,8 +3106,8 @@ class SVGLoader extends Loader {
3106
3106
 
3107
3107
  } else {
3108
3108
 
3109
- tempV2_3.toArray( vertices, vl - 2 * 3 );
3110
- tempV2_4.toArray( vertices, vl - 1 * 3 );
3109
+ tempV2_4.toArray( vertices, vl - 2 * 3 );
3110
+ tempV2_3.toArray( vertices, vl - 1 * 3 );
3111
3111
  tempV2_4.toArray( vertices, vl - 4 * 3 );
3112
3112
 
3113
3113
  }
@@ -25,9 +25,7 @@ class USDAParser {
25
25
  const data = {};
26
26
 
27
27
  const lines = text.split( '\n' );
28
- const length = lines.length;
29
28
 
30
- let current = 0;
31
29
  let string = null;
32
30
  let target = data;
33
31
 
@@ -35,9 +33,7 @@ class USDAParser {
35
33
 
36
34
  // debugger;
37
35
 
38
- function parseNextLine() {
39
-
40
- const line = lines[ current ];
36
+ for ( const line of lines ) {
41
37
 
42
38
  // console.log( line );
43
39
 
@@ -74,7 +70,7 @@ class USDAParser {
74
70
 
75
71
  stack.pop();
76
72
 
77
- if ( stack.length === 0 ) return;
73
+ if ( stack.length === 0 ) continue;
78
74
 
79
75
  target = stack[ stack.length - 1 ];
80
76
 
@@ -100,18 +96,8 @@ class USDAParser {
100
96
 
101
97
  }
102
98
 
103
- current ++;
104
-
105
- if ( current < length ) {
106
-
107
- parseNextLine();
108
-
109
- }
110
-
111
99
  }
112
100
 
113
- parseNextLine();
114
-
115
101
  return data;
116
102
 
117
103
  }
@@ -640,7 +626,7 @@ class USDZLoader extends Loader {
640
626
 
641
627
  }
642
628
 
643
- } else if ( 'float inputs:clearcoat' in surface ) {
629
+ } else if ( 'float inputs:clearcoat' in surface ) {
644
630
 
645
631
  material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
646
632