super-three 0.165.0 → 0.167.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 (370) hide show
  1. package/build/three.cjs +706 -383
  2. package/build/three.module.js +702 -384
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +76086 -0
  5. package/build/three.webgpu.min.js +6 -0
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/csm/CSMShader.js +4 -4
  8. package/examples/jsm/exporters/GLTFExporter.js +7 -3
  9. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  10. package/examples/jsm/helpers/ViewHelper.js +51 -2
  11. package/examples/jsm/libs/tween.module.js +64 -75
  12. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  13. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  14. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  15. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  16. package/examples/jsm/loaders/FBXLoader.js +23 -45
  17. package/examples/jsm/loaders/GLTFLoader.js +10 -4
  18. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  19. package/examples/jsm/loaders/USDZLoader.js +124 -76
  20. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  21. package/examples/jsm/loaders/VTKLoader.js +76 -3
  22. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  23. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  24. package/examples/jsm/objects/InstancedPoints.js +2 -2
  25. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  26. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  27. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  28. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  29. package/examples/jsm/shaders/FXAAShader.js +0 -2
  30. package/examples/jsm/shaders/GTAOShader.js +1 -1
  31. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  32. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  33. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  34. package/package.json +7 -6
  35. package/src/Three.WebGPU.js +194 -0
  36. package/src/Three.js +2 -0
  37. package/src/constants.js +4 -1
  38. package/src/core/Object3D.js +22 -22
  39. package/src/extras/TextureUtils.js +210 -0
  40. package/src/lights/Light.js +1 -0
  41. package/src/lights/LightShadow.js +5 -0
  42. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  43. package/src/loaders/ObjectLoader.js +33 -2
  44. package/src/materials/Material.js +13 -4
  45. package/src/math/Box2.js +4 -4
  46. package/src/math/Box3.js +6 -6
  47. package/src/math/ColorManagement.js +10 -0
  48. package/src/math/Matrix2.js +54 -0
  49. package/src/math/Vector4.js +13 -0
  50. package/{examples/jsm → src}/nodes/Nodes.js +30 -12
  51. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  52. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  53. package/src/nodes/accessors/CameraNode.js +19 -0
  54. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  55. package/src/nodes/accessors/InstanceNode.js +140 -0
  56. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +22 -2
  57. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +2 -1
  58. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  59. package/{examples/jsm → src}/nodes/accessors/NormalNode.js +1 -1
  60. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  61. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +1 -1
  62. package/{examples/jsm → src}/nodes/accessors/ReflectVectorNode.js +4 -0
  63. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  64. package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +12 -3
  65. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  66. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  67. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  68. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  69. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  70. package/{examples/jsm → src}/nodes/core/AttributeNode.js +20 -6
  71. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  72. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  73. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  74. package/src/nodes/core/MRTNode.js +76 -0
  75. package/{examples/jsm → src}/nodes/core/Node.js +18 -12
  76. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +175 -37
  77. package/src/nodes/core/NodeCache.js +36 -0
  78. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  79. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  80. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  81. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  82. package/{examples/jsm → src}/nodes/core/PropertyNode.js +1 -0
  83. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  84. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  85. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  86. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  87. package/{examples/jsm → src}/nodes/core/VaryingNode.js +8 -0
  88. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +19 -27
  89. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  90. package/src/nodes/display/BloomNode.js +333 -0
  91. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  92. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  93. package/src/nodes/display/DenoiseNode.js +198 -0
  94. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  95. package/src/nodes/display/DotScreenNode.js +75 -0
  96. package/src/nodes/display/FXAANode.js +327 -0
  97. package/src/nodes/display/FilmNode.js +52 -0
  98. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  99. package/src/nodes/display/GTAONode.js +324 -0
  100. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  101. package/src/nodes/display/Lut3DNode.js +53 -0
  102. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  103. package/src/nodes/display/PassNode.js +291 -0
  104. package/src/nodes/display/PixelationPassNode.js +201 -0
  105. package/src/nodes/display/RGBShiftNode.js +49 -0
  106. package/src/nodes/display/RenderOutputNode.js +56 -0
  107. package/src/nodes/display/SobelOperatorNode.js +121 -0
  108. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  109. package/src/nodes/display/TransitionNode.js +76 -0
  110. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  111. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  112. package/{examples/jsm → src}/nodes/display/ViewportNode.js +2 -1
  113. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  114. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  115. package/src/nodes/functions/BSDF/LTC.js +131 -0
  116. package/src/nodes/functions/BasicLightingModel.js +78 -0
  117. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  118. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +42 -1
  119. package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +3 -1
  120. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  121. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  122. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  123. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  124. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  125. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  126. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  127. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  128. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  129. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  130. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  131. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +1 -3
  132. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  133. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  134. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  135. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  136. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  137. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  138. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  139. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +3 -3
  140. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  141. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  142. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  143. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  144. package/{examples/jsm → src}/nodes/materials/MeshMatcapNodeMaterial.js +6 -5
  145. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  146. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  147. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +5 -4
  148. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  149. package/{examples/jsm → src}/nodes/materials/MeshToonNodeMaterial.js +3 -3
  150. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +85 -20
  151. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  152. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  153. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  154. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  155. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  156. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  157. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  158. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  159. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  160. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  161. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  162. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  164. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  165. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  166. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  167. package/src/nodes/utils/RTTNode.js +130 -0
  168. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  169. package/src/objects/BatchedMesh.js +168 -188
  170. package/src/objects/InstancedMesh.js +1 -1
  171. package/src/renderers/WebGLRenderer.js +38 -25
  172. package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
  173. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  174. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  175. package/src/renderers/common/BindGroup.js +16 -0
  176. package/{examples/jsm → src}/renderers/common/Bindings.js +38 -23
  177. package/{examples/jsm → src}/renderers/common/ClippingContext.js +4 -2
  178. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  179. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  180. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  181. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  182. package/src/renderers/common/PostProcessing.js +87 -0
  183. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  184. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  185. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  186. package/{examples/jsm → src}/renderers/common/RenderObject.js +44 -11
  187. package/{examples/jsm → src}/renderers/common/Renderer.js +84 -32
  188. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  189. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  190. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  191. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  192. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  193. package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
  194. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  195. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  196. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  197. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +6 -5
  198. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
  199. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  200. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  201. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  202. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  203. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  204. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
  205. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  206. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
  207. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  208. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  209. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  210. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  211. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  212. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  213. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  214. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  215. package/src/renderers/shaders/UniformsLib.js +3 -0
  216. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  217. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  218. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  219. package/src/renderers/webgl/WebGLLights.js +6 -0
  220. package/src/renderers/webgl/WebGLProgram.js +26 -0
  221. package/src/renderers/webgl/WebGLPrograms.js +1 -1
  222. package/src/renderers/webgl/WebGLTextures.js +14 -53
  223. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  224. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  225. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  226. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +178 -43
  227. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  228. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  229. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  230. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  231. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +34 -2
  232. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  233. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +164 -76
  234. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  235. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +194 -56
  236. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  237. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  238. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +20 -13
  239. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +3 -1
  240. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +28 -21
  241. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +40 -23
  242. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  243. package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
  244. package/src/renderers/webxr/WebXRManager.js +6 -0
  245. package/src/textures/CompressedArrayTexture.js +1 -1
  246. package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
  247. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  248. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  249. package/examples/jsm/nodes/display/PassNode.js +0 -201
  250. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
  251. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  252. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  253. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  254. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  255. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  256. /package/{examples/jsm → src}/nodes/accessors/BitangentNode.js +0 -0
  257. /package/{examples/jsm → src}/nodes/accessors/BufferNode.js +0 -0
  258. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  259. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  260. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  261. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  262. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  263. /package/{examples/jsm → src}/nodes/accessors/PositionNode.js +0 -0
  264. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  265. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  266. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  267. /package/{examples/jsm → src}/nodes/accessors/TangentNode.js +0 -0
  268. /package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +0 -0
  269. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  270. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  271. /package/{examples/jsm → src}/nodes/accessors/UVNode.js +0 -0
  272. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  273. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  274. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  275. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  276. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  277. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  278. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  279. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  280. /package/{examples/jsm → src}/nodes/core/ContextNode.js +0 -0
  281. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  282. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  283. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  284. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  285. /package/{examples/jsm → src}/nodes/core/NodeKeywords.js +0 -0
  286. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  287. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  288. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  289. /package/{examples/jsm → src}/nodes/core/OutputStructNode.js +0 -0
  290. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  291. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  292. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  293. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  294. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  295. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  296. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  297. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  298. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  299. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  300. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  301. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  302. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  303. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  304. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  305. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  306. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  307. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  308. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  309. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  310. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  311. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  312. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  313. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  314. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  315. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  316. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  317. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  318. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  319. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  320. /package/{examples/jsm → src}/nodes/materials/Materials.js +0 -0
  321. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  322. /package/{examples/jsm → src}/nodes/materials/VolumeNodeMaterial.js +0 -0
  323. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  324. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  325. /package/{examples/jsm → src}/nodes/math/HashNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  327. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  328. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  329. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  330. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  342. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  344. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  345. /package/{examples/jsm → src}/nodes/utils/TimerNode.js +0 -0
  346. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  347. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  348. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  349. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  350. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  351. /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
  352. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  353. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  354. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  355. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  356. /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
  357. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  358. /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
  359. /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
  360. /package/{examples/jsm → src}/renderers/common/RenderList.js +0 -0
  361. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  362. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  363. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  364. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  365. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  366. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  367. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  368. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  369. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  370. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -0,0 +1,20 @@
1
+ import { LineSegments2 } from './LineSegments2.js';
2
+ import { LineGeometry } from '../LineGeometry.js';
3
+
4
+ import { Line2NodeMaterial } from 'three';
5
+
6
+ class Line2 extends LineSegments2 {
7
+
8
+ constructor( geometry = new LineGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
9
+
10
+ super( geometry, material );
11
+
12
+ this.isLine2 = true;
13
+
14
+ this.type = 'Line2';
15
+
16
+ }
17
+
18
+ }
19
+
20
+ export { Line2 };
@@ -0,0 +1,376 @@
1
+ import {
2
+ Box3,
3
+ InstancedInterleavedBuffer,
4
+ InterleavedBufferAttribute,
5
+ Line3,
6
+ MathUtils,
7
+ Matrix4,
8
+ Mesh,
9
+ Sphere,
10
+ Vector3,
11
+ Vector4,
12
+ Line2NodeMaterial
13
+ } from 'three';
14
+ import { LineSegmentsGeometry } from '../../lines/LineSegmentsGeometry.js';
15
+
16
+ const _viewport = new Vector4();
17
+
18
+ const _start = new Vector3();
19
+ const _end = new Vector3();
20
+
21
+ const _start4 = new Vector4();
22
+ const _end4 = new Vector4();
23
+
24
+ const _ssOrigin = new Vector4();
25
+ const _ssOrigin3 = new Vector3();
26
+ const _mvMatrix = new Matrix4();
27
+ const _line = new Line3();
28
+ const _closestPoint = new Vector3();
29
+
30
+ const _box = new Box3();
31
+ const _sphere = new Sphere();
32
+ const _clipToWorldVector = new Vector4();
33
+
34
+ let _ray, _lineWidth;
35
+
36
+ // Returns the margin required to expand by in world space given the distance from the camera,
37
+ // line width, resolution, and camera projection
38
+ function getWorldSpaceHalfWidth( camera, distance, resolution ) {
39
+
40
+ // transform into clip space, adjust the x and y values by the pixel width offset, then
41
+ // transform back into world space to get world offset. Note clip space is [-1, 1] so full
42
+ // width does not need to be halved.
43
+ _clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );
44
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
45
+ _clipToWorldVector.x = _lineWidth / resolution.width;
46
+ _clipToWorldVector.y = _lineWidth / resolution.height;
47
+ _clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
48
+ _clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
49
+
50
+ return Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );
51
+
52
+ }
53
+
54
+ function raycastWorldUnits( lineSegments, intersects ) {
55
+
56
+ const matrixWorld = lineSegments.matrixWorld;
57
+ const geometry = lineSegments.geometry;
58
+ const instanceStart = geometry.attributes.instanceStart;
59
+ const instanceEnd = geometry.attributes.instanceEnd;
60
+ const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
61
+
62
+ for ( let i = 0, l = segmentCount; i < l; i ++ ) {
63
+
64
+ _line.start.fromBufferAttribute( instanceStart, i );
65
+ _line.end.fromBufferAttribute( instanceEnd, i );
66
+
67
+ _line.applyMatrix4( matrixWorld );
68
+
69
+ const pointOnLine = new Vector3();
70
+ const point = new Vector3();
71
+
72
+ _ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
73
+ const isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;
74
+
75
+ if ( isInside ) {
76
+
77
+ intersects.push( {
78
+ point,
79
+ pointOnLine,
80
+ distance: _ray.origin.distanceTo( point ),
81
+ object: lineSegments,
82
+ face: null,
83
+ faceIndex: i,
84
+ uv: null,
85
+ uv1: null,
86
+ } );
87
+
88
+ }
89
+
90
+ }
91
+
92
+ }
93
+
94
+ function raycastScreenSpace( lineSegments, camera, intersects ) {
95
+
96
+ const projectionMatrix = camera.projectionMatrix;
97
+ const material = lineSegments.material;
98
+ const resolution = material.resolution;
99
+ const matrixWorld = lineSegments.matrixWorld;
100
+
101
+ const geometry = lineSegments.geometry;
102
+ const instanceStart = geometry.attributes.instanceStart;
103
+ const instanceEnd = geometry.attributes.instanceEnd;
104
+ const segmentCount = Math.min( geometry.instanceCount, instanceStart.count );
105
+
106
+ const near = - camera.near;
107
+
108
+ //
109
+
110
+ // pick a point 1 unit out along the ray to avoid the ray origin
111
+ // sitting at the camera origin which will cause "w" to be 0 when
112
+ // applying the projection matrix.
113
+ _ray.at( 1, _ssOrigin );
114
+
115
+ // ndc space [ - 1.0, 1.0 ]
116
+ _ssOrigin.w = 1;
117
+ _ssOrigin.applyMatrix4( camera.matrixWorldInverse );
118
+ _ssOrigin.applyMatrix4( projectionMatrix );
119
+ _ssOrigin.multiplyScalar( 1 / _ssOrigin.w );
120
+
121
+ // screen space
122
+ _ssOrigin.x *= resolution.x / 2;
123
+ _ssOrigin.y *= resolution.y / 2;
124
+ _ssOrigin.z = 0;
125
+
126
+ _ssOrigin3.copy( _ssOrigin );
127
+
128
+ _mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );
129
+
130
+ for ( let i = 0, l = segmentCount; i < l; i ++ ) {
131
+
132
+ _start4.fromBufferAttribute( instanceStart, i );
133
+ _end4.fromBufferAttribute( instanceEnd, i );
134
+
135
+ _start4.w = 1;
136
+ _end4.w = 1;
137
+
138
+ // camera space
139
+ _start4.applyMatrix4( _mvMatrix );
140
+ _end4.applyMatrix4( _mvMatrix );
141
+
142
+ // skip the segment if it's entirely behind the camera
143
+ const isBehindCameraNear = _start4.z > near && _end4.z > near;
144
+ if ( isBehindCameraNear ) {
145
+
146
+ continue;
147
+
148
+ }
149
+
150
+ // trim the segment if it extends behind camera near
151
+ if ( _start4.z > near ) {
152
+
153
+ const deltaDist = _start4.z - _end4.z;
154
+ const t = ( _start4.z - near ) / deltaDist;
155
+ _start4.lerp( _end4, t );
156
+
157
+ } else if ( _end4.z > near ) {
158
+
159
+ const deltaDist = _end4.z - _start4.z;
160
+ const t = ( _end4.z - near ) / deltaDist;
161
+ _end4.lerp( _start4, t );
162
+
163
+ }
164
+
165
+ // clip space
166
+ _start4.applyMatrix4( projectionMatrix );
167
+ _end4.applyMatrix4( projectionMatrix );
168
+
169
+ // ndc space [ - 1.0, 1.0 ]
170
+ _start4.multiplyScalar( 1 / _start4.w );
171
+ _end4.multiplyScalar( 1 / _end4.w );
172
+
173
+ // screen space
174
+ _start4.x *= resolution.x / 2;
175
+ _start4.y *= resolution.y / 2;
176
+
177
+ _end4.x *= resolution.x / 2;
178
+ _end4.y *= resolution.y / 2;
179
+
180
+ // create 2d segment
181
+ _line.start.copy( _start4 );
182
+ _line.start.z = 0;
183
+
184
+ _line.end.copy( _end4 );
185
+ _line.end.z = 0;
186
+
187
+ // get closest point on ray to segment
188
+ const param = _line.closestPointToPointParameter( _ssOrigin3, true );
189
+ _line.at( param, _closestPoint );
190
+
191
+ // check if the intersection point is within clip space
192
+ const zPos = MathUtils.lerp( _start4.z, _end4.z, param );
193
+ const isInClipSpace = zPos >= - 1 && zPos <= 1;
194
+
195
+ const isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;
196
+
197
+ if ( isInClipSpace && isInside ) {
198
+
199
+ _line.start.fromBufferAttribute( instanceStart, i );
200
+ _line.end.fromBufferAttribute( instanceEnd, i );
201
+
202
+ _line.start.applyMatrix4( matrixWorld );
203
+ _line.end.applyMatrix4( matrixWorld );
204
+
205
+ const pointOnLine = new Vector3();
206
+ const point = new Vector3();
207
+
208
+ _ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );
209
+
210
+ intersects.push( {
211
+ point: point,
212
+ pointOnLine: pointOnLine,
213
+ distance: _ray.origin.distanceTo( point ),
214
+ object: lineSegments,
215
+ face: null,
216
+ faceIndex: i,
217
+ uv: null,
218
+ uv1: null,
219
+ } );
220
+
221
+ }
222
+
223
+ }
224
+
225
+ }
226
+
227
+ class LineSegments2 extends Mesh {
228
+
229
+ constructor( geometry = new LineSegmentsGeometry(), material = new Line2NodeMaterial( { color: Math.random() * 0xffffff } ) ) {
230
+
231
+ super( geometry, material );
232
+
233
+ this.isLineSegments2 = true;
234
+
235
+ this.type = 'LineSegments2';
236
+
237
+ }
238
+
239
+ // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
240
+
241
+ computeLineDistances() {
242
+
243
+ const geometry = this.geometry;
244
+
245
+ const instanceStart = geometry.attributes.instanceStart;
246
+ const instanceEnd = geometry.attributes.instanceEnd;
247
+ const lineDistances = new Float32Array( 2 * instanceStart.count );
248
+
249
+ for ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {
250
+
251
+ _start.fromBufferAttribute( instanceStart, i );
252
+ _end.fromBufferAttribute( instanceEnd, i );
253
+
254
+ lineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];
255
+ lineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );
256
+
257
+ }
258
+
259
+ const instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1
260
+
261
+ geometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0
262
+ geometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1
263
+
264
+ return this;
265
+
266
+ }
267
+
268
+ raycast( raycaster, intersects ) {
269
+
270
+ const worldUnits = this.material.worldUnits;
271
+ const camera = raycaster.camera;
272
+
273
+ if ( camera === null && ! worldUnits ) {
274
+
275
+ console.error( 'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );
276
+
277
+ }
278
+
279
+ const threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;
280
+
281
+ _ray = raycaster.ray;
282
+
283
+ const matrixWorld = this.matrixWorld;
284
+ const geometry = this.geometry;
285
+ const material = this.material;
286
+
287
+ _lineWidth = material.linewidth + threshold;
288
+
289
+ // check if we intersect the sphere bounds
290
+ if ( geometry.boundingSphere === null ) {
291
+
292
+ geometry.computeBoundingSphere();
293
+
294
+ }
295
+
296
+ _sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );
297
+
298
+ // increase the sphere bounds by the worst case line screen space width
299
+ let sphereMargin;
300
+ if ( worldUnits ) {
301
+
302
+ sphereMargin = _lineWidth * 0.5;
303
+
304
+ } else {
305
+
306
+ const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );
307
+ sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );
308
+
309
+ }
310
+
311
+ _sphere.radius += sphereMargin;
312
+
313
+ if ( _ray.intersectsSphere( _sphere ) === false ) {
314
+
315
+ return;
316
+
317
+ }
318
+
319
+ // check if we intersect the box bounds
320
+ if ( geometry.boundingBox === null ) {
321
+
322
+ geometry.computeBoundingBox();
323
+
324
+ }
325
+
326
+ _box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );
327
+
328
+ // increase the box bounds by the worst case line width
329
+ let boxMargin;
330
+ if ( worldUnits ) {
331
+
332
+ boxMargin = _lineWidth * 0.5;
333
+
334
+ } else {
335
+
336
+ const distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );
337
+ boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );
338
+
339
+ }
340
+
341
+ _box.expandByScalar( boxMargin );
342
+
343
+ if ( _ray.intersectsBox( _box ) === false ) {
344
+
345
+ return;
346
+
347
+ }
348
+
349
+ if ( worldUnits ) {
350
+
351
+ raycastWorldUnits( this, intersects );
352
+
353
+ } else {
354
+
355
+ raycastScreenSpace( this, camera, intersects );
356
+
357
+ }
358
+
359
+ }
360
+
361
+ onBeforeRender( renderer ) {
362
+
363
+ const uniforms = this.material.uniforms;
364
+
365
+ if ( uniforms && uniforms.resolution ) {
366
+
367
+ renderer.getViewport( _viewport );
368
+ this.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );
369
+
370
+ }
371
+
372
+ }
373
+
374
+ }
375
+
376
+ export { LineSegments2 };
@@ -407,72 +407,50 @@ class FBXTreeParser {
407
407
  // load a texture specified as a blob or data URI, or via an external URL using TextureLoader
408
408
  loadTexture( textureNode, images ) {
409
409
 
410
- let fileName;
411
-
412
- const currentPath = this.textureLoader.path;
413
-
414
- const children = connections.get( textureNode.id ).children;
410
+ const nonNativeExtensions = new Set( [ 'tga', 'tif', 'tiff', 'exr', 'dds', 'hdr', 'ktx2' ] );
415
411
 
416
- if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {
412
+ const extension = textureNode.FileName.split( '.' ).pop().toLowerCase();
417
413
 
418
- fileName = images[ children[ 0 ].ID ];
414
+ const loader = nonNativeExtensions.has( extension ) ? this.manager.getHandler( `.${extension}` ) : this.textureLoader;
419
415
 
420
- if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {
416
+ if ( ! loader ) {
421
417
 
422
- this.textureLoader.setPath( undefined );
423
-
424
- }
418
+ console.warn(
419
+ `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`,
420
+ textureNode.RelativeFilename
421
+ );
422
+ return new Texture();
425
423
 
426
424
  }
427
425
 
428
- let texture;
429
-
430
- const extension = textureNode.FileName.slice( - 3 ).toLowerCase();
431
-
432
- if ( extension === 'tga' ) {
433
-
434
- const loader = this.manager.getHandler( '.tga' );
426
+ const loaderPath = loader.path;
435
427
 
436
- if ( loader === null ) {
437
-
438
- console.warn( 'FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename );
439
- texture = new Texture();
440
-
441
- } else {
428
+ if ( ! loaderPath ) {
442
429
 
443
- loader.setPath( this.textureLoader.path );
444
- texture = loader.load( fileName );
430
+ loader.setPath( this.textureLoader.path );
445
431
 
446
- }
432
+ }
447
433
 
448
- } else if ( extension === 'dds' ) {
434
+ const children = connections.get( textureNode.id ).children;
449
435
 
450
- const loader = this.manager.getHandler( '.dds' );
436
+ let fileName;
451
437
 
452
- if ( loader === null ) {
438
+ if ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {
453
439
 
454
- console.warn( 'FBXLoader: DDS loader not found, creating placeholder texture for', textureNode.RelativeFilename );
455
- texture = new Texture();
440
+ fileName = images[ children[ 0 ].ID ];
456
441
 
457
- } else {
442
+ if ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {
458
443
 
459
- loader.setPath( this.textureLoader.path );
460
- texture = loader.load( fileName );
444
+ loader.setPath( undefined );
461
445
 
462
446
  }
463
447
 
464
- } else if ( extension === 'psd' ) {
465
-
466
- console.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename );
467
- texture = new Texture();
468
-
469
- } else {
470
-
471
- texture = this.textureLoader.load( fileName );
472
-
473
448
  }
474
449
 
475
- this.textureLoader.setPath( currentPath );
450
+ const texture = loader.load( fileName );
451
+
452
+ // revert to initial path
453
+ loader.setPath( loaderPath );
476
454
 
477
455
  return texture;
478
456
 
@@ -2580,18 +2580,24 @@ class GLTFParser {
2580
2580
  // expensive work of uploading a texture to the GPU off the main thread.
2581
2581
 
2582
2582
  let isSafari = false;
2583
+ let safariVersion = - 1;
2583
2584
  let isFirefox = false;
2584
2585
  let firefoxVersion = - 1;
2585
2586
 
2586
2587
  if ( typeof navigator !== 'undefined' ) {
2587
2588
 
2588
- isSafari = /^((?!chrome|android).)*safari/i.test( navigator.userAgent ) === true;
2589
- isFirefox = navigator.userAgent.indexOf( 'Firefox' ) > - 1;
2590
- firefoxVersion = isFirefox ? navigator.userAgent.match( /Firefox\/([0-9]+)\./ )[ 1 ] : - 1;
2589
+ const userAgent = navigator.userAgent;
2590
+
2591
+ isSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;
2592
+ const safariMatch = userAgent.match( /Version\/(\d+)/ );
2593
+ safariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;
2594
+
2595
+ isFirefox = userAgent.indexOf( 'Firefox' ) > - 1;
2596
+ firefoxVersion = isFirefox ? userAgent.match( /Firefox\/([0-9]+)\./ )[ 1 ] : - 1;
2591
2597
 
2592
2598
  }
2593
2599
 
2594
- if ( typeof createImageBitmap === 'undefined' || isSafari || ( isFirefox && firefoxVersion < 98 ) ) {
2600
+ if ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {
2595
2601
 
2596
2602
  this.textureLoader = new TextureLoader( this.options.manager );
2597
2603
 
@@ -1,12 +1,5 @@
1
1
  import {
2
- FileLoader,
3
- Loader,
4
- TextureLoader,
5
- RepeatWrapping
6
- } from 'three';
7
-
8
- import {
9
- MeshBasicNodeMaterial, MeshPhysicalNodeMaterial,
2
+ FileLoader, Loader, TextureLoader, MeshBasicNodeMaterial, MeshPhysicalNodeMaterial, RepeatWrapping,
10
3
  float, bool, int, vec2, vec3, vec4, color, texture,
11
4
  positionLocal, positionWorld, uv, vertexColor,
12
5
  normalLocal, normalWorld, tangentLocal, tangentWorld,
@@ -20,7 +13,7 @@ import {
20
13
  mx_safepower, mx_contrast,
21
14
  mx_srgb_texture_to_lin_rec709,
22
15
  saturation
23
- } from '../nodes/Nodes.js';
16
+ } from 'three';
24
17
 
25
18
  const colorSpaceLib = {
26
19
  mx_srgb_texture_to_lin_rec709