super-three 0.141.0 → 0.147.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 (646) hide show
  1. package/README.md +9 -9
  2. package/build/three.cjs +2441 -1569
  3. package/build/three.js +2441 -1569
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +2847 -1576
  6. package/examples/js/animation/AnimationClipCreator.js +0 -8
  7. package/examples/js/animation/CCDIKSolver.js +50 -67
  8. package/examples/js/animation/MMDAnimationHelper.js +66 -137
  9. package/examples/js/animation/MMDPhysics.js +71 -150
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +149 -403
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -61
  14. package/examples/js/controls/FlyControls.js +29 -63
  15. package/examples/js/controls/OrbitControls.js +125 -103
  16. package/examples/js/controls/PointerLockControls.js +5 -22
  17. package/examples/js/controls/TrackballControls.js +33 -88
  18. package/examples/js/controls/TransformControls.js +101 -182
  19. package/examples/js/csm/CSM.js +4 -39
  20. package/examples/js/csm/CSMFrustum.js +3 -9
  21. package/examples/js/csm/CSMHelper.js +24 -4
  22. package/examples/js/csm/CSMShader.js +2 -6
  23. package/examples/js/curves/CurveExtras.js +27 -27
  24. package/examples/js/curves/NURBSCurve.js +4 -16
  25. package/examples/js/curves/NURBSSurface.js +3 -9
  26. package/examples/js/curves/NURBSUtils.js +8 -45
  27. package/examples/js/effects/AnaglyphEffect.js +6 -20
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +30 -54
  30. package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
  31. package/examples/js/effects/PeppersGhostEffect.js +14 -41
  32. package/examples/js/effects/StereoEffect.js +2 -6
  33. package/examples/js/environments/RoomEnvironment.js +32 -8
  34. package/examples/js/exporters/ColladaExporter.js +52 -78
  35. package/examples/js/exporters/DRACOExporter.js +22 -34
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +168 -345
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +40 -52
  40. package/examples/js/exporters/PLYExporter.js +50 -57
  41. package/examples/js/exporters/STLExporter.js +5 -14
  42. package/examples/js/exporters/USDZExporter.js +119 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +12 -7
  45. package/examples/js/geometries/DecalGeometry.js +53 -20
  46. package/examples/js/geometries/LightningStrike.js +54 -67
  47. package/examples/js/geometries/ParametricGeometries.js +8 -7
  48. package/examples/js/geometries/ParametricGeometry.js +23 -17
  49. package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
  50. package/examples/js/geometries/TeapotGeometry.js +54 -50
  51. package/examples/js/geometries/TextGeometry.js +6 -4
  52. package/examples/js/helpers/LightProbeHelper.js +1 -2
  53. package/examples/js/helpers/OctreeHelper.js +22 -20
  54. package/examples/js/helpers/PositionalAudioHelper.js +8 -6
  55. package/examples/js/helpers/RectAreaLightHelper.js +6 -7
  56. package/examples/js/helpers/VertexNormalsHelper.js +15 -13
  57. package/examples/js/helpers/VertexTangentsHelper.js +15 -9
  58. package/examples/js/helpers/ViewHelper.js +31 -16
  59. package/examples/js/interactive/HTMLMesh.js +25 -39
  60. package/examples/js/interactive/InteractiveGroup.js +9 -14
  61. package/examples/js/interactive/SelectionBox.js +3 -70
  62. package/examples/js/interactive/SelectionHelper.js +2 -8
  63. package/examples/js/libs/ktx-parse.umd.js +1 -0
  64. package/examples/js/libs/meshopt_decoder.js +98 -32
  65. package/examples/js/lights/LightProbeGenerator.js +32 -39
  66. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  67. package/examples/js/lines/LineGeometry.js +3 -5
  68. package/examples/js/lines/LineMaterial.js +4 -11
  69. package/examples/js/lines/LineSegments2.js +40 -89
  70. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  71. package/examples/js/lines/Wireframe.js +2 -7
  72. package/examples/js/lines/WireframeGeometry2.js +3 -1
  73. package/examples/js/loaders/3DMLoader.js +58 -155
  74. package/examples/js/loaders/3MFLoader.js +72 -106
  75. package/examples/js/loaders/AMFLoader.js +0 -25
  76. package/examples/js/loaders/BVHLoader.js +44 -43
  77. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  78. package/examples/js/loaders/ColladaLoader.js +229 -359
  79. package/examples/js/loaders/DDSLoader.js +24 -25
  80. package/examples/js/loaders/DRACOLoader.js +30 -90
  81. package/examples/js/loaders/EXRLoader.js +69 -177
  82. package/examples/js/loaders/FBXLoader.js +294 -441
  83. package/examples/js/loaders/FontLoader.js +9 -31
  84. package/examples/js/loaders/GCodeLoader.js +15 -16
  85. package/examples/js/loaders/GLTFLoader.js +458 -739
  86. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
  87. package/examples/js/loaders/KMZLoader.js +3 -7
  88. package/examples/js/loaders/KTXLoader.js +12 -30
  89. package/examples/js/loaders/LDrawLoader.js +309 -355
  90. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  91. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  92. package/examples/js/loaders/LWOLoader.js +59 -124
  93. package/examples/js/loaders/LogLuvLoader.js +27 -77
  94. package/examples/js/loaders/LottieLoader.js +4 -4
  95. package/examples/js/loaders/MD2Loader.js +26 -27
  96. package/examples/js/loaders/MDDLoader.js +6 -10
  97. package/examples/js/loaders/MMDLoader.js +180 -189
  98. package/examples/js/loaders/MTLLoader.js +18 -47
  99. package/examples/js/loaders/NRRDLoader.js +44 -84
  100. package/examples/js/loaders/OBJLoader.js +56 -77
  101. package/examples/js/loaders/PCDLoader.js +92 -42
  102. package/examples/js/loaders/PDBLoader.js +17 -13
  103. package/examples/js/loaders/PLYLoader.js +65 -51
  104. package/examples/js/loaders/PRWMLoader.js +11 -22
  105. package/examples/js/loaders/PVRLoader.js +7 -16
  106. package/examples/js/loaders/RGBELoader.js +36 -61
  107. package/examples/js/loaders/RGBMLoader.js +26 -87
  108. package/examples/js/loaders/STLLoader.js +20 -27
  109. package/examples/js/loaders/SVGLoader.js +365 -236
  110. package/examples/js/loaders/TDSLoader.js +81 -118
  111. package/examples/js/loaders/TGALoader.js +39 -41
  112. package/examples/js/loaders/TIFFLoader.js +30 -0
  113. package/examples/js/loaders/TTFLoader.js +0 -8
  114. package/examples/js/loaders/TiltLoader.js +14 -15
  115. package/examples/js/loaders/VOXLoader.js +8 -16
  116. package/examples/js/loaders/VRMLLoader.js +266 -354
  117. package/examples/js/loaders/VTKLoader.js +102 -119
  118. package/examples/js/loaders/XYZLoader.js +2 -4
  119. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  120. package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
  121. package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
  122. package/examples/js/materials/MeshGouraudMaterial.js +387 -0
  123. package/examples/js/math/Capsule.js +0 -17
  124. package/examples/js/math/ColorConverter.js +3 -53
  125. package/examples/js/math/ConvexHull.js +185 -141
  126. package/examples/js/math/ImprovedNoise.js +1 -1
  127. package/examples/js/math/Lut.js +8 -15
  128. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  129. package/examples/js/math/OBB.js +90 -49
  130. package/examples/js/math/Octree.js +2 -57
  131. package/examples/js/math/SimplexNoise.js +74 -88
  132. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  133. package/examples/js/misc/GPUComputationRenderer.js +47 -14
  134. package/examples/js/misc/Gyroscope.js +5 -9
  135. package/examples/js/misc/MD2Character.js +14 -23
  136. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  137. package/examples/js/misc/MorphAnimMesh.js +0 -6
  138. package/examples/js/misc/MorphBlendMesh.js +3 -30
  139. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  140. package/examples/js/misc/RollerCoaster.js +17 -24
  141. package/examples/js/misc/TubePainter.js +18 -12
  142. package/examples/js/misc/Volume.js +173 -194
  143. package/examples/js/misc/VolumeSlice.js +91 -99
  144. package/examples/js/modifiers/CurveModifier.js +19 -21
  145. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  146. package/examples/js/modifiers/SimplifyModifier.js +57 -60
  147. package/examples/js/modifiers/TessellateModifier.js +2 -9
  148. package/examples/js/objects/GroundProjectedEnv.js +181 -0
  149. package/examples/js/objects/Lensflare.js +47 -38
  150. package/examples/js/objects/LightningStorm.js +10 -13
  151. package/examples/js/objects/MarchingCubes.js +80 -59
  152. package/examples/js/objects/Reflector.js +31 -22
  153. package/examples/js/objects/ReflectorForSSRPass.js +20 -25
  154. package/examples/js/objects/Refractor.js +61 -33
  155. package/examples/js/objects/ShadowMesh.js +6 -3
  156. package/examples/js/objects/Sky.js +2 -7
  157. package/examples/js/objects/Water.js +23 -18
  158. package/examples/js/objects/Water2.js +20 -19
  159. package/examples/js/physics/AmmoPhysics.js +23 -20
  160. package/examples/js/physics/OimoPhysics.js +19 -17
  161. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  162. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  163. package/examples/js/postprocessing/BloomPass.js +38 -17
  164. package/examples/js/postprocessing/BokehPass.js +29 -12
  165. package/examples/js/postprocessing/ClearPass.js +1 -6
  166. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  167. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  168. package/examples/js/postprocessing/EffectComposer.js +25 -32
  169. package/examples/js/postprocessing/FilmPass.js +7 -5
  170. package/examples/js/postprocessing/GlitchPass.js +10 -11
  171. package/examples/js/postprocessing/HalftonePass.js +9 -9
  172. package/examples/js/postprocessing/LUTPass.js +2 -15
  173. package/examples/js/postprocessing/MaskPass.js +20 -17
  174. package/examples/js/postprocessing/OutlinePass.js +49 -38
  175. package/examples/js/postprocessing/Pass.js +11 -14
  176. package/examples/js/postprocessing/RenderPass.js +3 -7
  177. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  178. package/examples/js/postprocessing/SAOPass.js +40 -32
  179. package/examples/js/postprocessing/SMAAPass.js +34 -17
  180. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  181. package/examples/js/postprocessing/SSAOPass.js +56 -42
  182. package/examples/js/postprocessing/SSRPass.js +78 -61
  183. package/examples/js/postprocessing/SavePass.js +14 -6
  184. package/examples/js/postprocessing/ShaderPass.js +9 -8
  185. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  186. package/examples/js/postprocessing/TexturePass.js +7 -4
  187. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  188. package/examples/js/renderers/CSS2DRenderer.js +4 -23
  189. package/examples/js/renderers/CSS3DRenderer.js +5 -26
  190. package/examples/js/renderers/Projector.js +31 -108
  191. package/examples/js/renderers/SVGRenderer.js +4 -50
  192. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  193. package/examples/js/shaders/AfterimageShader.js +3 -6
  194. package/examples/js/shaders/BasicShader.js +3 -6
  195. package/examples/js/shaders/BleachBypassShader.js +3 -6
  196. package/examples/js/shaders/BlendShader.js +3 -6
  197. package/examples/js/shaders/BokehShader.js +3 -6
  198. package/examples/js/shaders/BokehShader2.js +4 -13
  199. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  200. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  201. package/examples/js/shaders/ColorifyShader.js +2 -6
  202. package/examples/js/shaders/ConvolutionShader.js +5 -10
  203. package/examples/js/shaders/CopyShader.js +3 -6
  204. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  205. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  206. package/examples/js/shaders/DigitalGlitch.js +3 -6
  207. package/examples/js/shaders/DotScreenShader.js +2 -6
  208. package/examples/js/shaders/FXAAShader.js +1 -3
  209. package/examples/js/shaders/FilmShader.js +3 -6
  210. package/examples/js/shaders/FocusShader.js +3 -6
  211. package/examples/js/shaders/FreiChenShader.js +2 -6
  212. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  213. package/examples/js/shaders/GodRaysShader.js +11 -24
  214. package/examples/js/shaders/HalftoneShader.js +3 -6
  215. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  216. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  217. package/examples/js/shaders/HueSaturationShader.js +3 -6
  218. package/examples/js/shaders/KaleidoShader.js +3 -6
  219. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  220. package/examples/js/shaders/LuminosityShader.js +4 -7
  221. package/examples/js/shaders/MMDToonShader.js +2 -4
  222. package/examples/js/shaders/MirrorShader.js +3 -6
  223. package/examples/js/shaders/NormalMapShader.js +2 -6
  224. package/examples/js/shaders/RGBShiftShader.js +3 -6
  225. package/examples/js/shaders/SAOShader.js +2 -6
  226. package/examples/js/shaders/SMAAShader.js +6 -18
  227. package/examples/js/shaders/SSAOShader.js +2 -6
  228. package/examples/js/shaders/SSRShader.js +6 -18
  229. package/examples/js/shaders/SepiaShader.js +3 -6
  230. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  231. package/examples/js/shaders/TechnicolorShader.js +3 -6
  232. package/examples/js/shaders/ToneMapShader.js +4 -7
  233. package/examples/js/shaders/ToonShader.js +8 -24
  234. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  235. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  236. package/examples/js/shaders/VelocityShader.js +126 -0
  237. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  238. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  239. package/examples/js/shaders/VignetteShader.js +3 -6
  240. package/examples/js/shaders/VolumeShader.js +2 -6
  241. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  242. package/examples/js/textures/FlakesTexture.js +0 -1
  243. package/examples/js/utils/BufferGeometryUtils.js +237 -171
  244. package/examples/js/utils/CameraUtils.js +5 -20
  245. package/examples/js/utils/GPUStatsPanel.js +3 -12
  246. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  247. package/examples/js/utils/GeometryUtils.js +15 -36
  248. package/examples/js/utils/LDrawUtils.js +8 -11
  249. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  250. package/examples/js/utils/SceneUtils.js +109 -14
  251. package/examples/js/utils/ShadowMapViewer.js +17 -14
  252. package/examples/js/utils/SkeletonUtils.js +13 -27
  253. package/examples/js/utils/UVsDebug.js +20 -12
  254. package/examples/js/utils/WorkerPool.js +1 -11
  255. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  256. package/examples/jsm/animation/MMDPhysics.js +28 -22
  257. package/examples/jsm/capabilities/WebGPU.js +3 -1
  258. package/examples/jsm/controls/ArcballControls.js +17 -2
  259. package/examples/jsm/controls/FirstPersonControls.js +20 -27
  260. package/examples/jsm/controls/FlyControls.js +16 -24
  261. package/examples/jsm/controls/OrbitControls.js +44 -9
  262. package/examples/jsm/controls/PointerLockControls.js +0 -7
  263. package/examples/jsm/controls/TrackballControls.js +14 -5
  264. package/examples/jsm/controls/TransformControls.js +18 -16
  265. package/examples/jsm/csm/CSM.js +1 -0
  266. package/examples/jsm/csm/CSMHelper.js +30 -0
  267. package/examples/jsm/effects/AnaglyphEffect.js +2 -2
  268. package/examples/jsm/effects/OutlineEffect.js +4 -25
  269. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
  270. package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
  271. package/examples/jsm/effects/StereoEffect.js +2 -2
  272. package/examples/jsm/environments/RoomEnvironment.js +23 -0
  273. package/examples/jsm/exporters/ColladaExporter.js +4 -13
  274. package/examples/jsm/exporters/DRACOExporter.js +0 -13
  275. package/examples/jsm/exporters/GLTFExporter.js +29 -110
  276. package/examples/jsm/exporters/KTX2Exporter.js +29 -29
  277. package/examples/jsm/exporters/OBJExporter.js +0 -18
  278. package/examples/jsm/exporters/PLYExporter.js +14 -22
  279. package/examples/jsm/exporters/STLExporter.js +1 -9
  280. package/examples/jsm/exporters/USDZExporter.js +107 -4
  281. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  282. package/examples/jsm/geometries/ParametricGeometry.js +0 -6
  283. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  284. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  285. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  286. package/examples/jsm/helpers/ViewHelper.js +24 -0
  287. package/examples/jsm/interactive/HTMLMesh.js +14 -15
  288. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  289. package/examples/jsm/interactive/SelectionHelper.js +5 -3
  290. package/examples/jsm/libs/flow.module.js +610 -160
  291. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  292. package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
  293. package/examples/jsm/libs/utif.module.js +1579 -0
  294. package/examples/jsm/libs/zstddec.module.js +1 -0
  295. package/examples/jsm/lines/LineSegments2.js +4 -0
  296. package/examples/jsm/loaders/3DMLoader.js +1 -2
  297. package/examples/jsm/loaders/ColladaLoader.js +29 -0
  298. package/examples/jsm/loaders/DRACOLoader.js +2 -28
  299. package/examples/jsm/loaders/EXRLoader.js +3 -13
  300. package/examples/jsm/loaders/FBXLoader.js +26 -3
  301. package/examples/jsm/loaders/FontLoader.js +3 -16
  302. package/examples/jsm/loaders/GLTFLoader.js +321 -464
  303. package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
  304. package/examples/jsm/loaders/KTX2Loader.js +254 -53
  305. package/examples/jsm/loaders/LDrawLoader.js +149 -87
  306. package/examples/jsm/loaders/LottieLoader.js +4 -2
  307. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  308. package/examples/jsm/loaders/OBJLoader.js +6 -14
  309. package/examples/jsm/loaders/PCDLoader.js +60 -14
  310. package/examples/jsm/loaders/PLYLoader.js +71 -19
  311. package/examples/jsm/loaders/RGBELoader.js +1 -1
  312. package/examples/jsm/loaders/SVGLoader.js +231 -17
  313. package/examples/jsm/loaders/TIFFLoader.js +36 -0
  314. package/examples/jsm/loaders/USDZLoader.js +633 -0
  315. package/examples/jsm/loaders/VRMLLoader.js +36 -26
  316. package/examples/jsm/loaders/VTKLoader.js +1 -1
  317. package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
  318. package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
  319. package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
  320. package/examples/jsm/math/ColorConverter.js +1 -49
  321. package/examples/jsm/math/ConvexHull.js +4 -4
  322. package/examples/jsm/math/Octree.js +1 -1
  323. package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
  324. package/examples/jsm/misc/Volume.js +169 -171
  325. package/examples/jsm/misc/VolumeSlice.js +78 -80
  326. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  327. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  328. package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
  329. package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
  330. package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
  331. package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
  332. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  333. package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
  334. package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
  335. package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
  336. package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
  337. package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
  338. package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
  339. package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
  340. package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
  341. package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
  342. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
  343. package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
  344. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
  345. package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
  346. package/examples/jsm/node-editor/math/DotEditor.js +1 -1
  347. package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
  348. package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
  349. package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
  350. package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
  351. package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
  352. package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
  353. package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
  354. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  355. package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
  356. package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
  357. package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
  358. package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
  359. package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
  360. package/examples/jsm/nodes/Nodes.js +70 -13
  361. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  362. package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
  363. package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
  364. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  365. package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
  366. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  367. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
  368. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  369. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  370. package/examples/jsm/nodes/core/AttributeNode.js +32 -9
  371. package/examples/jsm/nodes/core/CodeNode.js +3 -3
  372. package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
  373. package/examples/jsm/nodes/core/FunctionNode.js +2 -2
  374. package/examples/jsm/nodes/core/Node.js +15 -13
  375. package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
  376. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  377. package/examples/jsm/nodes/core/NodeUtils.js +23 -1
  378. package/examples/jsm/nodes/core/NodeVarying.js +17 -0
  379. package/examples/jsm/nodes/core/VaryingNode.js +56 -0
  380. package/examples/jsm/nodes/core/constants.js +13 -13
  381. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  382. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
  383. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  384. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  385. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  386. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  387. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  388. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  389. package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
  390. package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
  391. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  392. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
  393. package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
  394. package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
  395. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
  396. package/examples/jsm/nodes/materials/Materials.js +21 -31
  397. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
  398. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
  399. package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
  400. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
  401. package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
  402. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  403. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
  404. package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
  405. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  406. package/examples/jsm/nodes/math/MathNode.js +7 -17
  407. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  408. package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
  409. package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
  410. package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
  411. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
  412. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
  413. package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
  414. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  415. package/examples/jsm/nodes/utils/JoinNode.js +15 -9
  416. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  417. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
  418. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  419. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  420. package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
  421. package/examples/jsm/nodes/utils/SplitNode.js +21 -5
  422. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  423. package/examples/jsm/nodes/utils/TimerNode.js +23 -3
  424. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  425. package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
  426. package/examples/jsm/objects/Reflector.js +12 -5
  427. package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
  428. package/examples/jsm/objects/Refractor.js +12 -6
  429. package/examples/jsm/objects/ShadowMesh.js +8 -2
  430. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  431. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  432. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  433. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  434. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  435. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  436. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  437. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  438. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  439. package/examples/jsm/postprocessing/OutlinePass.js +25 -3
  440. package/examples/jsm/postprocessing/Pass.js +2 -0
  441. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  442. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  443. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  444. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  445. package/examples/jsm/postprocessing/SavePass.js +17 -1
  446. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  447. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  448. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  449. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  450. package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
  451. package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
  452. package/examples/jsm/renderers/Projector.js +2 -24
  453. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
  454. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
  455. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
  456. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  457. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  458. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
  459. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
  460. package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
  461. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  462. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
  463. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
  464. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
  465. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
  466. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
  467. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
  468. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
  469. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
  470. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  471. package/examples/jsm/shaders/LuminosityShader.js +1 -1
  472. package/examples/jsm/shaders/MMDToonShader.js +2 -4
  473. package/examples/jsm/shaders/ToneMapShader.js +1 -1
  474. package/examples/jsm/shaders/VelocityShader.js +128 -0
  475. package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
  476. package/examples/jsm/utils/GeometryUtils.js +17 -25
  477. package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
  478. package/examples/jsm/utils/SceneUtils.js +117 -12
  479. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  480. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
  481. package/examples/jsm/webxr/VRButton.js +1 -7
  482. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  483. package/package.json +22 -18
  484. package/src/Three.Legacy.js +262 -36
  485. package/src/Three.js +4 -2
  486. package/src/animation/AnimationAction.js +6 -5
  487. package/src/animation/AnimationClip.js +1 -1
  488. package/src/animation/AnimationMixer.js +1 -1
  489. package/src/animation/AnimationUtils.js +204 -199
  490. package/src/animation/KeyframeTrack.js +1 -1
  491. package/src/animation/PropertyBinding.js +31 -5
  492. package/src/audio/AudioContext.js +5 -5
  493. package/src/cameras/CubeCamera.js +14 -21
  494. package/src/constants.js +2 -4
  495. package/src/core/BufferAttribute.js +81 -111
  496. package/src/core/BufferGeometry.js +3 -41
  497. package/src/core/InstancedBufferAttribute.js +0 -10
  498. package/src/core/InstancedBufferGeometry.js +1 -7
  499. package/src/core/InterleavedBuffer.js +1 -1
  500. package/src/core/InterleavedBufferAttribute.js +57 -8
  501. package/src/core/Object3D.js +22 -5
  502. package/src/core/Uniform.js +0 -7
  503. package/src/core/UniformsGroup.js +92 -0
  504. package/src/extras/DataUtils.js +104 -88
  505. package/src/extras/Earcut.js +67 -67
  506. package/src/extras/core/Path.js +1 -0
  507. package/src/extras/core/ShapePath.js +1 -4
  508. package/src/extras/curves/CatmullRomCurve3.js +4 -2
  509. package/src/geometries/BoxGeometry.js +1 -1
  510. package/src/geometries/CapsuleGeometry.js +1 -1
  511. package/src/geometries/CircleGeometry.js +1 -1
  512. package/src/geometries/ConeGeometry.js +1 -1
  513. package/src/geometries/CylinderGeometry.js +2 -1
  514. package/src/geometries/DodecahedronGeometry.js +1 -1
  515. package/src/geometries/EdgesGeometry.js +5 -4
  516. package/src/geometries/ExtrudeGeometry.js +2 -11
  517. package/src/geometries/IcosahedronGeometry.js +1 -1
  518. package/src/geometries/LatheGeometry.js +2 -2
  519. package/src/geometries/OctahedronGeometry.js +1 -1
  520. package/src/geometries/PlaneGeometry.js +2 -1
  521. package/src/geometries/PolyhedronGeometry.js +2 -2
  522. package/src/geometries/RingGeometry.js +1 -1
  523. package/src/geometries/ShapeGeometry.js +3 -2
  524. package/src/geometries/SphereGeometry.js +2 -1
  525. package/src/geometries/TetrahedronGeometry.js +1 -1
  526. package/src/geometries/TorusGeometry.js +2 -1
  527. package/src/geometries/TorusKnotGeometry.js +2 -1
  528. package/src/geometries/TubeGeometry.js +2 -1
  529. package/src/geometries/WireframeGeometry.js +1 -0
  530. package/src/helpers/ArrowHelper.js +9 -0
  531. package/src/helpers/Box3Helper.js +7 -0
  532. package/src/helpers/BoxHelper.js +7 -1
  533. package/src/helpers/CameraHelper.js +97 -38
  534. package/src/helpers/DirectionalLightHelper.js +6 -1
  535. package/src/helpers/GridHelper.js +7 -0
  536. package/src/helpers/HemisphereLightHelper.js +5 -1
  537. package/src/helpers/PlaneHelper.js +15 -9
  538. package/src/helpers/PointLightHelper.js +2 -1
  539. package/src/helpers/PolarGridHelper.js +25 -14
  540. package/src/helpers/SkeletonHelper.js +7 -0
  541. package/src/helpers/SpotLightHelper.js +5 -2
  542. package/src/lights/LightShadow.js +1 -2
  543. package/src/lights/PointLight.js +2 -2
  544. package/src/lights/SpotLight.js +4 -2
  545. package/src/loaders/FileLoader.js +16 -2
  546. package/src/loaders/LoadingManager.js +1 -1
  547. package/src/loaders/MaterialLoader.js +49 -7
  548. package/src/loaders/ObjectLoader.js +9 -42
  549. package/src/materials/Material.js +2 -34
  550. package/src/materials/Materials.js +0 -27
  551. package/src/materials/MeshLambertMaterial.js +28 -1
  552. package/src/materials/MeshPhysicalMaterial.js +1 -1
  553. package/src/materials/ShaderMaterial.js +3 -7
  554. package/src/math/Color.js +8 -18
  555. package/src/math/MathUtils.js +1 -7
  556. package/src/math/Matrix3.js +54 -25
  557. package/src/math/Matrix4.js +3 -27
  558. package/src/math/Quaternion.js +1 -21
  559. package/src/math/Ray.js +2 -5
  560. package/src/math/Sphere.js +36 -21
  561. package/src/math/Vector2.js +4 -24
  562. package/src/math/Vector3.js +7 -46
  563. package/src/math/Vector4.js +4 -24
  564. package/src/objects/InstancedMesh.js +7 -0
  565. package/src/objects/LOD.js +25 -6
  566. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  567. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  568. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  569. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  570. package/src/renderers/WebGLRenderTarget.js +1 -1
  571. package/src/renderers/WebGLRenderer.js +119 -69
  572. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
  573. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
  574. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
  575. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
  576. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  577. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
  578. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
  579. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
  580. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
  581. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
  582. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  583. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  584. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  585. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
  586. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
  587. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  588. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  589. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
  590. package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
  591. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  592. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
  593. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
  594. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
  595. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
  597. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  598. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
  599. package/src/renderers/shaders/ShaderChunk.js +7 -2
  600. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  601. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  602. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  603. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
  604. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
  605. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  606. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  607. package/src/renderers/shaders/ShaderLib.js +50 -36
  608. package/src/renderers/shaders/UniformsLib.js +13 -12
  609. package/src/renderers/shaders/UniformsUtils.js +29 -0
  610. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  611. package/src/renderers/webgl/WebGLBackground.js +17 -9
  612. package/src/renderers/webgl/WebGLLights.js +37 -17
  613. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  614. package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
  615. package/src/renderers/webgl/WebGLProgram.js +6 -11
  616. package/src/renderers/webgl/WebGLPrograms.js +30 -26
  617. package/src/renderers/webgl/WebGLRenderLists.js +5 -4
  618. package/src/renderers/webgl/WebGLRenderStates.js +5 -4
  619. package/src/renderers/webgl/WebGLShaderCache.js +9 -6
  620. package/src/renderers/webgl/WebGLShadowMap.js +13 -16
  621. package/src/renderers/webgl/WebGLState.js +125 -41
  622. package/src/renderers/webgl/WebGLTextures.js +94 -39
  623. package/src/renderers/webgl/WebGLUniforms.js +156 -28
  624. package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
  625. package/src/renderers/webgl/WebGLUtils.js +3 -1
  626. package/src/renderers/webvr/WebVRManager.js +42 -9
  627. package/src/renderers/webvr/WebVRUtils.js +1 -1
  628. package/src/renderers/webxr/WebXRController.js +91 -50
  629. package/src/renderers/webxr/WebXRManager.js +127 -34
  630. package/src/scenes/Scene.js +24 -3
  631. package/src/textures/CompressedArrayTexture.js +18 -0
  632. package/src/textures/Source.js +1 -1
  633. package/src/textures/Texture.js +2 -1
  634. package/src/utils.js +1 -1
  635. package/examples/js/controls/experimental/CameraControls.js +0 -1048
  636. package/examples/js/libs/lottie_canvas.js +0 -12751
  637. package/examples/js/loaders/KTX2Loader.js +0 -558
  638. package/examples/js/shaders/PixelShader.js +0 -51
  639. package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
  640. package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
  641. package/examples/jsm/nodes/core/NodeVary.js +0 -14
  642. package/examples/jsm/nodes/core/VaryNode.js +0 -54
  643. package/examples/jsm/package.json +0 -3
  644. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
  645. package/examples/jsm/shaders/PixelShader.js +0 -44
  646. package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
@@ -1,6 +1,6 @@
1
1
  import Node from '../core/Node.js';
2
2
  import AttributeNode from '../core/AttributeNode.js';
3
- import VaryNode from '../core/VaryNode.js';
3
+ import VaryingNode from '../core/VaryingNode.js';
4
4
  import ModelNode from '../accessors/ModelNode.js';
5
5
  import MathNode from '../math/MathNode.js';
6
6
  import OperatorNode from '../math/OperatorNode.js';
@@ -10,6 +10,7 @@ class PositionNode extends Node {
10
10
  static GEOMETRY = 'geometry';
11
11
  static LOCAL = 'local';
12
12
  static WORLD = 'world';
13
+ static WORLD_DIRECTION = 'worldDirection';
13
14
  static VIEW = 'view';
14
15
  static VIEW_DIRECTION = 'viewDirection';
15
16
 
@@ -39,22 +40,27 @@ class PositionNode extends Node {
39
40
 
40
41
  } else if ( scope === PositionNode.LOCAL ) {
41
42
 
42
- outputNode = new VaryNode( new PositionNode( PositionNode.GEOMETRY ) );
43
+ outputNode = new VaryingNode( new PositionNode( PositionNode.GEOMETRY ) );
43
44
 
44
45
  } else if ( scope === PositionNode.WORLD ) {
45
46
 
46
47
  const vertexPositionNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new ModelNode( ModelNode.WORLD_MATRIX ), new PositionNode( PositionNode.LOCAL ) );
47
- outputNode = new VaryNode( vertexPositionNode );
48
+ outputNode = new VaryingNode( vertexPositionNode );
48
49
 
49
50
  } else if ( scope === PositionNode.VIEW ) {
50
51
 
51
52
  const vertexPositionNode = new OperatorNode( '*', new ModelNode( ModelNode.VIEW_MATRIX ), new PositionNode( PositionNode.LOCAL ) );
52
- outputNode = new VaryNode( vertexPositionNode );
53
+ outputNode = new VaryingNode( vertexPositionNode );
53
54
 
54
55
  } else if ( scope === PositionNode.VIEW_DIRECTION ) {
55
56
 
56
57
  const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.VIEW ) );
57
- outputNode = new MathNode( MathNode.NORMALIZE, new VaryNode( vertexPositionNode ) );
58
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
59
+
60
+ } else if ( scope === PositionNode.WORLD_DIRECTION ) {
61
+
62
+ const vertexPositionNode = new MathNode( MathNode.NEGATE, new PositionNode( PositionNode.WORLD ) );
63
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexPositionNode ) );
58
64
 
59
65
  }
60
66
 
@@ -16,7 +16,7 @@ class ReferenceNode extends Node {
16
16
 
17
17
  this.node = null;
18
18
 
19
- this.updateType = NodeUpdateType.Object;
19
+ this.updateType = NodeUpdateType.OBJECT;
20
20
 
21
21
  this.setNodeType( uniformType );
22
22
 
@@ -0,0 +1,31 @@
1
+ import Node from '../core/Node.js';
2
+ import {
3
+ transformedNormalView, positionViewDirection,
4
+ transformDirection, negate, reflect, cameraViewMatrix
5
+ } from '../shadernode/ShaderNodeBaseElements.js';
6
+
7
+ class ReflectVectorNode extends Node {
8
+
9
+ constructor() {
10
+
11
+ super( 'vec3' );
12
+
13
+ }
14
+
15
+ getHash( /*builder*/ ) {
16
+
17
+ return 'reflectVector';
18
+
19
+ }
20
+
21
+ construct() {
22
+
23
+ const reflectView = reflect( negate( positionViewDirection ), transformedNormalView );
24
+
25
+ return transformDirection( reflectView, cameraViewMatrix );
26
+
27
+ }
28
+
29
+ }
30
+
31
+ export default ReflectVectorNode;
@@ -7,6 +7,7 @@ import {
7
7
  uniform,
8
8
  positionLocal,
9
9
  normalLocal,
10
+ tangentLocal,
10
11
  assign,
11
12
  element,
12
13
  add,
@@ -56,6 +57,12 @@ const Skinning = new ShaderNode( ( inputs, builder ) => {
56
57
  assign( positionLocal, skinPosition ).build( builder );
57
58
  assign( normalLocal, skinNormal ).build( builder );
58
59
 
60
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
61
+
62
+ assign( tangentLocal, skinNormal ).build( builder );
63
+
64
+ }
65
+
59
66
  } );
60
67
 
61
68
  class SkinningNode extends Node {
@@ -66,7 +73,7 @@ class SkinningNode extends Node {
66
73
 
67
74
  this.skinnedMesh = skinnedMesh;
68
75
 
69
- this.updateType = NodeUpdateType.Object;
76
+ this.updateType = NodeUpdateType.OBJECT;
70
77
 
71
78
  //
72
79
 
@@ -0,0 +1,95 @@
1
+ import Node from '../core/Node.js';
2
+ import AttributeNode from '../core/AttributeNode.js';
3
+ import VaryingNode from '../core/VaryingNode.js';
4
+ import ModelNode from '../accessors/ModelNode.js';
5
+ import CameraNode from '../accessors/CameraNode.js';
6
+ import OperatorNode from '../math/OperatorNode.js';
7
+ import MathNode from '../math/MathNode.js';
8
+ import SplitNode from '../utils/SplitNode.js';
9
+
10
+ class TangentNode extends Node {
11
+
12
+ static GEOMETRY = 'geometry';
13
+ static LOCAL = 'local';
14
+ static VIEW = 'view';
15
+ static WORLD = 'world';
16
+
17
+ constructor( scope = TangentNode.LOCAL ) {
18
+
19
+ super();
20
+
21
+ this.scope = scope;
22
+
23
+ }
24
+
25
+ getHash( /*builder*/ ) {
26
+
27
+ return `tangent-${this.scope}`;
28
+
29
+ }
30
+
31
+ getNodeType() {
32
+
33
+ const scope = this.scope;
34
+
35
+ if ( scope === TangentNode.GEOMETRY ) {
36
+
37
+ return 'vec4';
38
+
39
+ }
40
+
41
+ return 'vec3';
42
+
43
+ }
44
+
45
+
46
+ generate( builder ) {
47
+
48
+ const scope = this.scope;
49
+
50
+ let outputNode = null;
51
+
52
+ if ( scope === TangentNode.GEOMETRY ) {
53
+
54
+ outputNode = new AttributeNode( 'tangent', 'vec4' );
55
+
56
+ } else if ( scope === TangentNode.LOCAL ) {
57
+
58
+ outputNode = new VaryingNode( new SplitNode( new TangentNode( TangentNode.GEOMETRY ), 'xyz' ) );
59
+
60
+ } else if ( scope === TangentNode.VIEW ) {
61
+
62
+ const vertexNode = new SplitNode( new OperatorNode( '*', new ModelNode( ModelNode.VIEW_MATRIX ), new TangentNode( TangentNode.LOCAL ) ), 'xyz' );
63
+
64
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
65
+
66
+ } else if ( scope === TangentNode.WORLD ) {
67
+
68
+ const vertexNode = new MathNode( MathNode.TRANSFORM_DIRECTION, new TangentNode( TangentNode.VIEW ), new CameraNode( CameraNode.VIEW_MATRIX ) );
69
+ outputNode = new MathNode( MathNode.NORMALIZE, new VaryingNode( vertexNode ) );
70
+
71
+ }
72
+
73
+ return outputNode.build( builder, this.getNodeType( builder ) );
74
+
75
+ }
76
+
77
+ serialize( data ) {
78
+
79
+ super.serialize( data );
80
+
81
+ data.scope = this.scope;
82
+
83
+ }
84
+
85
+ deserialize( data ) {
86
+
87
+ super.deserialize( data );
88
+
89
+ this.scope = data.scope;
90
+
91
+ }
92
+
93
+ }
94
+
95
+ export default TangentNode;
@@ -1,5 +1,5 @@
1
1
  import Node from './Node.js';
2
- import VaryNode from './VaryNode.js';
2
+ import VaryingNode from './VaryingNode.js';
3
3
 
4
4
  class AttributeNode extends Node {
5
5
 
@@ -19,14 +19,23 @@ class AttributeNode extends Node {
19
19
 
20
20
  getNodeType( builder ) {
21
21
 
22
+ const attributeName = this.getAttributeName( builder );
23
+
22
24
  let nodeType = super.getNodeType( builder );
23
25
 
24
26
  if ( nodeType === null ) {
25
27
 
26
- const attributeName = this.getAttributeName( builder );
27
- const attribute = builder.geometry.getAttribute( attributeName );
28
+ if ( builder.hasGeometryAttribute( attributeName ) ) {
29
+
30
+ const attribute = builder.geometry.getAttribute( attributeName );
31
+
32
+ nodeType = builder.getTypeFromLength( attribute.itemSize );
28
33
 
29
- nodeType = builder.getTypeFromLength( attribute.itemSize );
34
+ } else {
35
+
36
+ nodeType = 'float';
37
+
38
+ }
30
39
 
31
40
  }
32
41
 
@@ -50,17 +59,31 @@ class AttributeNode extends Node {
50
59
 
51
60
  generate( builder ) {
52
61
 
53
- const attribute = builder.getAttribute( this.getAttributeName( builder ), this.getNodeType( builder ) );
62
+ const attributeName = this.getAttributeName( builder );
63
+ const nodeType = this.getNodeType( builder );
64
+ const geometryAttribute = builder.hasGeometryAttribute( attributeName );
65
+
66
+ if ( geometryAttribute === true ) {
67
+
68
+ const nodeAttribute = builder.getAttribute( attributeName, nodeType );
69
+
70
+ if ( builder.isShaderStage( 'vertex' ) ) {
71
+
72
+ return nodeAttribute.name;
73
+
74
+ } else {
75
+
76
+ const nodeVarying = new VaryingNode( this );
54
77
 
55
- if ( builder.isShaderStage( 'vertex' ) ) {
78
+ return nodeVarying.build( builder, nodeAttribute.type );
56
79
 
57
- return attribute.name;
80
+ }
58
81
 
59
82
  } else {
60
83
 
61
- const nodeVary = new VaryNode( this );
84
+ console.warn( `Attribute "${ attributeName }" not found.` );
62
85
 
63
- return nodeVary.build( builder, attribute.type );
86
+ return builder.getConst( nodeType );
64
87
 
65
88
  }
66
89
 
@@ -2,15 +2,15 @@ import Node from './Node.js';
2
2
 
3
3
  class CodeNode extends Node {
4
4
 
5
- constructor( code = '', nodeType = 'code' ) {
5
+ constructor( code = '', includes = [] ) {
6
6
 
7
- super( nodeType );
7
+ super( 'code' );
8
8
 
9
9
  this.isCodeNode = true;
10
10
 
11
11
  this.code = code;
12
12
 
13
- this._includes = [];
13
+ this._includes = includes;
14
14
 
15
15
  }
16
16
 
@@ -40,17 +40,32 @@ class FunctionCallNode extends TempNode {
40
40
  const inputs = functionNode.getInputs( builder );
41
41
  const parameters = this.parameters;
42
42
 
43
- for ( const inputNode of inputs ) {
43
+ if ( Array.isArray( parameters ) ) {
44
44
 
45
- const node = parameters[ inputNode.name ];
45
+ for ( let i = 0; i < parameters.length; i ++ ) {
46
46
 
47
- if ( node !== undefined ) {
47
+ const inputNode = inputs[ i ];
48
+ const node = parameters[ i ];
48
49
 
49
50
  params.push( node.build( builder, inputNode.type ) );
50
51
 
51
- } else {
52
+ }
53
+
54
+ } else {
55
+
56
+ for ( const inputNode of inputs ) {
57
+
58
+ const node = parameters[ inputNode.name ];
59
+
60
+ if ( node !== undefined ) {
61
+
62
+ params.push( node.build( builder, inputNode.type ) );
63
+
64
+ } else {
65
+
66
+ throw new Error( `FunctionCallNode: Input '${inputNode.name}' not found in FunctionNode.` );
52
67
 
53
- throw new Error( `FunctionCallNode: Input '${inputNode.name}' not found in FunctionNode.` );
68
+ }
54
69
 
55
70
  }
56
71
 
@@ -3,9 +3,9 @@ import FunctionCallNode from './FunctionCallNode.js';
3
3
 
4
4
  class FunctionNode extends CodeNode {
5
5
 
6
- constructor( code = '' ) {
6
+ constructor( code = '', includes = [] ) {
7
7
 
8
- super( code );
8
+ super( code, includes );
9
9
 
10
10
  this.keywords = {};
11
11
 
@@ -1,5 +1,5 @@
1
1
  import { NodeUpdateType } from './constants.js';
2
- import { getNodesKeys } from './NodeUtils.js';
2
+ import { getNodesKeys, getCacheKey } from './NodeUtils.js';
3
3
  import { MathUtils } from 'three';
4
4
 
5
5
  let _nodeId = 0;
@@ -12,7 +12,7 @@ class Node {
12
12
 
13
13
  this.nodeType = nodeType;
14
14
 
15
- this.updateType = NodeUpdateType.None;
15
+ this.updateType = NodeUpdateType.NONE;
16
16
 
17
17
  this.uuid = MathUtils.generateUUID();
18
18
 
@@ -58,6 +58,12 @@ class Node {
58
58
 
59
59
  }
60
60
 
61
+ getCacheKey() {
62
+
63
+ return getCacheKey( this );
64
+
65
+ }
66
+
61
67
  getHash( /*builder*/ ) {
62
68
 
63
69
  return this.uuid;
@@ -131,15 +137,13 @@ class Node {
131
137
 
132
138
  }
133
139
 
134
- generate( builder ) {
140
+ generate( builder, output ) {
135
141
 
136
142
  const { outputNode } = builder.getNodeProperties( this );
137
143
 
138
144
  if ( outputNode?.isNode === true ) {
139
145
 
140
- const type = this.getNodeType( builder );
141
-
142
- return outputNode.build( builder, type );
146
+ return outputNode.build( builder, output );
143
147
 
144
148
  }
145
149
 
@@ -167,7 +171,7 @@ class Node {
167
171
  /* expected return:
168
172
  - "construct" -> Node
169
173
  - "analyze" -> null
170
- - "generat" -> String
174
+ - "generate" -> String
171
175
  */
172
176
  let result = null;
173
177
 
@@ -176,13 +180,11 @@ class Node {
176
180
  if ( buildStage === 'construct' ) {
177
181
 
178
182
  const properties = builder.getNodeProperties( this );
179
- const nodeData = builder.getDataFromNode( this );
180
-
181
- if ( properties.initied !== true ) {
182
183
 
183
- nodeData.initied = true;
184
+ if ( properties.initialized !== true || builder.context.tempRead === false ) {
184
185
 
185
- properties.outputNode = this.construct( builder );
186
+ properties.initialized = true;
187
+ properties.outputNode = this.construct( builder );
186
188
 
187
189
  for ( const childNode of Object.values( properties ) ) {
188
190
 
@@ -211,7 +213,7 @@ class Node {
211
213
 
212
214
  result = nodeData.snippet;
213
215
 
214
- if ( result === undefined ) {
216
+ if ( result === undefined /*|| builder.context.tempRead === false*/ ) {
215
217
 
216
218
  result = this.generate( builder ) || '';
217
219
 
@@ -1,19 +1,18 @@
1
1
  import NodeUniform from './NodeUniform.js';
2
2
  import NodeAttribute from './NodeAttribute.js';
3
- import NodeVary from './NodeVary.js';
3
+ import NodeVarying from './NodeVarying.js';
4
4
  import NodeVar from './NodeVar.js';
5
5
  import NodeCode from './NodeCode.js';
6
6
  import NodeKeywords from './NodeKeywords.js';
7
7
  import { NodeUpdateType } from './constants.js';
8
8
 
9
- import { REVISION, LinearEncoding } from 'three';
9
+ import { REVISION, LinearEncoding, Color, Vector2, Vector3, Vector4 } from 'three';
10
10
 
11
11
  export const defaultShaderStages = [ 'fragment', 'vertex' ];
12
12
  export const shaderStages = [ ...defaultShaderStages, 'compute' ];
13
13
  export const vector = [ 'x', 'y', 'z', 'w' ];
14
14
 
15
15
  const typeFromLength = new Map();
16
- typeFromLength.set( 1, 'float' );
17
16
  typeFromLength.set( 2, 'vec2' );
18
17
  typeFromLength.set( 3, 'vec3' );
19
18
  typeFromLength.set( 4, 'vec4' );
@@ -55,7 +54,7 @@ class NodeBuilder {
55
54
  this.uniforms = { vertex: [], fragment: [], compute: [], index: 0 };
56
55
  this.codes = { vertex: [], fragment: [], compute: [] };
57
56
  this.attributes = [];
58
- this.varys = [];
57
+ this.varyings = [];
59
58
  this.vars = { vertex: [], fragment: [], compute: [] };
60
59
  this.flow = { code: '' };
61
60
  this.stack = [];
@@ -117,7 +116,7 @@ class NodeBuilder {
117
116
 
118
117
  const updateType = node.getUpdateType( this );
119
118
 
120
- if ( updateType !== NodeUpdateType.None ) {
119
+ if ( updateType !== NodeUpdateType.NONE ) {
121
120
 
122
121
  this.updateNodes.push( node );
123
122
 
@@ -181,6 +180,18 @@ class NodeBuilder {
181
180
 
182
181
  }
183
182
 
183
+ getFragCoord() {
184
+
185
+ console.warn( 'Abstract function.' );
186
+
187
+ }
188
+
189
+ isFlipY() {
190
+
191
+ return false;
192
+
193
+ }
194
+
184
195
  getTexture( /* textureProperty, uvSnippet */ ) {
185
196
 
186
197
  console.warn( 'Abstract function.' );
@@ -206,7 +217,18 @@ class NodeBuilder {
206
217
  }
207
218
 
208
219
  // @TODO: rename to .generateConst()
209
- getConst( type, value ) {
220
+ getConst( type, value = null ) {
221
+
222
+ if ( value === null ) {
223
+
224
+ if ( type === 'float' || type === 'int' || type === 'uint' ) value = 0;
225
+ else if ( type === 'bool' ) value = false;
226
+ else if ( type === 'color' ) value = new Color();
227
+ else if ( type === 'vec2' ) value = new Vector2();
228
+ else if ( type === 'vec3' ) value = new Vector3();
229
+ else if ( type === 'vec4' ) value = new Vector4();
230
+
231
+ }
210
232
 
211
233
  if ( type === 'float' ) return toFloat( value );
212
234
  if ( type === 'int' ) return `${ Math.round( value ) }`;
@@ -254,6 +276,12 @@ class NodeBuilder {
254
276
 
255
277
  }
256
278
 
279
+ hasGeometryAttribute( name ) {
280
+
281
+ return this.geometry?.getAttribute( name ) !== undefined;
282
+
283
+ }
284
+
257
285
  getAttribute( name, type ) {
258
286
 
259
287
  const attributes = this.attributes;
@@ -336,6 +364,8 @@ class NodeBuilder {
336
364
 
337
365
  type = this.getVectorType( type );
338
366
 
367
+ if ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type;
368
+
339
369
  const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );
340
370
 
341
371
  if ( componentType === null ) return null;
@@ -357,9 +387,12 @@ class NodeBuilder {
357
387
 
358
388
  }
359
389
 
360
- getTypeFromLength( length ) {
390
+ getTypeFromLength( length, componentType = 'float' ) {
361
391
 
362
- return typeFromLength.get( length );
392
+ if ( length === 1 ) return componentType;
393
+ const baseType = typeFromLength.get( length );
394
+ const prefix = componentType === 'float' ? '' : componentType[ 0 ];
395
+ return prefix + baseType;
363
396
 
364
397
  }
365
398
 
@@ -383,6 +416,22 @@ class NodeBuilder {
383
416
 
384
417
  }
385
418
 
419
+ changeComponentType( type, newComponentType ) {
420
+
421
+ return this.getTypeFromLength( this.getTypeLength( type ), newComponentType );
422
+
423
+ }
424
+
425
+ getIntegerType( type ) {
426
+
427
+ const componentType = this.getComponentType( type );
428
+
429
+ if ( componentType === 'int' || componentType === 'uint' ) return type;
430
+
431
+ return this.changeComponentType( type, 'int' );
432
+
433
+ }
434
+
386
435
  getDataFromNode( node, shaderStage = this.shaderStage ) {
387
436
 
388
437
  let nodeData = this.nodesData.get( node );
@@ -456,26 +505,26 @@ class NodeBuilder {
456
505
 
457
506
  }
458
507
 
459
- getVaryFromNode( node, type ) {
508
+ getVaryingFromNode( node, type ) {
460
509
 
461
510
  const nodeData = this.getDataFromNode( node, null );
462
511
 
463
- let nodeVary = nodeData.vary;
512
+ let nodeVarying = nodeData.varying;
464
513
 
465
- if ( nodeVary === undefined ) {
514
+ if ( nodeVarying === undefined ) {
466
515
 
467
- const varys = this.varys;
468
- const index = varys.length;
516
+ const varyings = this.varyings;
517
+ const index = varyings.length;
469
518
 
470
- nodeVary = new NodeVary( 'nodeVary' + index, type );
519
+ nodeVarying = new NodeVarying( 'nodeVarying' + index, type );
471
520
 
472
- varys.push( nodeVary );
521
+ varyings.push( nodeVarying );
473
522
 
474
- nodeData.vary = nodeVary;
523
+ nodeData.varying = nodeVarying;
475
524
 
476
525
  }
477
526
 
478
- return nodeVary;
527
+ return nodeVarying;
479
528
 
480
529
  }
481
530
 
@@ -572,7 +621,7 @@ class NodeBuilder {
572
621
 
573
622
  }
574
623
 
575
- getVarys( /*shaderStage*/ ) {
624
+ getVaryings( /*shaderStage*/ ) {
576
625
 
577
626
  console.warn( 'Abstract function.' );
578
627
 
@@ -22,7 +22,7 @@ class NodeFrame {
22
22
 
23
23
  updateNode( node ) {
24
24
 
25
- if ( node.updateType === NodeUpdateType.Frame ) {
25
+ if ( node.updateType === NodeUpdateType.FRAME ) {
26
26
 
27
27
  if ( this.updateMap.get( node ) !== this.frameId ) {
28
28
 
@@ -32,7 +32,7 @@ class NodeFrame {
32
32
 
33
33
  }
34
34
 
35
- } else if ( node.updateType === NodeUpdateType.Object ) {
35
+ } else if ( node.updateType === NodeUpdateType.OBJECT ) {
36
36
 
37
37
  node.update( this );
38
38
 
@@ -1,5 +1,27 @@
1
1
  import { Color, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
2
2
 
3
+ export const getCacheKey = ( object ) => {
4
+
5
+ let cacheKey = '{';
6
+
7
+ if ( object.isNode === true ) {
8
+
9
+ cacheKey += `uuid:"${ object.uuid }",`;
10
+
11
+ }
12
+
13
+ for ( const property of getNodesKeys( object ) ) {
14
+
15
+ cacheKey += `${ property }:${ object[ property ].getCacheKey() },`;
16
+
17
+ }
18
+
19
+ cacheKey += '}';
20
+
21
+ return cacheKey;
22
+
23
+ };
24
+
3
25
  export const getNodesKeys = ( object ) => {
4
26
 
5
27
  const props = [];
@@ -62,7 +84,7 @@ export const getValueType = ( value ) => {
62
84
 
63
85
  export const getValueFromType = ( type, ...params ) => {
64
86
 
65
- const last4 = type?.slice( -4 );
87
+ const last4 = type?.slice( - 4 );
66
88
 
67
89
  if ( type === 'color' ) {
68
90
 
@@ -0,0 +1,17 @@
1
+ import NodeVar from './NodeVar.js';
2
+
3
+ class NodeVarying extends NodeVar {
4
+
5
+ constructor( name, type ) {
6
+
7
+ super( name, type );
8
+
9
+ this.needsInterpolation = false;
10
+
11
+ this.isNodeVarying = true;
12
+
13
+ }
14
+
15
+ }
16
+
17
+ export default NodeVarying;