@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. 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, TextureLoader, 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
 
@@ -156,6 +171,7 @@ MXElements.forEach( element => MtlXLibrary[ element.name ] = element );
156
171
  * ```
157
172
  *
158
173
  * @augments Loader
174
+ * @three_import import { MaterialXLoader } from 'three/addons/loaders/MaterialXLoader.js';
159
175
  */
160
176
  class MaterialXLoader extends Loader {
161
177
 
@@ -219,6 +235,22 @@ class MaterialXLoader extends Loader {
219
235
  /**
220
236
  * Parses the given MaterialX data and returns the resulting materials.
221
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
+ *
222
254
  * @param {string} text - The raw MaterialX data as a string.
223
255
  * @return {Object<string,NodeMaterial>} A dictionary holding the parse node materials.
224
256
  */
@@ -234,6 +266,12 @@ class MaterialXNode {
234
266
 
235
267
  constructor( materialX, nodeXML, nodePath = '' ) {
236
268
 
269
+ if ( ! materialX || typeof materialX !== 'object' ) {
270
+
271
+ console.warn( 'MaterialXNode: materialX argument is not an object!', { materialX, nodeXML, nodePath } );
272
+
273
+ }
274
+
237
275
  this.materialX = materialX;
238
276
  this.nodeXML = nodeXML;
239
277
  this.nodePath = nodePath ? nodePath + '/' + this.name : this.name;
@@ -417,6 +455,37 @@ class MaterialXNode {
417
455
 
418
456
  }
419
457
 
458
+ // Handle <input name="texcoord" type="vector2" ... />
459
+ if (
460
+ this.element === 'input' &&
461
+ this.name === 'texcoord' &&
462
+ this.type === 'vector2'
463
+ ) {
464
+
465
+ // Try to get index from defaultgeomprop (e.g., "UV0" => 0)
466
+ let index = 0;
467
+ const defaultGeomProp = this.getAttribute( 'defaultgeomprop' );
468
+ if ( defaultGeomProp && /^UV(\d+)$/.test( defaultGeomProp ) ) {
469
+
470
+ index = parseInt( defaultGeomProp.match( /^UV(\d+)$/ )[ 1 ], 10 );
471
+
472
+ }
473
+
474
+ node = uv( index );
475
+
476
+ }
477
+
478
+ // Multi-output support for separate/separate3
479
+ if (
480
+ ( this.element === 'separate3' || this.element === 'separate2' || this.element === 'separate4' ) &&
481
+ out && typeof out === 'string' && out.startsWith( 'out' )
482
+ ) {
483
+
484
+ const inNode = this.getNodeByName( 'in' );
485
+ return mx_separate( inNode, out );
486
+
487
+ }
488
+
420
489
  //
421
490
 
422
491
  const type = this.type;
@@ -518,6 +587,18 @@ class MaterialXNode {
518
587
 
519
588
  const nodeElement = MtlXLibrary[ element ];
520
589
 
590
+ if ( ! nodeElement ) {
591
+
592
+ throw new Error( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
593
+
594
+ }
595
+
596
+ if ( ! nodeElement.nodeFunc ) {
597
+
598
+ throw new Error( `THREE.MaterialXLoader: Unexpected node 2 ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
599
+
600
+ }
601
+
521
602
  if ( out !== null ) {
522
603
 
523
604
  node = nodeElement.nodeFunc( ...this.getNodesByNames( ...nodeElement.params ), out );
@@ -550,6 +631,11 @@ class MaterialXNode {
550
631
 
551
632
  node = nodeToTypeClass( node );
552
633
 
634
+ } else {
635
+
636
+ console.warn( `THREE.MaterialXLoader: Unexpected node ${ new XMLSerializer().serializeToString( this.nodeXML ) }.` );
637
+ node = float( 0 );
638
+
553
639
  }
554
640
 
555
641
  node.name = this.name;
@@ -672,6 +758,12 @@ class MaterialXNode {
672
758
 
673
759
  //
674
760
 
761
+ let opacityNode = null;
762
+
763
+ if ( inputs.opacity ) opacityNode = inputs.opacity;
764
+
765
+ //
766
+
675
767
  let roughnessNode = null;
676
768
 
677
769
  if ( inputs.specular_roughness ) roughnessNode = inputs.specular_roughness;
@@ -684,6 +776,64 @@ class MaterialXNode {
684
776
 
685
777
  //
686
778
 
779
+ let specularIntensityNode = null;
780
+
781
+ if ( inputs.specular ) specularIntensityNode = inputs.specular;
782
+
783
+ //
784
+
785
+ let specularColorNode = null;
786
+
787
+ if ( inputs.specular_color ) specularColorNode = inputs.specular_color;
788
+
789
+ //
790
+
791
+ let iorNode = null;
792
+
793
+ if ( inputs.ior ) iorNode = inputs.ior;
794
+
795
+ //
796
+
797
+ let anisotropyNode = null;
798
+ let anisotropyRotationNode = null;
799
+
800
+ if ( inputs.specular_anisotropy ) anisotropyNode = inputs.specular_anisotropy;
801
+ if ( inputs.specular_rotation ) anisotropyRotationNode = inputs.specular_rotation;
802
+
803
+ //
804
+
805
+ let transmissionNode = null;
806
+ let transmissionColorNode = null;
807
+
808
+ if ( inputs.transmission ) transmissionNode = inputs.transmission;
809
+ if ( inputs.transmission_color ) transmissionColorNode = inputs.transmission_color;
810
+
811
+ //
812
+
813
+ let thinFilmThicknessNode = null;
814
+ let thinFilmIorNode = null;
815
+
816
+ if ( inputs.thin_film_thickness ) thinFilmThicknessNode = inputs.thin_film_thickness;
817
+
818
+ if ( inputs.thin_film_ior ) {
819
+
820
+ // Clamp IOR to valid range for Three.js (1.0 to 2.333)
821
+ thinFilmIorNode = clamp( inputs.thin_film_ior, float( 1.0 ), float( 2.333 ) );
822
+
823
+ }
824
+
825
+ //
826
+
827
+ let sheenNode = null;
828
+ let sheenColorNode = null;
829
+ let sheenRoughnessNode = null;
830
+
831
+ if ( inputs.sheen ) sheenNode = inputs.sheen;
832
+ if ( inputs.sheen_color ) sheenColorNode = inputs.sheen_color;
833
+ if ( inputs.sheen_roughness ) sheenRoughnessNode = inputs.sheen_roughness;
834
+
835
+ //
836
+
687
837
  let clearcoatNode = null;
688
838
  let clearcoatRoughnessNode = null;
689
839
 
@@ -716,13 +866,46 @@ class MaterialXNode {
716
866
  //
717
867
 
718
868
  material.colorNode = colorNode || color( 0.8, 0.8, 0.8 );
869
+ material.opacityNode = opacityNode || float( 1.0 );
719
870
  material.roughnessNode = roughnessNode || float( 0.2 );
720
871
  material.metalnessNode = metalnessNode || float( 0 );
872
+ material.specularIntensityNode = specularIntensityNode || float( 0.5 );
873
+ material.specularColorNode = specularColorNode || color( 1.0, 1.0, 1.0 );
874
+ material.iorNode = iorNode || float( 1.5 );
875
+ material.anisotropyNode = anisotropyNode || float( 0 );
876
+ material.anisotropyRotationNode = anisotropyRotationNode || float( 0 );
877
+ material.transmissionNode = transmissionNode || float( 0 );
878
+ material.transmissionColorNode = transmissionColorNode || color( 1.0, 1.0, 1.0 );
879
+ material.thinFilmThicknessNode = thinFilmThicknessNode || float( 0 );
880
+ material.thinFilmIorNode = thinFilmIorNode || float( 1.5 );
881
+ material.sheenNode = sheenNode || float( 0 );
882
+ material.sheenColorNode = sheenColorNode || color( 1.0, 1.0, 1.0 );
883
+ material.sheenRoughnessNode = sheenRoughnessNode || float( 0.5 );
721
884
  material.clearcoatNode = clearcoatNode || float( 0 );
722
885
  material.clearcoatRoughnessNode = clearcoatRoughnessNode || float( 0 );
723
886
  if ( normalNode ) material.normalNode = normalNode;
724
887
  if ( emissiveNode ) material.emissiveNode = emissiveNode;
725
888
 
889
+ // Auto-enable iridescence when thin film parameters are present
890
+ if ( thinFilmThicknessNode && thinFilmThicknessNode.value !== undefined && thinFilmThicknessNode.value > 0 ) {
891
+
892
+ material.iridescence = 1.0;
893
+
894
+ }
895
+
896
+ if ( opacityNode !== null ) {
897
+
898
+ material.transparent = true;
899
+
900
+ }
901
+
902
+ if ( transmissionNode !== null ) {
903
+
904
+ material.side = DoubleSide;
905
+ material.transparent = true;
906
+
907
+ }
908
+
726
909
  }
727
910
 
728
911
  /*setGltfPBR( material ) {
@@ -16,6 +16,7 @@ import { Volume } from '../misc/Volume.js';
16
16
  * ```
17
17
  *
18
18
  * @augments Loader
19
+ * @three_import import { NRRDLoader } from 'three/addons/loaders/NRRDLoader.js';
19
20
  */
20
21
  class NRRDLoader extends Loader {
21
22
 
@@ -448,6 +448,7 @@ function ParserState() {
448
448
  * ```
449
449
  *
450
450
  * @augments Loader
451
+ * @three_import import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';
451
452
  */
452
453
  class OBJLoader extends Loader {
453
454
 
@@ -30,6 +30,7 @@ import {
30
30
  * ```
31
31
  *
32
32
  * @augments Loader
33
+ * @three_import import { PCDLoader } from 'three/addons/loaders/PCDLoader.js';
33
34
  */
34
35
  class PCDLoader extends Loader {
35
36
 
@@ -96,6 +97,71 @@ class PCDLoader extends Loader {
96
97
 
97
98
  }
98
99
 
100
+ /**
101
+ * Get dataview value by field type and size.
102
+ *
103
+ * @param {DataView} dataview - The DataView to read from.
104
+ * @param {number} offset - The offset to start reading from.
105
+ * @param {'F' | 'U' | 'I'} type - Field type.
106
+ * @param {number} size - Field size.
107
+ * @returns {number} Field value.
108
+ */
109
+ _getDataView( dataview, offset, type, size ) {
110
+
111
+ switch ( type ) {
112
+
113
+ case 'F': {
114
+
115
+ if ( size === 8 ) {
116
+
117
+ return dataview.getFloat64( offset, this.littleEndian );
118
+
119
+ }
120
+
121
+ return dataview.getFloat32( offset, this.littleEndian );
122
+
123
+ }
124
+
125
+ case 'I': {
126
+
127
+ if ( size === 1 ) {
128
+
129
+ return dataview.getInt8( offset );
130
+
131
+ }
132
+
133
+ if ( size === 2 ) {
134
+
135
+ return dataview.getInt16( offset, this.littleEndian );
136
+
137
+ }
138
+
139
+ return dataview.getInt32( offset, this.littleEndian );
140
+
141
+ }
142
+
143
+ case 'U': {
144
+
145
+ if ( size === 1 ) {
146
+
147
+ return dataview.getUint8( offset );
148
+
149
+ }
150
+
151
+ if ( size === 2 ) {
152
+
153
+ return dataview.getUint16( offset, this.littleEndian );
154
+
155
+ }
156
+
157
+ return dataview.getUint32( offset, this.littleEndian );
158
+
159
+ }
160
+
161
+ }
162
+
163
+ }
164
+
99
165
  /**
100
166
  * Parses the given PCD data and returns a point cloud.
101
167
  *
@@ -159,9 +225,40 @@ class PCDLoader extends Loader {
159
225
 
160
226
  }
161
227
 
162
- function parseHeader( data ) {
228
+ function parseHeader( binaryData ) {
163
229
 
164
230
  const PCDheader = {};
231
+
232
+ const buffer = new Uint8Array( binaryData );
233
+
234
+ let data = '', line = '', i = 0, end = false;
235
+
236
+ const max = buffer.length;
237
+
238
+ while ( i < max && end === false ) {
239
+
240
+ const char = String.fromCharCode( buffer[ i ++ ] );
241
+
242
+ if ( char === '\n' || char === '\r' ) {
243
+
244
+ if ( line.trim().toLowerCase().startsWith( 'data' ) ) {
245
+
246
+ end = true;
247
+
248
+ }
249
+
250
+ line = '';
251
+
252
+ } else {
253
+
254
+ line += char;
255
+
256
+ }
257
+
258
+ data += char;
259
+
260
+ }
261
+
165
262
  const result1 = data.search( /[\r\n]DATA\s(\S*)\s/i );
166
263
  const result2 = /[\r\n]DATA\s(\S*)\s/i.exec( data.slice( result1 - 1 ) );
167
264
 
@@ -267,11 +364,9 @@ class PCDLoader extends Loader {
267
364
 
268
365
  }
269
366
 
270
- const textData = new TextDecoder().decode( data );
367
+ // parse header
271
368
 
272
- // parse header (always ascii format)
273
-
274
- const PCDheader = parseHeader( textData );
369
+ const PCDheader = parseHeader( data );
275
370
 
276
371
  // parse data
277
372
 
@@ -288,6 +383,7 @@ class PCDLoader extends Loader {
288
383
  if ( PCDheader.data === 'ascii' ) {
289
384
 
290
385
  const offset = PCDheader.offset;
386
+ const textData = new TextDecoder().decode( data );
291
387
  const pcdData = textData.slice( PCDheader.headerLen );
292
388
  const lines = pcdData.split( '\n' );
293
389
 
@@ -380,9 +476,9 @@ class PCDLoader extends Loader {
380
476
  const xIndex = PCDheader.fields.indexOf( 'x' );
381
477
  const yIndex = PCDheader.fields.indexOf( 'y' );
382
478
  const zIndex = PCDheader.fields.indexOf( 'z' );
383
- position.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
384
- position.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
385
- position.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
479
+ position.push( this._getDataView( dataview, ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );
480
+ position.push( this._getDataView( dataview, ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );
481
+ position.push( this._getDataView( dataview, ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );
386
482
 
387
483
  }
388
484
 
@@ -405,16 +501,16 @@ class PCDLoader extends Loader {
405
501
  const xIndex = PCDheader.fields.indexOf( 'normal_x' );
406
502
  const yIndex = PCDheader.fields.indexOf( 'normal_y' );
407
503
  const zIndex = PCDheader.fields.indexOf( 'normal_z' );
408
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
409
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
410
- normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
504
+ normal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );
505
+ normal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );
506
+ normal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );
411
507
 
412
508
  }
413
509
 
414
510
  if ( offset.intensity !== undefined ) {
415
511
 
416
512
  const intensityIndex = PCDheader.fields.indexOf( 'intensity' );
417
- intensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );
513
+ intensity.push( this._getDataView( dataview, ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );
418
514
 
419
515
  }
420
516
 
@@ -440,9 +536,12 @@ class PCDLoader extends Loader {
440
536
 
441
537
  if ( offset.x !== undefined ) {
442
538
 
443
- position.push( dataview.getFloat32( row + offset.x, this.littleEndian ) );
444
- position.push( dataview.getFloat32( row + offset.y, this.littleEndian ) );
445
- position.push( dataview.getFloat32( row + offset.z, this.littleEndian ) );
539
+ const xIndex = PCDheader.fields.indexOf( 'x' );
540
+ const yIndex = PCDheader.fields.indexOf( 'y' );
541
+ const zIndex = PCDheader.fields.indexOf( 'z' );
542
+ position.push( this._getDataView( dataview, row + offset.x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );
543
+ position.push( this._getDataView( dataview, row + offset.y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );
544
+ position.push( this._getDataView( dataview, row + offset.z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );
446
545
 
447
546
  }
448
547
 
@@ -460,15 +559,19 @@ class PCDLoader extends Loader {
460
559
 
461
560
  if ( offset.normal_x !== undefined ) {
462
561
 
463
- normal.push( dataview.getFloat32( row + offset.normal_x, this.littleEndian ) );
464
- normal.push( dataview.getFloat32( row + offset.normal_y, this.littleEndian ) );
465
- normal.push( dataview.getFloat32( row + offset.normal_z, this.littleEndian ) );
562
+ const xIndex = PCDheader.fields.indexOf( 'normal_x' );
563
+ const yIndex = PCDheader.fields.indexOf( 'normal_y' );
564
+ const zIndex = PCDheader.fields.indexOf( 'normal_z' );
565
+ normal.push( this._getDataView( dataview, row + offset.normal_x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );
566
+ normal.push( this._getDataView( dataview, row + offset.normal_y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );
567
+ normal.push( this._getDataView( dataview, row + offset.normal_z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );
466
568
 
467
569
  }
468
570
 
469
571
  if ( offset.intensity !== undefined ) {
470
572
 
471
- intensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );
573
+ const intensityIndex = PCDheader.fields.indexOf( 'intensity' );
574
+ intensity.push( this._getDataView( dataview, row + offset.intensity, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );
472
575
 
473
576
  }
474
577
 
@@ -23,6 +23,7 @@ import {
23
23
  * ```
24
24
  *
25
25
  * @augments Loader
26
+ * @three_import import { PDBLoader } from 'three/addons/loaders/PDBLoader.js';
26
27
  */
27
28
  class PDBLoader extends Loader {
28
29
 
@@ -23,6 +23,7 @@ const _color = new Color();
23
23
  * ```
24
24
  *
25
25
  * @augments Loader
26
+ * @three_import import { PLYLoader } from 'three/addons/loaders/PLYLoader.js';
26
27
  */
27
28
  class PLYLoader extends Loader {
28
29
 
@@ -17,6 +17,7 @@ import {
17
17
  * ```
18
18
  *
19
19
  * @augments CompressedTextureLoader
20
+ * @three_import import { PVRLoader } from 'three/addons/loaders/PVRLoader.js';
20
21
  */
21
22
  class PVRLoader extends CompressedTextureLoader {
22
23
 
@@ -19,6 +19,7 @@ import {
19
19
  * ```
20
20
  *
21
21
  * @augments DataTextureLoader
22
+ * @three_import import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';
22
23
  */
23
24
  class RGBELoader extends DataTextureLoader {
24
25
 
@@ -18,6 +18,7 @@ import {
18
18
  * ```
19
19
  *
20
20
  * @augments DataTextureLoader
21
+ * @three_import import { RGBMLoader } from 'three/addons/loaders/RGBMLoader.js';
21
22
  */
22
23
  class RGBMLoader extends DataTextureLoader {
23
24
 
@@ -49,6 +49,7 @@ import {
49
49
  * ```
50
50
  *
51
51
  * @augments Loader
52
+ * @three_import import { STLLoader } from 'three/addons/loaders/STLLoader.js';
52
53
  */
53
54
  class STLLoader extends Loader {
54
55
 
@@ -55,6 +55,7 @@ const COLOR_SPACE_SVG = SRGBColorSpace;
55
55
  * ```
56
56
  *
57
57
  * @augments Loader
58
+ * @three_import import { SVGLoader } from 'three/addons/loaders/SVGLoader.js';
58
59
  */
59
60
  class SVGLoader extends Loader {
60
61