super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,20 +1,26 @@
1
- import { FileLoader, Loader, TextureLoader, RepeatWrapping, MeshBasicNodeMaterial, MeshPhysicalNodeMaterial } from 'three/webgpu';
1
+ import {
2
+ FileLoader, Loader, ImageBitmapLoader, Texture, RepeatWrapping, MeshBasicNodeMaterial,
3
+ MeshPhysicalNodeMaterial, DoubleSide,
4
+ } from 'three/webgpu';
2
5
 
3
6
  import {
4
7
  float, bool, int, vec2, vec3, vec4, color, texture,
5
8
  positionLocal, positionWorld, uv, vertexColor,
6
9
  normalLocal, normalWorld, tangentLocal, tangentWorld,
7
- add, sub, mul, div, mod, abs, sign, floor, ceil, round, pow, sin, cos, tan,
8
- asin, acos, atan2, sqrt, exp, clamp, min, max, normalize, length, dot, cross, normalMap,
10
+ mul, abs, sign, floor, ceil, round, sin, cos, tan,
11
+ asin, acos, sqrt, exp, clamp, min, max, normalize, length, dot, cross, normalMap,
9
12
  remap, smoothstep, luminance, mx_rgbtohsv, mx_hsvtorgb,
10
- mix, split,
13
+ mix, saturation, transpose, determinant, inverse, log, reflect, refract, element,
11
14
  mx_ramplr, mx_ramptb, mx_splitlr, mx_splittb,
12
15
  mx_fractal_noise_float, mx_noise_float, mx_cell_noise_float, mx_worley_noise_float,
13
16
  mx_transform_uv,
14
17
  mx_safepower, mx_contrast,
15
18
  mx_srgb_texture_to_lin_rec709,
16
- saturation,
17
- timerLocal, frameId
19
+ mx_add, mx_atan2, mx_divide, mx_modulo, mx_multiply, mx_power, mx_subtract,
20
+ mx_timer, mx_frame, mat3, mx_ramp4,
21
+ mx_invert, mx_ifgreater, mx_ifgreatereq, mx_ifequal, distance,
22
+ mx_separate, mx_place2d, mx_rotate2d, mx_rotate3d, mx_heighttonormal,
23
+ mx_unifiednoise2d, mx_unifiednoise3d
18
24
  } from 'three/tsl';
19
25
 
20
26
  const colorSpaceLib = {
@@ -35,19 +41,9 @@ class MXElement {
35
41
 
36
42
  // Ref: https://github.com/mrdoob/three.js/issues/24674
37
43
 
38
- const mx_add = ( in1, in2 = float( 0 ) ) => add( in1, in2 );
39
- const mx_subtract = ( in1, in2 = float( 0 ) ) => sub( in1, in2 );
40
- const mx_multiply = ( in1, in2 = float( 1 ) ) => mul( in1, in2 );
41
- const mx_divide = ( in1, in2 = float( 1 ) ) => div( in1, in2 );
42
- const mx_modulo = ( in1, in2 = float( 1 ) ) => mod( in1, in2 );
43
- const mx_power = ( in1, in2 = float( 1 ) ) => pow( in1, in2 );
44
- const mx_atan2 = ( in1 = float( 0 ), in2 = float( 1 ) ) => atan2( in1, in2 );
45
- const mx_timer = () => timerLocal();
46
- const mx_frame = () => frameId;
47
- const mx_invert = ( in1, amount = float( 1 ) ) => sub( amount, in1 );
44
+ // Enhanced separate node to support multi-output referencing (outx, outy, outz, outw)
48
45
 
49
- const separate = ( in1, channel ) => split( in1, channel.at( - 1 ) );
50
- const extract = ( in1, index ) => in1.element( index );
46
+ // Type/arity-aware MaterialX node wrappers
51
47
 
52
48
  const MXElements = [
53
49
 
@@ -70,7 +66,7 @@ const MXElements = [
70
66
  new MXElement( 'acos', acos, [ 'in' ] ),
71
67
  new MXElement( 'atan2', mx_atan2, [ 'in1', 'in2' ] ),
72
68
  new MXElement( 'sqrt', sqrt, [ 'in' ] ),
73
- //new MtlXElement( 'ln', ... ),
69
+ new MXElement( 'ln', log, [ 'in' ] ),
74
70
  new MXElement( 'exp', exp, [ 'in' ] ),
75
71
  new MXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
76
72
  new MXElement( 'min', min, [ 'in1', 'in2' ] ),
@@ -79,20 +75,27 @@ const MXElements = [
79
75
  new MXElement( 'magnitude', length, [ 'in1', 'in2' ] ),
80
76
  new MXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
81
77
  new MXElement( 'crossproduct', cross, [ 'in' ] ),
78
+ new MXElement( 'distance', distance, [ 'in1', 'in2' ] ),
82
79
  new MXElement( 'invert', mx_invert, [ 'in', 'amount' ] ),
83
80
  //new MtlXElement( 'transformpoint', ... ),
84
81
  //new MtlXElement( 'transformvector', ... ),
85
82
  //new MtlXElement( 'transformnormal', ... ),
86
- //new MtlXElement( 'transformmatrix', ... ),
83
+ new MXElement( 'transformmatrix', mul, [ 'in1', 'in2' ] ),
87
84
  new MXElement( 'normalmap', normalMap, [ 'in', 'scale' ] ),
88
- //new MtlXElement( 'transpose', ... ),
89
- //new MtlXElement( 'determinant', ... ),
90
- //new MtlXElement( 'invertmatrix', ... ),
85
+ new MXElement( 'transpose', transpose, [ 'in' ] ),
86
+ new MXElement( 'determinant', determinant, [ 'in' ] ),
87
+ new MXElement( 'invertmatrix', inverse, [ 'in' ] ),
88
+ new MXElement( 'creatematrix', mat3, [ 'in1', 'in2', 'in3' ] ),
91
89
  //new MtlXElement( 'rotate2d', rotateUV, [ 'in', radians( 'amount' )** ] ),
92
90
  //new MtlXElement( 'rotate3d', ... ),
93
91
  //new MtlXElement( 'arrayappend', ... ),
94
92
  //new MtlXElement( 'dot', ... ),
95
93
 
94
+ new MXElement( 'length', length, [ 'in' ] ),
95
+ new MXElement( 'crossproduct', cross, [ 'in1', 'in2' ] ),
96
+ new MXElement( 'floor', floor, [ 'in' ] ),
97
+ new MXElement( 'ceil', ceil, [ 'in' ] ),
98
+
96
99
  // << Adjustment >>
97
100
  new MXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
98
101
  new MXElement( 'smoothstep', smoothstep, [ 'in', 'low', 'high' ] ),
@@ -113,6 +116,7 @@ const MXElements = [
113
116
  // << Procedural >>
114
117
  new MXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
115
118
  new MXElement( 'ramptb', mx_ramptb, [ 'valuet', 'valueb', 'texcoord' ] ),
119
+ new MXElement( 'ramp4', mx_ramp4, [ 'valuetl', 'valuetr', 'valuebl', 'valuebr', 'texcoord' ] ),
116
120
  new MXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'texcoord' ] ),
117
121
  new MXElement( 'splittb', mx_splittb, [ 'valuet', 'valueb', 'texcoord' ] ),
118
122
  new MXElement( 'noise2d', mx_noise_float, [ 'texcoord', 'amplitude', 'pivot' ] ),
@@ -122,23 +126,34 @@ const MXElements = [
122
126
  new MXElement( 'cellnoise3d', mx_cell_noise_float, [ 'texcoord' ] ),
123
127
  new MXElement( 'worleynoise2d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
124
128
  new MXElement( 'worleynoise3d', mx_worley_noise_float, [ 'texcoord', 'jitter' ] ),
125
-
129
+ new MXElement( 'unifiednoise2d', mx_unifiednoise2d, [ 'type', 'texcoord', 'freq', 'offset', 'jitter', 'outmin', 'outmax', 'clampoutput', 'octaves', 'lacunarity', 'diminish' ] ),
130
+ new MXElement( 'unifiednoise3d', mx_unifiednoise3d, [ 'type', 'texcoord', 'freq', 'offset', 'jitter', 'outmin', 'outmax', 'clampoutput', 'octaves', 'lacunarity', 'diminish' ] ),
126
131
  // << Supplemental >>
127
132
  //new MtlXElement( 'tiledimage', ... ),
128
133
  //new MtlXElement( 'triplanarprojection', triplanarTextures, [ 'filex', 'filey', 'filez' ] ),
129
134
  //new MtlXElement( 'ramp4', ... ),
130
- //new MtlXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset' ] ),
135
+ new MXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset', 'operationorder' ] ),
131
136
  new MXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
132
137
  new MXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
133
138
  //new MtlXElement( 'hsvadjust', ... ),
134
139
  new MXElement( 'saturate', saturation, [ 'in', 'amount' ] ),
135
- new MXElement( 'extract', extract, [ 'in', 'index' ] ),
136
- new MXElement( 'separate2', separate, [ 'in' ] ),
137
- new MXElement( 'separate3', separate, [ 'in' ] ),
138
- new MXElement( 'separate4', separate, [ 'in' ] ),
140
+ new MXElement( 'extract', element, [ 'in', 'index' ] ),
141
+ new MXElement( 'separate2', mx_separate, [ 'in' ] ),
142
+ new MXElement( 'separate3', mx_separate, [ 'in' ] ),
143
+ new MXElement( 'separate4', mx_separate, [ 'in' ] ),
144
+ new MXElement( 'reflect', reflect, [ 'in', 'normal' ] ),
145
+ new MXElement( 'refract', refract, [ 'in', 'normal', 'ior' ] ),
139
146
 
140
147
  new MXElement( 'time', mx_timer ),
141
- new MXElement( 'frame', mx_frame )
148
+ new MXElement( 'frame', mx_frame ),
149
+ new MXElement( 'ifgreater', mx_ifgreater, [ 'value1', 'value2', 'in1', 'in2' ] ),
150
+ new MXElement( 'ifgreatereq', mx_ifgreatereq, [ 'value1', 'value2', 'in1', 'in2' ] ),
151
+ new MXElement( 'ifequal', mx_ifequal, [ 'value1', 'value2', 'in1', 'in2' ] ),
152
+
153
+ // Placeholder implementations for unsupported nodes
154
+ new MXElement( 'rotate2d', mx_rotate2d, [ 'in', 'amount' ] ),
155
+ new MXElement( 'rotate3d', mx_rotate3d, [ 'in', 'amount', 'axis' ] ),
156
+ new MXElement( 'heighttonormal', mx_heighttonormal, [ 'in', 'scale', 'texcoord' ] ),
142
157
 
143
158
  ];
144
159
 
@@ -220,6 +235,22 @@ class MaterialXLoader extends Loader {
220
235
  /**
221
236
  * Parses the given MaterialX data and returns the resulting materials.
222
237
  *
238
+ * Supported standard_surface inputs:
239
+ * - base, base_color: Base color/albedo
240
+ * - opacity: Alpha/transparency
241
+ * - specular_roughness: Surface roughness
242
+ * - metalness: Metallic property
243
+ * - specular: Specular reflection intensity
244
+ * - specular_color: Specular reflection color
245
+ * - ior: Index of refraction
246
+ * - specular_anisotropy, specular_rotation: Anisotropic reflection
247
+ * - transmission, transmission_color: Transmission properties
248
+ * - thin_film_thickness, thin_film_ior: Thin film interference
249
+ * - sheen, sheen_color, sheen_roughness: Sheen properties
250
+ * - normal: Normal map
251
+ * - coat, coat_roughness, coat_color: Clearcoat properties
252
+ * - emission, emissionColor: Emission properties
253
+ *
223
254
  * @param {string} text - The raw MaterialX data as a string.
224
255
  * @return {Object<string,NodeMaterial>} A dictionary holding the parse node materials.
225
256
  */
@@ -235,6 +266,12 @@ class MaterialXNode {
235
266
 
236
267
  constructor( materialX, nodeXML, nodePath = '' ) {
237
268
 
269
+ if ( ! materialX || typeof materialX !== 'object' ) {
270
+
271
+ console.warn( 'MaterialXNode: materialX argument is not an object!', { materialX, nodeXML, nodePath } );
272
+
273
+ }
274
+
238
275
  this.materialX = materialX;
239
276
  this.nodeXML = nodeXML;
240
277
  this.nodePath = nodePath ? nodePath + '/' + this.name : this.name;
@@ -373,9 +410,15 @@ class MaterialXNode {
373
410
  getTexture() {
374
411
 
375
412
  const filePrefix = this.getRecursiveAttribute( 'fileprefix' ) || '';
413
+ const uri = filePrefix + this.value;
414
+
415
+ if ( this.materialX.textureCache.has( uri ) ) {
416
+
417
+ return this.materialX.textureCache.get( uri );
418
+
419
+ }
376
420
 
377
421
  let loader = this.materialX.textureLoader;
378
- const uri = filePrefix + this.value;
379
422
 
380
423
  if ( uri ) {
381
424
 
@@ -384,9 +427,17 @@ class MaterialXNode {
384
427
 
385
428
  }
386
429
 
387
- const texture = loader.load( uri );
430
+ const texture = new Texture();
388
431
  texture.wrapS = texture.wrapT = RepeatWrapping;
389
- texture.flipY = false;
432
+
433
+ this.materialX.textureCache.set( uri, texture );
434
+
435
+ loader.load( uri, function ( imageBitmap ) {
436
+
437
+ texture.image = imageBitmap;
438
+ texture.needsUpdate = true;
439
+
440
+ } );
390
441
 
391
442
  return texture;
392
443
 
@@ -418,6 +469,37 @@ class MaterialXNode {
418
469
 
419
470
  }
420
471
 
472
+ // Handle <input name="texcoord" type="vector2" ... />
473
+ if (
474
+ this.element === 'input' &&
475
+ this.name === 'texcoord' &&
476
+ this.type === 'vector2'
477
+ ) {
478
+
479
+ // Try to get index from defaultgeomprop (e.g., "UV0" => 0)
480
+ let index = 0;
481
+ const defaultGeomProp = this.getAttribute( 'defaultgeomprop' );
482
+ if ( defaultGeomProp && /^UV(\d+)$/.test( defaultGeomProp ) ) {
483
+
484
+ index = parseInt( defaultGeomProp.match( /^UV(\d+)$/ )[ 1 ], 10 );
485
+
486
+ }
487
+
488
+ node = uv( index );
489
+
490
+ }
491
+
492
+ // Multi-output support for separate/separate3
493
+ if (
494
+ ( this.element === 'separate3' || this.element === 'separate2' || this.element === 'separate4' ) &&
495
+ out && typeof out === 'string' && out.startsWith( 'out' )
496
+ ) {
497
+
498
+ const inNode = this.getNodeByName( 'in' );
499
+ return mx_separate( inNode, out );
500
+
501
+ }
502
+
421
503
  //
422
504
 
423
505
  const type = this.type;
@@ -519,6 +601,18 @@ class MaterialXNode {
519
601
 
520
602
  const nodeElement = MtlXLibrary[ element ];
521
603
 
604
+ if ( ! nodeElement ) {
605
+
606
+ throw new Error( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
607
+
608
+ }
609
+
610
+ if ( ! nodeElement.nodeFunc ) {
611
+
612
+ throw new Error( `THREE.MaterialXLoader: Unexpected node 2 ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
613
+
614
+ }
615
+
522
616
  if ( out !== null ) {
523
617
 
524
618
  node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ), out );
@@ -551,6 +645,11 @@ class MaterialXNode {
551
645
 
552
646
  node = nodeToTypeClass( node );
553
647
 
648
+ } else {
649
+
650
+ console.warn( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
651
+ node = float( 0 );
652
+
554
653
  }
555
654
 
556
655
  node.name = this.name;
@@ -673,6 +772,12 @@ class MaterialXNode {
673
772
 
674
773
  //
675
774
 
775
+ let opacityNode = null;
776
+
777
+ if ( inputs.opacity ) opacityNode = inputs.opacity;
778
+
779
+ //
780
+
676
781
  let roughnessNode = null;
677
782
 
678
783
  if ( inputs.specular_roughness ) roughnessNode = inputs.specular_roughness;
@@ -685,6 +790,64 @@ class MaterialXNode {
685
790
 
686
791
  //
687
792
 
793
+ let specularIntensityNode = null;
794
+
795
+ if ( inputs.specular ) specularIntensityNode = inputs.specular;
796
+
797
+ //
798
+
799
+ let specularColorNode = null;
800
+
801
+ if ( inputs.specular_color ) specularColorNode = inputs.specular_color;
802
+
803
+ //
804
+
805
+ let iorNode = null;
806
+
807
+ if ( inputs.ior ) iorNode = inputs.ior;
808
+
809
+ //
810
+
811
+ let anisotropyNode = null;
812
+ let anisotropyRotationNode = null;
813
+
814
+ if ( inputs.specular_anisotropy ) anisotropyNode = inputs.specular_anisotropy;
815
+ if ( inputs.specular_rotation ) anisotropyRotationNode = inputs.specular_rotation;
816
+
817
+ //
818
+
819
+ let transmissionNode = null;
820
+ let transmissionColorNode = null;
821
+
822
+ if ( inputs.transmission ) transmissionNode = inputs.transmission;
823
+ if ( inputs.transmission_color ) transmissionColorNode = inputs.transmission_color;
824
+
825
+ //
826
+
827
+ let thinFilmThicknessNode = null;
828
+ let thinFilmIorNode = null;
829
+
830
+ if ( inputs.thin_film_thickness ) thinFilmThicknessNode = inputs.thin_film_thickness;
831
+
832
+ if ( inputs.thin_film_ior ) {
833
+
834
+ // Clamp IOR to valid range for Three.js (1.0 to 2.333)
835
+ thinFilmIorNode = clamp( inputs.thin_film_ior, float( 1.0 ), float( 2.333 ) );
836
+
837
+ }
838
+
839
+ //
840
+
841
+ let sheenNode = null;
842
+ let sheenColorNode = null;
843
+ let sheenRoughnessNode = null;
844
+
845
+ if ( inputs.sheen ) sheenNode = inputs.sheen;
846
+ if ( inputs.sheen_color ) sheenColorNode = inputs.sheen_color;
847
+ if ( inputs.sheen_roughness ) sheenRoughnessNode = inputs.sheen_roughness;
848
+
849
+ //
850
+
688
851
  let clearcoatNode = null;
689
852
  let clearcoatRoughnessNode = null;
690
853
 
@@ -717,13 +880,46 @@ class MaterialXNode {
717
880
  //
718
881
 
719
882
  material.colorNode = colorNode || color( 0.8, 0.8, 0.8 );
883
+ material.opacityNode = opacityNode || float( 1.0 );
720
884
  material.roughnessNode = roughnessNode || float( 0.2 );
721
885
  material.metalnessNode = metalnessNode || float( 0 );
886
+ material.specularIntensityNode = specularIntensityNode || float( 0.5 );
887
+ material.specularColorNode = specularColorNode || color( 1.0, 1.0, 1.0 );
888
+ material.iorNode = iorNode || float( 1.5 );
889
+ material.anisotropyNode = anisotropyNode || float( 0 );
890
+ material.anisotropyRotationNode = anisotropyRotationNode || float( 0 );
891
+ material.transmissionNode = transmissionNode || float( 0 );
892
+ material.transmissionColorNode = transmissionColorNode || color( 1.0, 1.0, 1.0 );
893
+ material.thinFilmThicknessNode = thinFilmThicknessNode || float( 0 );
894
+ material.thinFilmIorNode = thinFilmIorNode || float( 1.5 );
895
+ material.sheenNode = sheenNode || float( 0 );
896
+ material.sheenColorNode = sheenColorNode || color( 1.0, 1.0, 1.0 );
897
+ material.sheenRoughnessNode = sheenRoughnessNode || float( 0.5 );
722
898
  material.clearcoatNode = clearcoatNode || float( 0 );
723
899
  material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
724
900
  if ( normalNode ) material.normalNode = normalNode;
725
901
  if ( emissiveNode ) material.emissiveNode = emissiveNode;
726
902
 
903
+ // Auto-enable iridescence when thin film parameters are present
904
+ if ( thinFilmThicknessNode && thinFilmThicknessNode.value !== undefined && thinFilmThicknessNode.value > 0 ) {
905
+
906
+ material.iridescence = 1.0;
907
+
908
+ }
909
+
910
+ if ( opacityNode !== null ) {
911
+
912
+ material.transparent = true;
913
+
914
+ }
915
+
916
+ if ( transmissionNode !== null ) {
917
+
918
+ material.side = DoubleSide;
919
+ material.transparent = true;
920
+
921
+ }
922
+
727
923
  }
728
924
 
729
925
  /*setGltfPBR( material ) {
@@ -848,7 +1044,10 @@ class MaterialX {
848
1044
  this.nodesXLib = new Map();
849
1045
  //this.nodesXRefLib = new WeakMap();
850
1046
 
851
- this.textureLoader = new TextureLoader( manager );
1047
+ this.textureLoader = new ImageBitmapLoader( manager );
1048
+ this.textureLoader.setOptions( { imageOrientation: 'flipY' } );
1049
+
1050
+ this.textureCache = new Map();
852
1051
 
853
1052
  }
854
1053
 
@@ -436,7 +436,7 @@ function ParserState() {
436
436
  /**
437
437
  * A loader for the OBJ format.
438
438
  *
439
- * The [OBJ format]{@link https://en.wikipedia.org/wiki/Wavefront_.obj_file} is a simple data-format that
439
+ * The [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) is a simple data-format that
440
440
  * represents 3D geometry in a human readable format as the position of each vertex, the UV position of
441
441
  * each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list
442
442
  * of vertices, and texture vertices.
@@ -10,7 +10,7 @@ import {
10
10
  /**
11
11
  * A loader for the PDB format.
12
12
  *
13
- * The [Protein Data Bank]{@link https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format)}
13
+ * The [Protein Data Bank](https://en.wikipedia.org/wiki/Protein_Data_Bank_(file_format))
14
14
  * file format is a textual file describing the three-dimensional structures of molecules.
15
15
  *
16
16
  * ```js