super-three 0.167.0 → 0.169.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 (387) hide show
  1. package/build/three.cjs +532 -173
  2. package/build/three.module.js +532 -174
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +18173 -14266
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +79941 -0
  7. package/build/three.webgpu.nodes.min.js +6 -0
  8. package/examples/jsm/Addons.js +0 -4
  9. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  10. package/examples/jsm/capabilities/WebGL.js +27 -21
  11. package/examples/jsm/controls/ArcballControls.js +174 -158
  12. package/examples/jsm/controls/DragControls.js +260 -132
  13. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  14. package/examples/jsm/controls/FlyControls.js +194 -188
  15. package/examples/jsm/controls/OrbitControls.js +777 -786
  16. package/examples/jsm/controls/PointerLockControls.js +24 -15
  17. package/examples/jsm/controls/TrackballControls.js +469 -448
  18. package/examples/jsm/controls/TransformControls.js +97 -62
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  20. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  21. package/examples/jsm/effects/StereoEffect.js +6 -1
  22. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  23. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  24. package/examples/jsm/exporters/EXRExporter.js +19 -11
  25. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  26. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  27. package/examples/jsm/exporters/OBJExporter.js +5 -1
  28. package/examples/jsm/exporters/PLYExporter.js +9 -7
  29. package/examples/jsm/exporters/USDZExporter.js +29 -8
  30. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  31. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  32. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  33. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  34. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  35. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  36. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  37. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  38. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  39. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  40. package/examples/jsm/loaders/FBXLoader.js +30 -20
  41. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  42. package/examples/jsm/loaders/KTX2Loader.js +27 -12
  43. package/examples/jsm/loaders/MTLLoader.js +4 -3
  44. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  45. package/examples/jsm/loaders/OBJLoader.js +5 -3
  46. package/examples/jsm/loaders/PCDLoader.js +14 -13
  47. package/examples/jsm/loaders/PDBLoader.js +3 -2
  48. package/examples/jsm/loaders/PLYLoader.js +8 -5
  49. package/examples/jsm/loaders/STLLoader.js +3 -2
  50. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  51. package/examples/jsm/loaders/VTKLoader.js +4 -3
  52. package/examples/jsm/loaders/XYZLoader.js +3 -2
  53. package/examples/jsm/misc/Timer.js +1 -1
  54. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  55. package/examples/jsm/objects/LensflareMesh.js +322 -0
  56. package/examples/jsm/objects/SkyMesh.js +187 -0
  57. package/examples/jsm/objects/Water2Mesh.js +158 -0
  58. package/examples/jsm/objects/WaterMesh.js +101 -0
  59. package/examples/jsm/physics/JoltPhysics.js +1 -1
  60. package/examples/jsm/physics/RapierPhysics.js +21 -1
  61. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  62. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  63. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  64. package/examples/jsm/shaders/OutputShader.js +1 -1
  65. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  66. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  67. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  68. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  69. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  70. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  71. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  72. package/examples/jsm/utils/TextureUtils.js +2 -1
  73. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  74. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  75. package/package.json +3 -2
  76. package/src/Three.WebGPU.Nodes.js +200 -0
  77. package/src/Three.WebGPU.js +7 -0
  78. package/src/Three.js +1 -0
  79. package/src/audio/Audio.js +2 -2
  80. package/src/constants.js +1 -1
  81. package/src/core/BufferAttribute.js +0 -9
  82. package/src/core/Clock.js +1 -1
  83. package/src/core/InterleavedBuffer.js +0 -9
  84. package/src/extras/Controls.js +32 -0
  85. package/src/geometries/CylinderGeometry.js +11 -4
  86. package/src/loaders/MaterialLoader.js +7 -1
  87. package/src/loaders/ObjectLoader.js +3 -3
  88. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
  89. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
  90. package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
  91. package/src/materials/Material.js +4 -7
  92. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  93. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
  94. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
  95. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
  96. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
  97. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
  98. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
  99. package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
  100. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
  101. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
  102. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  103. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
  104. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
  105. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
  106. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
  107. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
  108. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
  109. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
  110. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
  111. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  112. package/src/math/Triangle.js +24 -0
  113. package/src/nodes/Nodes.js +103 -159
  114. package/src/nodes/TSL.js +179 -0
  115. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  116. package/src/nodes/accessors/BatchNode.js +53 -21
  117. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  118. package/src/nodes/accessors/BufferAttributeNode.js +8 -5
  119. package/src/nodes/accessors/BufferNode.js +7 -4
  120. package/src/nodes/accessors/Camera.js +13 -0
  121. package/src/nodes/accessors/ClippingNode.js +19 -13
  122. package/src/nodes/accessors/CubeTextureNode.js +9 -8
  123. package/src/nodes/accessors/InstanceNode.js +19 -15
  124. package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
  125. package/src/nodes/accessors/Lights.js +51 -0
  126. package/src/nodes/accessors/MaterialNode.js +56 -55
  127. package/src/nodes/accessors/MaterialProperties.js +3 -0
  128. package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
  129. package/src/nodes/accessors/ModelNode.js +47 -12
  130. package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
  131. package/src/nodes/accessors/MorphNode.js +17 -13
  132. package/src/nodes/accessors/Normal.js +88 -0
  133. package/src/nodes/accessors/Object3DNode.js +17 -33
  134. package/src/nodes/accessors/PointUVNode.js +9 -5
  135. package/src/nodes/accessors/Position.js +10 -0
  136. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  137. package/src/nodes/accessors/ReferenceNode.js +50 -7
  138. package/src/nodes/accessors/ReflectVector.js +10 -0
  139. package/src/nodes/accessors/RendererReferenceNode.js +12 -6
  140. package/src/nodes/accessors/SceneNode.js +9 -6
  141. package/src/nodes/accessors/SkinningNode.js +88 -21
  142. package/src/nodes/accessors/StorageBufferNode.js +22 -5
  143. package/src/nodes/accessors/StorageTextureNode.js +9 -6
  144. package/src/nodes/accessors/Tangent.js +22 -0
  145. package/src/nodes/accessors/Texture3DNode.js +16 -13
  146. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  147. package/src/nodes/accessors/TextureNode.js +29 -23
  148. package/src/nodes/accessors/TextureSizeNode.js +10 -9
  149. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
  150. package/src/nodes/accessors/UserDataNode.js +10 -7
  151. package/src/nodes/accessors/VelocityNode.js +134 -0
  152. package/src/nodes/accessors/VertexColorNode.js +7 -4
  153. package/src/nodes/code/CodeNode.js +9 -5
  154. package/src/nodes/code/ExpressionNode.js +10 -6
  155. package/src/nodes/code/FunctionCallNode.js +8 -5
  156. package/src/nodes/code/FunctionNode.js +8 -23
  157. package/src/nodes/code/ScriptableNode.js +13 -10
  158. package/src/nodes/code/ScriptableValueNode.js +9 -7
  159. package/src/nodes/core/AssignNode.js +12 -9
  160. package/src/nodes/core/AttributeNode.js +12 -21
  161. package/src/nodes/core/BypassNode.js +11 -7
  162. package/src/nodes/core/CacheNode.js +10 -6
  163. package/src/nodes/core/ConstNode.js +6 -3
  164. package/src/nodes/core/ContextNode.js +21 -11
  165. package/src/nodes/core/IndexNode.js +35 -8
  166. package/src/nodes/core/InputNode.js +7 -3
  167. package/src/nodes/core/MRTNode.js +16 -7
  168. package/src/nodes/core/Node.js +19 -40
  169. package/src/nodes/core/NodeBuilder.js +117 -38
  170. package/src/nodes/core/NodeUtils.js +49 -6
  171. package/src/nodes/core/OutputStructNode.js +10 -6
  172. package/src/nodes/core/ParameterNode.js +7 -4
  173. package/src/nodes/core/PropertyNode.js +36 -32
  174. package/src/nodes/core/StackNode.js +31 -11
  175. package/src/nodes/core/StructTypeNode.js +7 -3
  176. package/src/nodes/core/TempNode.js +8 -4
  177. package/src/nodes/core/UniformGroupNode.js +14 -11
  178. package/src/nodes/core/UniformNode.js +7 -4
  179. package/src/nodes/core/VarNode.js +12 -8
  180. package/src/nodes/core/VaryingNode.js +10 -6
  181. package/src/nodes/display/AfterImageNode.js +15 -9
  182. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  183. package/src/nodes/display/AnamorphicNode.js +17 -11
  184. package/src/nodes/display/BleachBypass.js +26 -0
  185. package/src/nodes/display/BlendMode.js +54 -0
  186. package/src/nodes/display/BloomNode.js +27 -19
  187. package/src/nodes/display/BumpMapNode.js +13 -12
  188. package/src/nodes/display/ColorAdjustment.js +46 -0
  189. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  190. package/src/nodes/display/ColorSpaceNode.js +67 -61
  191. package/src/nodes/display/DenoiseNode.js +23 -17
  192. package/src/nodes/display/DepthOfFieldNode.js +12 -7
  193. package/src/nodes/display/DotScreenNode.js +13 -22
  194. package/src/nodes/display/FXAANode.js +21 -16
  195. package/src/nodes/display/FilmNode.js +11 -7
  196. package/src/nodes/display/FrontFacingNode.js +10 -6
  197. package/src/nodes/display/GTAONode.js +22 -15
  198. package/src/nodes/display/GaussianBlurNode.js +14 -8
  199. package/src/nodes/display/Lut3DNode.js +10 -6
  200. package/src/nodes/display/MotionBlur.js +25 -0
  201. package/src/nodes/display/NormalMapNode.js +13 -13
  202. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  203. package/src/nodes/display/PassNode.js +95 -8
  204. package/src/nodes/display/PixelationPassNode.js +20 -8
  205. package/src/nodes/display/PosterizeNode.js +8 -7
  206. package/src/nodes/display/RGBShiftNode.js +11 -7
  207. package/src/nodes/display/RenderOutputNode.js +15 -11
  208. package/src/nodes/display/SSAAPassNode.js +287 -0
  209. package/src/nodes/display/ScreenNode.js +181 -0
  210. package/src/nodes/display/Sepia.js +17 -0
  211. package/src/nodes/display/SobelOperatorNode.js +13 -8
  212. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  213. package/src/nodes/display/StereoPassNode.js +83 -0
  214. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  215. package/src/nodes/display/ToneMappingNode.js +15 -175
  216. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  217. package/src/nodes/display/TransitionNode.js +12 -8
  218. package/src/nodes/display/ViewportDepthNode.js +34 -29
  219. package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
  220. package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
  221. package/src/nodes/display/ViewportTextureNode.js +11 -11
  222. package/src/nodes/fog/FogExp2Node.js +8 -7
  223. package/src/nodes/fog/FogNode.js +10 -8
  224. package/src/nodes/fog/FogRangeNode.js +8 -7
  225. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  226. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  227. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  228. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  229. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  230. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  231. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  232. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  233. package/src/nodes/functions/BSDF/LTC.js +6 -6
  234. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  235. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  236. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  237. package/src/nodes/functions/BasicLightingModel.js +1 -1
  238. package/src/nodes/functions/PhongLightingModel.js +5 -5
  239. package/src/nodes/functions/PhysicalLightingModel.js +34 -33
  240. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  241. package/src/nodes/functions/ToonLightingModel.js +3 -3
  242. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  243. package/src/nodes/functions/material/getRoughness.js +2 -2
  244. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  245. package/src/nodes/geometry/RangeNode.js +9 -5
  246. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  247. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  248. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  249. package/src/nodes/gpgpu/ComputeNode.js +10 -6
  250. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  251. package/src/nodes/lighting/AONode.js +6 -3
  252. package/src/nodes/lighting/AmbientLightNode.js +6 -8
  253. package/src/nodes/lighting/AnalyticLightNode.js +225 -36
  254. package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
  255. package/src/nodes/lighting/BasicLightMapNode.js +7 -4
  256. package/src/nodes/lighting/DirectionalLightNode.js +7 -9
  257. package/src/nodes/lighting/EnvironmentNode.js +23 -19
  258. package/src/nodes/lighting/HemisphereLightNode.js +11 -11
  259. package/src/nodes/lighting/IESSpotLightNode.js +7 -9
  260. package/src/nodes/lighting/IrradianceNode.js +6 -3
  261. package/src/nodes/lighting/LightProbeNode.js +53 -0
  262. package/src/nodes/lighting/LightUtils.js +3 -3
  263. package/src/nodes/lighting/LightingContextNode.js +19 -18
  264. package/src/nodes/lighting/LightingNode.js +7 -3
  265. package/src/nodes/lighting/LightsNode.js +112 -75
  266. package/src/nodes/lighting/PointLightNode.js +12 -13
  267. package/src/nodes/lighting/RectAreaLightNode.js +11 -11
  268. package/src/nodes/lighting/SpotLightNode.js +14 -16
  269. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  270. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  271. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  272. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  273. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
  274. package/src/nodes/math/Hash.js +13 -0
  275. package/src/nodes/math/MathNode.js +127 -124
  276. package/src/nodes/math/MathUtils.js +0 -7
  277. package/src/nodes/math/OperatorNode.js +97 -52
  278. package/src/nodes/math/TriNoise3D.js +19 -29
  279. package/src/nodes/pmrem/PMREMNode.js +61 -15
  280. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  281. package/src/nodes/procedural/Checker.js +14 -0
  282. package/src/nodes/tsl/TSLBase.js +30 -0
  283. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  284. package/src/nodes/utils/ArrayElementNode.js +8 -4
  285. package/src/nodes/utils/ConvertNode.js +7 -3
  286. package/src/nodes/utils/CubeMapNode.js +160 -0
  287. package/src/nodes/utils/Discard.js +8 -0
  288. package/src/nodes/utils/EquirectUVNode.js +9 -6
  289. package/src/nodes/utils/FlipNode.js +68 -0
  290. package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
  291. package/src/nodes/utils/JoinNode.js +6 -3
  292. package/src/nodes/utils/LoopNode.js +16 -6
  293. package/src/nodes/utils/MatcapUVNode.js +10 -7
  294. package/src/nodes/utils/MaxMipLevelNode.js +8 -5
  295. package/src/nodes/utils/OscNode.js +12 -8
  296. package/src/nodes/utils/Packing.js +4 -0
  297. package/src/nodes/utils/RTTNode.js +11 -8
  298. package/src/nodes/utils/ReflectorNode.js +12 -4
  299. package/src/nodes/utils/RemapNode.js +12 -8
  300. package/src/nodes/utils/RotateNode.js +8 -13
  301. package/src/nodes/utils/SetNode.js +7 -4
  302. package/src/nodes/utils/SplitNode.js +7 -3
  303. package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
  304. package/src/nodes/utils/SpriteUtils.js +47 -0
  305. package/src/nodes/utils/StorageArrayElementNode.js +11 -12
  306. package/src/nodes/utils/TimerNode.js +8 -5
  307. package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
  308. package/src/nodes/utils/UVUtils.js +19 -0
  309. package/src/nodes/utils/ViewportUtils.js +14 -0
  310. package/src/objects/BatchedMesh.js +78 -13
  311. package/src/objects/LOD.js +21 -0
  312. package/src/objects/Line.js +1 -0
  313. package/src/objects/Mesh.js +7 -23
  314. package/src/objects/Points.js +2 -0
  315. package/src/renderers/WebGLRenderer.js +88 -41
  316. package/src/renderers/common/Backend.js +2 -2
  317. package/src/renderers/common/Background.js +3 -1
  318. package/src/renderers/common/BindGroup.js +3 -1
  319. package/src/renderers/common/Bindings.js +13 -15
  320. package/src/renderers/common/BundleGroup.js +26 -0
  321. package/src/renderers/common/ClippingContext.js +15 -5
  322. package/src/renderers/common/CubeRenderTarget.js +9 -3
  323. package/src/renderers/common/PostProcessing.js +4 -1
  324. package/src/renderers/common/QuadMesh.js +2 -0
  325. package/src/renderers/common/RenderContext.js +23 -0
  326. package/src/renderers/common/RenderList.js +1 -1
  327. package/src/renderers/common/RenderObject.js +117 -6
  328. package/src/renderers/common/RenderObjects.js +8 -1
  329. package/src/renderers/common/Renderer.js +128 -94
  330. package/src/renderers/common/SampledTexture.js +12 -3
  331. package/src/renderers/common/Textures.js +8 -12
  332. package/src/renderers/common/extras/PMREMGenerator.js +19 -22
  333. package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
  334. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  335. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  336. package/src/renderers/common/nodes/Nodes.js +65 -19
  337. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  338. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  339. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  340. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  341. package/src/renderers/webgl/WebGLProgram.js +3 -1
  342. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  343. package/src/renderers/webgl/WebGLProperties.js +7 -0
  344. package/src/renderers/webgl/WebGLState.js +21 -0
  345. package/src/renderers/webgl/WebGLTextures.js +83 -4
  346. package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
  347. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
  348. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  349. package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
  350. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
  351. package/src/renderers/webgpu/WebGPUBackend.js +112 -86
  352. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  353. package/src/renderers/webgpu/WebGPURenderer.js +9 -6
  354. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  355. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  356. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
  357. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  358. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  359. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  360. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
  361. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  362. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
  363. package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
  364. package/src/renderers/webxr/WebXRManager.js +32 -25
  365. package/src/utils.js +33 -1
  366. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  367. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  368. package/examples/jsm/loaders/TiltLoader.js +0 -520
  369. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  370. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  371. package/src/nodes/accessors/CameraNode.js +0 -19
  372. package/src/nodes/accessors/NormalNode.js +0 -14
  373. package/src/nodes/accessors/PositionNode.js +0 -10
  374. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  375. package/src/nodes/accessors/TangentNode.js +0 -23
  376. package/src/nodes/core/NodeKeywords.js +0 -80
  377. package/src/nodes/display/BlendModeNode.js +0 -128
  378. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  379. package/src/nodes/display/ViewportNode.js +0 -137
  380. package/src/nodes/lighting/LightNode.js +0 -57
  381. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  382. package/src/nodes/math/HashNode.js +0 -34
  383. package/src/nodes/procedural/CheckerNode.js +0 -42
  384. package/src/nodes/utils/DiscardNode.js +0 -28
  385. package/src/nodes/utils/PackingNode.js +0 -55
  386. package/src/nodes/utils/RotateUVNode.js +0 -35
  387. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -3,11 +3,10 @@ import NodeAttribute from './NodeAttribute.js';
3
3
  import NodeVarying from './NodeVarying.js';
4
4
  import NodeVar from './NodeVar.js';
5
5
  import NodeCode from './NodeCode.js';
6
- import NodeKeywords from './NodeKeywords.js';
7
6
  import NodeCache from './NodeCache.js';
8
7
  import ParameterNode from './ParameterNode.js';
9
8
  import FunctionNode from '../code/FunctionNode.js';
10
- import { createNodeMaterialFromType, default as NodeMaterial } from '../materials/NodeMaterial.js';
9
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
11
10
  import { NodeUpdateType, defaultBuildStages, shaderStages } from './constants.js';
12
11
 
13
12
  import {
@@ -16,7 +15,7 @@ import {
16
15
  } from '../../renderers/common/nodes/NodeUniform.js';
17
16
 
18
17
  import { stack } from './StackNode.js';
19
- import { getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
18
+ import { getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
20
19
 
21
20
  import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
22
21
  import ChainMap from '../../renderers/common/ChainMap.js';
@@ -80,6 +79,8 @@ class NodeBuilder {
80
79
  this.updateAfterNodes = [];
81
80
  this.hashNodes = {};
82
81
 
82
+ this.monitor = null;
83
+
83
84
  this.lightsNode = null;
84
85
  this.environmentNode = null;
85
86
  this.fogNode = null;
@@ -108,12 +109,9 @@ class NodeBuilder {
108
109
  this.stacks = [];
109
110
  this.tab = '\t';
110
111
 
111
- this.instanceBindGroups = true;
112
-
113
112
  this.currentFunctionNode = null;
114
113
 
115
114
  this.context = {
116
- keywords: new NodeKeywords(),
117
115
  material: this.material
118
116
  };
119
117
 
@@ -125,9 +123,11 @@ class NodeBuilder {
125
123
  this.shaderStage = null;
126
124
  this.buildStage = null;
127
125
 
126
+ this.useComparisonMethod = false;
127
+
128
128
  }
129
129
 
130
- getBingGroupsCache() {
130
+ getBindGroupsCache() {
131
131
 
132
132
  let bindGroupsCache = rendererCache.get( this.renderer );
133
133
 
@@ -171,7 +171,7 @@ class NodeBuilder {
171
171
 
172
172
  _getBindGroup( groupName, bindings ) {
173
173
 
174
- const bindGroupsCache = this.getBingGroupsCache();
174
+ const bindGroupsCache = this.getBindGroupsCache();
175
175
 
176
176
  //
177
177
 
@@ -197,14 +197,15 @@ class NodeBuilder {
197
197
 
198
198
  if ( bindGroup === undefined ) {
199
199
 
200
- bindGroup = new BindGroup( groupName, bindingsArray );
200
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
201
+
201
202
  bindGroupsCache.set( bindingsArray, bindGroup );
202
203
 
203
204
  }
204
205
 
205
206
  } else {
206
207
 
207
- bindGroup = new BindGroup( groupName, bindingsArray );
208
+ bindGroup = new BindGroup( groupName, bindingsArray, this.bindingsIndexes[ groupName ].group, bindingsArray );
208
209
 
209
210
  }
210
211
 
@@ -276,6 +277,23 @@ class NodeBuilder {
276
277
 
277
278
  }
278
279
 
280
+ sortBindingGroups() {
281
+
282
+ const bindingsGroups = this.getBindings();
283
+
284
+ bindingsGroups.sort( ( a, b ) => ( a.bindings[ 0 ].groupNode.order - b.bindings[ 0 ].groupNode.order ) );
285
+
286
+ for ( let i = 0; i < bindingsGroups.length; i ++ ) {
287
+
288
+ const bindingGroup = bindingsGroups[ i ];
289
+ this.bindingsIndexes[ bindingGroup.name ].group = i;
290
+
291
+ bindingGroup.index = i;
292
+
293
+ }
294
+
295
+ }
296
+
279
297
  setHashNode( node, hash ) {
280
298
 
281
299
  this.hashNodes[ hash ] = node;
@@ -310,13 +328,13 @@ class NodeBuilder {
310
328
 
311
329
  if ( updateBeforeType !== NodeUpdateType.NONE ) {
312
330
 
313
- this.updateBeforeNodes.push( node );
331
+ this.updateBeforeNodes.push( node.getSelf() );
314
332
 
315
333
  }
316
334
 
317
335
  if ( updateAfterType !== NodeUpdateType.NONE ) {
318
336
 
319
- this.updateAfterNodes.push( node );
337
+ this.updateAfterNodes.push( node.getSelf() );
320
338
 
321
339
  }
322
340
 
@@ -399,7 +417,6 @@ class NodeBuilder {
399
417
 
400
418
  const context = { ...this.context };
401
419
 
402
- delete context.keywords;
403
420
  delete context.material;
404
421
 
405
422
  return this.context;
@@ -469,6 +486,15 @@ class NodeBuilder {
469
486
 
470
487
  }
471
488
 
489
+ increaseUsage( node ) {
490
+
491
+ const nodeData = this.getDataFromNode( node );
492
+ nodeData.usageCount = nodeData.usageCount === undefined ? 1 : nodeData.usageCount + 1;
493
+
494
+ return nodeData.usageCount;
495
+
496
+ }
497
+
472
498
  generateTexture( /* texture, textureProperty, uvSnippet */ ) {
473
499
 
474
500
  console.warn( 'Abstract function.' );
@@ -596,7 +622,7 @@ class NodeBuilder {
596
622
 
597
623
  }
598
624
 
599
- needsColorSpaceToLinear( /*texture*/ ) {
625
+ needsToWorkingColorSpace( /*texture*/ ) {
600
626
 
601
627
  return false;
602
628
 
@@ -915,10 +941,59 @@ class NodeBuilder {
915
941
 
916
942
  }
917
943
 
918
- addLineFlowCode( code ) {
944
+ addFlowCodeHierarchy( node, nodeBlock ) {
945
+
946
+ const { flowCodes, flowCodeBlock } = this.getDataFromNode( node );
947
+
948
+ let needsFlowCode = true;
949
+ let nodeBlockHierarchy = nodeBlock;
950
+
951
+ while ( nodeBlockHierarchy ) {
952
+
953
+ if ( flowCodeBlock.get( nodeBlockHierarchy ) === true ) {
954
+
955
+ needsFlowCode = false;
956
+ break;
957
+
958
+ }
959
+
960
+ nodeBlockHierarchy = this.getDataFromNode( nodeBlockHierarchy ).parentNodeBlock;
961
+
962
+ }
963
+
964
+ if ( needsFlowCode ) {
965
+
966
+ for ( const flowCode of flowCodes ) {
967
+
968
+ this.addLineFlowCode( flowCode );
969
+
970
+ }
971
+
972
+ }
973
+
974
+ }
975
+
976
+ addLineFlowCodeBlock( node, code, nodeBlock ) {
977
+
978
+ const nodeData = this.getDataFromNode( node );
979
+ const flowCodes = nodeData.flowCodes || ( nodeData.flowCodes = [] );
980
+ const codeBlock = nodeData.flowCodeBlock || ( nodeData.flowCodeBlock = new WeakMap() );
981
+
982
+ flowCodes.push( code );
983
+ codeBlock.set( nodeBlock, true );
984
+
985
+ }
986
+
987
+ addLineFlowCode( code, node = null ) {
919
988
 
920
989
  if ( code === '' ) return this;
921
990
 
991
+ if ( node !== null && this.context.nodeBlock ) {
992
+
993
+ this.addLineFlowCodeBlock( node, code, this.context.nodeBlock );
994
+
995
+ }
996
+
922
997
  code = this.tab + code;
923
998
 
924
999
  if ( ! /;\s*$/.test( code ) ) {
@@ -995,27 +1070,24 @@ class NodeBuilder {
995
1070
 
996
1071
  const layout = shaderNode.layout;
997
1072
 
998
- let inputs;
999
-
1000
- if ( shaderNode.isArrayInput ) {
1073
+ const inputs = {
1074
+ [ Symbol.iterator ]() {
1001
1075
 
1002
- inputs = [];
1003
-
1004
- for ( const input of layout.inputs ) {
1005
-
1006
- inputs.push( new ParameterNode( input.type, input.name ) );
1076
+ let index = 0;
1077
+ const values = Object.values( this );
1078
+ return {
1079
+ next: () => ( {
1080
+ value: values[ index ],
1081
+ done: index ++ >= values.length
1082
+ } )
1083
+ };
1007
1084
 
1008
1085
  }
1086
+ };
1009
1087
 
1010
- } else {
1011
-
1012
- inputs = {};
1013
-
1014
- for ( const input of layout.inputs ) {
1015
-
1016
- inputs[ input.name ] = new ParameterNode( input.type, input.name );
1088
+ for ( const input of layout.inputs ) {
1017
1089
 
1018
- }
1090
+ inputs[ input.name ] = new ParameterNode( input.type, input.name );
1019
1091
 
1020
1092
  }
1021
1093
 
@@ -1224,12 +1296,21 @@ class NodeBuilder {
1224
1296
 
1225
1297
  build() {
1226
1298
 
1227
- const { object, material } = this;
1228
-
1299
+ const { object, material, renderer } = this;
1229
1300
 
1230
1301
  if ( material !== null ) {
1231
1302
 
1232
- NodeMaterial.fromMaterial( material ).build( this );
1303
+ let nodeMaterial = renderer.nodes.library.fromMaterial( material );
1304
+
1305
+ if ( nodeMaterial === null ) {
1306
+
1307
+ console.error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
1308
+
1309
+ nodeMaterial = new NodeMaterial();
1310
+
1311
+ }
1312
+
1313
+ nodeMaterial.build( this );
1233
1314
 
1234
1315
  } else {
1235
1316
 
@@ -1301,11 +1382,9 @@ class NodeBuilder {
1301
1382
 
1302
1383
  }
1303
1384
 
1304
- createNodeMaterial( type = 'NodeMaterial' ) {
1305
-
1306
- // TODO: Move Materials.js to outside of the Nodes.js in order to remove this function and improve tree-shaking support
1385
+ createNodeMaterial( type = 'NodeMaterial' ) { // @deprecated, r168
1307
1386
 
1308
- return createNodeMaterialFromType( type );
1387
+ throw new Error( `THREE.NodeBuilder: createNodeMaterial() was deprecated. Use new ${ type }() instead.` );
1309
1388
 
1310
1389
  }
1311
1390
 
@@ -5,25 +5,68 @@ import { Vector2 } from '../../math/Vector2.js';
5
5
  import { Vector3 } from '../../math/Vector3.js';
6
6
  import { Vector4 } from '../../math/Vector4.js';
7
7
 
8
+ // cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
9
+ // A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
10
+ // Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
11
+ // See https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480#52171480
12
+ // https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js
13
+ function cyrb53( value, seed = 0 ) {
14
+
15
+ let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
16
+
17
+ if ( value instanceof Array ) {
18
+
19
+ for ( let i = 0, val; i < value.length; i ++ ) {
20
+
21
+ val = value[ i ];
22
+ h1 = Math.imul( h1 ^ val, 2654435761 );
23
+ h2 = Math.imul( h2 ^ val, 1597334677 );
24
+
25
+ }
26
+
27
+ } else {
28
+
29
+ for ( let i = 0, ch; i < value.length; i ++ ) {
30
+
31
+ ch = value.charCodeAt( i );
32
+ h1 = Math.imul( h1 ^ ch, 2654435761 );
33
+ h2 = Math.imul( h2 ^ ch, 1597334677 );
34
+
35
+ }
36
+
37
+ }
38
+
39
+ h1 = Math.imul( h1 ^ ( h1 >>> 16 ), 2246822507 );
40
+ h1 ^= Math.imul( h2 ^ ( h2 >>> 13 ), 3266489909 );
41
+ h2 = Math.imul( h2 ^ ( h2 >>> 16 ), 2246822507 );
42
+ h2 ^= Math.imul( h1 ^ ( h1 >>> 13 ), 3266489909 );
43
+
44
+ return 4294967296 * ( 2097151 & h2 ) + ( h1 >>> 0 );
45
+
46
+ }
47
+
48
+ export const hashString = ( str ) => cyrb53( str );
49
+ export const hashArray = ( array ) => cyrb53( array );
50
+ export const hash = ( ...params ) => cyrb53( params );
51
+
8
52
  export function getCacheKey( object, force = false ) {
9
53
 
10
- let cacheKey = '{';
54
+ const values = [];
11
55
 
12
56
  if ( object.isNode === true ) {
13
57
 
14
- cacheKey += object.id;
58
+ values.push( object.id );
59
+ object = object.getSelf();
15
60
 
16
61
  }
17
62
 
18
63
  for ( const { property, childNode } of getNodeChildren( object ) ) {
19
64
 
20
- cacheKey += ',' + property.slice( 0, - 4 ) + ':' + childNode.getCacheKey( force );
65
+ values.push( values, cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
21
66
 
22
67
  }
23
68
 
24
- cacheKey += '}';
25
-
26
- return cacheKey;
69
+ return cyrb53( values );
27
70
 
28
71
  }
29
72
 
@@ -1,9 +1,15 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node from './Node.js';
2
2
  import StructTypeNode from './StructTypeNode.js';
3
- import { nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy } from '../tsl/TSLBase.js';
4
4
 
5
5
  class OutputStructNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'OutputStructNode';
10
+
11
+ }
12
+
7
13
  constructor( ...members ) {
8
14
 
9
15
  super();
@@ -42,7 +48,7 @@ class OutputStructNode extends Node {
42
48
 
43
49
  const snippet = members[ i ].build( builder, output );
44
50
 
45
- builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }` );
51
+ builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );
46
52
 
47
53
  }
48
54
 
@@ -54,6 +60,4 @@ class OutputStructNode extends Node {
54
60
 
55
61
  export default OutputStructNode;
56
62
 
57
- export const outputStruct = nodeProxy( OutputStructNode );
58
-
59
- addNodeClass( 'OutputStructNode', OutputStructNode );
63
+ export const outputStruct = /*@__PURE__*/ nodeProxy( OutputStructNode );
@@ -1,9 +1,14 @@
1
- import { addNodeClass } from './Node.js';
2
- import { nodeObject } from '../shadernode/ShaderNode.js';
1
+ import { nodeObject } from '../tsl/TSLBase.js';
3
2
  import PropertyNode from './PropertyNode.js';
4
3
 
5
4
  class ParameterNode extends PropertyNode {
6
5
 
6
+ static get type() {
7
+
8
+ return 'ParameterNode';
9
+
10
+ }
11
+
7
12
  constructor( nodeType, name = null ) {
8
13
 
9
14
  super( nodeType, name );
@@ -29,5 +34,3 @@ class ParameterNode extends PropertyNode {
29
34
  export default ParameterNode;
30
35
 
31
36
  export const parameter = ( type, name ) => nodeObject( new ParameterNode( type, name ) );
32
-
33
- addNodeClass( 'ParameterNode', ParameterNode );
@@ -1,8 +1,14 @@
1
- import Node, { addNodeClass } from './Node.js';
2
- import { nodeImmutable, nodeObject } from '../shadernode/ShaderNode.js';
1
+ import Node from './Node.js';
2
+ import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
3
3
 
4
4
  class PropertyNode extends Node {
5
5
 
6
+ static get type() {
7
+
8
+ return 'PropertyNode';
9
+
10
+ }
11
+
6
12
  constructor( nodeType, name = null, varying = false ) {
7
13
 
8
14
  super( nodeType );
@@ -52,33 +58,31 @@ export default PropertyNode;
52
58
  export const property = ( type, name ) => nodeObject( new PropertyNode( type, name ) );
53
59
  export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( type, name, true ) );
54
60
 
55
- export const diffuseColor = nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
56
- export const emissive = nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );
57
- export const roughness = nodeImmutable( PropertyNode, 'float', 'Roughness' );
58
- export const metalness = nodeImmutable( PropertyNode, 'float', 'Metalness' );
59
- export const clearcoat = nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
60
- export const clearcoatRoughness = nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
61
- export const sheen = nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
62
- export const sheenRoughness = nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
63
- export const iridescence = nodeImmutable( PropertyNode, 'float', 'Iridescence' );
64
- export const iridescenceIOR = nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );
65
- export const iridescenceThickness = nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );
66
- export const alphaT = nodeImmutable( PropertyNode, 'float', 'AlphaT' );
67
- export const anisotropy = nodeImmutable( PropertyNode, 'float', 'Anisotropy' );
68
- export const anisotropyT = nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );
69
- export const anisotropyB = nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );
70
- export const specularColor = nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
71
- export const specularF90 = nodeImmutable( PropertyNode, 'float', 'SpecularF90' );
72
- export const shininess = nodeImmutable( PropertyNode, 'float', 'Shininess' );
73
- export const output = nodeImmutable( PropertyNode, 'vec4', 'Output' );
74
- export const dashSize = nodeImmutable( PropertyNode, 'float', 'dashSize' );
75
- export const gapSize = nodeImmutable( PropertyNode, 'float', 'gapSize' );
76
- export const pointWidth = nodeImmutable( PropertyNode, 'float', 'pointWidth' );
77
- export const ior = nodeImmutable( PropertyNode, 'float', 'IOR' );
78
- export const transmission = nodeImmutable( PropertyNode, 'float', 'Transmission' );
79
- export const thickness = nodeImmutable( PropertyNode, 'float', 'Thickness' );
80
- export const attenuationDistance = nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
81
- export const attenuationColor = nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
82
- export const dispersion = nodeImmutable( PropertyNode, 'float', 'Dispersion' );
83
-
84
- addNodeClass( 'PropertyNode', PropertyNode );
61
+ export const diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
62
+ export const emissive = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );
63
+ export const roughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Roughness' );
64
+ export const metalness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Metalness' );
65
+ export const clearcoat = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
66
+ export const clearcoatRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
67
+ export const sheen = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
68
+ export const sheenRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
69
+ export const iridescence = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Iridescence' );
70
+ export const iridescenceIOR = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );
71
+ export const iridescenceThickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );
72
+ export const alphaT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AlphaT' );
73
+ export const anisotropy = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Anisotropy' );
74
+ export const anisotropyT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );
75
+ export const anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );
76
+ export const specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
77
+ export const specularF90 = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SpecularF90' );
78
+ export const shininess = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Shininess' );
79
+ export const output = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'Output' );
80
+ export const dashSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'dashSize' );
81
+ export const gapSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'gapSize' );
82
+ export const pointWidth = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'pointWidth' );
83
+ export const ior = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IOR' );
84
+ export const transmission = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Transmission' );
85
+ export const thickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Thickness' );
86
+ export const attenuationDistance = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
87
+ export const attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
88
+ export const dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );
@@ -1,9 +1,15 @@
1
- import Node, { addNodeClass } from './Node.js';
2
- import { cond } from '../math/CondNode.js';
3
- import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
1
+ import Node from './Node.js';
2
+ import { select } from '../math/ConditionalNode.js';
3
+ import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
4
4
 
5
5
  class StackNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'StackNode';
10
+
11
+ }
12
+
7
13
  constructor( parent = null ) {
8
14
 
9
15
  super();
@@ -33,19 +39,19 @@ class StackNode extends Node {
33
39
 
34
40
  }
35
41
 
36
- if( boolNode, method ) {
42
+ If( boolNode, method ) {
37
43
 
38
44
  const methodNode = new ShaderNode( method );
39
- this._currentCond = cond( boolNode, methodNode );
45
+ this._currentCond = select( boolNode, methodNode );
40
46
 
41
47
  return this.add( this._currentCond );
42
48
 
43
49
  }
44
50
 
45
- elseif( boolNode, method ) {
51
+ ElseIf( boolNode, method ) {
46
52
 
47
53
  const methodNode = new ShaderNode( method );
48
- const ifNode = cond( boolNode, methodNode );
54
+ const ifNode = select( boolNode, methodNode );
49
55
 
50
56
  this._currentCond.elseNode = ifNode;
51
57
  this._currentCond = ifNode;
@@ -54,7 +60,7 @@ class StackNode extends Node {
54
60
 
55
61
  }
56
62
 
57
- else( method ) {
63
+ Else( method ) {
58
64
 
59
65
  this._currentCond.elseNode = new ShaderNode( method );
60
66
 
@@ -80,10 +86,24 @@ class StackNode extends Node {
80
86
 
81
87
  }
82
88
 
89
+ //
90
+
91
+ else( ...params ) { // @deprecated, r168
92
+
93
+ console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
94
+ return this.Else( ...params );
95
+
96
+ }
97
+
98
+ elseif( ...params ) { // @deprecated, r168
99
+
100
+ console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
101
+ return this.ElseIf( ...params );
102
+
103
+ }
104
+
83
105
  }
84
106
 
85
107
  export default StackNode;
86
108
 
87
- export const stack = nodeProxy( StackNode );
88
-
89
- addNodeClass( 'StackNode', StackNode );
109
+ export const stack = /*@__PURE__*/ nodeProxy( StackNode );
@@ -1,7 +1,13 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node from './Node.js';
2
2
 
3
3
  class StructTypeNode extends Node {
4
4
 
5
+ static get type() {
6
+
7
+ return 'StructTypeNode';
8
+
9
+ }
10
+
5
11
  constructor( types ) {
6
12
 
7
13
  super();
@@ -20,5 +26,3 @@ class StructTypeNode extends Node {
20
26
  }
21
27
 
22
28
  export default StructTypeNode;
23
-
24
- addNodeClass( 'StructTypeNode', StructTypeNode );
@@ -1,7 +1,13 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node from './Node.js';
2
2
 
3
3
  class TempNode extends Node {
4
4
 
5
+ static get type() {
6
+
7
+ return 'TempNode';
8
+
9
+ }
10
+
5
11
  constructor( type ) {
6
12
 
7
13
  super( type );
@@ -36,7 +42,7 @@ class TempNode extends Node {
36
42
  const nodeVar = builder.getVarFromNode( this, null, type );
37
43
  const propertyName = builder.getPropertyName( nodeVar );
38
44
 
39
- builder.addLineFlowCode( `${propertyName} = ${snippet}` );
45
+ builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
40
46
 
41
47
  nodeData.snippet = snippet;
42
48
  nodeData.propertyName = propertyName;
@@ -54,5 +60,3 @@ class TempNode extends Node {
54
60
  }
55
61
 
56
62
  export default TempNode;
57
-
58
- addNodeClass( 'TempNode', TempNode );
@@ -1,9 +1,14 @@
1
1
  import Node from './Node.js';
2
- import { addNodeClass } from './Node.js';
3
2
 
4
3
  class UniformGroupNode extends Node {
5
4
 
6
- constructor( name, shared = false ) {
5
+ static get type() {
6
+
7
+ return 'UniformGroupNode';
8
+
9
+ }
10
+
11
+ constructor( name, shared = false, order = 1 ) {
7
12
 
8
13
  super( 'string' );
9
14
 
@@ -11,7 +16,7 @@ class UniformGroupNode extends Node {
11
16
  this.version = 0;
12
17
 
13
18
  this.shared = shared;
14
-
19
+ this.order = order;
15
20
  this.isUniformGroup = true;
16
21
 
17
22
  }
@@ -44,13 +49,11 @@ class UniformGroupNode extends Node {
44
49
 
45
50
  }
46
51
 
47
- export const uniformGroup = ( name ) => new UniformGroupNode( name );
48
- export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
49
-
50
- export const frameGroup = sharedUniformGroup( 'frame' );
51
- export const renderGroup = sharedUniformGroup( 'render' );
52
- export const objectGroup = uniformGroup( 'object' );
53
-
54
52
  export default UniformGroupNode;
55
53
 
56
- addNodeClass( 'UniformGroupNode', UniformGroupNode );
54
+ export const uniformGroup = ( name ) => new UniformGroupNode( name );
55
+ export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
56
+
57
+ export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
58
+ export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
59
+ export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );