@unikia/upe-renderer 0.186.110 → 0.187.11

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 (506) hide show
  1. package/README.md +5 -7
  2. package/UPSTREAM.md +4 -4
  3. package/build/three.core.js +853 -277
  4. package/build/three.module.js +1098 -1280
  5. package/build/three.tsl.js +41938 -686
  6. package/build/three.webgpu.js +10604 -49055
  7. package/build/three.webgpu.nodes.js +9249 -5788
  8. package/examples/jsm/Addons.js +2 -0
  9. package/examples/jsm/animation/CCDIKSolver.js +17 -5
  10. package/examples/jsm/controls/FirstPersonControls.js +1 -1
  11. package/examples/jsm/controls/OrbitControls.js +27 -14
  12. package/examples/jsm/csm/CSMShader.js +74 -3
  13. package/examples/jsm/curves/CurveExtras.js +4 -4
  14. package/examples/jsm/curves/NURBSCurve.js +14 -0
  15. package/examples/jsm/exporters/EXRExporter.js +673 -16
  16. package/examples/jsm/exporters/GLTFExporter.js +4 -4
  17. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  18. package/examples/jsm/exporters/OBJExporter.js +48 -5
  19. package/examples/jsm/exporters/PLYExporter.js +22 -11
  20. package/examples/jsm/generators/CityGenerator.js +3 -2
  21. package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
  22. package/examples/jsm/gpgpu/BitonicSort.js +30 -23
  23. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
  24. package/examples/jsm/inspector/Extension.js +1 -1
  25. package/examples/jsm/inspector/Inspector.js +6 -46
  26. package/examples/jsm/inspector/RendererInspector.js +43 -8
  27. package/examples/jsm/inspector/Storage.js +49 -0
  28. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
  29. package/examples/jsm/inspector/tabs/Parameters.js +5 -1
  30. package/examples/jsm/inspector/tabs/Performance.js +22 -7
  31. package/examples/jsm/inspector/tabs/Settings.js +1 -1
  32. package/examples/jsm/inspector/tabs/Timeline.js +83 -7
  33. package/examples/jsm/inspector/tabs/Viewer.js +25 -10
  34. package/examples/jsm/inspector/ui/Profiler.js +1 -1
  35. package/examples/jsm/inspector/ui/Style.js +21 -53
  36. package/examples/jsm/inspector/ui/Values.js +28 -3
  37. package/examples/jsm/libs/fflate.module.js +83 -56
  38. package/examples/jsm/libs/mikktspace.README.md +27 -0
  39. package/examples/jsm/libs/mikktspace.module.js +721 -109
  40. package/examples/jsm/lighting/ClusteredLighting.js +100 -2
  41. package/examples/jsm/lighting/LightMapper.js +295 -0
  42. package/examples/jsm/lighting/LightProbeGrid.js +242 -139
  43. package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
  44. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
  45. package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
  46. package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
  47. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
  48. package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
  49. package/examples/jsm/lights/SunLight.js +9 -4
  50. package/examples/jsm/lights/SunLightNode.js +3 -3
  51. package/examples/jsm/lines/LineMaterial.js +26 -10
  52. package/examples/jsm/loaders/3DMLoader.js +10 -1
  53. package/examples/jsm/loaders/3MFLoader.js +5 -1
  54. package/examples/jsm/loaders/AMFLoader.js +2 -0
  55. package/examples/jsm/loaders/BVHLoader.js +2 -0
  56. package/examples/jsm/loaders/ColladaLoader.js +8 -0
  57. package/examples/jsm/loaders/DDSLoader.js +1 -1
  58. package/examples/jsm/loaders/DRACOLoader.js +5 -1
  59. package/examples/jsm/loaders/EXRLoader.js +120 -104
  60. package/examples/jsm/loaders/FBXLoader.js +4 -0
  61. package/examples/jsm/loaders/FontLoader.js +2 -0
  62. package/examples/jsm/loaders/GCodeLoader.js +5 -9
  63. package/examples/jsm/loaders/GLTFLoader.js +112 -31
  64. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
  65. package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
  66. package/examples/jsm/loaders/IESLoader.js +46 -12
  67. package/examples/jsm/loaders/JXLLoader.js +159 -0
  68. package/examples/jsm/loaders/KMZLoader.js +6 -0
  69. package/examples/jsm/loaders/KSPLATLoader.js +2 -0
  70. package/examples/jsm/loaders/KTX2Loader.js +49 -4
  71. package/examples/jsm/loaders/KTXLoader.js +5 -3
  72. package/examples/jsm/loaders/LDrawLoader.js +15 -22
  73. package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
  74. package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
  75. package/examples/jsm/loaders/LUTImageLoader.js +2 -0
  76. package/examples/jsm/loaders/LWOLoader.js +6 -0
  77. package/examples/jsm/loaders/MD2Loader.js +2 -0
  78. package/examples/jsm/loaders/MDDLoader.js +4 -0
  79. package/examples/jsm/loaders/MTLLoader.js +8 -0
  80. package/examples/jsm/loaders/MaterialXLoader.js +57 -5
  81. package/examples/jsm/loaders/NRRDLoader.js +4 -2
  82. package/examples/jsm/loaders/OBJLoader.js +10 -4
  83. package/examples/jsm/loaders/PCDLoader.js +6 -2
  84. package/examples/jsm/loaders/PDBLoader.js +5 -3
  85. package/examples/jsm/loaders/PLYLoader.js +39 -15
  86. package/examples/jsm/loaders/PVRLoader.js +2 -2
  87. package/examples/jsm/loaders/SPLATLoader.js +2 -0
  88. package/examples/jsm/loaders/SPZLoader.js +2 -0
  89. package/examples/jsm/loaders/STLLoader.js +3 -1
  90. package/examples/jsm/loaders/SVGLoader.js +27 -49
  91. package/examples/jsm/loaders/TDSLoader.js +4 -0
  92. package/examples/jsm/loaders/TGALoader.js +6 -5
  93. package/examples/jsm/loaders/TTFLoader.js +2 -0
  94. package/examples/jsm/loaders/USDLoader.js +14 -0
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
  96. package/examples/jsm/loaders/VOXLoader.js +3 -0
  97. package/examples/jsm/loaders/VRMLLoader.js +4 -0
  98. package/examples/jsm/loaders/VTKLoader.js +2 -0
  99. package/examples/jsm/loaders/XYZLoader.js +2 -0
  100. package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
  101. package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
  102. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
  103. package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
  104. package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
  105. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
  106. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
  107. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
  108. package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
  109. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
  110. package/examples/jsm/loaders/usd/USDAParser.js +56 -47
  111. package/examples/jsm/loaders/usd/USDComposer.js +25 -30
  112. package/examples/jsm/math/ColorConverter.js +7 -3
  113. package/examples/jsm/math/Lut.js +2 -2
  114. package/examples/jsm/math/OBB.js +3 -3
  115. package/examples/jsm/math/Octree.js +20 -17
  116. package/examples/jsm/objects/GaussianSplat.js +5 -4
  117. package/examples/jsm/objects/Reflector.js +5 -0
  118. package/examples/jsm/objects/SkyMesh.js +14 -7
  119. package/examples/jsm/objects/Water2Mesh.js +2 -2
  120. package/examples/jsm/physics/RapierPhysics.js +2 -2
  121. package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
  122. package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
  123. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  124. package/examples/jsm/postprocessing/GTAOPass.js +26 -18
  125. package/examples/jsm/renderers/SVGRenderer.js +3 -2
  126. package/examples/jsm/shaders/GTAOShader.js +7 -4
  127. package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
  128. package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
  129. package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
  130. package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
  131. package/examples/jsm/tsl/display/BloomNode.js +3 -3
  132. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
  133. package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
  134. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  135. package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
  136. package/examples/jsm/tsl/display/FSR1Node.js +3 -3
  137. package/examples/jsm/tsl/display/FXAANode.js +3 -10
  138. package/examples/jsm/tsl/display/FilmNode.js +3 -3
  139. package/examples/jsm/tsl/display/GTAONode.js +33 -25
  140. package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
  141. package/examples/jsm/tsl/display/GodraysNode.js +5 -19
  142. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
  143. package/examples/jsm/tsl/display/LensflareNode.js +3 -3
  144. package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
  145. package/examples/jsm/tsl/display/OITPassNode.js +0 -11
  146. package/examples/jsm/tsl/display/OutlineNode.js +107 -5
  147. package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
  148. package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
  149. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
  150. package/examples/jsm/tsl/display/SMAANode.js +3 -3
  151. package/examples/jsm/tsl/display/SSAONode.js +6 -20
  152. package/examples/jsm/tsl/display/SSGINode.js +36 -29
  153. package/examples/jsm/tsl/display/SSRNode.js +135 -63
  154. package/examples/jsm/tsl/display/SSSNode.js +6 -20
  155. package/examples/jsm/tsl/display/SharpenNode.js +3 -3
  156. package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
  157. package/examples/jsm/tsl/display/TAAUNode.js +10 -42
  158. package/examples/jsm/tsl/display/TRAANode.js +11 -43
  159. package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
  160. package/examples/jsm/tsl/display/TransitionNode.js +3 -3
  161. package/examples/jsm/tsl/display/lensDirt.js +30 -0
  162. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
  163. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
  164. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
  165. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
  166. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
  167. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
  168. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
  169. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
  170. package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
  171. package/examples/jsm/tsl/utils/Raymarching.js +1 -1
  172. package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
  173. package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
  174. package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
  175. package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
  176. package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
  177. package/examples/jsm/utils/SceneOptimizer.js +2 -1
  178. package/examples/jsm/utils/SceneUtils.js +1 -1
  179. package/examples/jsm/utils/unwrapUVs.js +865 -0
  180. package/examples/jsm/webxr/XREstimatedLight.js +11 -4
  181. package/package.json +3 -3
  182. package/src/Three.TSL.js +2 -683
  183. package/src/Three.WebGPU.Nodes.js +2 -1
  184. package/src/Three.WebGPU.js +2 -1
  185. package/src/animation/AnimationAction.js +1 -1
  186. package/src/animation/AnimationUtils.js +1 -3
  187. package/src/animation/KeyframeTrack.js +19 -0
  188. package/src/cameras/ArrayCamera.js +12 -0
  189. package/src/cameras/CubeCamera.js +3 -3
  190. package/src/constants.js +1 -9
  191. package/src/core/BufferAttribute.js +57 -21
  192. package/src/core/BufferGeometry.js +5 -13
  193. package/src/core/Clock.js +1 -1
  194. package/src/core/InterleavedBuffer.js +28 -18
  195. package/src/core/InterleavedBufferAttribute.js +54 -20
  196. package/src/core/Object3D.js +19 -9
  197. package/src/core/Raycaster.js +2 -0
  198. package/src/core/RenderTarget.js +11 -5
  199. package/src/core/UniformsGroup.js +7 -3
  200. package/src/extras/PMREMGenerator.js +392 -685
  201. package/src/extras/core/Curve.js +4 -0
  202. package/src/extras/core/CurvePath.js +13 -0
  203. package/src/extras/core/ShapePath.js +1 -1
  204. package/src/geometries/EdgesGeometry.js +12 -10
  205. package/src/geometries/LatheGeometry.js +2 -0
  206. package/src/helpers/PolarGridHelper.js +1 -1
  207. package/src/lights/Light.js +11 -0
  208. package/src/lights/LightProbe.js +2 -0
  209. package/src/lights/LightShadow.js +2 -0
  210. package/src/loaders/AnimationLoader.js +2 -0
  211. package/src/loaders/AudioLoader.js +2 -0
  212. package/src/loaders/BufferGeometryLoader.js +2 -0
  213. package/src/loaders/CompressedTextureLoader.js +2 -0
  214. package/src/loaders/CubeTextureLoader.js +2 -0
  215. package/src/loaders/DataTextureLoader.js +2 -0
  216. package/src/loaders/FileLoader.js +2 -0
  217. package/src/loaders/ImageBitmapLoader.js +3 -1
  218. package/src/loaders/ImageLoader.js +1 -0
  219. package/src/loaders/Loader.js +47 -0
  220. package/src/loaders/MaterialLoader.js +2 -0
  221. package/src/loaders/ObjectLoader.js +27 -8
  222. package/src/loaders/TextureLoader.js +5 -3
  223. package/src/loaders/nodes/NodeLoader.js +2 -0
  224. package/src/materials/Material.js +21 -2
  225. package/src/materials/MeshDepthMaterial.js +1 -1
  226. package/src/materials/MeshDistanceMaterial.js +1 -1
  227. package/src/materials/MeshLambertMaterial.js +1 -1
  228. package/src/materials/MeshMatcapMaterial.js +1 -1
  229. package/src/materials/MeshNormalMaterial.js +1 -1
  230. package/src/materials/MeshPhongMaterial.js +1 -1
  231. package/src/materials/MeshPhysicalMaterial.js +90 -11
  232. package/src/materials/MeshStandardMaterial.js +1 -1
  233. package/src/materials/MeshToonMaterial.js +1 -1
  234. package/src/materials/nodes/Line2NodeMaterial.js +32 -10
  235. package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
  236. package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
  237. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
  238. package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
  239. package/src/materials/nodes/NodeMaterial.js +36 -16
  240. package/src/materials/nodes/NodeMaterialInstance.js +193 -0
  241. package/src/materials/nodes/NodeMaterials.js +1 -0
  242. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  243. package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
  244. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
  245. package/src/math/Box3.js +2 -2
  246. package/src/math/Color.js +8 -8
  247. package/src/math/ColorManagement.js +2 -21
  248. package/src/math/FrustumArray.js +12 -0
  249. package/src/math/Interpolant.js +1 -1
  250. package/src/math/Line3.js +2 -4
  251. package/src/math/MathUtils.js +33 -46
  252. package/src/math/Matrix2.js +1 -1
  253. package/src/math/Matrix3.js +1 -1
  254. package/src/math/Matrix4.js +1 -1
  255. package/src/math/Triangle.js +2 -1
  256. package/src/math/Vector2.js +1 -1
  257. package/src/math/Vector3.js +1 -1
  258. package/src/math/Vector4.js +1 -1
  259. package/src/nodes/Nodes.js +1 -0
  260. package/src/nodes/TSL.js +2 -0
  261. package/src/nodes/accessors/Arrays.js +1 -1
  262. package/src/nodes/accessors/Batch.js +29 -23
  263. package/src/nodes/accessors/BufferAttributeNode.js +21 -1
  264. package/src/nodes/accessors/BuiltinNode.js +6 -0
  265. package/src/nodes/accessors/Camera.js +100 -93
  266. package/src/nodes/accessors/ClippingNode.js +17 -6
  267. package/src/nodes/accessors/CubeTextureNode.js +12 -24
  268. package/src/nodes/accessors/Instance.js +198 -160
  269. package/src/nodes/accessors/Lights.js +19 -6
  270. package/src/nodes/accessors/MaterialNode.js +33 -4
  271. package/src/nodes/accessors/Morph.js +81 -22
  272. package/src/nodes/accessors/Normal.js +0 -42
  273. package/src/nodes/accessors/Object3DNode.js +6 -0
  274. package/src/nodes/accessors/PointUVNode.js +6 -0
  275. package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
  276. package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
  277. package/src/nodes/accessors/ReferenceNode.js +6 -0
  278. package/src/nodes/accessors/Skinning.js +57 -52
  279. package/src/nodes/accessors/StorageBufferNode.js +3 -12
  280. package/src/nodes/accessors/TextureBicubic.js +30 -27
  281. package/src/nodes/accessors/TextureNode.js +164 -78
  282. package/src/nodes/accessors/TextureSizeNode.js +6 -0
  283. package/src/nodes/accessors/UniformArrayNode.js +8 -15
  284. package/src/nodes/accessors/VelocityNode.js +13 -8
  285. package/src/nodes/code/CodeNode.js +6 -0
  286. package/src/nodes/code/ExpressionNode.js +6 -0
  287. package/src/nodes/code/FunctionCallNode.js +3 -3
  288. package/src/nodes/code/FunctionNode.js +15 -13
  289. package/src/nodes/core/ArrayNode.js +3 -3
  290. package/src/nodes/core/AssignNode.js +10 -9
  291. package/src/nodes/core/AttributeNode.js +39 -0
  292. package/src/nodes/core/BypassNode.js +6 -0
  293. package/src/nodes/core/ConstNode.js +31 -1
  294. package/src/nodes/core/ContextNode.js +11 -6
  295. package/src/nodes/core/IndexNode.js +6 -0
  296. package/src/nodes/core/InputNode.js +6 -0
  297. package/src/nodes/core/InspectorNode.js +17 -31
  298. package/src/nodes/core/IsolateNode.js +8 -0
  299. package/src/nodes/core/Node.js +367 -67
  300. package/src/nodes/core/NodeBuilder.js +664 -222
  301. package/src/nodes/core/NodeUtils.js +25 -0
  302. package/src/nodes/core/NodeVar.js +10 -1
  303. package/src/nodes/core/OutputStructNode.js +6 -0
  304. package/src/nodes/core/OverrideContextNode.js +38 -37
  305. package/src/nodes/core/PropertyNode.js +14 -0
  306. package/src/nodes/core/StackNode.js +33 -21
  307. package/src/nodes/core/StructNode.js +6 -0
  308. package/src/nodes/core/StructTypeNode.js +6 -0
  309. package/src/nodes/core/SubBuildNode.js +8 -0
  310. package/src/nodes/core/TempNode.js +10 -35
  311. package/src/nodes/core/UniformGroupNode.js +6 -0
  312. package/src/nodes/core/VarNode.js +43 -135
  313. package/src/nodes/core/VaryingNode.js +33 -2
  314. package/src/nodes/display/BlendModes.js +5 -40
  315. package/src/nodes/display/BumpMapNode.js +17 -7
  316. package/src/nodes/display/ColorAdjustment.js +22 -10
  317. package/src/nodes/display/ColorSpaceFunctions.js +2 -14
  318. package/src/nodes/display/ColorSpaceNode.js +3 -3
  319. package/src/nodes/display/FrontFacingNode.js +6 -0
  320. package/src/nodes/display/NormalMapNode.js +3 -3
  321. package/src/nodes/display/PassNode.js +75 -16
  322. package/src/nodes/display/RenderOutputNode.js +22 -5
  323. package/src/nodes/display/ScreenNode.js +6 -0
  324. package/src/nodes/display/ToneMappingFunctions.js +9 -51
  325. package/src/nodes/display/ToneMappingNode.js +3 -3
  326. package/src/nodes/display/ToonOutlinePassNode.js +66 -2
  327. package/src/nodes/display/ViewportDepthNode.js +34 -4
  328. package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
  329. package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
  330. package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
  331. package/src/nodes/functions/BSDF/D_GGX.js +1 -8
  332. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
  333. package/src/nodes/functions/BSDF/LTC.js +20 -47
  334. package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
  335. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
  336. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
  337. package/src/nodes/functions/PhysicalLightingModel.js +84 -51
  338. package/src/nodes/functions/VolumetricLightingModel.js +1 -1
  339. package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
  340. package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
  341. package/src/nodes/functions/material/getRoughness.js +3 -1
  342. package/src/nodes/geometry/RangeNode.js +52 -69
  343. package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
  344. package/src/nodes/gpgpu/BarrierNode.js +6 -0
  345. package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
  346. package/src/nodes/gpgpu/ComputeNode.js +6 -0
  347. package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
  348. package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
  349. package/src/nodes/lighting/AnalyticLightNode.js +7 -14
  350. package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
  351. package/src/nodes/lighting/EnvironmentNode.js +58 -8
  352. package/src/nodes/lighting/IESSpotLightNode.js +19 -4
  353. package/src/nodes/lighting/LightProbeNode.js +2 -1
  354. package/src/nodes/lighting/LightUtils.js +2 -2
  355. package/src/nodes/lighting/LightingNode.js +6 -0
  356. package/src/nodes/lighting/LightsNode.js +26 -32
  357. package/src/nodes/lighting/PointShadowNode.js +92 -48
  358. package/src/nodes/lighting/ProjectorLightNode.js +1 -1
  359. package/src/nodes/lighting/RectAreaLightNode.js +13 -14
  360. package/src/nodes/lighting/ShadowBaseNode.js +9 -17
  361. package/src/nodes/lighting/ShadowFilterNode.js +26 -3
  362. package/src/nodes/lighting/ShadowNode.js +13 -11
  363. package/src/nodes/materialx/MaterialXColor.js +2 -14
  364. package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
  365. package/src/nodes/materialx/MaterialXNodes.js +8 -11
  366. package/src/nodes/materialx/MaterialXNoise.js +195 -454
  367. package/src/nodes/math/BitcastNode.js +5 -5
  368. package/src/nodes/math/BitcountNode.js +18 -46
  369. package/src/nodes/math/ConditionalNode.js +92 -22
  370. package/src/nodes/math/Hash.js +1 -1
  371. package/src/nodes/math/MathNode.js +86 -64
  372. package/src/nodes/math/MathUtils.js +2 -2
  373. package/src/nodes/math/OperatorNode.js +42 -59
  374. package/src/nodes/math/PackFloatNode.js +9 -9
  375. package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
  376. package/src/nodes/math/TriNoise3D.js +3 -23
  377. package/src/nodes/math/UnpackFloatNode.js +9 -9
  378. package/src/nodes/pmrem/PMREMNode.js +38 -75
  379. package/src/nodes/pmrem/PMREMUtils.js +108 -272
  380. package/src/nodes/procedural/Checker.js +1 -1
  381. package/src/nodes/tsl/TSLCore.js +199 -74
  382. package/src/nodes/utils/ArrayElementNode.js +19 -1
  383. package/src/nodes/utils/CubeMapNode.js +3 -3
  384. package/src/nodes/utils/DebugNode.js +2 -2
  385. package/src/nodes/utils/EventNode.js +6 -0
  386. package/src/nodes/utils/FlipNode.js +3 -3
  387. package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
  388. package/src/nodes/utils/JoinNode.js +3 -3
  389. package/src/nodes/utils/LoopNode.js +14 -9
  390. package/src/nodes/utils/MemberNode.js +18 -0
  391. package/src/nodes/utils/PostProcessingUtils.js +20 -25
  392. package/src/nodes/utils/RTTNode.js +2 -0
  393. package/src/nodes/utils/ReflectorNode.js +24 -0
  394. package/src/nodes/utils/RotateNode.js +3 -3
  395. package/src/nodes/utils/SampleNode.js +6 -0
  396. package/src/nodes/utils/SetNode.js +3 -3
  397. package/src/nodes/utils/SplitNode.js +6 -0
  398. package/src/nodes/utils/UVUtils.js +2 -2
  399. package/src/objects/BatchedMesh.js +146 -15
  400. package/src/objects/InstancedMesh.js +12 -4
  401. package/src/objects/Line.js +20 -0
  402. package/src/objects/Mesh.js +8 -0
  403. package/src/objects/Points.js +20 -0
  404. package/src/objects/Skeleton.js +26 -0
  405. package/src/objects/SkinnedMesh.js +3 -3
  406. package/src/objects/Sprite.js +10 -0
  407. package/src/renderers/WebGLRenderer.js +104 -70
  408. package/src/renderers/common/Animation.js +5 -1
  409. package/src/renderers/common/Attributes.js +67 -57
  410. package/src/renderers/common/Backend.js +78 -3
  411. package/src/renderers/common/BindGroup.js +11 -0
  412. package/src/renderers/common/Binding.js +0 -11
  413. package/src/renderers/common/Bindings.js +116 -10
  414. package/src/renderers/common/Buffer.js +1 -1
  415. package/src/renderers/common/ClippingContext.js +12 -1
  416. package/src/renderers/common/ComputePipeline.js +17 -1
  417. package/src/renderers/common/DirectRenderPipeline.js +7 -3
  418. package/src/renderers/common/Geometries.js +170 -132
  419. package/src/renderers/common/Info.js +1 -1
  420. package/src/renderers/common/InspectorBase.js +5 -5
  421. package/src/renderers/common/Lighting.js +59 -0
  422. package/src/renderers/common/Pipelines.js +26 -12
  423. package/src/renderers/common/ProgrammableStage.js +1 -17
  424. package/src/renderers/common/RenderContext.js +21 -0
  425. package/src/renderers/common/RenderContexts.js +13 -4
  426. package/src/renderers/common/RenderObject.js +111 -35
  427. package/src/renderers/common/RenderObjects.js +37 -19
  428. package/src/renderers/common/Renderer.js +537 -295
  429. package/src/renderers/common/RendererUtils.js +15 -0
  430. package/src/renderers/common/StandardDrawingPipeline.js +343 -0
  431. package/src/renderers/common/Storage3DTexture.js +11 -0
  432. package/src/renderers/common/StorageArrayTexture.js +10 -0
  433. package/src/renderers/common/StorageTexture.js +0 -9
  434. package/src/renderers/common/Textures.js +144 -37
  435. package/src/renderers/common/UniformsGroup.js +19 -0
  436. package/src/renderers/common/XRManager.js +10 -91
  437. package/src/renderers/common/extras/PMREMGenerator.js +298 -576
  438. package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
  439. package/src/renderers/common/nodes/NodeLibrary.js +11 -35
  440. package/src/renderers/common/nodes/NodeManager.js +80 -31
  441. package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
  442. package/src/renderers/common/nodes/NodeSampler.js +14 -0
  443. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  444. package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
  445. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
  446. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
  447. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
  448. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
  449. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  450. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
  451. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
  452. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
  453. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
  454. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
  455. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
  456. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
  457. package/src/renderers/shaders/ShaderChunk.js +0 -2
  458. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
  459. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
  461. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
  462. package/src/renderers/shaders/ShaderLib.js +3 -0
  463. package/src/renderers/shaders/UniformsLib.js +4 -5
  464. package/src/renderers/webgl/WebGLBackground.js +3 -3
  465. package/src/renderers/webgl/WebGLBindingStates.js +4 -2
  466. package/src/renderers/webgl/WebGLCapabilities.js +7 -1
  467. package/src/renderers/webgl/WebGLEnvironments.js +2 -2
  468. package/src/renderers/webgl/WebGLGeometries.js +42 -14
  469. package/src/renderers/webgl/WebGLMaterials.js +15 -2
  470. package/src/renderers/webgl/WebGLOutput.js +37 -1
  471. package/src/renderers/webgl/WebGLProgram.js +13 -54
  472. package/src/renderers/webgl/WebGLPrograms.js +22 -8
  473. package/src/renderers/webgl/WebGLRenderStates.js +11 -8
  474. package/src/renderers/webgl/WebGLShadowMap.js +6 -4
  475. package/src/renderers/webgl/WebGLState.js +10 -6
  476. package/src/renderers/webgl/WebGLTextures.js +129 -77
  477. package/src/renderers/webgl/WebGLUniforms.js +44 -6
  478. package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
  479. package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
  480. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
  481. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
  482. package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
  483. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
  484. package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
  485. package/src/renderers/webgpu/WebGPUBackend.js +140 -82
  486. package/src/renderers/webgpu/WebGPURenderer.js +1 -1
  487. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
  488. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
  489. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
  490. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
  491. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  492. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
  493. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
  494. package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
  495. package/src/renderers/webxr/WebXRController.js +3 -3
  496. package/src/renderers/webxr/WebXRManager.js +5 -90
  497. package/src/scenes/Scene.js +4 -4
  498. package/src/textures/CompressedTexture.js +2 -2
  499. package/src/textures/DepthTexture.js +2 -2
  500. package/src/textures/FramebufferTexture.js +11 -0
  501. package/src/textures/Texture.js +29 -1
  502. package/src/textures/TextureSource.js +1 -1
  503. package/src/upe.js +1 -1
  504. package/src/utils.js +4 -4
  505. package/examples/jsm/libs/surfaceNet.js +0 -201
  506. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
@@ -40,9 +40,12 @@ import {
40
40
  mx_splitlr,
41
41
  mx_splittb,
42
42
  mx_fractal_noise_float,
43
+ mx_fractal_noise_vec2,
43
44
  mx_fractal_noise_vec3,
45
+ mx_fractal_noise_vec4,
44
46
  mx_noise_float,
45
47
  mx_noise_vec3,
48
+ mx_noise_vec4,
46
49
  mx_cell_noise_float,
47
50
  mx_cell_noise_vec3,
48
51
  mx_smoothstep,
@@ -67,17 +70,11 @@ import {
67
70
  mx_ifgreatereq,
68
71
  mx_ifequal,
69
72
  mx_atan2,
70
- positionLocal,
71
73
  positionWorld,
72
- normalWorld,
73
- tangentWorld,
74
- bitangentWorld,
75
74
  cameraPosition,
76
75
  mx_heighttonormal,
77
76
  float,
78
77
  int,
79
- bool,
80
- color,
81
78
  modelNormalMatrix,
82
79
  modelWorldMatrix,
83
80
  modelWorldMatrixInverse,
@@ -96,7 +93,7 @@ import {
96
93
  } from 'three/tsl';
97
94
  import { normalizeSpaceName, toBooleanNode, toVec3Channels } from './MaterialXUtils.js';
98
95
 
99
- const createMXElement = ( name, nodeFunc, params = [], defaults = {}, usesNode = false ) => ( { name, nodeFunc, params, defaults, usesNode } );
96
+ const createMXElement = ( name, nodeFunc, params = [], usesNode = false ) => ( { name, nodeFunc, params, usesNode } );
100
97
 
101
98
  const mx_range = ( inNode, inLow, inHigh, outLow, outHigh, gamma = 1 ) => {
102
99
 
@@ -192,6 +189,23 @@ const mx_viewdirection = ( space = 'world' ) => {
192
189
 
193
190
  };
194
191
 
192
+ const mx_hsvadjust = ( inNode, amount, nodeX ) => {
193
+
194
+ const hsv = mx_rgbtohsv( vec3( inNode ) );
195
+ const adjusted = mul( add( hsv, vec3( element( amount, 0 ), 0, 0 ) ), vec3( 1, element( amount, 1 ), element( amount, 2 ) ) );
196
+ const rgb = mx_hsvtorgb( adjusted );
197
+ return nodeX && nodeX.type === 'color4' ? vec4( rgb, element( vec4( inNode ), 3 ) ) : rgb;
198
+
199
+ };
200
+
201
+ const mx_facingratio = ( viewdirection, normal, faceforward, invert ) => {
202
+
203
+ const cosine = dot( viewdirection, normal );
204
+ const facing = toBooleanNode( faceforward ).select( abs( cosine ), mul( cosine, - 1 ) );
205
+ return toBooleanNode( invert ).select( sub( 1, facing ), facing );
206
+
207
+ };
208
+
195
209
  const mx_blackbody = ( temperature = 5000 ) => {
196
210
 
197
211
  const temperatureKelvin = clamp( temperature, float( 800 ), float( 25000 ) );
@@ -349,17 +363,23 @@ const mx_transformpoint = ( inNode = vec3( 0, 0, 0 ), fromspace = 'world', tospa
349
363
 
350
364
  };
351
365
 
366
+ // MaterialX returns 0 where the divisor vanishes. Selecting the result, rather than multiplying it
367
+ // by a step, keeps the division by zero from turning that 0 into NaN.
352
368
  const mx_burn_channel = ( fg, bg, mixval = 1 ) => {
353
369
 
354
- const composed = add( mul( mixval, sub( 1, div( sub( 1, bg ), fg ) ) ), mul( sub( 1, mixval ), bg ) );
355
- return mul( composed, step( float( 1e-6 ), abs( fg ) ) );
370
+ const vanishes = abs( fg ).lessThan( 1e-6 );
371
+ const divisor = vanishes.select( float( 1 ), fg );
372
+ const composed = add( mul( mixval, sub( 1, div( sub( 1, bg ), divisor ) ) ), mul( sub( 1, mixval ), bg ) );
373
+ return vanishes.select( float( 0 ), composed );
356
374
 
357
375
  };
358
376
 
359
377
  const mx_dodge_channel = ( fg, bg, mixval = 1 ) => {
360
378
 
361
- const composed = add( mul( mixval, div( bg, sub( 1, fg ) ) ), mul( sub( 1, mixval ), bg ) );
362
- return mul( composed, step( float( 1e-6 ), abs( sub( 1, fg ) ) ) );
379
+ const vanishes = abs( sub( 1, fg ) ).lessThan( 1e-6 );
380
+ const divisor = vanishes.select( float( 1 ), sub( 1, fg ) );
381
+ const composed = add( mul( mixval, div( bg, divisor ) ), mul( sub( 1, mixval ), bg ) );
382
+ return vanishes.select( float( 0 ), composed );
363
383
 
364
384
  };
365
385
 
@@ -505,24 +525,91 @@ const mx_ramp = ( texcoord = vec2( 0, 0 ), type = 0, interpolation = 1, numInter
505
525
 
506
526
  };
507
527
 
508
- const defaultFloat = ( value ) => () => float( value );
509
- const defaultInt = ( value ) => () => int( value );
510
- const defaultBool = ( value ) => () => bool( value );
511
- const defaultColor = ( r, g, b ) => () => color( r, g, b );
512
- const defaultVec2 = ( x, y ) => () => vec2( x, y );
513
- const defaultVec3 = ( x, y, z ) => () => vec3( x, y, z );
514
- const defaultVec4 = ( x, y, z, w ) => () => vec4( x, y, z, w );
515
528
  const usesVec2Noise = ( nodeX ) => nodeX && nodeX.type === 'vector2';
516
529
  const usesVec3Noise = ( nodeX ) => nodeX && ( nodeX.type === 'vector3' || nodeX.type === 'color3' );
530
+ const usesVec4Noise = ( nodeX ) => nodeX && ( nodeX.type === 'vector4' || nodeX.type === 'color4' );
531
+
532
+ // Offset of the fourth channel of fractal2d vector4, as in MaterialX's mx_noise.glsl.
533
+ const fractalOffset2d = () => vec2( 19, 193 );
534
+
535
+ const mx_noise_materialx = ( texcoord, amplitude, pivot, nodeX ) => {
536
+
537
+ if ( usesVec4Noise( nodeX ) ) return mx_noise_vec4( texcoord, vec4( amplitude ), pivot );
538
+ if ( usesVec3Noise( nodeX ) ) return mx_noise_vec3( texcoord, vec3( amplitude ), pivot );
539
+
540
+ if ( usesVec2Noise( nodeX ) ) {
541
+
542
+ const noise = mx_noise_vec3( texcoord );
543
+ return add( mul( vec2( element( noise, 0 ), element( noise, 1 ) ), vec2( amplitude ) ), pivot );
544
+
545
+ }
546
+
547
+ return mx_noise_float( texcoord, amplitude, pivot );
548
+
549
+ };
550
+
551
+ const mx_fractal_noise_materialx_2d = ( texcoord, octaves, lacunarity, diminish, amplitude, nodeX ) => {
552
+
553
+ if ( usesVec4Noise( nodeX ) ) {
554
+
555
+ const noise = vec4(
556
+ mx_fractal_noise_vec3_materialx_2d( texcoord, octaves, lacunarity, diminish, vec3( 1 ) ),
557
+ mx_fractal_noise_float_materialx_2d( add( texcoord, fractalOffset2d() ), octaves, lacunarity, diminish, float( 1 ) ),
558
+ );
559
+ return mul( noise, vec4( amplitude ) );
560
+
561
+ }
517
562
 
518
- const mx_noise_materialx = ( texcoord, amplitude, pivot, nodeX ) =>
519
- usesVec3Noise( nodeX ) ? mx_noise_vec3( texcoord, vec3( amplitude ), pivot ) : mx_noise_float( texcoord, amplitude, pivot );
563
+ if ( usesVec3Noise( nodeX ) ) return mx_fractal_noise_vec3_materialx_2d( texcoord, octaves, lacunarity, diminish, amplitude );
520
564
 
521
- const mx_fractal_noise_materialx_2d = ( texcoord, octaves, lacunarity, diminish, amplitude, nodeX ) =>
522
- usesVec3Noise( nodeX ) ? mx_fractal_noise_vec3_materialx_2d( texcoord, octaves, lacunarity, diminish, amplitude ) : mx_fractal_noise_float_materialx_2d( texcoord, octaves, lacunarity, diminish, amplitude );
565
+ if ( usesVec2Noise( nodeX ) ) {
523
566
 
524
- const mx_fractal_noise_materialx_3d = ( position, octaves, lacunarity, diminish, amplitude, nodeX ) =>
525
- usesVec3Noise( nodeX ) ? mx_fractal_noise_vec3( position, octaves, lacunarity, diminish, vec3( amplitude ) ) : mx_fractal_noise_float( position, octaves, lacunarity, diminish, amplitude );
567
+ const noise = vec2(
568
+ mx_fractal_noise_float_materialx_2d( texcoord, octaves, lacunarity, diminish, float( 1 ) ),
569
+ mx_fractal_noise_float_materialx_2d( add( texcoord, fractalOffset2d() ), octaves, lacunarity, diminish, float( 1 ) ),
570
+ );
571
+ return mul( noise, vec2( amplitude ) );
572
+
573
+ }
574
+
575
+ return mx_fractal_noise_float_materialx_2d( texcoord, octaves, lacunarity, diminish, amplitude );
576
+
577
+ };
578
+
579
+ const mx_fractal_noise_materialx_3d = ( position, octaves, lacunarity, diminish, amplitude, nodeX ) => {
580
+
581
+ if ( usesVec4Noise( nodeX ) ) return mx_fractal_noise_vec4( position, octaves, lacunarity, diminish, vec4( amplitude ) );
582
+ if ( usesVec3Noise( nodeX ) ) return mx_fractal_noise_vec3( position, octaves, lacunarity, diminish, vec3( amplitude ) );
583
+ if ( usesVec2Noise( nodeX ) ) return mx_fractal_noise_vec2( position, octaves, lacunarity, diminish, vec2( amplitude ) );
584
+ return mx_fractal_noise_float( position, octaves, lacunarity, diminish, amplitude );
585
+
586
+ };
587
+
588
+ const mx_randomfloat = ( inNode, minNode, maxNode, seed, scale = 4096 ) => {
589
+
590
+ const noise = mx_cell_noise_float( vec2( mul( float( inNode ), scale ), float( seed ) ) );
591
+ return clamp( add( minNode, mul( noise, sub( maxNode, minNode ) ) ), minNode, maxNode );
592
+
593
+ };
594
+
595
+ const mx_randomfloat_materialx = ( inNode, minNode, maxNode, seed, nodeX ) => {
596
+
597
+ const input = nodeX.getChildByName( 'in' );
598
+ return mx_randomfloat( inNode, minNode, maxNode, seed, input && input.type === 'integer' ? 1 : 4096 );
599
+
600
+ };
601
+
602
+ const mx_randomcolor = ( inNode, hueLow, hueHigh, saturationLow, saturationHigh, brightnessLow, brightnessHigh, seed ) => {
603
+
604
+ const randomInRange = ( offset, low, high ) => add( low, mul( mx_randomfloat( inNode, float( 0 ), float( 1 ), ceil( add( float( seed ), offset ) ) ), sub( high, low ) ) );
605
+
606
+ return mx_hsvtorgb( vec3(
607
+ randomInRange( 413.3, hueLow, hueHigh ),
608
+ randomInRange( 1522.4, saturationLow, saturationHigh ),
609
+ randomInRange( 1813.8, brightnessLow, brightnessHigh ),
610
+ ) );
611
+
612
+ };
526
613
 
527
614
  const mx_cell_noise_materialx = ( position, nodeX ) =>
528
615
  usesVec3Noise( nodeX ) ? mx_cell_noise_vec3( position ) : mx_cell_noise_float( position );
@@ -560,6 +647,13 @@ const mx_fractal_noise_float_materialx_2d = Fn( ( [ texcoordInput, octavesInput,
560
647
 
561
648
  return mul( result, amplitude );
562
649
 
650
+ }, {
651
+ texcoord: 'vec2',
652
+ octaves: 'int',
653
+ lacunarity: 'float',
654
+ diminish: 'float',
655
+ amplitude: 'float',
656
+ return: 'float'
563
657
  } );
564
658
 
565
659
  const mx_fractal_noise_vec3_materialx_2d = Fn( ( [ texcoordInput, octavesInput, lacunarityInput, diminishInput, amplitudeInput ] ) => {
@@ -582,197 +676,89 @@ const mx_fractal_noise_vec3_materialx_2d = Fn( ( [ texcoordInput, octavesInput,
582
676
 
583
677
  return mul( result, amplitude );
584
678
 
679
+ }, {
680
+ texcoord: 'vec2',
681
+ octaves: 'int',
682
+ lacunarity: 'float',
683
+ diminish: 'float',
684
+ amplitude: 'vec3',
685
+ return: 'vec3'
585
686
  } );
586
687
 
587
688
  const MXElements = [
588
- createMXElement( 'add', add, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
589
- createMXElement( 'subtract', sub, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
590
- createMXElement( 'multiply', mul, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 1 ) } ),
591
- createMXElement( 'divide', div, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 1 ) } ),
592
- createMXElement( 'modulo', mx_modulo, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 1 ) } ),
593
- createMXElement( 'absval', abs, [ 'in' ], { in: defaultFloat( 0 ) } ),
594
- createMXElement( 'sign', sign, [ 'in' ], { in: defaultFloat( 0 ) } ),
595
- createMXElement( 'floor', floor, [ 'in' ], { in: defaultFloat( 0 ) } ),
596
- createMXElement( 'ceil', ceil, [ 'in' ], { in: defaultFloat( 0 ) } ),
597
- createMXElement( 'round', round, [ 'in' ], { in: defaultFloat( 0 ) } ),
598
- createMXElement( 'power', pow, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 1 ) } ),
599
- createMXElement( 'sin', sin, [ 'in' ], { in: defaultFloat( 0 ) } ),
600
- createMXElement( 'cos', cos, [ 'in' ], { in: defaultFloat( 0 ) } ),
601
- createMXElement( 'tan', tan, [ 'in' ], { in: defaultFloat( 0 ) } ),
602
- createMXElement( 'asin', asin, [ 'in' ], { in: defaultFloat( 0 ) } ),
603
- createMXElement( 'acos', acos, [ 'in' ], { in: defaultFloat( 0 ) } ),
604
- createMXElement( 'atan2', mx_atan2, [ 'iny', 'inx' ], { iny: defaultFloat( 0 ), inx: defaultFloat( 1 ) } ),
605
- createMXElement( 'sqrt', sqrt, [ 'in' ], { in: defaultFloat( 0 ) } ),
606
- createMXElement( 'ln', log, [ 'in' ], { in: defaultFloat( 1 ) } ),
607
- createMXElement( 'exp', exp, [ 'in' ], { in: defaultFloat( 0 ) } ),
608
- createMXElement( 'fract', fract, [ 'in' ], { in: defaultFloat( 0 ) } ),
609
- createMXElement( 'clamp', clamp, [ 'in', 'low', 'high' ], {
610
- in: defaultFloat( 0 ),
611
- low: defaultFloat( 0 ),
612
- high: defaultFloat( 1 ),
613
- } ),
614
- createMXElement( 'min', min, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
615
- createMXElement( 'max', max, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
616
- createMXElement( 'normalize', normalize, [ 'in' ], { in: defaultFloat( 0 ) } ),
617
- createMXElement( 'magnitude', length, [ 'in' ], { in: defaultFloat( 0 ) } ),
618
- createMXElement( 'length', length, [ 'in' ], { in: defaultFloat( 0 ) } ),
619
- createMXElement( 'dot', mx_dot, [ 'in' ], { in: defaultFloat( 0 ) } ),
620
- createMXElement( 'dotproduct', dot, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
621
- createMXElement( 'viewdirection', mx_viewdirection, [ 'space' ], { space: () => 'world' } ),
622
- createMXElement( 'crossproduct', cross, [ 'in1', 'in2' ], { in1: defaultVec3( 0, 0, 0 ), in2: defaultVec3( 0, 0, 0 ) } ),
623
- createMXElement( 'distance', distance, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
624
- createMXElement( 'invert', mx_invert, [ 'in', 'amount' ], { in: defaultFloat( 0 ), amount: defaultFloat( 1 ) } ),
625
- createMXElement( 'transformmatrix', mul, [ 'in', 'mat' ], { in: defaultFloat( 0 ) } ),
626
- createMXElement( 'transformnormal', mx_transformnormal, [ 'in', 'fromspace', 'tospace' ], {
627
- in: defaultVec3( 0, 0, 1 ),
628
- fromspace: () => 'world',
629
- tospace: () => 'world',
630
- } ),
631
- createMXElement( 'transformpoint', mx_transformpoint, [ 'in', 'fromspace', 'tospace' ], {
632
- in: defaultVec3( 0, 0, 0 ),
633
- fromspace: () => 'world',
634
- tospace: () => 'world',
635
- } ),
636
- createMXElement( 'transformvector', mx_transformvector, [ 'in', 'fromspace', 'tospace' ], {
637
- in: defaultVec3( 0, 0, 0 ),
638
- fromspace: () => 'world',
639
- tospace: () => 'world',
640
- } ),
641
- createMXElement( 'normalmap', mx_normalmap, [ 'in', 'scale', 'normal', 'tangent', 'bitangent' ], {
642
- in: defaultVec3( 0.5, 0.5, 1.0 ),
643
- scale: defaultFloat( 1 ),
644
- normal: () => normalWorld,
645
- tangent: () => tangentWorld,
646
- bitangent: () => bitangentWorld,
647
- } ),
689
+ createMXElement( 'add', add, [ 'in1', 'in2' ] ),
690
+ createMXElement( 'subtract', sub, [ 'in1', 'in2' ] ),
691
+ createMXElement( 'multiply', mul, [ 'in1', 'in2' ] ),
692
+ createMXElement( 'divide', div, [ 'in1', 'in2' ] ),
693
+ createMXElement( 'modulo', mx_modulo, [ 'in1', 'in2' ] ),
694
+ createMXElement( 'absval', abs, [ 'in' ] ),
695
+ createMXElement( 'sign', sign, [ 'in' ] ),
696
+ createMXElement( 'floor', floor, [ 'in' ] ),
697
+ createMXElement( 'ceil', ceil, [ 'in' ] ),
698
+ createMXElement( 'round', round, [ 'in' ] ),
699
+ createMXElement( 'power', pow, [ 'in1', 'in2' ] ),
700
+ createMXElement( 'sin', sin, [ 'in' ] ),
701
+ createMXElement( 'cos', cos, [ 'in' ] ),
702
+ createMXElement( 'tan', tan, [ 'in' ] ),
703
+ createMXElement( 'asin', asin, [ 'in' ] ),
704
+ createMXElement( 'acos', acos, [ 'in' ] ),
705
+ createMXElement( 'atan2', mx_atan2, [ 'iny', 'inx' ] ),
706
+ createMXElement( 'sqrt', sqrt, [ 'in' ] ),
707
+ createMXElement( 'ln', log, [ 'in' ] ),
708
+ createMXElement( 'exp', exp, [ 'in' ] ),
709
+ createMXElement( 'fract', fract, [ 'in' ] ),
710
+ createMXElement( 'clamp', clamp, [ 'in', 'low', 'high' ] ),
711
+ createMXElement( 'min', min, [ 'in1', 'in2' ] ),
712
+ createMXElement( 'max', max, [ 'in1', 'in2' ] ),
713
+ createMXElement( 'normalize', normalize, [ 'in' ] ),
714
+ createMXElement( 'magnitude', length, [ 'in' ] ),
715
+ createMXElement( 'dot', mx_dot, [ 'in' ] ),
716
+ createMXElement( 'dotproduct', dot, [ 'in1', 'in2' ] ),
717
+ createMXElement( 'viewdirection', mx_viewdirection, [ 'space' ] ),
718
+ createMXElement( 'crossproduct', cross, [ 'in1', 'in2' ] ),
719
+ createMXElement( 'distance', distance, [ 'in1', 'in2' ] ),
720
+ createMXElement( 'invert', mx_invert, [ 'in', 'amount' ] ),
721
+ createMXElement( 'transformmatrix', mul, [ 'in', 'mat' ] ),
722
+ createMXElement( 'transformnormal', mx_transformnormal, [ 'in', 'fromspace', 'tospace' ] ),
723
+ createMXElement( 'transformpoint', mx_transformpoint, [ 'in', 'fromspace', 'tospace' ] ),
724
+ createMXElement( 'transformvector', mx_transformvector, [ 'in', 'fromspace', 'tospace' ] ),
725
+ createMXElement( 'normalmap', mx_normalmap, [ 'in', 'scale', 'normal', 'tangent', 'bitangent' ] ),
648
726
  createMXElement( 'transpose', transpose, [ 'in' ] ),
649
727
  createMXElement( 'determinant', determinant, [ 'in' ] ),
650
728
  createMXElement( 'invertmatrix', inverse, [ 'in' ] ),
651
- createMXElement( 'creatematrix', mat3, [ 'in1', 'in2', 'in3' ], {
652
- in1: defaultVec3( 1, 0, 0 ),
653
- in2: defaultVec3( 0, 1, 0 ),
654
- in3: defaultVec3( 0, 0, 1 ),
655
- } ),
656
- createMXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ], {
657
- in: defaultFloat( 0 ),
658
- inlow: defaultFloat( 0 ),
659
- inhigh: defaultFloat( 1 ),
660
- outlow: defaultFloat( 0 ),
661
- outhigh: defaultFloat( 1 ),
662
- } ),
663
- createMXElement( 'range', mx_range, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh', 'gamma' ], {
664
- in: defaultFloat( 0 ),
665
- inlow: defaultFloat( 0 ),
666
- inhigh: defaultFloat( 1 ),
667
- outlow: defaultFloat( 0 ),
668
- outhigh: defaultFloat( 1 ),
669
- gamma: defaultFloat( 1 ),
670
- } ),
671
- createMXElement( 'open_pbr_anisotropy', mx_open_pbr_anisotropy, [ 'roughness', 'anisotropy' ], {
672
- roughness: defaultFloat( 0 ),
673
- anisotropy: defaultFloat( 0 ),
674
- } ),
675
- createMXElement( 'smoothstep', mx_smoothstep, [ 'in', 'low', 'high' ], {
676
- in: defaultFloat( 0 ),
677
- low: defaultFloat( 0 ),
678
- high: defaultFloat( 1 ),
679
- } ),
680
- createMXElement( 'luminance', luminance, [ 'in', 'lumacoeffs' ], {
681
- in: defaultColor( 0, 0, 0 ),
682
- lumacoeffs: defaultColor( 0.2722287, 0.6740818, 0.0536895 ),
683
- } ),
684
- createMXElement( 'rgbtohsv', mx_rgbtohsv, [ 'in' ], { in: defaultColor( 0, 0, 0 ) } ),
685
- createMXElement( 'hsvtorgb', mx_hsvtorgb, [ 'in' ], { in: defaultColor( 0, 0, 0 ) } ),
686
- createMXElement( 'mix', mix, [ 'bg', 'fg', 'mix' ], { bg: defaultFloat( 0 ), fg: defaultFloat( 0 ), mix: defaultFloat( 0 ) } ),
687
- createMXElement( 'minus', mx_minus, [ 'fg', 'bg', 'mix' ], {
688
- fg: defaultFloat( 0 ),
689
- bg: defaultFloat( 0 ),
690
- mix: defaultFloat( 1 ),
691
- } ),
692
- createMXElement( 'difference', mx_difference, [ 'fg', 'bg', 'mix' ], {
693
- fg: defaultFloat( 0 ),
694
- bg: defaultFloat( 0 ),
695
- mix: defaultFloat( 1 ),
696
- } ),
697
- createMXElement( 'screen', mx_screen, [ 'fg', 'bg', 'mix' ], {
698
- fg: defaultFloat( 0 ),
699
- bg: defaultFloat( 0 ),
700
- mix: defaultFloat( 1 ),
701
- } ),
702
- createMXElement( 'overlay', mx_overlay, [ 'fg', 'bg', 'mix' ], {
703
- fg: defaultFloat( 0 ),
704
- bg: defaultFloat( 0 ),
705
- mix: defaultFloat( 1 ),
706
- } ),
707
- createMXElement( 'burn', mx_burn, [ 'fg', 'bg', 'mix' ], {
708
- fg: defaultFloat( 0 ),
709
- bg: defaultFloat( 0 ),
710
- mix: defaultFloat( 1 ),
711
- } ),
712
- createMXElement( 'dodge', mx_dodge, [ 'fg', 'bg', 'mix' ], {
713
- fg: defaultFloat( 0 ),
714
- bg: defaultFloat( 0 ),
715
- mix: defaultFloat( 1 ),
716
- } ),
729
+ createMXElement( 'creatematrix', mat3, [ 'in1', 'in2', 'in3' ] ),
730
+ createMXElement( 'remap', remap, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh' ] ),
731
+ createMXElement( 'range', mx_range, [ 'in', 'inlow', 'inhigh', 'outlow', 'outhigh', 'gamma' ] ),
732
+ createMXElement( 'open_pbr_anisotropy', mx_open_pbr_anisotropy, [ 'roughness', 'anisotropy' ] ),
733
+ createMXElement( 'smoothstep', mx_smoothstep, [ 'in', 'low', 'high' ] ),
734
+ createMXElement( 'luminance', luminance, [ 'in', 'lumacoeffs' ] ),
735
+ createMXElement( 'rgbtohsv', mx_rgbtohsv, [ 'in' ] ),
736
+ createMXElement( 'hsvadjust', mx_hsvadjust, [ 'in', 'amount' ], true ),
737
+ createMXElement( 'facingratio', mx_facingratio, [ 'viewdirection', 'normal', 'faceforward', 'invert' ] ),
738
+ createMXElement( 'hsvtorgb', mx_hsvtorgb, [ 'in' ] ),
739
+ createMXElement( 'mix', mix, [ 'bg', 'fg', 'mix' ] ),
740
+ createMXElement( 'minus', mx_minus, [ 'fg', 'bg', 'mix' ] ),
741
+ createMXElement( 'difference', mx_difference, [ 'fg', 'bg', 'mix' ] ),
742
+ createMXElement( 'screen', mx_screen, [ 'fg', 'bg', 'mix' ] ),
743
+ createMXElement( 'overlay', mx_overlay, [ 'fg', 'bg', 'mix' ] ),
744
+ createMXElement( 'burn', mx_burn, [ 'fg', 'bg', 'mix' ] ),
745
+ createMXElement( 'dodge', mx_dodge, [ 'fg', 'bg', 'mix' ] ),
717
746
  createMXElement(
718
747
  'colorcorrect',
719
748
  mx_colorcorrect,
720
749
  [ 'in', 'hue', 'saturation', 'gamma', 'lift', 'gain', 'contrast', 'contrastpivot', 'exposure' ],
721
- {
722
- in: defaultColor( 1, 1, 1 ),
723
- hue: defaultFloat( 0 ),
724
- saturation: defaultFloat( 1 ),
725
- gamma: defaultFloat( 1 ),
726
- lift: defaultFloat( 0 ),
727
- gain: defaultFloat( 1 ),
728
- contrast: defaultFloat( 1 ),
729
- contrastpivot: defaultFloat( 0.5 ),
730
- exposure: defaultFloat( 0 ),
731
- },
732
750
  ),
733
- createMXElement( 'unpremult', mx_unpremult, [ 'in' ], { in: defaultVec4( 0, 0, 0, 1 ) } ),
734
- createMXElement( 'combine2', vec2, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 0 ) } ),
735
- createMXElement( 'combine3', vec3, [ 'in1', 'in2', 'in3' ], {
736
- in1: defaultFloat( 0 ),
737
- in2: defaultFloat( 0 ),
738
- in3: defaultFloat( 0 ),
739
- } ),
740
- createMXElement( 'combine4', vec4, [ 'in1', 'in2', 'in3', 'in4' ], {
741
- in1: defaultFloat( 0 ),
742
- in2: defaultFloat( 0 ),
743
- in3: defaultFloat( 0 ),
744
- in4: defaultFloat( 0 ),
745
- } ),
746
- createMXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ], {
747
- valuel: defaultFloat( 0 ),
748
- valuer: defaultFloat( 0 ),
749
- } ),
750
- createMXElement( 'ramptb', mx_ramptb, [ 'valueb', 'valuet', 'texcoord' ], {
751
- valueb: defaultFloat( 0 ),
752
- valuet: defaultFloat( 0 ),
753
- } ),
754
- createMXElement( 'ramp4', mx_ramp4, [ 'valuetl', 'valuetr', 'valuebl', 'valuebr', 'texcoord' ], {
755
- valuetl: defaultColor( 0, 0, 0 ),
756
- valuetr: defaultColor( 0, 0, 0 ),
757
- valuebl: defaultColor( 0, 0, 0 ),
758
- valuebr: defaultColor( 0, 0, 0 ),
759
- texcoord: defaultVec2( 0, 0 ),
760
- } ),
751
+ createMXElement( 'unpremult', mx_unpremult, [ 'in' ] ),
752
+ createMXElement( 'combine2', vec2, [ 'in1', 'in2' ] ),
753
+ createMXElement( 'combine3', vec3, [ 'in1', 'in2', 'in3' ] ),
754
+ createMXElement( 'combine4', vec4, [ 'in1', 'in2', 'in3', 'in4' ] ),
755
+ createMXElement( 'ramplr', mx_ramplr, [ 'valuel', 'valuer', 'texcoord' ] ),
756
+ createMXElement( 'ramptb', mx_ramptb, [ 'valueb', 'valuet', 'texcoord' ] ),
757
+ createMXElement( 'ramp4', mx_ramp4, [ 'valuetl', 'valuetr', 'valuebl', 'valuebr', 'texcoord' ] ),
761
758
  createMXElement(
762
759
  'ramp_gradient',
763
760
  mx_ramp_gradient,
764
761
  [ 'x', 'interval1', 'interval2', 'color1', 'color2', 'interpolation', 'prev_color', 'interval_num', 'num_intervals' ],
765
- {
766
- x: defaultFloat( 0 ),
767
- interval1: defaultFloat( 0 ),
768
- interval2: defaultFloat( 1 ),
769
- color1: defaultVec4( 0, 0, 0, 1 ),
770
- color2: defaultVec4( 1, 1, 1, 1 ),
771
- interpolation: defaultFloat( 1 ),
772
- prev_color: defaultVec4( 0, 0, 0, 1 ),
773
- interval_num: defaultFloat( 1 ),
774
- num_intervals: defaultFloat( 2 ),
775
- },
776
762
  ),
777
763
  createMXElement(
778
764
  'ramp',
@@ -803,79 +789,19 @@ const MXElements = [
803
789
  'interval10',
804
790
  'color10',
805
791
  ],
806
- {
807
- texcoord: defaultVec2( 0, 0 ),
808
- type: defaultFloat( 0 ),
809
- interpolation: defaultFloat( 1 ),
810
- num_intervals: defaultFloat( 2 ),
811
- interval1: defaultFloat( 0 ),
812
- color1: defaultVec4( 0, 0, 0, 1 ),
813
- interval2: defaultFloat( 1 ),
814
- color2: defaultVec4( 1, 1, 1, 1 ),
815
- interval3: defaultFloat( 1 ),
816
- color3: defaultVec4( 1, 1, 1, 1 ),
817
- interval4: defaultFloat( 1 ),
818
- color4: defaultVec4( 1, 1, 1, 1 ),
819
- interval5: defaultFloat( 1 ),
820
- color5: defaultVec4( 1, 1, 1, 1 ),
821
- interval6: defaultFloat( 1 ),
822
- color6: defaultVec4( 1, 1, 1, 1 ),
823
- interval7: defaultFloat( 1 ),
824
- color7: defaultVec4( 1, 1, 1, 1 ),
825
- interval8: defaultFloat( 1 ),
826
- color8: defaultVec4( 1, 1, 1, 1 ),
827
- interval9: defaultFloat( 1 ),
828
- color9: defaultVec4( 1, 1, 1, 1 ),
829
- interval10: defaultFloat( 1 ),
830
- color10: defaultVec4( 1, 1, 1, 1 ),
831
- },
832
792
  ),
833
- createMXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'center', 'texcoord' ], {
834
- valuel: defaultFloat( 0 ),
835
- valuer: defaultFloat( 0 ),
836
- center: defaultFloat( 0.5 ),
837
- } ),
838
- createMXElement( 'splittb', mx_splittb, [ 'valueb', 'valuet', 'center', 'texcoord' ], {
839
- valueb: defaultFloat( 0 ),
840
- valuet: defaultFloat( 0 ),
841
- center: defaultFloat( 0.5 ),
842
- } ),
843
- createMXElement( 'noise2d', mx_noise_materialx, [ 'texcoord', 'amplitude', 'pivot' ], {
844
- texcoord: defaultVec2( 0, 0 ),
845
- amplitude: defaultFloat( 1 ),
846
- pivot: defaultFloat( 0 ),
847
- }, true ),
848
- createMXElement( 'noise3d', mx_noise_materialx, [ 'position', 'amplitude', 'pivot' ], {
849
- position: () => positionLocal,
850
- amplitude: defaultFloat( 1 ),
851
- pivot: defaultFloat( 0 ),
852
- }, true ),
853
- createMXElement( 'fractal2d', mx_fractal_noise_materialx_2d, [ 'texcoord', 'octaves', 'lacunarity', 'diminish', 'amplitude' ], {
854
- texcoord: defaultVec2( 0, 0 ),
855
- octaves: defaultInt( 3 ),
856
- lacunarity: defaultFloat( 2.0 ),
857
- diminish: defaultFloat( 0.5 ),
858
- amplitude: defaultFloat( 1.0 ),
859
- }, true ),
860
- createMXElement( 'fractal3d', mx_fractal_noise_materialx_3d, [ 'position', 'octaves', 'lacunarity', 'diminish', 'amplitude' ], {
861
- position: () => positionLocal,
862
- octaves: defaultInt( 3 ),
863
- lacunarity: defaultFloat( 2.0 ),
864
- diminish: defaultFloat( 0.5 ),
865
- amplitude: defaultFloat( 1.0 ),
866
- }, true ),
867
- createMXElement( 'cellnoise2d', mx_cell_noise_materialx, [ 'texcoord' ], { texcoord: defaultVec2( 0, 0 ) }, true ),
868
- createMXElement( 'cellnoise3d', mx_cell_noise_materialx, [ 'position' ], { position: () => positionLocal }, true ),
869
- createMXElement( 'worleynoise2d', mx_worley_noise_materialx_2d, [ 'texcoord', 'jitter', 'style' ], {
870
- texcoord: defaultVec2( 0, 0 ),
871
- jitter: defaultFloat( 1 ),
872
- style: defaultInt( 0 ),
873
- }, true ),
874
- createMXElement( 'worleynoise3d', mx_worley_noise_materialx_3d, [ 'position', 'jitter', 'style' ], {
875
- position: () => positionLocal,
876
- jitter: defaultFloat( 1 ),
877
- style: defaultInt( 0 ),
878
- }, true ),
793
+ createMXElement( 'splitlr', mx_splitlr, [ 'valuel', 'valuer', 'center', 'texcoord' ] ),
794
+ createMXElement( 'splittb', mx_splittb, [ 'valueb', 'valuet', 'center', 'texcoord' ] ),
795
+ createMXElement( 'noise2d', mx_noise_materialx, [ 'texcoord', 'amplitude', 'pivot' ], true ),
796
+ createMXElement( 'noise3d', mx_noise_materialx, [ 'position', 'amplitude', 'pivot' ], true ),
797
+ createMXElement( 'fractal2d', mx_fractal_noise_materialx_2d, [ 'texcoord', 'octaves', 'lacunarity', 'diminish', 'amplitude' ], true ),
798
+ createMXElement( 'fractal3d', mx_fractal_noise_materialx_3d, [ 'position', 'octaves', 'lacunarity', 'diminish', 'amplitude' ], true ),
799
+ createMXElement( 'cellnoise2d', mx_cell_noise_materialx, [ 'texcoord' ], true ),
800
+ createMXElement( 'cellnoise3d', mx_cell_noise_materialx, [ 'position' ], true ),
801
+ createMXElement( 'randomfloat', mx_randomfloat_materialx, [ 'in', 'min', 'max', 'seed' ], true ),
802
+ createMXElement( 'randomcolor', mx_randomcolor, [ 'in', 'huelow', 'huehigh', 'saturationlow', 'saturationhigh', 'brightnesslow', 'brightnesshigh', 'seed' ] ),
803
+ createMXElement( 'worleynoise2d', mx_worley_noise_materialx_2d, [ 'texcoord', 'jitter', 'style' ], true ),
804
+ createMXElement( 'worleynoise3d', mx_worley_noise_materialx_3d, [ 'position', 'jitter', 'style' ], true ),
879
805
  createMXElement(
880
806
  'unifiednoise2d',
881
807
  mx_unifiednoise2d,
@@ -893,20 +819,6 @@ const MXElements = [
893
819
  'diminish',
894
820
  'style',
895
821
  ],
896
- {
897
- type: defaultInt( 0 ),
898
- texcoord: defaultVec2( 0, 0 ),
899
- freq: defaultVec2( 1, 1 ),
900
- offset: defaultVec2( 0, 0 ),
901
- jitter: defaultFloat( 1 ),
902
- outmin: defaultFloat( 0 ),
903
- outmax: defaultFloat( 1 ),
904
- clampoutput: defaultBool( true ),
905
- octaves: defaultInt( 3 ),
906
- lacunarity: defaultFloat( 2 ),
907
- diminish: defaultFloat( 0.5 ),
908
- style: defaultInt( 0 ),
909
- },
910
822
  ),
911
823
  createMXElement(
912
824
  'unifiednoise3d',
@@ -925,95 +837,33 @@ const MXElements = [
925
837
  'diminish',
926
838
  'style',
927
839
  ],
928
- {
929
- type: defaultInt( 0 ),
930
- position: () => positionLocal,
931
- freq: defaultVec3( 1, 1, 1 ),
932
- offset: defaultVec3( 0, 0, 0 ),
933
- jitter: defaultFloat( 1 ),
934
- outmin: defaultFloat( 0 ),
935
- outmax: defaultFloat( 1 ),
936
- clampoutput: defaultBool( true ),
937
- octaves: defaultInt( 3 ),
938
- lacunarity: defaultFloat( 2 ),
939
- diminish: defaultFloat( 0.5 ),
940
- style: defaultInt( 0 ),
941
- },
942
840
  ),
943
- createMXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset', 'operationorder' ], {
944
- texcoord: defaultVec2( 0, 0 ),
945
- pivot: defaultVec2( 0, 0 ),
946
- scale: defaultVec2( 1, 1 ),
947
- rotate: defaultFloat( 0 ),
948
- offset: defaultVec2( 0, 0 ),
949
- operationorder: defaultInt( 0 ),
950
- } ),
951
- createMXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ], { in1: defaultFloat( 0 ), in2: defaultFloat( 1 ) } ),
952
- createMXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ], {
953
- in: defaultFloat( 0 ),
954
- amount: defaultFloat( 1 ),
955
- pivot: defaultFloat( 0.5 ),
956
- } ),
957
- createMXElement( 'saturate', mx_saturation, [ 'in', 'amount' ], { in: defaultColor( 0, 0, 0 ), amount: defaultFloat( 1 ) } ),
958
- createMXElement( 'extract', element, [ 'in', 'index' ], { in: defaultFloat( 0 ), index: defaultInt( 0 ) } ),
959
- createMXElement( 'separate2', element, [ 'in' ], { in: defaultVec2( 0, 0 ) } ),
960
- createMXElement( 'separate3', element, [ 'in' ], { in: defaultVec3( 0, 0, 0 ) } ),
961
- createMXElement( 'separate4', element, [ 'in' ], { in: defaultVec4( 0, 0, 0, 0 ) } ),
962
- createMXElement( 'reflect', reflect, [ 'in', 'normal' ], { in: defaultVec3( 1, 0, 0 ) } ),
963
- createMXElement( 'refract', refract, [ 'in', 'normal', 'ior' ], { in: defaultVec3( 1, 0, 0 ), ior: defaultFloat( 1 ) } ),
841
+ createMXElement( 'place2d', mx_place2d, [ 'texcoord', 'pivot', 'scale', 'rotate', 'offset', 'operationorder' ] ),
842
+ createMXElement( 'safepower', mx_safepower, [ 'in1', 'in2' ] ),
843
+ createMXElement( 'contrast', mx_contrast, [ 'in', 'amount', 'pivot' ] ),
844
+ createMXElement( 'saturate', mx_saturation, [ 'in', 'amount' ] ),
845
+ createMXElement( 'extract', element, [ 'in', 'index' ] ),
846
+ createMXElement( 'separate2', element, [ 'in' ] ),
847
+ createMXElement( 'separate3', element, [ 'in' ] ),
848
+ createMXElement( 'separate4', element, [ 'in' ] ),
849
+ createMXElement( 'reflect', reflect, [ 'in', 'normal' ] ),
850
+ createMXElement( 'refract', refract, [ 'in', 'normal', 'ior' ] ),
964
851
  createMXElement( 'time', mx_timer ),
965
852
  createMXElement( 'frame', mx_frame ),
966
- createMXElement( 'ifgreater', mx_ifgreater, [ 'value1', 'value2', 'in1', 'in2' ], {
967
- value1: defaultFloat( 1 ),
968
- value2: defaultFloat( 0 ),
969
- in1: defaultFloat( 0 ),
970
- in2: defaultFloat( 0 ),
971
- } ),
972
- createMXElement( 'ifgreatereq', mx_ifgreatereq, [ 'value1', 'value2', 'in1', 'in2' ], {
973
- value1: defaultFloat( 1 ),
974
- value2: defaultFloat( 0 ),
975
- in1: defaultFloat( 0 ),
976
- in2: defaultFloat( 0 ),
977
- } ),
978
- createMXElement( 'ifequal', mx_ifequal, [ 'value1', 'value2', 'in1', 'in2' ], {
979
- value1: defaultFloat( 0 ),
980
- value2: defaultFloat( 0 ),
981
- in1: defaultFloat( 0 ),
982
- in2: defaultFloat( 0 ),
983
- } ),
984
- createMXElement( 'rotate2d', mx_rotate2d, [ 'in', 'amount' ], { in: defaultVec2( 0, 0 ), amount: defaultFloat( 0 ) } ),
985
- createMXElement( 'rotate3d', mx_rotate3d, [ 'in', 'amount', 'axis' ], {
986
- in: defaultVec3( 0, 0, 0 ),
987
- amount: defaultFloat( 0 ),
988
- axis: defaultVec3( 0, 1, 0 ),
989
- } ),
990
- createMXElement( 'heighttonormal', mx_heighttonormal, [ 'in', 'scale', 'texcoord' ], {
991
- in: defaultFloat( 0 ),
992
- scale: defaultFloat( 1 ),
993
- } ),
994
- createMXElement( 'and', mx_and, [ 'in1', 'in2' ], { in1: defaultBool( false ), in2: defaultBool( false ) } ),
995
- createMXElement( 'or', mx_or, [ 'in1', 'in2' ], { in1: defaultBool( false ), in2: defaultBool( false ) } ),
996
- createMXElement( 'xor', mx_xor, [ 'in1', 'in2' ], { in1: defaultBool( false ), in2: defaultBool( false ) } ),
997
- createMXElement( 'not', mx_not, [ 'in' ], { in: defaultBool( false ) } ),
998
- createMXElement( 'checkerboard', mx_checkerboard, [ 'color1', 'color2', 'uvtiling', 'uvoffset', 'texcoord' ], {
999
- color1: defaultColor( 1, 1, 1 ),
1000
- color2: defaultColor( 0, 0, 0 ),
1001
- uvtiling: defaultVec2( 8, 8 ),
1002
- uvoffset: defaultVec2( 0, 0 ),
1003
- texcoord: defaultVec2( 0, 0 ),
1004
- } ),
1005
- createMXElement( 'circle', mx_circle, [ 'texcoord', 'center', 'radius' ], {
1006
- center: defaultVec2( 0, 0 ),
1007
- radius: defaultFloat( 0.5 ),
1008
- } ),
1009
- createMXElement( 'bump', mx_bump, [ 'height', 'scale', 'normal', 'tangent', 'bitangent' ], {
1010
- height: defaultFloat( 0 ),
1011
- scale: defaultFloat( 1 ),
1012
- normal: () => normalWorld,
1013
- tangent: () => tangentWorld,
1014
- bitangent: () => bitangentWorld,
1015
- } ),
1016
- createMXElement( 'blackbody', mx_blackbody, [ 'temperature' ], { temperature: defaultFloat( 5000 ) } ),
853
+ createMXElement( 'ifgreater', mx_ifgreater, [ 'value1', 'value2', 'in1', 'in2' ] ),
854
+ createMXElement( 'ifgreatereq', mx_ifgreatereq, [ 'value1', 'value2', 'in1', 'in2' ] ),
855
+ createMXElement( 'ifequal', mx_ifequal, [ 'value1', 'value2', 'in1', 'in2' ] ),
856
+ createMXElement( 'rotate2d', mx_rotate2d, [ 'in', 'amount' ] ),
857
+ createMXElement( 'rotate3d', mx_rotate3d, [ 'in', 'amount', 'axis' ] ),
858
+ createMXElement( 'heighttonormal', mx_heighttonormal, [ 'in', 'scale', 'texcoord' ] ),
859
+ createMXElement( 'and', mx_and, [ 'in1', 'in2' ] ),
860
+ createMXElement( 'or', mx_or, [ 'in1', 'in2' ] ),
861
+ createMXElement( 'xor', mx_xor, [ 'in1', 'in2' ] ),
862
+ createMXElement( 'not', mx_not, [ 'in' ] ),
863
+ createMXElement( 'checkerboard', mx_checkerboard, [ 'color1', 'color2', 'uvtiling', 'uvoffset', 'texcoord' ] ),
864
+ createMXElement( 'circle', mx_circle, [ 'texcoord', 'center', 'radius' ] ),
865
+ createMXElement( 'bump', mx_bump, [ 'height', 'scale', 'normal', 'tangent', 'bitangent' ] ),
866
+ createMXElement( 'blackbody', mx_blackbody, [ 'temperature' ] ),
1017
867
  ];
1018
868
 
1019
869
  const MtlXLibrary = Object.fromEntries( MXElements.map( ( entry ) => [ entry.name, entry ] ) );