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
@@ -47,7 +47,7 @@ class OperatorNode extends TempNode {
47
47
 
48
48
  } else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
49
49
 
50
- return 'int';
50
+ return builder.getIntegerType( typeA );
51
51
 
52
52
  } else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) {
53
53
 
@@ -124,6 +124,11 @@ class OperatorNode extends TempNode {
124
124
 
125
125
  }
126
126
 
127
+ } else if ( op === '>>' || op === '<<' ) {
128
+
129
+ typeA = type;
130
+ typeB = builder.changeComponentType( typeB, 'uint' );
131
+
127
132
  } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
128
133
 
129
134
  // matrix x vector
@@ -163,14 +168,22 @@ class OperatorNode extends TempNode {
163
168
 
164
169
  return a;
165
170
 
166
- } else if ( op === '>' && outputLength > 1 ) {
171
+ } else if ( op === '<' && outputLength > 1 ) {
167
172
 
168
- return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`, type, output );
173
+ return builder.format( `${ builder.getMethod( 'lessThan' ) }( ${a}, ${b} )`, type, output );
169
174
 
170
175
  } else if ( op === '<=' && outputLength > 1 ) {
171
176
 
172
177
  return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${a}, ${b} )`, type, output );
173
178
 
179
+ } else if ( op === '>' && outputLength > 1 ) {
180
+
181
+ return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`, type, output );
182
+
183
+ } else if ( op === '>=' && outputLength > 1 ) {
184
+
185
+ return builder.format( `${ builder.getMethod( 'greaterThanEqual' ) }( ${a}, ${b} )`, type, output );
186
+
174
187
  } else {
175
188
 
176
189
  return builder.format( `( ${a} ${this.op} ${b} )`, type, output );
@@ -117,18 +117,33 @@ class GLSLNodeFunction extends NodeFunction {
117
117
 
118
118
  getCode( name = this.name ) {
119
119
 
120
- const headerCode = this.headerCode;
121
- const presicion = this.presicion;
120
+ let code;
122
121
 
123
- let declarationCode = `${ this.type } ${ name } ( ${ this.inputsCode.trim() } )`;
122
+ const blockCode = this.blockCode;
124
123
 
125
- if ( presicion !== '' ) {
124
+ if ( blockCode !== '' ) {
126
125
 
127
- declarationCode = `${ presicion } ${ declarationCode }`;
126
+ const { type, inputsCode, headerCode, presicion } = this;
127
+
128
+ let declarationCode = `${ type } ${ name } ( ${ inputsCode.trim() } )`;
129
+
130
+ if ( presicion !== '' ) {
131
+
132
+ declarationCode = `${ presicion } ${ declarationCode }`;
133
+
134
+ }
135
+
136
+ code = headerCode + declarationCode + blockCode;
137
+
138
+ } else {
139
+
140
+ // interface function
141
+
142
+ code = '';
128
143
 
129
144
  }
130
145
 
131
- return headerCode + declarationCode + this.blockCode;
146
+ return code;
132
147
 
133
148
  }
134
149
 
@@ -1,4 +1,4 @@
1
- import Node from '../core/Node.js';
1
+ import TempNode from '../core/TempNode.js';
2
2
  import { ShaderNode, uv, add, mul, floor, mod, sign } from '../shadernode/ShaderNodeBaseElements.js';
3
3
 
4
4
  const checkerShaderNode = new ShaderNode( ( inputs ) => {
@@ -13,7 +13,7 @@ const checkerShaderNode = new ShaderNode( ( inputs ) => {
13
13
 
14
14
  } );
15
15
 
16
- class CheckerNode extends Node {
16
+ class CheckerNode extends TempNode {
17
17
 
18
18
  constructor( uvNode = uv() ) {
19
19
 
@@ -1,3 +1,4 @@
1
+ import Node from '../core/Node.js';
1
2
  import ArrayElementNode from '../utils/ArrayElementNode.js';
2
3
  import ConvertNode from '../utils/ConvertNode.js';
3
4
  import JoinNode from '../utils/JoinNode.js';
@@ -107,31 +108,33 @@ const ShaderNodeArray = function ( array ) {
107
108
 
108
109
  };
109
110
 
110
- const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null ) {
111
+ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, settings = null ) {
112
+
113
+ const assignNode = ( node ) => nodeObject( settings !== null ? Object.assign( node, settings ) : node );
111
114
 
112
115
  if ( scope === null ) {
113
116
 
114
117
  return ( ...params ) => {
115
118
 
116
- return nodeObject( new NodeClass( ...nodeArray( params ) ) );
119
+ return assignNode( new NodeClass( ...nodeArray( params ) ) );
117
120
 
118
121
  };
119
122
 
120
- } else if ( factor === null ) {
123
+ } else if ( factor !== null ) {
124
+
125
+ factor = nodeObject( factor );
121
126
 
122
127
  return ( ...params ) => {
123
128
 
124
- return nodeObject( new NodeClass( scope, ...nodeArray( params ) ) );
129
+ return assignNode( new NodeClass( scope, ...nodeArray( params ), factor ) );
125
130
 
126
131
  };
127
132
 
128
133
  } else {
129
134
 
130
- factor = nodeObject( factor );
131
-
132
135
  return ( ...params ) => {
133
136
 
134
- return nodeObject( new NodeClass( scope, ...nodeArray( params ), factor ) );
137
+ return assignNode( new NodeClass( scope, ...nodeArray( params ) ) );
135
138
 
136
139
  };
137
140
 
@@ -145,31 +148,43 @@ const ShaderNodeImmutable = function ( NodeClass, ...params ) {
145
148
 
146
149
  };
147
150
 
148
- const ShaderNodeScript = function ( jsFunc ) {
151
+ class ShaderNodeInternal extends Node {
149
152
 
150
- // @TODO: Move this to Node extended class
153
+ constructor( jsFunc ) {
151
154
 
152
- const self = {
155
+ super();
153
156
 
154
- build: ( builder ) => {
157
+ this._jsFunc = jsFunc;
155
158
 
156
- self.call( {}, builder );
159
+ }
157
160
 
158
- return '';
161
+ call( inputs, builder ) {
159
162
 
160
- },
163
+ inputs = nodeObjects( inputs );
161
164
 
162
- call: ( inputs, builder ) => {
165
+ return nodeObject( this._jsFunc( inputs, builder ) );
166
+
167
+ }
163
168
 
164
- inputs = nodeObjects( inputs );
169
+ generate( builder, output ) {
165
170
 
166
- return nodeObject( jsFunc( inputs, builder ) );
171
+ const nodeCall = this.call( {}, builder );
172
+
173
+ if ( nodeCall === undefined ) {
174
+
175
+ return '';
167
176
 
168
177
  }
169
178
 
170
- };
179
+ return builder.format( nodeCall.build( builder ), nodeCall.getNodeType( builder ), output );
180
+
181
+ }
182
+
183
+ }
184
+
185
+ const ShaderNodeScript = function ( jsFunc ) {
171
186
 
172
- return self;
187
+ return new ShaderNodeInternal( jsFunc );
173
188
 
174
189
  };
175
190
 
@@ -187,17 +202,17 @@ const ints = [ - 1, - 2 ];
187
202
  const floats = [ 0.5, 1.5, 1 / 3, 1e-6, 1e6, Math.PI, Math.PI * 2, 1 / Math.PI, 2 / Math.PI, 1 / ( Math.PI * 2 ), Math.PI / 2 ];
188
203
 
189
204
  const boolsCacheMap = new Map();
190
- for ( let bool of bools ) boolsCacheMap.set( bool, new ConstNode( bool ) );
205
+ for ( const bool of bools ) boolsCacheMap.set( bool, new ConstNode( bool ) );
191
206
 
192
207
  const uintsCacheMap = new Map();
193
- for ( let uint of uints ) uintsCacheMap.set( uint, new ConstNode( uint, 'uint' ) );
208
+ for ( const uint of uints ) uintsCacheMap.set( uint, new ConstNode( uint, 'uint' ) );
194
209
 
195
210
  const intsCacheMap = new Map( [ ...uintsCacheMap ].map( el => new ConstNode( el.value, 'int' ) ) );
196
- for ( let int of ints ) intsCacheMap.set( int, new ConstNode( int, 'int' ) );
211
+ for ( const int of ints ) intsCacheMap.set( int, new ConstNode( int, 'int' ) );
197
212
 
198
213
  const floatsCacheMap = new Map( [ ...intsCacheMap ].map( el => new ConstNode( el.value ) ) );
199
- for ( let float of floats ) floatsCacheMap.set( float, new ConstNode( float ) );
200
- for ( let float of floats ) floatsCacheMap.set( - float, new ConstNode( - float ) );
214
+ for ( const float of floats ) floatsCacheMap.set( float, new ConstNode( float ) );
215
+ for ( const float of floats ) floatsCacheMap.set( - float, new ConstNode( - float ) );
201
216
 
202
217
  export const cacheMaps = { bool: boolsCacheMap, uint: uintsCacheMap, ints: intsCacheMap, float: floatsCacheMap };
203
218
 
@@ -251,7 +266,7 @@ export const ConvertType = function ( type, cacheMap = null ) {
251
266
 
252
267
  }
253
268
 
254
- return nodeObject( new ConvertNode( new JoinNode( nodes ), type ) );
269
+ return nodeObject( new JoinNode( nodes, type ) );
255
270
 
256
271
  }
257
272
 
@@ -11,9 +11,10 @@ import InstanceIndexNode from '../core/InstanceIndexNode.js';
11
11
  import PropertyNode from '../core/PropertyNode.js';
12
12
  import UniformNode from '../core/UniformNode.js';
13
13
  import VarNode from '../core/VarNode.js';
14
- import VaryNode from '../core/VaryNode.js';
14
+ import VaryingNode from '../core/VaryingNode.js';
15
15
 
16
16
  // accessors
17
+ import BitangentNode from '../accessors/BitangentNode.js';
17
18
  import BufferNode from '../accessors/BufferNode.js';
18
19
  import CameraNode from '../accessors/CameraNode.js';
19
20
  import MaterialNode from '../accessors/MaterialNode.js';
@@ -25,6 +26,7 @@ import PointUVNode from '../accessors/PointUVNode.js';
25
26
  import PositionNode from '../accessors/PositionNode.js';
26
27
  import ReferenceNode from '../accessors/ReferenceNode.js';
27
28
  import StorageBufferNode from '../accessors/StorageBufferNode.js';
29
+ import TangentNode from '../accessors/TangentNode.js';
28
30
  import TextureNode from '../accessors/TextureNode.js';
29
31
  import UserDataNode from '../accessors/UserDataNode.js';
30
32
  import UVNode from '../accessors/UVNode.js';
@@ -87,12 +89,12 @@ export const bmat4 = new ConvertType( 'bmat4' );
87
89
 
88
90
  // @TODO: ArrayUniformNode
89
91
 
90
- export const func = ( code ) => {
92
+ export const func = ( code, includes ) => {
91
93
 
92
- const node = nodeObject( new FunctionNode( code ) );
94
+ const node = nodeObject( new FunctionNode( code, includes ) );
93
95
 
94
96
  const call = node.call.bind( node );
95
- node.call = ( params ) => nodeObject( call( params ) );
97
+ node.call = ( ...params ) => nodeObject( call( params.length > 1 || params[ 0 ]?.isNode === true ? nodeArray( params ) : nodeObjects( params[ 0 ] ) ) );
96
98
 
97
99
  return node;
98
100
 
@@ -109,9 +111,13 @@ export const uniform = ( nodeOrType ) => {
109
111
 
110
112
  };
111
113
 
114
+ export const fn = ( code, includes ) => func( code, includes ).call;
115
+
112
116
  export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
113
117
  export const property = ( name, nodeOrType ) => nodeObject( new PropertyNode( name, getConstNodeType( nodeOrType ) ) );
114
118
 
119
+ export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
120
+
115
121
  export const bypass = nodeProxy( BypassNode );
116
122
  export const code = nodeProxy( CodeNode );
117
123
  export const context = nodeProxy( ContextNode );
@@ -120,66 +126,7 @@ export const call = nodeProxy( FunctionCallNode );
120
126
  export const instanceIndex = nodeImmutable( InstanceIndexNode );
121
127
  export const label = nodeProxy( VarNode );
122
128
  export const temp = label;
123
- export const vary = nodeProxy( VaryNode );
124
-
125
- // accesors
126
-
127
- export const buffer = ( value, nodeOrType, count ) => nodeObject( new BufferNode( value, getConstNodeType( nodeOrType ), count ) );
128
- export const storage = ( value, nodeOrType, count ) => nodeObject( new StorageBufferNode( value, getConstNodeType( nodeOrType ), count ) );
129
-
130
- export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
131
- export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
132
- export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
133
- export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
134
- export const cameraPosition = nodeImmutable( CameraNode, CameraNode.POSITION );
135
-
136
- export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
137
- export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
138
- export const materialEmissive = nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
139
- export const materialOpacity = nodeImmutable( MaterialNode, MaterialNode.OPACITY );
140
- //export const materialSpecular = nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
141
- export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
142
- export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
143
- export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
144
-
145
- export const diffuseColor = nodeImmutable( PropertyNode, 'DiffuseColor', 'vec4' );
146
- export const roughness = nodeImmutable( PropertyNode, 'Roughness', 'float' );
147
- export const metalness = nodeImmutable( PropertyNode, 'Metalness', 'float' );
148
- export const alphaTest = nodeImmutable( PropertyNode, 'AlphaTest', 'float' );
149
- export const specularColor = nodeImmutable( PropertyNode, 'SpecularColor', 'color' );
150
-
151
- export const reference = ( name, nodeOrType, object ) => nodeObject( new ReferenceNode( name, getConstNodeType( nodeOrType ), object ) );
152
- export const materialReference = ( name, nodeOrType, material ) => nodeObject( new MaterialReferenceNode( name, getConstNodeType( nodeOrType ), material ) );
153
- export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
154
-
155
- export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
156
-
157
- export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
158
- export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
159
- export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
160
- export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
161
- export const transformedNormalView = nodeImmutable( VarNode, normalView, 'TransformedNormalView' );
162
-
163
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
164
- export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
165
- export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
166
- export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
167
- export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
168
-
169
- export const positionGeometry = nodeImmutable( PositionNode, PositionNode.GEOMETRY );
170
- export const positionLocal = nodeImmutable( PositionNode, PositionNode.LOCAL );
171
- export const positionWorld = nodeImmutable( PositionNode, PositionNode.WORLD );
172
- export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
173
- export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
174
-
175
- export const texture = nodeProxy( TextureNode );
176
- export const sampler = ( texture ) => nodeObject( new ConvertNode( texture.isNode === true ? texture : new TextureNode( texture ), 'sampler' ) );
177
- export const uv = ( ...params ) => nodeObject( new UVNode( ...params ) );
178
- export const pointUV = nodeImmutable( PointUVNode );
179
-
180
- // gpgpu
181
-
182
- export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
129
+ export const varying = nodeProxy( VaryingNode );
183
130
 
184
131
  // math
185
132
 
@@ -233,9 +180,10 @@ export const negate = nodeProxy( MathNode, MathNode.NEGATE );
233
180
  export const invert = nodeProxy( MathNode, MathNode.INVERT );
234
181
  export const dFdx = nodeProxy( MathNode, MathNode.DFDX );
235
182
  export const dFdy = nodeProxy( MathNode, MathNode.DFDY );
236
- export const saturate = nodeProxy( MathNode, MathNode.SATURATE );
237
183
  export const round = nodeProxy( MathNode, MathNode.ROUND );
184
+ export const reciprocal = nodeProxy( MathNode, MathNode.RECIPROCAL );
238
185
 
186
+ export const atan2 = nodeProxy( MathNode, MathNode.ATAN2 );
239
187
  export const min = nodeProxy( MathNode, MathNode.MIN );
240
188
  export const max = nodeProxy( MathNode, MathNode.MAX );
241
189
  export const mod = nodeProxy( MathNode, MathNode.MOD );
@@ -251,11 +199,86 @@ export const pow4 = nodeProxy( MathNode, MathNode.POW, 4 );
251
199
  export const transformDirection = nodeProxy( MathNode, MathNode.TRANSFORM_DIRECTION );
252
200
 
253
201
  export const mix = nodeProxy( MathNode, MathNode.MIX );
254
- export const clamp = nodeProxy( MathNode, MathNode.CLAMP );
202
+ export const clamp = ( value, low = 0, high = 1 ) => nodeObject( new MathNode( MathNode.CLAMP, nodeObject( value ), nodeObject( low ), nodeObject( high ) ) );
255
203
  export const refract = nodeProxy( MathNode, MathNode.REFRACT );
256
204
  export const smoothstep = nodeProxy( MathNode, MathNode.SMOOTHSTEP );
257
205
  export const faceforward = nodeProxy( MathNode, MathNode.FACEFORWARD );
258
206
 
207
+ // accessors
208
+
209
+ export const buffer = ( value, nodeOrType, count ) => nodeObject( new BufferNode( value, getConstNodeType( nodeOrType ), count ) );
210
+ export const storage = ( value, nodeOrType, count ) => nodeObject( new StorageBufferNode( value, getConstNodeType( nodeOrType ), count ) );
211
+
212
+ export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
213
+ export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
214
+ export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
215
+ export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
216
+ export const cameraPosition = nodeImmutable( CameraNode, CameraNode.POSITION );
217
+
218
+ export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
219
+ export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
220
+ export const materialEmissive = nodeImmutable( MaterialNode, MaterialNode.EMISSIVE );
221
+ export const materialOpacity = nodeImmutable( MaterialNode, MaterialNode.OPACITY );
222
+ //export const materialSpecular = nodeImmutable( MaterialNode, MaterialNode.SPECULAR );
223
+ export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
224
+ export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
225
+ export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
226
+
227
+ export const diffuseColor = nodeImmutable( PropertyNode, 'DiffuseColor', 'vec4' );
228
+ export const roughness = nodeImmutable( PropertyNode, 'Roughness', 'float' );
229
+ export const metalness = nodeImmutable( PropertyNode, 'Metalness', 'float' );
230
+ export const alphaTest = nodeImmutable( PropertyNode, 'AlphaTest', 'float' );
231
+ export const specularColor = nodeImmutable( PropertyNode, 'SpecularColor', 'color' );
232
+
233
+ export const reference = ( name, nodeOrType, object ) => nodeObject( new ReferenceNode( name, getConstNodeType( nodeOrType ), object ) );
234
+ export const materialReference = ( name, nodeOrType, material ) => nodeObject( new MaterialReferenceNode( name, getConstNodeType( nodeOrType ), material ) );
235
+ export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
236
+
237
+ export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
238
+
239
+ export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
240
+ export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
241
+ export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
242
+ export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
243
+ export const transformedNormalView = nodeImmutable( VarNode, normalView, 'TransformedNormalView' );
244
+ export const transformedNormalWorld = normalize( transformDirection( transformedNormalView, cameraViewMatrix ) );
245
+
246
+ export const tangentGeometry = nodeImmutable( TangentNode, TangentNode.GEOMETRY );
247
+ export const tangentLocal = nodeImmutable( TangentNode, TangentNode.LOCAL );
248
+ export const tangentView = nodeImmutable( TangentNode, TangentNode.VIEW );
249
+ export const tangentWorld = nodeImmutable( TangentNode, TangentNode.WORLD );
250
+ export const transformedTangentView = nodeImmutable( VarNode, tangentView, 'TransformedTangentView' );
251
+ export const transformedTangentWorld = normalize( transformDirection( transformedTangentView, cameraViewMatrix ) );
252
+
253
+ export const bitangentGeometry = nodeImmutable( BitangentNode, BitangentNode.GEOMETRY );
254
+ export const bitangentLocal = nodeImmutable( BitangentNode, BitangentNode.LOCAL );
255
+ export const bitangentView = nodeImmutable( BitangentNode, BitangentNode.VIEW );
256
+ export const bitangentWorld = nodeImmutable( BitangentNode, BitangentNode.WORLD );
257
+ export const transformedBitangentView = normalize( mul( cross( transformedNormalView, transformedTangentView ), tangentGeometry.w ) );
258
+ export const transformedBitangentWorld = normalize( transformDirection( transformedBitangentView, cameraViewMatrix ) );
259
+
260
+ export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
261
+ export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
262
+ export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
263
+ export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
264
+ export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
265
+
266
+ export const positionGeometry = nodeImmutable( PositionNode, PositionNode.GEOMETRY );
267
+ export const positionLocal = nodeImmutable( PositionNode, PositionNode.LOCAL );
268
+ export const positionWorld = nodeImmutable( PositionNode, PositionNode.WORLD );
269
+ export const positionWorldDirection = nodeImmutable( PositionNode, PositionNode.WORLD_DIRECTION );
270
+ export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
271
+ export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
272
+
273
+ export const texture = nodeProxy( TextureNode );
274
+ export const sampler = ( texture ) => nodeObject( new ConvertNode( texture.isNode === true ? texture : new TextureNode( texture ), 'sampler' ) );
275
+ export const uv = ( ...params ) => nodeObject( new UVNode( ...params ) );
276
+ export const pointUV = nodeImmutable( PointUVNode );
277
+
278
+ // gpgpu
279
+
280
+ export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
281
+
259
282
  // display
260
283
 
261
284
  export const frontFacing = nodeImmutable( FrontFacingNode );
@@ -270,5 +293,9 @@ export const element = nodeProxy( ArrayElementNode );
270
293
 
271
294
  // miscellaneous
272
295
 
273
- export const dotNV = saturate( dot( transformedNormalView, positionViewDirection ) );
274
- export const transformedNormalWorld = normalize( transformDirection( transformedNormalView, cameraViewMatrix ) );
296
+ export const lumaCoeffs = vec3( 0.2125, 0.7154, 0.0721 );
297
+
298
+ export const luminance = ( color, luma = lumaCoeffs ) => dot( color, luma );
299
+ export const difference = ( a, b ) => abs( sub( a, b ) );
300
+ export const dotNV = clamp( dot( transformedNormalView, positionViewDirection ) );
301
+ export const TBNViewMatrix = mat3( tangentView, bitangentView, normalView );
@@ -1,13 +1,17 @@
1
1
  // accessors
2
2
  import CubeTextureNode from '../accessors/CubeTextureNode.js';
3
3
  import InstanceNode from '../accessors/InstanceNode.js';
4
- import ReflectNode from '../accessors/ReflectNode.js';
4
+ import ReflectVectorNode from '../accessors/ReflectVectorNode.js';
5
5
  import SkinningNode from '../accessors/SkinningNode.js';
6
6
 
7
7
  // display
8
+ import BlendModeNode from '../display/BlendModeNode.js';
9
+ import ColorAdjustmentNode from '../display/ColorAdjustmentNode.js';
8
10
  import ColorSpaceNode from '../display/ColorSpaceNode.js';
9
11
  import NormalMapNode from '../display/NormalMapNode.js';
12
+ import PosterizeNode from '../display/PosterizeNode.js';
10
13
  import ToneMappingNode from '../display/ToneMappingNode.js';
14
+ import ViewportNode from '../display/ViewportNode.js';
11
15
 
12
16
  // lighting
13
17
  import LightsNode from '../lighting/LightsNode.js';
@@ -15,11 +19,18 @@ import LightsNode from '../lighting/LightsNode.js';
15
19
  import LightingContextNode from '../lighting/LightingContextNode.js';
16
20
 
17
21
  // utils
22
+ import EquirectUVNode from '../utils/EquirectUVNode.js';
18
23
  import MatcapUVNode from '../utils/MatcapUVNode.js';
19
24
  import MaxMipLevelNode from '../utils/MaxMipLevelNode.js';
20
25
  import OscNode from '../utils/OscNode.js';
26
+ import RemapNode from '../utils/RemapNode.js';
27
+ import RotateUVNode from '../utils/RotateUVNode.js';
21
28
  import SpriteSheetUVNode from '../utils/SpriteSheetUVNode.js';
22
29
  import TimerNode from '../utils/TimerNode.js';
30
+ import TriplanarTexturesNode from '../utils/TriplanarTexturesNode.js';
31
+
32
+ // geometry
33
+ import RangeNode from '../geometry/RangeNode.js';
23
34
 
24
35
  // procedural
25
36
  import CheckerNode from '../procedural/CheckerNode.js';
@@ -61,17 +72,34 @@ export const cubeTexture = nodeProxy( CubeTextureNode );
61
72
 
62
73
  export const instance = nodeProxy( InstanceNode );
63
74
 
64
- export const reflectVector = nodeImmutable( ReflectNode, ReflectNode.VECTOR );
65
- export const reflectCube = nodeImmutable( ReflectNode, ReflectNode.CUBE );
75
+ export const reflectVector = nodeImmutable( ReflectVectorNode );
66
76
 
67
77
  export const skinning = nodeProxy( SkinningNode );
68
78
 
69
79
  // display
70
80
 
81
+ export const burn = nodeProxy( BlendModeNode, BlendModeNode.BURN );
82
+ export const dodge = nodeProxy( BlendModeNode, BlendModeNode.DODGE );
83
+ export const overlay = nodeProxy( BlendModeNode, BlendModeNode.OVERLAY );
84
+ export const screen = nodeProxy( BlendModeNode, BlendModeNode.SCREEN );
85
+
86
+ export const saturation = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.SATURATION );
87
+ export const vibrance = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.VIBRANCE );
88
+ export const hue = nodeProxy( ColorAdjustmentNode, ColorAdjustmentNode.HUE );
89
+
71
90
  export const colorSpace = ( node, encoding ) => nodeObject( new ColorSpaceNode( null, nodeObject( node ) ).fromEncoding( encoding ) );
72
91
  export const normalMap = nodeProxy( NormalMapNode );
73
92
  export const toneMapping = ( mapping, exposure, color ) => nodeObject( new ToneMappingNode( mapping, nodeObject( exposure ), nodeObject( color ) ) );
74
93
 
94
+ export const posterize = nodeProxy( PosterizeNode );
95
+
96
+ export const viewportCoordinate = nodeImmutable( ViewportNode, ViewportNode.COORDINATE );
97
+ export const viewportResolution = nodeImmutable( ViewportNode, ViewportNode.RESOLUTION );
98
+ export const viewportTopLeft = nodeImmutable( ViewportNode, ViewportNode.TOP_LEFT );
99
+ export const viewportBottomLeft = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_LEFT );
100
+ export const viewportTopRight = nodeImmutable( ViewportNode, ViewportNode.TOP_RIGHT );
101
+ export const viewportBottomRight = nodeImmutable( ViewportNode, ViewportNode.BOTTOM_RIGHT );
102
+
75
103
  // lighting
76
104
 
77
105
  //export const lighting = nodeProxy( LightingNode ); // abstract
@@ -82,6 +110,8 @@ export const lightingContext = nodeProxy( LightingContextNode );
82
110
  // utils
83
111
 
84
112
  export const matcapUV = nodeImmutable( MatcapUVNode );
113
+ export const equirectUV = nodeProxy( EquirectUVNode );
114
+
85
115
  export const maxMipLevel = nodeProxy( MaxMipLevelNode );
86
116
 
87
117
  export const oscSine = nodeProxy( OscNode, OscNode.SINE );
@@ -89,12 +119,25 @@ export const oscSquare = nodeProxy( OscNode, OscNode.SQUARE );
89
119
  export const oscTriangle = nodeProxy( OscNode, OscNode.TRIANGLE );
90
120
  export const oscSawtooth = nodeProxy( OscNode, OscNode.SAWTOOTH );
91
121
 
122
+ export const remap = nodeProxy( RemapNode, null, null, { doClamp: false } );
123
+ export const remapClamp = nodeProxy( RemapNode );
124
+
125
+ export const rotateUV = nodeProxy( RotateUVNode );
126
+
92
127
  export const spritesheetUV = nodeProxy( SpriteSheetUVNode );
93
128
 
94
129
  // @TODO: add supports to use node in timeScale
95
- export const timerLocal = ( timeScale ) => nodeObject( new TimerNode( TimerNode.LOCAL, timeScale ) );
96
- export const timerGlobal = ( timeScale ) => nodeObject( new TimerNode( TimerNode.GLOBAL, timeScale ) );
97
- export const timerDelta = ( timeScale ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale ) );
130
+ export const timerLocal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.LOCAL, timeScale, value ) );
131
+ export const timerGlobal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.GLOBAL, timeScale, value ) );
132
+ export const timerDelta = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale, value ) );
133
+ export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME );
134
+
135
+ export const triplanarTextures = nodeProxy( TriplanarTexturesNode );
136
+ export const triplanarTexture = ( texture, ...params ) => triplanarTextures( texture, texture, texture, ...params );
137
+
138
+ // geometry
139
+
140
+ export const range = ( min, max ) => nodeObject( new RangeNode( min, max ) );
98
141
 
99
142
  // procedural
100
143
 
@@ -11,28 +11,34 @@ class ConvertNode extends Node {
11
11
 
12
12
  }
13
13
 
14
- getNodeType( /*builder*/ ) {
14
+ getNodeType( builder ) {
15
15
 
16
- return this.convertTo;
16
+ const requestType = this.node.getNodeType( builder );
17
17
 
18
- }
18
+ let convertTo = null;
19
19
 
20
- generate( builder ) {
20
+ for ( const overloadingType of this.convertTo.split( '|' ) ) {
21
21
 
22
- const convertTo = this.convertTo;
23
- const node = this.node;
22
+ if ( convertTo === null || builder.getTypeLength( requestType ) === builder.getTypeLength( overloadingType ) ) {
24
23
 
25
- if ( builder.isReference( convertTo ) === false ) {
24
+ convertTo = overloadingType;
26
25
 
27
- const nodeSnippet = node.build( builder, convertTo );
26
+ }
28
27
 
29
- return builder.format( nodeSnippet, this.getNodeType( builder ), convertTo );
28
+ }
30
29
 
31
- } else {
30
+ return convertTo;
32
31
 
33
- return node.build( builder, convertTo );
32
+ }
34
33
 
35
- }
34
+ generate( builder, output ) {
35
+
36
+ const node = this.node;
37
+ const type = this.getNodeType( builder );
38
+
39
+ const snippet = node.build( builder, type );
40
+
41
+ return builder.format( snippet, type, output );
36
42
 
37
43
  }
38
44
 
@@ -0,0 +1,27 @@
1
+ import TempNode from '../core/TempNode.js';
2
+ import { nodeObject, vec2, add, mul, atan2, asin, clamp, positionWorldDirection } from '../shadernode/ShaderNodeElements.js';
3
+
4
+ class EquirectUVNode extends TempNode {
5
+
6
+ constructor( dirNode = positionWorldDirection ) {
7
+
8
+ super( 'vec2' );
9
+
10
+ this.dirNode = dirNode;
11
+
12
+ }
13
+
14
+ construct() {
15
+
16
+ const dir = nodeObject( this.dirNode );
17
+
18
+ const u = add( mul( atan2( dir.z, dir.x ), 1 / ( Math.PI * 2 ) ), 0.5 );
19
+ const v = add( mul( asin( clamp( dir.y, - 1.0, 1.0 ) ), 1 / Math.PI ), 0.5 );
20
+
21
+ return vec2( u, v );
22
+
23
+ }
24
+
25
+ }
26
+
27
+ export default EquirectUVNode;