super-three 0.167.0 → 0.168.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 (311) hide show
  1. package/build/three.cjs +165 -44
  2. package/build/three.module.js +165 -45
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +23600 -21931
  5. package/build/three.webgpu.min.js +1 -1
  6. package/examples/jsm/Addons.js +3 -1
  7. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  8. package/examples/jsm/capabilities/WebGL.js +27 -21
  9. package/examples/jsm/controls/ArcballControls.js +174 -158
  10. package/examples/jsm/controls/DragControls.js +260 -132
  11. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  12. package/examples/jsm/controls/FlyControls.js +194 -188
  13. package/examples/jsm/controls/OrbitControls.js +777 -786
  14. package/examples/jsm/controls/PointerLockControls.js +24 -15
  15. package/examples/jsm/controls/TrackballControls.js +453 -452
  16. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  17. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  18. package/examples/jsm/effects/StereoEffect.js +6 -1
  19. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  20. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  21. package/examples/jsm/exporters/USDZExporter.js +29 -8
  22. package/examples/jsm/helpers/LightProbeHelper.js +42 -43
  23. package/examples/jsm/loaders/KTX2Loader.js +19 -7
  24. package/examples/jsm/loaders/MaterialXLoader.js +11 -4
  25. package/examples/jsm/loaders/PCDLoader.js +9 -9
  26. package/examples/jsm/objects/SkyMesh.js +188 -0
  27. package/examples/jsm/objects/Water2Mesh.js +159 -0
  28. package/examples/jsm/objects/WaterMesh.js +102 -0
  29. package/examples/jsm/physics/RapierPhysics.js +20 -0
  30. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  31. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  32. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  33. package/examples/jsm/shaders/OutputShader.js +1 -1
  34. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  35. package/examples/jsm/utils/TextureUtils.js +1 -1
  36. package/package.json +2 -1
  37. package/src/Three.WebGPU.js +6 -0
  38. package/src/Three.js +1 -0
  39. package/src/constants.js +1 -1
  40. package/src/extras/Controls.js +32 -0
  41. package/src/loaders/ObjectLoader.js +3 -3
  42. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +4 -4
  43. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +1 -2
  44. package/src/materials/Material.js +4 -7
  45. package/src/{nodes/materials → materials/nodes}/InstancedPointsNodeMaterial.js +33 -24
  46. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +34 -37
  47. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +3 -4
  48. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +7 -9
  49. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +11 -11
  50. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +5 -5
  51. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +8 -8
  52. package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
  53. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +9 -8
  54. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +18 -17
  55. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +6 -6
  56. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +17 -11
  57. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +4 -4
  58. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +67 -86
  59. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +1 -1
  60. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +3 -4
  61. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +4 -4
  62. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +11 -11
  63. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +14 -16
  64. package/src/nodes/Nodes.js +103 -159
  65. package/src/nodes/TSL.js +176 -0
  66. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  67. package/src/nodes/accessors/BatchNode.js +48 -20
  68. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  69. package/src/nodes/accessors/BufferAttributeNode.js +5 -5
  70. package/src/nodes/accessors/BufferNode.js +4 -4
  71. package/src/nodes/accessors/{CameraNode.js → Camera.js} +10 -10
  72. package/src/nodes/accessors/ClippingNode.js +16 -14
  73. package/src/nodes/accessors/CubeTextureNode.js +5 -7
  74. package/src/nodes/accessors/InstanceNode.js +17 -13
  75. package/src/nodes/accessors/InstancedPointsMaterialNode.js +4 -4
  76. package/src/nodes/accessors/MaterialNode.js +52 -55
  77. package/src/nodes/accessors/MaterialProperties.js +3 -0
  78. package/src/nodes/accessors/MaterialReferenceNode.js +6 -4
  79. package/src/nodes/accessors/ModelNode.js +11 -11
  80. package/src/nodes/accessors/ModelViewProjectionNode.js +6 -7
  81. package/src/nodes/accessors/MorphNode.js +12 -12
  82. package/src/nodes/accessors/Normal.js +62 -0
  83. package/src/nodes/accessors/Object3DNode.js +10 -10
  84. package/src/nodes/accessors/PointUVNode.js +4 -4
  85. package/src/nodes/accessors/Position.js +10 -0
  86. package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
  87. package/src/nodes/accessors/ReferenceNode.js +13 -7
  88. package/src/nodes/accessors/ReflectVector.js +10 -0
  89. package/src/nodes/accessors/RendererReferenceNode.js +6 -6
  90. package/src/nodes/accessors/SceneNode.js +5 -6
  91. package/src/nodes/accessors/SkinningNode.js +84 -21
  92. package/src/nodes/accessors/StorageBufferNode.js +4 -5
  93. package/src/nodes/accessors/StorageTextureNode.js +5 -5
  94. package/src/nodes/accessors/Tangent.js +22 -0
  95. package/src/nodes/accessors/Texture3DNode.js +11 -11
  96. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  97. package/src/nodes/accessors/TextureNode.js +16 -21
  98. package/src/nodes/accessors/TextureSizeNode.js +4 -6
  99. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +17 -8
  100. package/src/nodes/accessors/UserDataNode.js +4 -4
  101. package/src/nodes/accessors/VelocityNode.js +83 -0
  102. package/src/nodes/accessors/VertexColorNode.js +4 -4
  103. package/src/nodes/code/CodeNode.js +5 -5
  104. package/src/nodes/code/ExpressionNode.js +4 -4
  105. package/src/nodes/code/FunctionCallNode.js +5 -5
  106. package/src/nodes/code/FunctionNode.js +5 -23
  107. package/src/nodes/code/ScriptableNode.js +4 -6
  108. package/src/nodes/code/ScriptableValueNode.js +4 -6
  109. package/src/nodes/core/AssignNode.js +5 -5
  110. package/src/nodes/core/AttributeNode.js +7 -20
  111. package/src/nodes/core/BypassNode.js +5 -5
  112. package/src/nodes/core/CacheNode.js +5 -5
  113. package/src/nodes/core/ConstNode.js +2 -2
  114. package/src/nodes/core/ContextNode.js +17 -11
  115. package/src/nodes/core/IndexNode.js +12 -7
  116. package/src/nodes/core/InputNode.js +2 -2
  117. package/src/nodes/core/MRTNode.js +12 -6
  118. package/src/nodes/core/Node.js +39 -19
  119. package/src/nodes/core/NodeBuilder.js +46 -33
  120. package/src/nodes/core/NodeUtils.js +1 -0
  121. package/src/nodes/core/OutputStructNode.js +4 -4
  122. package/src/nodes/core/ParameterNode.js +4 -4
  123. package/src/nodes/core/PropertyNode.js +32 -32
  124. package/src/nodes/core/StackNode.js +26 -10
  125. package/src/nodes/core/StructTypeNode.js +2 -2
  126. package/src/nodes/core/TempNode.js +2 -2
  127. package/src/nodes/core/UniformGroupNode.js +8 -9
  128. package/src/nodes/core/UniformNode.js +4 -4
  129. package/src/nodes/core/VarNode.js +6 -6
  130. package/src/nodes/core/VaryingNode.js +5 -5
  131. package/src/nodes/display/AfterImageNode.js +9 -9
  132. package/src/nodes/display/AnaglyphPassNode.js +61 -0
  133. package/src/nodes/display/AnamorphicNode.js +11 -11
  134. package/src/nodes/display/BleachBypass.js +26 -0
  135. package/src/nodes/display/BlendMode.js +54 -0
  136. package/src/nodes/display/BloomNode.js +21 -19
  137. package/src/nodes/display/BumpMapNode.js +7 -12
  138. package/src/nodes/display/ColorAdjustment.js +46 -0
  139. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  140. package/src/nodes/display/ColorSpaceNode.js +40 -63
  141. package/src/nodes/display/DenoiseNode.js +20 -17
  142. package/src/nodes/display/DepthOfFieldNode.js +8 -6
  143. package/src/nodes/display/DotScreenNode.js +10 -22
  144. package/src/nodes/display/FXAANode.js +17 -15
  145. package/src/nodes/display/FilmNode.js +7 -6
  146. package/src/nodes/display/FrontFacingNode.js +5 -5
  147. package/src/nodes/display/GTAONode.js +19 -15
  148. package/src/nodes/display/GaussianBlurNode.js +11 -8
  149. package/src/nodes/display/Lut3DNode.js +6 -5
  150. package/src/nodes/display/MotionBlur.js +25 -0
  151. package/src/nodes/display/NormalMapNode.js +8 -10
  152. package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
  153. package/src/nodes/display/PassNode.js +84 -8
  154. package/src/nodes/display/PixelationPassNode.js +12 -7
  155. package/src/nodes/display/PosterizeNode.js +4 -6
  156. package/src/nodes/display/RGBShiftNode.js +8 -7
  157. package/src/nodes/display/RenderOutputNode.js +9 -9
  158. package/src/nodes/display/SSAAPassNode.js +284 -0
  159. package/src/nodes/display/Sepia.js +17 -0
  160. package/src/nodes/display/SobelOperatorNode.js +9 -7
  161. package/src/nodes/display/StereoCompositePassNode.js +107 -0
  162. package/src/nodes/display/StereoPassNode.js +80 -0
  163. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  164. package/src/nodes/display/ToneMappingNode.js +12 -173
  165. package/src/nodes/display/TransitionNode.js +9 -8
  166. package/src/nodes/display/ViewportDepthNode.js +30 -29
  167. package/src/nodes/display/ViewportDepthTextureNode.js +6 -8
  168. package/src/nodes/display/ViewportNode.js +26 -25
  169. package/src/nodes/display/ViewportSharedTextureNode.js +6 -8
  170. package/src/nodes/display/ViewportTextureNode.js +7 -10
  171. package/src/nodes/fog/FogExp2Node.js +4 -6
  172. package/src/nodes/fog/FogNode.js +5 -7
  173. package/src/nodes/fog/FogRangeNode.js +4 -6
  174. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  175. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  176. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  177. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  178. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  179. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  180. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  181. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  182. package/src/nodes/functions/BSDF/LTC.js +6 -6
  183. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  184. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  185. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  186. package/src/nodes/functions/BasicLightingModel.js +1 -1
  187. package/src/nodes/functions/PhongLightingModel.js +5 -5
  188. package/src/nodes/functions/PhysicalLightingModel.js +32 -31
  189. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  190. package/src/nodes/functions/ToonLightingModel.js +3 -3
  191. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  192. package/src/nodes/functions/material/getRoughness.js +2 -2
  193. package/src/nodes/geometry/RangeNode.js +4 -4
  194. package/src/nodes/gpgpu/ComputeNode.js +5 -5
  195. package/src/nodes/lighting/AONode.js +2 -2
  196. package/src/nodes/lighting/AmbientLightNode.js +2 -7
  197. package/src/nodes/lighting/AnalyticLightNode.js +34 -13
  198. package/src/nodes/lighting/BasicEnvironmentNode.js +4 -3
  199. package/src/nodes/lighting/BasicLightMapNode.js +3 -3
  200. package/src/nodes/lighting/DirectionalLightNode.js +2 -7
  201. package/src/nodes/lighting/EnvironmentNode.js +20 -19
  202. package/src/nodes/lighting/HemisphereLightNode.js +3 -7
  203. package/src/nodes/lighting/IESSpotLightNode.js +3 -8
  204. package/src/nodes/lighting/IrradianceNode.js +2 -2
  205. package/src/nodes/lighting/LightNode.js +5 -5
  206. package/src/nodes/lighting/LightProbeNode.js +76 -0
  207. package/src/nodes/lighting/LightUtils.js +3 -3
  208. package/src/nodes/lighting/LightingContextNode.js +15 -17
  209. package/src/nodes/lighting/LightingNode.js +2 -2
  210. package/src/nodes/lighting/LightsNode.js +94 -76
  211. package/src/nodes/lighting/PointLightNode.js +3 -8
  212. package/src/nodes/lighting/RectAreaLightNode.js +2 -6
  213. package/src/nodes/lighting/SpotLightNode.js +3 -8
  214. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  215. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  216. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  217. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  218. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +18 -7
  219. package/src/nodes/math/Hash.js +13 -0
  220. package/src/nodes/math/MathNode.js +124 -124
  221. package/src/nodes/math/MathUtils.js +0 -7
  222. package/src/nodes/math/OperatorNode.js +94 -52
  223. package/src/nodes/math/TriNoise3D.js +19 -29
  224. package/src/nodes/pmrem/PMREMNode.js +58 -15
  225. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  226. package/src/nodes/procedural/Checker.js +14 -0
  227. package/src/nodes/tsl/TSLBase.js +30 -0
  228. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  229. package/src/nodes/utils/ArrayElementNode.js +2 -2
  230. package/src/nodes/utils/ConvertNode.js +2 -2
  231. package/src/nodes/utils/CubeMapNode.js +157 -0
  232. package/src/nodes/utils/Discard.js +8 -0
  233. package/src/nodes/utils/EquirectUVNode.js +5 -5
  234. package/src/nodes/utils/FlipNode.js +65 -0
  235. package/src/nodes/utils/FunctionOverloadingNode.js +5 -5
  236. package/src/nodes/utils/JoinNode.js +2 -2
  237. package/src/nodes/utils/LoopNode.js +12 -6
  238. package/src/nodes/utils/MatcapUVNode.js +6 -6
  239. package/src/nodes/utils/MaxMipLevelNode.js +4 -4
  240. package/src/nodes/utils/OscNode.js +7 -7
  241. package/src/nodes/utils/Packing.js +4 -0
  242. package/src/nodes/utils/RTTNode.js +8 -8
  243. package/src/nodes/utils/ReflectorNode.js +8 -3
  244. package/src/nodes/utils/RemapNode.js +7 -7
  245. package/src/nodes/utils/RotateNode.js +4 -12
  246. package/src/nodes/utils/SetNode.js +2 -2
  247. package/src/nodes/utils/SplitNode.js +2 -2
  248. package/src/nodes/utils/SpriteSheetUVNode.js +5 -5
  249. package/src/nodes/utils/SpriteUtils.js +47 -0
  250. package/src/nodes/utils/StorageArrayElementNode.js +4 -6
  251. package/src/nodes/utils/TimerNode.js +5 -5
  252. package/src/nodes/utils/TriplanarTexturesNode.js +7 -9
  253. package/src/nodes/utils/UVUtils.js +19 -0
  254. package/src/nodes/utils/ViewportUtils.js +14 -0
  255. package/src/objects/BatchedMesh.js +2 -3
  256. package/src/renderers/WebGLRenderer.js +24 -0
  257. package/src/renderers/common/Backend.js +2 -2
  258. package/src/renderers/common/Background.js +3 -1
  259. package/src/renderers/common/BindGroup.js +3 -1
  260. package/src/renderers/common/Bindings.js +13 -15
  261. package/src/renderers/common/ClippingContext.js +14 -5
  262. package/src/renderers/common/CubeRenderTarget.js +9 -3
  263. package/src/renderers/common/PostProcessing.js +4 -1
  264. package/src/renderers/common/QuadMesh.js +2 -0
  265. package/src/renderers/common/RenderContext.js +24 -0
  266. package/src/renderers/common/RenderList.js +1 -1
  267. package/src/renderers/common/RenderObject.js +2 -2
  268. package/src/renderers/common/Renderer.js +75 -49
  269. package/src/renderers/common/SampledTexture.js +12 -3
  270. package/src/renderers/common/StandardRenderer.js +18 -0
  271. package/src/renderers/common/Textures.js +8 -12
  272. package/src/renderers/common/extras/PMREMGenerator.js +12 -13
  273. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  274. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  275. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  276. package/src/renderers/common/nodes/Nodes.js +36 -9
  277. package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
  278. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  279. package/src/renderers/webgl/WebGLProgram.js +1 -1
  280. package/src/renderers/webgl/WebGLProperties.js +7 -0
  281. package/src/renderers/webgl/WebGLTextures.js +61 -4
  282. package/src/renderers/webgl-fallback/WebGLBackend.js +88 -68
  283. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +57 -9
  284. package/src/renderers/webgl-fallback/utils/WebGLState.js +21 -0
  285. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +28 -21
  286. package/src/renderers/webgpu/WebGPUBackend.js +86 -68
  287. package/src/renderers/webgpu/WebGPURenderer.js +8 -8
  288. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -63
  289. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  290. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  291. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +6 -15
  292. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  293. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +36 -21
  294. package/src/renderers/webgpu/utils/WebGPUUtils.js +18 -1
  295. package/src/renderers/webxr/WebXRManager.js +32 -25
  296. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  297. package/src/nodes/accessors/NormalNode.js +0 -14
  298. package/src/nodes/accessors/PositionNode.js +0 -10
  299. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  300. package/src/nodes/accessors/TangentNode.js +0 -23
  301. package/src/nodes/core/NodeKeywords.js +0 -80
  302. package/src/nodes/display/BlendModeNode.js +0 -128
  303. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  304. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  305. package/src/nodes/math/HashNode.js +0 -34
  306. package/src/nodes/procedural/CheckerNode.js +0 -42
  307. package/src/nodes/utils/DiscardNode.js +0 -28
  308. package/src/nodes/utils/PackingNode.js +0 -55
  309. package/src/nodes/utils/RotateUVNode.js +0 -35
  310. /package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +0 -0
  311. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -1,6 +1,6 @@
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, { registerNode } 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
 
@@ -33,19 +33,19 @@ class StackNode extends Node {
33
33
 
34
34
  }
35
35
 
36
- if( boolNode, method ) {
36
+ If( boolNode, method ) {
37
37
 
38
38
  const methodNode = new ShaderNode( method );
39
- this._currentCond = cond( boolNode, methodNode );
39
+ this._currentCond = select( boolNode, methodNode );
40
40
 
41
41
  return this.add( this._currentCond );
42
42
 
43
43
  }
44
44
 
45
- elseif( boolNode, method ) {
45
+ ElseIf( boolNode, method ) {
46
46
 
47
47
  const methodNode = new ShaderNode( method );
48
- const ifNode = cond( boolNode, methodNode );
48
+ const ifNode = select( boolNode, methodNode );
49
49
 
50
50
  this._currentCond.elseNode = ifNode;
51
51
  this._currentCond = ifNode;
@@ -54,7 +54,7 @@ class StackNode extends Node {
54
54
 
55
55
  }
56
56
 
57
- else( method ) {
57
+ Else( method ) {
58
58
 
59
59
  this._currentCond.elseNode = new ShaderNode( method );
60
60
 
@@ -80,10 +80,26 @@ class StackNode extends Node {
80
80
 
81
81
  }
82
82
 
83
+ //
84
+
85
+ else( ...params ) { // @deprecated, r168
86
+
87
+ console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
88
+ return this.Else( ...params );
89
+
90
+ }
91
+
92
+ elseif( ...params ) { // @deprecated, r168
93
+
94
+ console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
95
+ return this.ElseIf( ...params );
96
+
97
+ }
98
+
83
99
  }
84
100
 
85
101
  export default StackNode;
86
102
 
87
- export const stack = nodeProxy( StackNode );
103
+ StackNode.type = /*@__PURE__*/ registerNode( 'Stack', StackNode );
88
104
 
89
- addNodeClass( 'StackNode', StackNode );
105
+ export const stack = /*@__PURE__*/ nodeProxy( StackNode );
@@ -1,4 +1,4 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node, { registerNode } from './Node.js';
2
2
 
3
3
  class StructTypeNode extends Node {
4
4
 
@@ -21,4 +21,4 @@ class StructTypeNode extends Node {
21
21
 
22
22
  export default StructTypeNode;
23
23
 
24
- addNodeClass( 'StructTypeNode', StructTypeNode );
24
+ StructTypeNode.type = /*@__PURE__*/ registerNode( 'StructType', StructTypeNode );
@@ -1,4 +1,4 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node, { registerNode } from './Node.js';
2
2
 
3
3
  class TempNode extends Node {
4
4
 
@@ -55,4 +55,4 @@ class TempNode extends Node {
55
55
 
56
56
  export default TempNode;
57
57
 
58
- addNodeClass( 'TempNode', TempNode );
58
+ TempNode.type = /*@__PURE__*/ registerNode( 'Temp', TempNode );
@@ -1,5 +1,4 @@
1
- import Node from './Node.js';
2
- import { addNodeClass } from './Node.js';
1
+ import Node, { registerNode } from './Node.js';
3
2
 
4
3
  class UniformGroupNode extends Node {
5
4
 
@@ -44,13 +43,13 @@ class UniformGroupNode extends Node {
44
43
 
45
44
  }
46
45
 
47
- export const uniformGroup = ( name ) => new UniformGroupNode( name );
48
- export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
46
+ export default UniformGroupNode;
49
47
 
50
- export const frameGroup = sharedUniformGroup( 'frame' );
51
- export const renderGroup = sharedUniformGroup( 'render' );
52
- export const objectGroup = uniformGroup( 'object' );
48
+ UniformGroupNode.type = /*@__PURE__*/ registerNode( 'UniformGroup', UniformGroupNode );
53
49
 
54
- export default UniformGroupNode;
50
+ export const uniformGroup = ( name ) => new UniformGroupNode( name );
51
+ export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
55
52
 
56
- addNodeClass( 'UniformGroupNode', UniformGroupNode );
53
+ export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
54
+ export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
55
+ export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
@@ -1,7 +1,7 @@
1
+ import { registerNode } from './Node.js';
1
2
  import InputNode from './InputNode.js';
2
3
  import { objectGroup } from './UniformGroupNode.js';
3
- import { addNodeClass } from './Node.js';
4
- import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
4
+ import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
5
5
 
6
6
  class UniformNode extends InputNode {
7
7
 
@@ -95,6 +95,8 @@ class UniformNode extends InputNode {
95
95
 
96
96
  export default UniformNode;
97
97
 
98
+ UniformNode.type = /*@__PURE__*/ registerNode( 'Uniform', UniformNode );
99
+
98
100
  export const uniform = ( arg1, arg2 ) => {
99
101
 
100
102
  const nodeType = getConstNodeType( arg2 || arg1 );
@@ -105,5 +107,3 @@ export const uniform = ( arg1, arg2 ) => {
105
107
  return nodeObject( new UniformNode( value, nodeType ) );
106
108
 
107
109
  };
108
-
109
- addNodeClass( 'UniformNode', UniformNode );
@@ -1,5 +1,5 @@
1
- import Node, { addNodeClass } from './Node.js';
2
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
1
+ import Node, { registerNode } from './Node.js';
2
+ import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
3
 
4
4
  class VarNode extends Node {
5
5
 
@@ -48,9 +48,9 @@ class VarNode extends Node {
48
48
 
49
49
  export default VarNode;
50
50
 
51
- export const temp = nodeProxy( VarNode );
51
+ VarNode.type = /*@__PURE__*/ registerNode( 'Var', VarNode );
52
52
 
53
- addNodeElement( 'temp', temp ); // @TODO: Will be removed in the future
54
- addNodeElement( 'toVar', ( ...params ) => temp( ...params ).append() );
53
+ export const temp = /*@__PURE__*/ nodeProxy( VarNode );
55
54
 
56
- addNodeClass( 'VarNode', VarNode );
55
+ addMethodChaining( 'temp', temp ); // @TODO: Will be removed in the future
56
+ addMethodChaining( 'toVar', ( ...params ) => temp( ...params ).append() );
@@ -1,6 +1,6 @@
1
- import Node, { addNodeClass } from './Node.js';
1
+ import Node, { registerNode } from './Node.js';
2
2
  import { NodeShaderStage } from './constants.js';
3
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
4
 
5
5
  class VaryingNode extends Node {
6
6
 
@@ -97,8 +97,8 @@ class VaryingNode extends Node {
97
97
 
98
98
  export default VaryingNode;
99
99
 
100
- export const varying = nodeProxy( VaryingNode );
100
+ VaryingNode.type = /*@__PURE__*/ registerNode( 'Varying', VaryingNode );
101
101
 
102
- addNodeElement( 'varying', varying );
102
+ export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
103
103
 
104
- addNodeClass( 'VaryingNode', VaryingNode );
104
+ addMethodChaining( 'varying', varying );
@@ -1,12 +1,14 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { nodeObject, addNodeElement, tslFn, float, vec4 } from '../shadernode/ShaderNode.js';
2
+ import { nodeObject, Fn, float, vec4 } from '../tsl/TSLBase.js';
3
3
  import { NodeUpdateType } from '../core/constants.js';
4
- import { uv } from '../accessors/UVNode.js';
4
+ import { uv } from '../accessors/UV.js';
5
5
  import { texture } from '../accessors/TextureNode.js';
6
6
  import { passTexture } from './PassNode.js';
7
7
  import { uniform } from '../core/UniformNode.js';
8
8
  import { sign, max } from '../math/MathNode.js';
9
+ import { convertToTexture } from '../utils/RTTNode.js';
9
10
  import QuadMesh from '../../renderers/common/QuadMesh.js';
11
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
10
12
 
11
13
  import { Vector2 } from '../../math/Vector2.js';
12
14
  import { RenderTarget } from '../../core/RenderTarget.js';
@@ -98,7 +100,7 @@ class AfterImageNode extends TempNode {
98
100
 
99
101
  const sampleTexture = ( uv ) => textureNode.uv( uv );
100
102
 
101
- const when_gt = tslFn( ( [ x_immutable, y_immutable ] ) => {
103
+ const when_gt = Fn( ( [ x_immutable, y_immutable ] ) => {
102
104
 
103
105
  const y = float( y_immutable ).toVar();
104
106
  const x = vec4( x_immutable ).toVar();
@@ -107,7 +109,7 @@ class AfterImageNode extends TempNode {
107
109
 
108
110
  } );
109
111
 
110
- const afterImg = tslFn( () => {
112
+ const afterImg = Fn( () => {
111
113
 
112
114
  const texelOld = vec4( textureNodeOld );
113
115
  const texelNew = vec4( sampleTexture( uvNode ) );
@@ -119,7 +121,8 @@ class AfterImageNode extends TempNode {
119
121
 
120
122
  //
121
123
 
122
- const materialComposed = this._materialComposed || ( this._materialComposed = builder.createNodeMaterial() );
124
+ const materialComposed = this._materialComposed || ( this._materialComposed = new NodeMaterial() );
125
+ materialComposed.name = 'AfterImage';
123
126
  materialComposed.fragmentNode = afterImg();
124
127
 
125
128
  _quadMeshComp.material = materialComposed;
@@ -144,9 +147,6 @@ class AfterImageNode extends TempNode {
144
147
 
145
148
  }
146
149
 
147
- export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( nodeObject( node ).toTexture(), damp ) );
148
-
149
- addNodeElement( 'afterImage', afterImage );
150
+ export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
150
151
 
151
152
  export default AfterImageNode;
152
-
@@ -0,0 +1,61 @@
1
+ import { Fn, nodeObject, vec4 } from '../tsl/TSLBase.js';
2
+ import { Matrix3 } from '../../math/Matrix3.js';
3
+ import { uniform } from '../core/UniformNode.js';
4
+ import { uv } from '../accessors/UV.js';
5
+ import { clamp, max } from '../math/MathNode.js';
6
+ import StereoCompositePassNode from './StereoCompositePassNode.js';
7
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
8
+
9
+ class AnaglyphPassNode extends StereoCompositePassNode {
10
+
11
+ constructor( scene, camera ) {
12
+
13
+ super( scene, camera );
14
+
15
+ this.isAnaglyphPassNode = true;
16
+
17
+ // Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4
18
+
19
+ this._colorMatrixLeft = uniform( new Matrix3().fromArray( [
20
+ 0.456100, - 0.0400822, - 0.0152161,
21
+ 0.500484, - 0.0378246, - 0.0205971,
22
+ 0.176381, - 0.0157589, - 0.00546856
23
+ ] ) );
24
+
25
+ this._colorMatrixRight = uniform( new Matrix3().fromArray( [
26
+ - 0.0434706, 0.378476, - 0.0721527,
27
+ - 0.0879388, 0.73364, - 0.112961,
28
+ - 0.00155529, - 0.0184503, 1.2264
29
+ ] ) );
30
+
31
+ }
32
+
33
+ setup( builder ) {
34
+
35
+ const uvNode = uv();
36
+
37
+ const anaglyph = Fn( () => {
38
+
39
+ const colorL = this._mapLeft.uv( uvNode );
40
+ const colorR = this._mapRight.uv( uvNode );
41
+
42
+ const color = clamp( this._colorMatrixLeft.mul( colorL.rgb ).add( this._colorMatrixRight.mul( colorR.rgb ) ) );
43
+
44
+ return vec4( color.rgb, max( colorL.a, colorR.a ) );
45
+
46
+ } );
47
+
48
+ const material = this._material || ( this._material = new NodeMaterial() );
49
+ material.fragmentNode = anaglyph().context( builder.getSharedContext() );
50
+ material.name = 'Anaglyph';
51
+ material.needsUpdate = true;
52
+
53
+ return super.setup( builder );
54
+
55
+ }
56
+
57
+ }
58
+
59
+ export default AnaglyphPassNode;
60
+
61
+ export const anaglyphPass = ( scene, camera ) => nodeObject( new AnaglyphPassNode( scene, camera ) );
@@ -1,12 +1,14 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { nodeObject, addNodeElement, tslFn, float, vec2, vec3 } from '../shadernode/ShaderNode.js';
3
- import { loop } from '../utils/LoopNode.js';
2
+ import { nodeObject, Fn, float, vec2, vec3 } from '../tsl/TSLBase.js';
3
+ import { Loop } from '../utils/LoopNode.js';
4
4
  import { uniform } from '../core/UniformNode.js';
5
5
  import { NodeUpdateType } from '../core/constants.js';
6
- import { threshold } from './ColorAdjustmentNode.js';
7
- import { uv } from '../accessors/UVNode.js';
6
+ import { threshold } from './ColorAdjustment.js';
7
+ import { uv } from '../accessors/UV.js';
8
8
  import { passTexture } from './PassNode.js';
9
+ import { convertToTexture } from '../utils/RTTNode.js';
9
10
  import QuadMesh from '../../renderers/common/QuadMesh.js';
11
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
10
12
 
11
13
  import { Vector2 } from '../../math/Vector2.js';
12
14
  import { RenderTarget } from '../../core/RenderTarget.js';
@@ -90,14 +92,14 @@ class AnamorphicNode extends TempNode {
90
92
 
91
93
  const sampleTexture = ( uv ) => textureNode.uv( uv );
92
94
 
93
- const anamorph = tslFn( () => {
95
+ const anamorph = Fn( () => {
94
96
 
95
97
  const samples = this.samples;
96
98
  const halfSamples = Math.floor( samples / 2 );
97
99
 
98
100
  const total = vec3( 0 ).toVar();
99
101
 
100
- loop( { start: - halfSamples, end: halfSamples }, ( { i } ) => {
102
+ Loop( { start: - halfSamples, end: halfSamples }, ( { i } ) => {
101
103
 
102
104
  const softness = float( i ).abs().div( halfSamples ).oneMinus();
103
105
 
@@ -115,7 +117,8 @@ class AnamorphicNode extends TempNode {
115
117
 
116
118
  //
117
119
 
118
- const material = this._material || ( this._material = builder.createNodeMaterial() );
120
+ const material = this._material || ( this._material = new NodeMaterial() );
121
+ material.name = 'Anamorphic';
119
122
  material.fragmentNode = anamorph();
120
123
 
121
124
  //
@@ -137,9 +140,6 @@ class AnamorphicNode extends TempNode {
137
140
 
138
141
  }
139
142
 
140
- export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => nodeObject( new AnamorphicNode( nodeObject( node ).toTexture(), nodeObject( threshold ), nodeObject( scale ), samples ) );
141
-
142
- addNodeElement( 'anamorphic', anamorphic );
143
+ export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => nodeObject( new AnamorphicNode( convertToTexture( node ), nodeObject( threshold ), nodeObject( scale ), samples ) );
143
144
 
144
145
  export default AnamorphicNode;
145
-
@@ -0,0 +1,26 @@
1
+ import { float, Fn, vec3, vec4 } from '../tsl/TSLBase.js';
2
+ import { min, max, mix } from '../math/MathNode.js';
3
+ import { luminance } from './ColorAdjustment.js';
4
+
5
+ export const bleach = /*@__PURE__*/ Fn( ( [ color, opacity = 1 ] ) => {
6
+
7
+ const base = color;
8
+ const lum = luminance( base.rgb );
9
+ const blend = vec3( lum );
10
+
11
+ const L = min( 1.0, max( 0.0, float( 10.0 ).mul( lum.sub( 0.45 ) ) ) );
12
+
13
+ const result1 = blend.mul( base.rgb ).mul( 2.0 );
14
+ const result2 = float( 2.0 ).mul( blend.oneMinus() ).mul( base.rgb.oneMinus() ).oneMinus();
15
+
16
+ const newColor = mix( result1, result2, L );
17
+
18
+ const A2 = base.a.mul( opacity );
19
+
20
+ const mixRGB = A2.mul( newColor.rgb );
21
+
22
+ mixRGB.addAssign( base.rgb.mul( A2.oneMinus() ) );
23
+
24
+ return vec4( mixRGB, base.a );
25
+
26
+ } );
@@ -0,0 +1,54 @@
1
+ import { Fn } from '../tsl/TSLBase.js';
2
+ import { mix, min, step } from '../math/MathNode.js';
3
+
4
+ export const burn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
5
+
6
+ return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
7
+
8
+ } ).setLayout( {
9
+ name: 'burnBlend',
10
+ type: 'vec3',
11
+ inputs: [
12
+ { name: 'base', type: 'vec3' },
13
+ { name: 'blend', type: 'vec3' }
14
+ ]
15
+ } );
16
+
17
+ export const dodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
18
+
19
+ return min( base.div( blend.oneMinus() ), 1.0 );
20
+
21
+ } ).setLayout( {
22
+ name: 'dodgeBlend',
23
+ type: 'vec3',
24
+ inputs: [
25
+ { name: 'base', type: 'vec3' },
26
+ { name: 'blend', type: 'vec3' }
27
+ ]
28
+ } );
29
+
30
+ export const screen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
31
+
32
+ return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
33
+
34
+ } ).setLayout( {
35
+ name: 'screenBlend',
36
+ type: 'vec3',
37
+ inputs: [
38
+ { name: 'base', type: 'vec3' },
39
+ { name: 'blend', type: 'vec3' }
40
+ ]
41
+ } );
42
+
43
+ export const overlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
44
+
45
+ return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
46
+
47
+ } ).setLayout( {
48
+ name: 'overlayBlend',
49
+ type: 'vec3',
50
+ inputs: [
51
+ { name: 'base', type: 'vec3' },
52
+ { name: 'blend', type: 'vec3' }
53
+ ]
54
+ } );
@@ -1,21 +1,22 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { addNodeElement, tslFn, nodeObject, float, vec4, int } from '../shadernode/ShaderNode.js';
2
+ import { Fn, nodeObject, float, vec4, int } from '../tsl/TSLBase.js';
3
3
  import { mix, smoothstep } from '../math/MathNode.js';
4
- import { luminance } from './ColorAdjustmentNode.js';
4
+ import { luminance } from './ColorAdjustment.js';
5
5
  import { uniform } from '../core/UniformNode.js';
6
- import { uniforms } from '../accessors/UniformsNode.js';
7
- import { uv } from '../accessors/UVNode.js';
6
+ import { uniformArray } from '../accessors/UniformArrayNode.js';
7
+ import { uv } from '../accessors/UV.js';
8
8
  import { Color } from '../../math/Color.js';
9
9
  import { passTexture } from './PassNode.js';
10
10
  import { RenderTarget } from '../../core/RenderTarget.js';
11
11
  import { HalfFloatType } from '../../constants.js';
12
12
  import { NodeUpdateType } from '../core/constants.js';
13
13
  import { Vector2 } from '../../math/Vector2.js';
14
- import { loop } from '../utils/LoopNode.js';
14
+ import { Loop } from '../utils/LoopNode.js';
15
15
  import { add } from '../math/OperatorNode.js';
16
16
  import QuadMesh from '../../renderers/common/QuadMesh.js';
17
17
  import { texture } from '../accessors/TextureNode.js';
18
18
  import { Vector3 } from '../../math/Vector3.js';
19
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
19
20
 
20
21
  const _quadMesh = /*@__PURE__*/ new QuadMesh();
21
22
 
@@ -183,7 +184,7 @@ class BloomNode extends TempNode {
183
184
 
184
185
  // luminosity high pass material
185
186
 
186
- const luminosityHighPass = tslFn( () => {
187
+ const luminosityHighPass = Fn( () => {
187
188
 
188
189
  const texel = this.inputNode;
189
190
  const v = luminance( texel.rgb );
@@ -194,8 +195,9 @@ class BloomNode extends TempNode {
194
195
 
195
196
  } );
196
197
 
197
- this._highPassFilterMaterial = this._highPassFilterMaterial || builder.createNodeMaterial();
198
+ this._highPassFilterMaterial = this._highPassFilterMaterial || new NodeMaterial();
198
199
  this._highPassFilterMaterial.fragmentNode = luminosityHighPass().context( builder.getSharedContext() );
200
+ this._highPassFilterMaterial.name = 'Bloom_highPass';
199
201
  this._highPassFilterMaterial.needsUpdate = true;
200
202
 
201
203
  // gaussian blur materials
@@ -210,10 +212,10 @@ class BloomNode extends TempNode {
210
212
 
211
213
  // composite material
212
214
 
213
- const bloomFactors = uniforms( [ 1.0, 0.8, 0.6, 0.4, 0.2 ] );
214
- const bloomTintColors = uniforms( [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ] );
215
+ const bloomFactors = uniformArray( [ 1.0, 0.8, 0.6, 0.4, 0.2 ] );
216
+ const bloomTintColors = uniformArray( [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ] );
215
217
 
216
- const lerpBloomFactor = tslFn( ( [ factor, radius ] ) => {
218
+ const lerpBloomFactor = Fn( ( [ factor, radius ] ) => {
217
219
 
218
220
  const mirrorFactor = float( 1.2 ).sub( factor );
219
221
  return mix( factor, mirrorFactor, radius );
@@ -228,7 +230,7 @@ class BloomNode extends TempNode {
228
230
  } );
229
231
 
230
232
 
231
- const compositePass = tslFn( () => {
233
+ const compositePass = Fn( () => {
232
234
 
233
235
  const color0 = lerpBloomFactor( bloomFactors.element( 0 ), this.radius ).mul( vec4( bloomTintColors.element( 0 ), 1.0 ) ).mul( this._textureNodeBlur0 );
234
236
  const color1 = lerpBloomFactor( bloomFactors.element( 1 ), this.radius ).mul( vec4( bloomTintColors.element( 1 ), 1.0 ) ).mul( this._textureNodeBlur1 );
@@ -242,8 +244,9 @@ class BloomNode extends TempNode {
242
244
 
243
245
  } );
244
246
 
245
- this._compositeMaterial = this._compositeMaterial || builder.createNodeMaterial();
247
+ this._compositeMaterial = this._compositeMaterial || new NodeMaterial();
246
248
  this._compositeMaterial.fragmentNode = compositePass().context( builder.getSharedContext() );
249
+ this._compositeMaterial.name = 'Bloom_comp';
247
250
  this._compositeMaterial.needsUpdate = true;
248
251
 
249
252
  //
@@ -283,19 +286,19 @@ class BloomNode extends TempNode {
283
286
  //
284
287
 
285
288
  const colorTexture = texture();
286
- const gaussianCoefficients = uniforms( coefficients );
289
+ const gaussianCoefficients = uniformArray( coefficients );
287
290
  const invSize = uniform( new Vector2() );
288
291
  const direction = uniform( new Vector2( 0.5, 0.5 ) );
289
292
 
290
293
  const uvNode = uv();
291
294
  const sampleTexel = ( uv ) => colorTexture.uv( uv );
292
295
 
293
- const seperableBlurPass = tslFn( () => {
296
+ const seperableBlurPass = Fn( () => {
294
297
 
295
298
  const weightSum = gaussianCoefficients.element( 0 ).toVar();
296
299
  const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
297
300
 
298
- loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
301
+ Loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
299
302
 
300
303
  const x = float( i );
301
304
  const w = gaussianCoefficients.element( i );
@@ -305,14 +308,15 @@ class BloomNode extends TempNode {
305
308
  diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
306
309
  weightSum.addAssign( float( 2.0 ).mul( w ) );
307
310
 
308
- } );
311
+ } );
309
312
 
310
313
  return vec4( diffuseSum.div( weightSum ), 1.0 );
311
314
 
312
315
  } );
313
316
 
314
- const seperableBlurMaterial = builder.createNodeMaterial();
317
+ const seperableBlurMaterial = new NodeMaterial();
315
318
  seperableBlurMaterial.fragmentNode = seperableBlurPass().context( builder.getSharedContext() );
319
+ seperableBlurMaterial.name = 'Bloom_seperable';
316
320
  seperableBlurMaterial.needsUpdate = true;
317
321
 
318
322
  // uniforms
@@ -328,6 +332,4 @@ class BloomNode extends TempNode {
328
332
 
329
333
  export const bloom = ( node, strength, radius, threshold ) => nodeObject( new BloomNode( nodeObject( node ), strength, radius, threshold ) );
330
334
 
331
- addNodeElement( 'bloom', bloom );
332
-
333
335
  export default BloomNode;
@@ -1,15 +1,14 @@
1
1
  import TempNode from '../core/TempNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { uv } from '../accessors/UVNode.js';
4
- import { normalView } from '../accessors/NormalNode.js';
5
- import { positionView } from '../accessors/PositionNode.js';
2
+ import { uv } from '../accessors/UV.js';
3
+ import { normalView } from '../accessors/Normal.js';
4
+ import { positionView } from '../accessors/Position.js';
6
5
  import { faceDirection } from './FrontFacingNode.js';
7
- import { addNodeElement, tslFn, nodeProxy, float, vec2 } from '../shadernode/ShaderNode.js';
6
+ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
8
7
 
9
8
  // Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
10
9
  // https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
11
10
 
12
- const dHdxy_fwd = tslFn( ( { textureNode, bumpScale } ) => {
11
+ const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
13
12
 
14
13
  // It's used to preserve the same TextureNode instance
15
14
  const sampleTexture = ( callback ) => textureNode.cache().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
@@ -25,7 +24,7 @@ const dHdxy_fwd = tslFn( ( { textureNode, bumpScale } ) => {
25
24
 
26
25
  // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
27
26
 
28
- const perturbNormalArb = tslFn( ( inputs ) => {
27
+ const perturbNormalArb = Fn( ( inputs ) => {
29
28
 
30
29
  const { surf_pos, surf_norm, dHdxy } = inputs;
31
30
 
@@ -73,8 +72,4 @@ class BumpMapNode extends TempNode {
73
72
 
74
73
  export default BumpMapNode;
75
74
 
76
- export const bumpMap = nodeProxy( BumpMapNode );
77
-
78
- addNodeElement( 'bumpMap', bumpMap );
79
-
80
- addNodeClass( 'BumpMapNode', BumpMapNode );
75
+ export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
@@ -0,0 +1,46 @@
1
+ import { dot, mix } from '../math/MathNode.js';
2
+ import { add } from '../math/OperatorNode.js';
3
+ import { Fn, float, vec3 } from '../tsl/TSLBase.js';
4
+ import { ColorManagement } from '../../math/ColorManagement.js';
5
+ import { Vector3 } from '../../math/Vector3.js';
6
+
7
+ export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
8
+
9
+ return luminance( color.rgb );
10
+
11
+ } );
12
+
13
+ export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
14
+
15
+ return adjustment.mix( luminance( color.rgb ), color.rgb );
16
+
17
+ } );
18
+
19
+ export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
20
+
21
+ const average = add( color.r, color.g, color.b ).div( 3.0 );
22
+
23
+ const mx = color.r.max( color.g.max( color.b ) );
24
+ const amt = mx.sub( average ).mul( adjustment ).mul( - 3.0 );
25
+
26
+ return mix( color.rgb, mx, amt );
27
+
28
+ } );
29
+
30
+ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
31
+
32
+ const k = vec3( 0.57735, 0.57735, 0.57735 );
33
+
34
+ const cosAngle = adjustment.cos();
35
+
36
+ return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) );
37
+
38
+ } );
39
+
40
+ const _luminanceCoefficients = /*@__PURE__*/ new Vector3();
41
+ export const luminance = (
42
+ color,
43
+ luminanceCoefficients = vec3( ... ColorManagement.getLuminanceCoefficients( _luminanceCoefficients ) )
44
+ ) => dot( color, luminanceCoefficients );
45
+
46
+ export const threshold = ( color, threshold ) => mix( vec3( 0.0 ), color, luminance( color ).sub( threshold ).max( 0 ) );