super-three 0.144.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 (450) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +735 -387
  3. package/build/three.js +735 -387
  4. package/build/three.min.js +1 -1
  5. package/build/three.module.js +910 -408
  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 +70 -134
  10. package/examples/js/cameras/CinematicCamera.js +33 -22
  11. package/examples/js/controls/ArcballControls.js +138 -405
  12. package/examples/js/controls/DragControls.js +8 -33
  13. package/examples/js/controls/FirstPersonControls.js +32 -54
  14. package/examples/js/controls/FlyControls.js +29 -55
  15. package/examples/js/controls/OrbitControls.js +125 -99
  16. package/examples/js/controls/PointerLockControls.js +5 -14
  17. package/examples/js/controls/TrackballControls.js +33 -86
  18. package/examples/js/controls/TransformControls.js +85 -170
  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 +4 -18
  28. package/examples/js/effects/AsciiEffect.js +32 -31
  29. package/examples/js/effects/OutlineEffect.js +26 -30
  30. package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
  31. package/examples/js/effects/PeppersGhostEffect.js +12 -39
  32. package/examples/js/effects/StereoEffect.js +0 -4
  33. package/examples/js/environments/RoomEnvironment.js +12 -10
  34. package/examples/js/exporters/ColladaExporter.js +48 -65
  35. package/examples/js/exporters/DRACOExporter.js +22 -22
  36. package/examples/js/exporters/EXRExporter.js +15 -18
  37. package/examples/js/exporters/GLTFExporter.js +141 -317
  38. package/examples/js/exporters/MMDExporter.js +5 -12
  39. package/examples/js/exporters/OBJExporter.js +42 -33
  40. package/examples/js/exporters/PLYExporter.js +38 -33
  41. package/examples/js/exporters/STLExporter.js +5 -7
  42. package/examples/js/exporters/USDZExporter.js +113 -27
  43. package/examples/js/geometries/BoxLineGeometry.js +0 -1
  44. package/examples/js/geometries/ConvexGeometry.js +11 -6
  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 +25 -12
  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 +0 -8
  63. package/examples/js/lights/LightProbeGenerator.js +32 -39
  64. package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
  65. package/examples/js/lines/LineGeometry.js +3 -5
  66. package/examples/js/lines/LineMaterial.js +4 -11
  67. package/examples/js/lines/LineSegments2.js +40 -89
  68. package/examples/js/lines/LineSegmentsGeometry.js +7 -28
  69. package/examples/js/lines/Wireframe.js +2 -7
  70. package/examples/js/lines/WireframeGeometry2.js +3 -1
  71. package/examples/js/loaders/3DMLoader.js +58 -155
  72. package/examples/js/loaders/3MFLoader.js +72 -106
  73. package/examples/js/loaders/AMFLoader.js +0 -25
  74. package/examples/js/loaders/BVHLoader.js +44 -43
  75. package/examples/js/loaders/BasisTextureLoader.js +16 -46
  76. package/examples/js/loaders/ColladaLoader.js +228 -359
  77. package/examples/js/loaders/DDSLoader.js +24 -25
  78. package/examples/js/loaders/DRACOLoader.js +29 -66
  79. package/examples/js/loaders/EXRLoader.js +67 -164
  80. package/examples/js/loaders/FBXLoader.js +287 -441
  81. package/examples/js/loaders/FontLoader.js +6 -15
  82. package/examples/js/loaders/GCodeLoader.js +15 -16
  83. package/examples/js/loaders/GLTFLoader.js +409 -706
  84. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
  85. package/examples/js/loaders/KMZLoader.js +3 -7
  86. package/examples/js/loaders/KTXLoader.js +12 -30
  87. package/examples/js/loaders/LDrawLoader.js +178 -289
  88. package/examples/js/loaders/LUT3dlLoader.js +7 -11
  89. package/examples/js/loaders/LUTCubeLoader.js +0 -8
  90. package/examples/js/loaders/LWOLoader.js +59 -124
  91. package/examples/js/loaders/LogLuvLoader.js +27 -77
  92. package/examples/js/loaders/LottieLoader.js +4 -4
  93. package/examples/js/loaders/MD2Loader.js +26 -27
  94. package/examples/js/loaders/MDDLoader.js +6 -10
  95. package/examples/js/loaders/MMDLoader.js +180 -189
  96. package/examples/js/loaders/MTLLoader.js +18 -47
  97. package/examples/js/loaders/NRRDLoader.js +44 -84
  98. package/examples/js/loaders/OBJLoader.js +50 -65
  99. package/examples/js/loaders/PCDLoader.js +34 -29
  100. package/examples/js/loaders/PDBLoader.js +17 -13
  101. package/examples/js/loaders/PLYLoader.js +62 -48
  102. package/examples/js/loaders/PRWMLoader.js +11 -22
  103. package/examples/js/loaders/PVRLoader.js +7 -16
  104. package/examples/js/loaders/RGBELoader.js +36 -61
  105. package/examples/js/loaders/RGBMLoader.js +26 -87
  106. package/examples/js/loaders/STLLoader.js +20 -27
  107. package/examples/js/loaders/SVGLoader.js +361 -233
  108. package/examples/js/loaders/TDSLoader.js +81 -118
  109. package/examples/js/loaders/TGALoader.js +39 -41
  110. package/examples/js/loaders/TIFFLoader.js +0 -1
  111. package/examples/js/loaders/TTFLoader.js +0 -8
  112. package/examples/js/loaders/TiltLoader.js +14 -15
  113. package/examples/js/loaders/VOXLoader.js +8 -16
  114. package/examples/js/loaders/VRMLLoader.js +243 -340
  115. package/examples/js/loaders/VTKLoader.js +101 -118
  116. package/examples/js/loaders/XYZLoader.js +2 -4
  117. package/examples/js/loaders/lwo/IFFParser.js +55 -136
  118. package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
  119. package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
  120. package/examples/js/materials/MeshGouraudMaterial.js +15 -13
  121. package/examples/js/math/Capsule.js +0 -17
  122. package/examples/js/math/ColorConverter.js +3 -3
  123. package/examples/js/math/ConvexHull.js +185 -141
  124. package/examples/js/math/ImprovedNoise.js +1 -1
  125. package/examples/js/math/Lut.js +8 -15
  126. package/examples/js/math/MeshSurfaceSampler.js +6 -28
  127. package/examples/js/math/OBB.js +90 -49
  128. package/examples/js/math/Octree.js +2 -57
  129. package/examples/js/math/SimplexNoise.js +74 -88
  130. package/examples/js/misc/ConvexObjectBreaker.js +37 -48
  131. package/examples/js/misc/GPUComputationRenderer.js +26 -16
  132. package/examples/js/misc/Gyroscope.js +5 -9
  133. package/examples/js/misc/MD2Character.js +14 -23
  134. package/examples/js/misc/MD2CharacterComplex.js +73 -54
  135. package/examples/js/misc/MorphAnimMesh.js +0 -6
  136. package/examples/js/misc/MorphBlendMesh.js +3 -30
  137. package/examples/js/misc/ProgressiveLightMap.js +47 -43
  138. package/examples/js/misc/RollerCoaster.js +17 -24
  139. package/examples/js/misc/TubePainter.js +18 -12
  140. package/examples/js/misc/Volume.js +16 -45
  141. package/examples/js/misc/VolumeSlice.js +14 -24
  142. package/examples/js/modifiers/CurveModifier.js +19 -21
  143. package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
  144. package/examples/js/modifiers/SimplifyModifier.js +56 -59
  145. package/examples/js/modifiers/TessellateModifier.js +2 -9
  146. package/examples/js/objects/GroundProjectedEnv.js +2 -14
  147. package/examples/js/objects/Lensflare.js +47 -38
  148. package/examples/js/objects/LightningStorm.js +10 -13
  149. package/examples/js/objects/MarchingCubes.js +80 -59
  150. package/examples/js/objects/Reflector.js +22 -20
  151. package/examples/js/objects/ReflectorForSSRPass.js +19 -23
  152. package/examples/js/objects/Refractor.js +52 -30
  153. package/examples/js/objects/ShadowMesh.js +1 -2
  154. package/examples/js/objects/Sky.js +2 -7
  155. package/examples/js/objects/Water.js +23 -18
  156. package/examples/js/objects/Water2.js +20 -19
  157. package/examples/js/physics/AmmoPhysics.js +23 -20
  158. package/examples/js/physics/OimoPhysics.js +19 -17
  159. package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
  160. package/examples/js/postprocessing/AfterimagePass.js +19 -12
  161. package/examples/js/postprocessing/BloomPass.js +38 -17
  162. package/examples/js/postprocessing/BokehPass.js +29 -12
  163. package/examples/js/postprocessing/ClearPass.js +1 -6
  164. package/examples/js/postprocessing/CubeTexturePass.js +12 -9
  165. package/examples/js/postprocessing/DotScreenPass.js +7 -5
  166. package/examples/js/postprocessing/EffectComposer.js +25 -32
  167. package/examples/js/postprocessing/FilmPass.js +7 -5
  168. package/examples/js/postprocessing/GlitchPass.js +10 -11
  169. package/examples/js/postprocessing/HalftonePass.js +9 -9
  170. package/examples/js/postprocessing/LUTPass.js +2 -15
  171. package/examples/js/postprocessing/MaskPass.js +20 -17
  172. package/examples/js/postprocessing/OutlinePass.js +45 -36
  173. package/examples/js/postprocessing/Pass.js +11 -14
  174. package/examples/js/postprocessing/RenderPass.js +3 -7
  175. package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
  176. package/examples/js/postprocessing/SAOPass.js +40 -32
  177. package/examples/js/postprocessing/SMAAPass.js +34 -17
  178. package/examples/js/postprocessing/SSAARenderPass.js +14 -14
  179. package/examples/js/postprocessing/SSAOPass.js +56 -42
  180. package/examples/js/postprocessing/SSRPass.js +78 -61
  181. package/examples/js/postprocessing/SavePass.js +14 -6
  182. package/examples/js/postprocessing/ShaderPass.js +9 -8
  183. package/examples/js/postprocessing/TAARenderPass.js +11 -9
  184. package/examples/js/postprocessing/TexturePass.js +7 -4
  185. package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
  186. package/examples/js/renderers/CSS2DRenderer.js +2 -21
  187. package/examples/js/renderers/CSS3DRenderer.js +3 -24
  188. package/examples/js/renderers/Projector.js +29 -85
  189. package/examples/js/renderers/SVGRenderer.js +4 -50
  190. package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
  191. package/examples/js/shaders/AfterimageShader.js +3 -6
  192. package/examples/js/shaders/BasicShader.js +3 -6
  193. package/examples/js/shaders/BleachBypassShader.js +3 -6
  194. package/examples/js/shaders/BlendShader.js +3 -6
  195. package/examples/js/shaders/BokehShader.js +3 -6
  196. package/examples/js/shaders/BokehShader2.js +4 -13
  197. package/examples/js/shaders/BrightnessContrastShader.js +3 -6
  198. package/examples/js/shaders/ColorCorrectionShader.js +2 -6
  199. package/examples/js/shaders/ColorifyShader.js +2 -6
  200. package/examples/js/shaders/ConvolutionShader.js +5 -10
  201. package/examples/js/shaders/CopyShader.js +3 -6
  202. package/examples/js/shaders/DOFMipMapShader.js +3 -6
  203. package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
  204. package/examples/js/shaders/DigitalGlitch.js +3 -6
  205. package/examples/js/shaders/DotScreenShader.js +2 -6
  206. package/examples/js/shaders/FXAAShader.js +1 -3
  207. package/examples/js/shaders/FilmShader.js +3 -6
  208. package/examples/js/shaders/FocusShader.js +3 -6
  209. package/examples/js/shaders/FreiChenShader.js +2 -6
  210. package/examples/js/shaders/GammaCorrectionShader.js +3 -6
  211. package/examples/js/shaders/GodRaysShader.js +11 -24
  212. package/examples/js/shaders/HalftoneShader.js +3 -6
  213. package/examples/js/shaders/HorizontalBlurShader.js +3 -6
  214. package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
  215. package/examples/js/shaders/HueSaturationShader.js +3 -6
  216. package/examples/js/shaders/KaleidoShader.js +3 -6
  217. package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
  218. package/examples/js/shaders/LuminosityShader.js +3 -6
  219. package/examples/js/shaders/MMDToonShader.js +2 -8
  220. package/examples/js/shaders/MirrorShader.js +3 -6
  221. package/examples/js/shaders/NormalMapShader.js +2 -6
  222. package/examples/js/shaders/RGBShiftShader.js +3 -6
  223. package/examples/js/shaders/SAOShader.js +2 -6
  224. package/examples/js/shaders/SMAAShader.js +6 -18
  225. package/examples/js/shaders/SSAOShader.js +2 -6
  226. package/examples/js/shaders/SSRShader.js +6 -18
  227. package/examples/js/shaders/SepiaShader.js +3 -6
  228. package/examples/js/shaders/SobelOperatorShader.js +2 -6
  229. package/examples/js/shaders/TechnicolorShader.js +3 -6
  230. package/examples/js/shaders/ToneMapShader.js +3 -6
  231. package/examples/js/shaders/ToonShader.js +8 -24
  232. package/examples/js/shaders/TriangleBlurShader.js +2 -6
  233. package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
  234. package/examples/js/shaders/VelocityShader.js +126 -0
  235. package/examples/js/shaders/VerticalBlurShader.js +3 -6
  236. package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
  237. package/examples/js/shaders/VignetteShader.js +3 -6
  238. package/examples/js/shaders/VolumeShader.js +2 -6
  239. package/examples/js/shaders/WaterRefractionShader.js +2 -6
  240. package/examples/js/textures/FlakesTexture.js +0 -1
  241. package/examples/js/utils/BufferGeometryUtils.js +236 -170
  242. package/examples/js/utils/CameraUtils.js +5 -20
  243. package/examples/js/utils/GPUStatsPanel.js +3 -12
  244. package/examples/js/utils/GeometryCompressionUtils.js +19 -44
  245. package/examples/js/utils/GeometryUtils.js +13 -18
  246. package/examples/js/utils/LDrawUtils.js +8 -11
  247. package/examples/js/utils/PackedPhongMaterial.js +6 -4
  248. package/examples/js/utils/SceneUtils.js +117 -6
  249. package/examples/js/utils/ShadowMapViewer.js +17 -14
  250. package/examples/js/utils/SkeletonUtils.js +13 -27
  251. package/examples/js/utils/UVsDebug.js +20 -12
  252. package/examples/js/utils/WorkerPool.js +1 -11
  253. package/examples/jsm/animation/CCDIKSolver.js +27 -3
  254. package/examples/jsm/animation/MMDPhysics.js +25 -0
  255. package/examples/jsm/capabilities/WebGPU.js +3 -1
  256. package/examples/jsm/controls/FirstPersonControls.js +20 -20
  257. package/examples/jsm/controls/FlyControls.js +16 -17
  258. package/examples/jsm/controls/OrbitControls.js +44 -4
  259. package/examples/jsm/controls/TrackballControls.js +14 -2
  260. package/examples/jsm/controls/TransformControls.js +1 -1
  261. package/examples/jsm/csm/CSM.js +1 -0
  262. package/examples/jsm/csm/CSMHelper.js +30 -0
  263. package/examples/jsm/exporters/GLTFExporter.js +0 -79
  264. package/examples/jsm/exporters/USDZExporter.js +93 -1
  265. package/examples/jsm/helpers/OctreeHelper.js +22 -8
  266. package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
  267. package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
  268. package/examples/jsm/helpers/ViewHelper.js +24 -0
  269. package/examples/jsm/interactive/HTMLMesh.js +5 -6
  270. package/examples/jsm/interactive/InteractiveGroup.js +4 -2
  271. package/examples/jsm/libs/flow.module.js +610 -160
  272. package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
  273. package/examples/jsm/lines/LineSegments2.js +4 -0
  274. package/examples/jsm/loaders/3DMLoader.js +1 -2
  275. package/examples/jsm/loaders/ColladaLoader.js +28 -0
  276. package/examples/jsm/loaders/FBXLoader.js +18 -2
  277. package/examples/jsm/loaders/GLTFLoader.js +269 -428
  278. package/examples/jsm/loaders/KTX2Loader.js +68 -29
  279. package/examples/jsm/loaders/LDrawLoader.js +14 -13
  280. package/examples/jsm/loaders/LottieLoader.js +4 -2
  281. package/examples/jsm/loaders/MaterialXLoader.js +728 -0
  282. package/examples/jsm/loaders/PCDLoader.js +1 -1
  283. package/examples/jsm/loaders/PLYLoader.js +68 -16
  284. package/examples/jsm/loaders/SVGLoader.js +227 -14
  285. package/examples/jsm/loaders/USDZLoader.js +351 -111
  286. package/examples/jsm/loaders/VRMLLoader.js +13 -1
  287. package/examples/jsm/math/ConvexHull.js +4 -4
  288. package/examples/jsm/math/Octree.js +1 -1
  289. package/examples/jsm/node-editor/NodeEditor.js +91 -12
  290. package/examples/jsm/node-editor/core/BaseNode.js +10 -3
  291. package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +6 -9
  292. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +6 -9
  293. package/examples/jsm/node-editor/math/AngleEditor.js +3 -3
  294. package/examples/jsm/node-editor/math/InvertEditor.js +2 -2
  295. package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
  296. package/examples/jsm/node-editor/utils/PreviewEditor.js +4 -0
  297. package/examples/jsm/nodes/Nodes.js +30 -3
  298. package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
  299. package/examples/jsm/nodes/accessors/NormalNode.js +6 -6
  300. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  301. package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
  302. package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
  303. package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
  304. package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
  305. package/examples/jsm/nodes/core/AttributeNode.js +31 -8
  306. package/examples/jsm/nodes/core/Node.js +1 -1
  307. package/examples/jsm/nodes/core/NodeBuilder.js +55 -6
  308. package/examples/jsm/nodes/core/NodeFrame.js +2 -2
  309. package/examples/jsm/nodes/core/NodeVarying.js +7 -4
  310. package/examples/jsm/nodes/core/VaryingNode.js +6 -4
  311. package/examples/jsm/nodes/core/constants.js +13 -13
  312. package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
  313. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -12
  314. package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
  315. package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
  316. package/examples/jsm/nodes/display/ViewportNode.js +106 -0
  317. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
  318. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
  319. package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
  320. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  321. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
  322. package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
  323. package/examples/jsm/nodes/materials/Materials.js +9 -7
  324. package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
  325. package/examples/jsm/nodes/materialx/{Disclaimer.md → DISCLAIMER.md} +1 -1
  326. package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
  327. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_hsv.js +1 -1
  328. package/examples/jsm/nodes/materialx/{functions/lib → lib}/mx_noise.js +13 -3
  329. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
  330. package/examples/jsm/nodes/math/MathNode.js +5 -5
  331. package/examples/jsm/nodes/math/OperatorNode.js +16 -3
  332. package/examples/jsm/nodes/shadernode/ShaderNode.js +35 -20
  333. package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +87 -63
  334. package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +29 -0
  335. package/examples/jsm/nodes/utils/ConvertNode.js +15 -14
  336. package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
  337. package/examples/jsm/nodes/utils/JoinNode.js +8 -2
  338. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
  339. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  340. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  341. package/examples/jsm/nodes/utils/RemapNode.js +34 -0
  342. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
  343. package/examples/jsm/nodes/utils/TimerNode.js +21 -1
  344. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
  345. package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
  346. package/examples/jsm/postprocessing/BloomPass.js +22 -3
  347. package/examples/jsm/postprocessing/BokehPass.js +18 -4
  348. package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
  349. package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
  350. package/examples/jsm/postprocessing/EffectComposer.js +9 -0
  351. package/examples/jsm/postprocessing/FilmPass.js +8 -0
  352. package/examples/jsm/postprocessing/GlitchPass.js +13 -1
  353. package/examples/jsm/postprocessing/HalftonePass.js +8 -0
  354. package/examples/jsm/postprocessing/OutlinePass.js +21 -1
  355. package/examples/jsm/postprocessing/Pass.js +2 -0
  356. package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
  357. package/examples/jsm/postprocessing/SAOPass.js +20 -0
  358. package/examples/jsm/postprocessing/SMAAPass.js +16 -0
  359. package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
  360. package/examples/jsm/postprocessing/SavePass.js +17 -1
  361. package/examples/jsm/postprocessing/ShaderPass.js +8 -0
  362. package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
  363. package/examples/jsm/postprocessing/TexturePass.js +8 -0
  364. package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
  365. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +56 -35
  366. package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
  367. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
  368. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +36 -7
  369. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
  370. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +41 -9
  371. package/examples/jsm/shaders/MMDToonShader.js +0 -2
  372. package/examples/jsm/shaders/VelocityShader.js +128 -0
  373. package/examples/jsm/utils/BufferGeometryUtils.js +174 -42
  374. package/examples/jsm/utils/SceneUtils.js +129 -4
  375. package/examples/jsm/webxr/OculusHandModel.js +3 -2
  376. package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
  377. package/package.json +13 -13
  378. package/src/Three.js +1 -0
  379. package/src/animation/PropertyBinding.js +7 -0
  380. package/src/audio/AudioContext.js +5 -5
  381. package/src/cameras/CubeCamera.js +14 -14
  382. package/src/constants.js +1 -1
  383. package/src/core/InstancedBufferGeometry.js +1 -7
  384. package/src/core/InterleavedBufferAttribute.js +4 -4
  385. package/src/extras/Earcut.js +67 -67
  386. package/src/geometries/PolyhedronGeometry.js +1 -1
  387. package/src/geometries/ShapeGeometry.js +1 -1
  388. package/src/helpers/ArrowHelper.js +9 -0
  389. package/src/helpers/Box3Helper.js +7 -0
  390. package/src/helpers/BoxHelper.js +7 -1
  391. package/src/helpers/DirectionalLightHelper.js +5 -1
  392. package/src/helpers/GridHelper.js +7 -0
  393. package/src/helpers/HemisphereLightHelper.js +4 -1
  394. package/src/helpers/PlaneHelper.js +9 -0
  395. package/src/helpers/PointLightHelper.js +2 -1
  396. package/src/helpers/PolarGridHelper.js +7 -0
  397. package/src/helpers/SkeletonHelper.js +7 -0
  398. package/src/helpers/SpotLightHelper.js +4 -2
  399. package/src/lights/LightShadow.js +1 -2
  400. package/src/lights/PointLight.js +2 -2
  401. package/src/lights/SpotLight.js +2 -2
  402. package/src/loaders/FileLoader.js +4 -1
  403. package/src/loaders/ObjectLoader.js +5 -1
  404. package/src/materials/Material.js +1 -1
  405. package/src/materials/MeshPhysicalMaterial.js +1 -1
  406. package/src/math/Color.js +5 -5
  407. package/src/math/Matrix3.js +53 -18
  408. package/src/math/Ray.js +2 -5
  409. package/src/math/Sphere.js +36 -21
  410. package/src/objects/InstancedMesh.js +7 -0
  411. package/src/objects/LOD.js +25 -6
  412. package/src/renderers/WebGL3DRenderTarget.js +1 -1
  413. package/src/renderers/WebGLArrayRenderTarget.js +1 -1
  414. package/src/renderers/WebGLCubeRenderTarget.js +1 -1
  415. package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
  416. package/src/renderers/WebGLRenderTarget.js +1 -1
  417. package/src/renderers/WebGLRenderer.js +36 -62
  418. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
  419. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
  420. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
  421. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
  422. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
  423. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
  424. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
  425. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
  426. package/src/renderers/shaders/ShaderChunk.js +3 -0
  427. package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
  428. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
  429. package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
  430. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
  431. package/src/renderers/shaders/ShaderLib.js +20 -6
  432. package/src/renderers/shaders/UniformsLib.js +1 -1
  433. package/src/renderers/shaders/UniformsUtils.js +15 -0
  434. package/src/renderers/webgl/WebGLAttributes.js +2 -0
  435. package/src/renderers/webgl/WebGLBackground.js +15 -7
  436. package/src/renderers/webgl/WebGLLights.js +0 -4
  437. package/src/renderers/webgl/WebGLMaterials.js +2 -1
  438. package/src/renderers/webgl/WebGLShadowMap.js +3 -1
  439. package/src/renderers/webgl/WebGLState.js +78 -41
  440. package/src/renderers/webgl/WebGLTextures.js +94 -39
  441. package/src/renderers/webgl/WebGLUniforms.js +152 -24
  442. package/src/renderers/webgl/WebGLUtils.js +1 -1
  443. package/src/renderers/webxr/WebXRController.js +46 -13
  444. package/src/renderers/webxr/WebXRManager.js +70 -2
  445. package/src/scenes/Scene.js +8 -0
  446. package/src/textures/CompressedArrayTexture.js +18 -0
  447. package/src/textures/Texture.js +2 -1
  448. package/examples/js/libs/lottie_canvas.js +0 -12751
  449. package/examples/js/shaders/PixelShader.js +0 -51
  450. package/examples/jsm/shaders/PixelShader.js +0 -44
@@ -0,0 +1,106 @@
1
+ import Node from '../core/Node.js';
2
+ import { uniform, div, vec2, invert } from '../shadernode/ShaderNodeBaseElements.js';
3
+ import { Vector2 } from 'three';
4
+ import { NodeUpdateType } from '../core/constants.js';
5
+
6
+ let resolution;
7
+
8
+ class ViewportNode extends Node {
9
+
10
+ static COORDINATE = 'coordinate';
11
+ static RESOLUTION = 'resolution';
12
+ static TOP_LEFT = 'topLeft';
13
+ static BOTTOM_LEFT = 'bottomLeft';
14
+ static TOP_RIGHT = 'topRight';
15
+ static BOTTOM_RIGHT = 'bottomRight';
16
+
17
+ constructor( scope ) {
18
+
19
+ super();
20
+
21
+ this.scope = scope;
22
+
23
+ this.isViewportNode = true;
24
+
25
+ }
26
+
27
+ getNodeType() {
28
+
29
+ return this.scope === ViewportNode.COORDINATE ? 'vec4' : 'vec2';
30
+
31
+ }
32
+
33
+ getUpdateType() {
34
+
35
+ let updateType = NodeUpdateType.NONE;
36
+
37
+ if ( this.scope === ViewportNode.RESOLUTION ) {
38
+
39
+ updateType = NodeUpdateType.FRAME;
40
+
41
+ }
42
+
43
+ this.updateType = updateType;
44
+
45
+ return updateType;
46
+
47
+ }
48
+
49
+ update( { renderer } ) {
50
+
51
+ renderer.getSize( resolution );
52
+
53
+ }
54
+
55
+ construct( builder ) {
56
+
57
+ const scope = this.scope;
58
+
59
+ if ( scope === ViewportNode.COORDINATE ) return;
60
+
61
+ let output = null;
62
+
63
+ if ( scope === ViewportNode.RESOLUTION ) {
64
+
65
+ resolution ||= new Vector2();
66
+
67
+ output = uniform( resolution );
68
+
69
+ } else {
70
+
71
+ const coordinateNode = vec2( new ViewportNode( ViewportNode.COORDINATE ) );
72
+ const resolutionNode = new ViewportNode( ViewportNode.RESOLUTION );
73
+
74
+ output = div( coordinateNode, resolutionNode );
75
+
76
+ let outX = output.x;
77
+ let outY = output.y;
78
+
79
+ if ( /top/i.test( scope ) && builder.isFlipY() ) outY = invert( outY );
80
+ else if ( /bottom/i.test( scope ) && builder.isFlipY() === false ) outY = invert( outY );
81
+
82
+ if ( /right/i.test( scope ) ) outX = invert( outX );
83
+
84
+ output = vec2( outX, outY );
85
+
86
+ }
87
+
88
+ return output;
89
+
90
+ }
91
+
92
+ generate( builder ) {
93
+
94
+ if ( this.scope === ViewportNode.COORDINATE ) {
95
+
96
+ return builder.getFragCoord();
97
+
98
+ }
99
+
100
+ return super.generate( builder );
101
+
102
+ }
103
+
104
+ }
105
+
106
+ export default ViewportNode;
@@ -2,7 +2,7 @@ import F_Schlick from './F_Schlick.js';
2
2
  import V_GGX_SmithCorrelated from './V_GGX_SmithCorrelated.js';
3
3
  import D_GGX from './D_GGX.js';
4
4
  import {
5
- ShaderNode, dotNV, add, mul, saturate, dot, pow2, normalize,
5
+ ShaderNode, dotNV, add, mul, clamp, dot, pow2, normalize,
6
6
  transformedNormalView, positionViewDirection
7
7
  } from '../../shadernode/ShaderNodeBaseElements.js';
8
8
 
@@ -15,10 +15,10 @@ const BRDF_GGX = new ShaderNode( ( inputs ) => {
15
15
 
16
16
  const halfDir = normalize( add( lightDirection, positionViewDirection ) );
17
17
 
18
- const dotNL = saturate( dot( transformedNormalView, lightDirection ) );
19
- //const dotNV = saturate( dot( transformedNormalView, positionViewDirection ) );
20
- const dotNH = saturate( dot( transformedNormalView, halfDir ) );
21
- const dotVH = saturate( dot( positionViewDirection, halfDir ) );
18
+ const dotNL = clamp( dot( transformedNormalView, lightDirection ) );
19
+ //const dotNV = clamp( dot( transformedNormalView, positionViewDirection ) );
20
+ const dotNH = clamp( dot( transformedNormalView, halfDir ) );
21
+ const dotVH = clamp( dot( positionViewDirection, halfDir ) );
22
22
 
23
23
  const F = F_Schlick.call( { f0, f90, dotVH } );
24
24
 
@@ -3,7 +3,7 @@ import BRDF_GGX from './BSDF/BRDF_GGX.js';
3
3
  import DFGApprox from './BSDF/DFGApprox.js';
4
4
  import {
5
5
  ShaderNode,
6
- vec3, mul, saturate, add, sub, dot, div, transformedNormalView,
6
+ vec3, mul, clamp, add, sub, dot, div, transformedNormalView,
7
7
  pow, exp2, dotNV,
8
8
  diffuseColor, specularColor, roughness, temp
9
9
  } from '../shadernode/ShaderNodeElements.js';
@@ -61,7 +61,7 @@ const RE_Direct_Physical = new ShaderNode( ( inputs ) => {
61
61
 
62
62
  const { lightDirection, lightColor, reflectedLight } = inputs;
63
63
 
64
- const dotNL = saturate( dot( transformedNormalView, lightDirection ) );
64
+ const dotNL = clamp( dot( transformedNormalView, lightDirection ) );
65
65
  const irradiance = mul( dotNL, lightColor );
66
66
 
67
67
  reflectedLight.directDiffuse.add( mul( irradiance, BRDF_Lambert.call( { diffuseColor: diffuseColor.rgb } ) ) );
@@ -75,7 +75,7 @@ const RE_AmbientOcclusion_Physical = new ShaderNode( ( { ambientOcclusion, refle
75
75
  const aoNV = add( dotNV, ambientOcclusion );
76
76
  const aoExp = exp2( sub( mul( - 16.0, roughness ), 1.0 ) );
77
77
 
78
- const aoNode = saturate( add( sub( pow( aoNV, aoExp ), 1.0 ), ambientOcclusion ) );
78
+ const aoNode = clamp( add( sub( pow( aoNV, aoExp ), 1.0 ), ambientOcclusion ) );
79
79
 
80
80
  reflectedLight.indirectDiffuse.mul( ambientOcclusion );
81
81
 
@@ -1,5 +1,5 @@
1
1
  import {
2
- ShaderNode, div, max, sub, mul, saturate, pow, pow2, pow4, cond, greaterThan
2
+ ShaderNode, div, max, sub, mul, clamp, pow, pow2, pow4, cond, greaterThan
3
3
  } from '../../shadernode/ShaderNodeBaseElements.js';
4
4
 
5
5
  const getDistanceAttenuation = new ShaderNode( ( inputs ) => {
@@ -13,7 +13,7 @@ const getDistanceAttenuation = new ShaderNode( ( inputs ) => {
13
13
 
14
14
  return cond(
15
15
  greaterThan( cutoffDistance, 0 ),
16
- mul( distanceFalloff, pow2( saturate( sub( 1.0, pow4( div( lightDistance, cutoffDistance ) ) ) ) ) ),
16
+ mul( distanceFalloff, pow2( clamp( sub( 1.0, pow4( div( lightDistance, cutoffDistance ) ) ) ) ) ),
17
17
  distanceFalloff
18
18
  );
19
19
 
@@ -15,7 +15,7 @@ class ComputeNode extends Node {
15
15
  this.workgroupSize = workgroupSize;
16
16
  this.dispatchCount = 0;
17
17
 
18
- this.updateType = NodeUpdateType.Object;
18
+ this.updateType = NodeUpdateType.OBJECT;
19
19
 
20
20
  this.updateDispatchCount();
21
21
 
@@ -10,7 +10,7 @@ class AnalyticLightNode extends LightingNode {
10
10
 
11
11
  super();
12
12
 
13
- this.updateType = NodeUpdateType.Object;
13
+ this.updateType = NodeUpdateType.OBJECT;
14
14
 
15
15
  this.light = light;
16
16
 
@@ -4,6 +4,7 @@ import {
4
4
  LineBasicNodeMaterial,
5
5
  MeshBasicNodeMaterial,
6
6
  MeshStandardNodeMaterial,
7
+ MeshPhysicalNodeMaterial,
7
8
  PointsNodeMaterial,
8
9
  SpriteNodeMaterial
9
10
  } from '../materials/Materials.js';
@@ -17,8 +18,9 @@ MaterialLoader.createMaterialFromType = function ( type ) {
17
18
  LineBasicNodeMaterial,
18
19
  MeshBasicNodeMaterial,
19
20
  MeshStandardNodeMaterial,
21
+ MeshPhysicalNodeMaterial,
20
22
  PointsNodeMaterial,
21
- SpriteNodeMaterial,
23
+ SpriteNodeMaterial
22
24
  };
23
25
 
24
26
  if ( materialLib[ type ] !== undefined ) {
@@ -32,19 +32,21 @@ NodeMaterial.fromMaterial = function ( material ) {
32
32
 
33
33
  if ( materialLib[ type ] === undefined ) {
34
34
 
35
- return material; // is already a node material or cannot be converted
35
+ if ( material.isNodeMaterial !== true ) {
36
36
 
37
- }
37
+ throw new Error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
38
38
 
39
- const nodeMaterial = new materialLib[ type ]( material );
39
+ }
40
40
 
41
- for ( const key in material ) {
41
+ return material; // is already a node material
42
42
 
43
- if ( nodeMaterial[ key ] === undefined ) {
43
+ }
44
44
 
45
- nodeMaterial[ key ] = material[ key ]; // currently this is needed only for material.alphaTest
45
+ const nodeMaterial = new materialLib[ type ]();
46
46
 
47
- }
47
+ for ( const key in material ) {
48
+
49
+ nodeMaterial[ key ] = material[ key ];
48
50
 
49
51
  }
50
52
 
@@ -3,7 +3,7 @@ import { getNodesKeys, getCacheKey } from '../core/NodeUtils.js';
3
3
  import ExpressionNode from '../core/ExpressionNode.js';
4
4
  import {
5
5
  float, vec3, vec4,
6
- assign, label, mul, bypass,
6
+ assign, label, mul, bypass, attribute,
7
7
  positionLocal, skinning, instance, modelViewProjection, lightingContext, colorSpace,
8
8
  materialAlphaTest, materialColor, materialOpacity
9
9
  } from '../shadernode/ShaderNodeElements.js';
@@ -80,6 +80,14 @@ class NodeMaterial extends ShaderMaterial {
80
80
  let colorNode = vec4( this.colorNode || materialColor );
81
81
  let opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
82
82
 
83
+ // VERTEX COLORS
84
+
85
+ if ( this.vertexColors === true && builder.geometry.hasAttribute( 'color' ) ) {
86
+
87
+ colorNode = vec4( mul( colorNode.xyz, attribute( 'color' ) ), colorNode.a );
88
+
89
+ }
90
+
83
91
  // COLOR
84
92
 
85
93
  colorNode = builder.addFlow( 'fragment', label( colorNode, 'Color' ) );
@@ -196,4 +196,4 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
196
196
  of your accepting any such warranty or additional liability.
197
197
 
198
198
  END OF TERMS AND CONDITIONS
199
- ```
199
+ ```
@@ -0,0 +1,59 @@
1
+ import {
2
+ mx_perlin_noise_float, mx_perlin_noise_vec2, mx_perlin_noise_vec3,
3
+ mx_worley_noise_float as worley_noise_float, mx_worley_noise_vec2 as worley_noise_vec2, mx_worley_noise_vec3 as worley_noise_vec3,
4
+ mx_cell_noise_float as cell_noise_float,
5
+ mx_fractal_noise_float as fractal_noise_float, mx_fractal_noise_vec2 as fractal_noise_vec2, mx_fractal_noise_vec3 as fractal_noise_vec3, mx_fractal_noise_vec4 as fractal_noise_vec4
6
+ } from './lib/mx_noise.js';
7
+ import { mx_hsvtorgb, mx_rgbtohsv } from './lib/mx_hsv.js';
8
+ import { mx_srgb_texture_to_lin_rec709 } from './lib/mx_transform_color.js';
9
+ import { nodeObject, float, vec2, vec4, add, sub, mul, mix, clamp, uv, length, smoothstep, dFdx, dFdy, sign, pow, abs, convert } from '../shadernode/ShaderNodeElements.js';
10
+
11
+ export const mx_aastep = ( threshold, value ) => {
12
+
13
+ threshold = float( threshold );
14
+ value = float( value );
15
+
16
+ const afwidth = mul( length( vec2( dFdx( value ), dFdy( value ) ) ), 0.70710678118654757 );
17
+
18
+ return smoothstep( sub( threshold, afwidth ), add( threshold, afwidth ), value );
19
+
20
+ };
21
+
22
+ const _ramp = ( a, b, uv, p ) => mix( a, b, clamp( nodeObject( uv )[ p ] ) );
23
+ export const mx_ramplr = ( valuel, valuer, texcoord = uv() ) => _ramp( valuel, valuer, texcoord, 'x' );
24
+ export const mx_ramptb = ( valuet, valueb, texcoord = uv() ) => _ramp( valuet, valueb, texcoord, 'y' );
25
+
26
+ const _split = ( a, b, center, uv, p ) => mix( a, b, mx_aastep( center, nodeObject( uv )[ p ] ) );
27
+ export const mx_splitlr = ( valuel, valuer, center, texcoord = uv() ) => _split( valuel, valuer, center, texcoord, 'x' );
28
+ export const mx_splittb = ( valuet, valueb, center, texcoord = uv() ) => _split( valuet, valueb, center, texcoord, 'y' );
29
+
30
+ export const mx_transform_uv = ( uv_scale = 1, uv_offset = 0, uv_geo = uv() ) => add( mul( uv_geo, uv_scale ), uv_offset );
31
+
32
+ export const mx_safepower = ( in1, in2 = 1 ) => mul( sign( in1 ), pow( abs( in1 ), in2 ) );
33
+ export const mx_contrast = ( input, amount = 1, pivot = .5 ) => add( mul( sub( input, pivot ), amount ), pivot );
34
+
35
+ export const mx_noise_float = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_float( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
36
+ export const mx_noise_vec2 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_vec2( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
37
+ export const mx_noise_vec3 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => add( mul( amplitude, mx_perlin_noise_vec3( convert( texcoord, 'vec2|vec3' ) ) ), pivot );
38
+ export const mx_noise_vec4 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => {
39
+
40
+ texcoord = convert( texcoord, 'vec2|vec3' ); // overloading type
41
+
42
+ const noise_vec4 = vec4( mx_perlin_noise_vec3( texcoord ), mx_perlin_noise_float( add( texcoord, vec2( 19, 73 ) ) ) );
43
+
44
+ return add( mul( amplitude, noise_vec4 ), pivot );
45
+
46
+ };
47
+
48
+ export const mx_worley_noise_float = ( texcoord = uv(), jitter = 1 ) => worley_noise_float( convert( texcoord, 'vec2|vec3' ), jitter, 1 );
49
+ export const mx_worley_noise_vec2 = ( texcoord = uv(), jitter = 1 ) => worley_noise_vec2( convert( texcoord, 'vec2|vec3' ), jitter, 1 );
50
+ export const mx_worley_noise_vec3 = ( texcoord = uv(), jitter = 1 ) => worley_noise_vec3( convert( texcoord, 'vec2|vec3' ), jitter, 1 );
51
+
52
+ export const mx_cell_noise_float = ( texcoord = uv() ) => cell_noise_float( convert( texcoord, 'vec2|vec3' ) );
53
+
54
+ export const mx_fractal_noise_float = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_float( position, octaves, lacunarity, diminish ), amplitude );
55
+ export const mx_fractal_noise_vec2 = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_vec2( position, octaves, lacunarity, diminish ), amplitude );
56
+ export const mx_fractal_noise_vec3 = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_vec3( position, octaves, lacunarity, diminish ), amplitude );
57
+ export const mx_fractal_noise_vec4 = ( position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1 ) => mul( fractal_noise_vec4( position, octaves, lacunarity, diminish ), amplitude );
58
+
59
+ export { mx_hsvtorgb, mx_rgbtohsv, mx_srgb_texture_to_lin_rec709 };
@@ -1,4 +1,4 @@
1
- import { fn } from '../../../Nodes.js';
1
+ import { fn } from '../../Nodes.js';
2
2
 
3
3
  // Original shader code from:
4
4
  // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_hsv.glsl
@@ -1,4 +1,4 @@
1
- import { code, fn } from '../../../Nodes.js';
1
+ import { code, fn } from '../../Nodes.js';
2
2
 
3
3
  // Original shader code from:
4
4
  // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_noise.glsl
@@ -601,7 +601,17 @@ vec3 mx_worley_noise_vec3(vec3 p, float jitter, int metric)
601
601
 
602
602
  const includes = [ mx_noise ];
603
603
 
604
- export const mx_perlin_noise_float = fn( 'float mx_perlin_noise_float( vec3 p )', includes );
604
+ export const mx_perlin_noise_float = fn( 'float mx_perlin_noise_float( any p )', includes );
605
+ export const mx_perlin_noise_vec2 = fn( 'vec2 mx_perlin_noise_vec2( any p )', includes );
606
+ export const mx_perlin_noise_vec3 = fn( 'vec3 mx_perlin_noise_vec3( any p )', includes );
607
+
605
608
  export const mx_cell_noise_float = fn( 'float mx_cell_noise_float( vec3 p )', includes );
606
- export const mx_worley_noise_float = fn( 'float mx_worley_noise_float( vec3 p, float jitter, int metric )', includes );
609
+
610
+ export const mx_worley_noise_float = fn( 'float mx_worley_noise_float( any p, float jitter, int metric )', includes );
611
+ export const mx_worley_noise_vec2 = fn( 'float mx_worley_noise_vec2( any p, float jitter, int metric )', includes );
612
+ export const mx_worley_noise_vec3 = fn( 'float mx_worley_noise_vec3( any p, float jitter, int metric )', includes );
613
+
607
614
  export const mx_fractal_noise_float = fn( 'float mx_fractal_noise_float( vec3 p, int octaves, float lacunarity, float diminish )', includes );
615
+ export const mx_fractal_noise_vec2 = fn( 'float mx_fractal_noise_vec2( vec3 p, int octaves, float lacunarity, float diminish )', includes );
616
+ export const mx_fractal_noise_vec3 = fn( 'float mx_fractal_noise_vec3( vec3 p, int octaves, float lacunarity, float diminish )', includes );
617
+ export const mx_fractal_noise_vec4 = fn( 'float mx_fractal_noise_vec4( vec3 p, int octaves, float lacunarity, float diminish )', includes );
@@ -0,0 +1,18 @@
1
+ import { code, fn } from '../../Nodes.js';
2
+
3
+ // Original shader code from:
4
+ // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl
5
+
6
+ export const mx_transform_color = code( `#define M_AP1_TO_REC709 mat3(1.705079555511475, -0.1297005265951157, -0.02416634373366833, -0.6242334842681885, 1.138468623161316, -0.1246141716837883, -0.0808461606502533, -0.008768022060394287, 1.148780584335327)
7
+
8
+ vec3 mx_srgb_texture_to_lin_rec709(vec3 color)
9
+ {
10
+ bvec3 isAbove = greaterThan(color, vec3(0.04045));
11
+ vec3 linSeg = color / 12.92;
12
+ vec3 powSeg = pow(max(color + vec3(0.055), vec3(0.0)) / 1.055, vec3(2.4));
13
+ return mix(linSeg, powSeg, isAbove);
14
+ }` );
15
+
16
+ const includes = [ mx_transform_color ];
17
+
18
+ export const mx_srgb_texture_to_lin_rec709 = fn( 'vec3 mx_srgb_texture_to_lin_rec709( vec3 color )', includes );
@@ -32,8 +32,8 @@ class MathNode extends TempNode {
32
32
  static INVERT = 'invert';
33
33
  static DFDX = 'dFdx';
34
34
  static DFDY = 'dFdy';
35
- static SATURATE = 'saturate';
36
35
  static ROUND = 'round';
36
+ static RECIPROCAL = 'reciprocal';
37
37
 
38
38
  // 2 inputs
39
39
 
@@ -152,10 +152,6 @@ class MathNode extends TempNode {
152
152
 
153
153
  return new MathNode( MathNode.NORMALIZE, mulNode ).build( builder );
154
154
 
155
- } else if ( method === MathNode.SATURATE ) {
156
-
157
- return builder.format( `clamp( ${ a.build( builder, inputType ) }, 0.0, 1.0 )`, type, output );
158
-
159
155
  } else if ( method === MathNode.NEGATE ) {
160
156
 
161
157
  return builder.format( '( -' + a.build( builder, inputType ) + ' )', type, output );
@@ -164,6 +160,10 @@ class MathNode extends TempNode {
164
160
 
165
161
  return builder.format( '( 1.0 - ' + a.build( builder, inputType ) + ' )', type, output );
166
162
 
163
+ } else if ( method === MathNode.RECIPROCAL ) {
164
+
165
+ return builder.format( '( 1.0 / ' + a.build( builder, inputType ) + ' )', type, output );
166
+
167
167
  } else {
168
168
 
169
169
  const params = [];
@@ -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 );
@@ -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
 
@@ -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