super-three 0.168.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 (286) hide show
  1. package/build/three.cjs +369 -131
  2. package/build/three.module.js +369 -131
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +24644 -22406
  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 -6
  9. package/examples/jsm/controls/TrackballControls.js +32 -12
  10. package/examples/jsm/controls/TransformControls.js +97 -62
  11. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  12. package/examples/jsm/exporters/EXRExporter.js +19 -11
  13. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  14. package/examples/jsm/exporters/OBJExporter.js +5 -1
  15. package/examples/jsm/exporters/PLYExporter.js +9 -7
  16. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  17. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  18. package/examples/jsm/helpers/LightProbeHelper.js +1 -1
  19. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  20. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  21. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  22. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  23. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  24. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  25. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  26. package/examples/jsm/loaders/FBXLoader.js +30 -20
  27. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  28. package/examples/jsm/loaders/KTX2Loader.js +10 -7
  29. package/examples/jsm/loaders/MTLLoader.js +4 -3
  30. package/examples/jsm/loaders/MaterialXLoader.js +29 -10
  31. package/examples/jsm/loaders/OBJLoader.js +5 -3
  32. package/examples/jsm/loaders/PCDLoader.js +5 -4
  33. package/examples/jsm/loaders/PDBLoader.js +3 -2
  34. package/examples/jsm/loaders/PLYLoader.js +8 -5
  35. package/examples/jsm/loaders/STLLoader.js +3 -2
  36. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  37. package/examples/jsm/loaders/VTKLoader.js +4 -3
  38. package/examples/jsm/loaders/XYZLoader.js +3 -2
  39. package/examples/jsm/misc/Timer.js +1 -1
  40. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  41. package/examples/jsm/objects/LensflareMesh.js +322 -0
  42. package/examples/jsm/objects/SkyMesh.js +1 -2
  43. package/examples/jsm/objects/Water2Mesh.js +2 -3
  44. package/examples/jsm/objects/WaterMesh.js +1 -2
  45. package/examples/jsm/physics/JoltPhysics.js +1 -1
  46. package/examples/jsm/physics/RapierPhysics.js +1 -1
  47. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  48. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  49. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  50. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  51. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  52. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  53. package/examples/jsm/utils/TextureUtils.js +1 -0
  54. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  55. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  56. package/package.json +2 -2
  57. package/src/Three.WebGPU.Nodes.js +200 -0
  58. package/src/Three.WebGPU.js +2 -1
  59. package/src/audio/Audio.js +2 -2
  60. package/src/constants.js +1 -1
  61. package/src/core/BufferAttribute.js +0 -9
  62. package/src/core/Clock.js +1 -1
  63. package/src/core/InterleavedBuffer.js +0 -9
  64. package/src/extras/Controls.js +1 -1
  65. package/src/geometries/CylinderGeometry.js +11 -4
  66. package/src/loaders/MaterialLoader.js +7 -1
  67. package/src/loaders/nodes/NodeLoader.js +24 -4
  68. package/src/loaders/nodes/NodeMaterialLoader.js +21 -17
  69. package/src/loaders/nodes/NodeObjectLoader.js +19 -0
  70. package/src/materials/nodes/InstancedPointsNodeMaterial.js +19 -34
  71. package/src/materials/nodes/Line2NodeMaterial.js +26 -26
  72. package/src/materials/nodes/LineBasicNodeMaterial.js +7 -3
  73. package/src/materials/nodes/LineDashedNodeMaterial.js +7 -3
  74. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -3
  75. package/src/materials/nodes/MeshLambertNodeMaterial.js +7 -3
  76. package/src/materials/nodes/MeshMatcapNodeMaterial.js +7 -3
  77. package/src/materials/nodes/MeshNormalNodeMaterial.js +7 -3
  78. package/src/materials/nodes/MeshPhongNodeMaterial.js +7 -3
  79. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +6 -3
  80. package/src/materials/nodes/MeshSSSNodeMaterial.js +6 -3
  81. package/src/materials/nodes/MeshStandardNodeMaterial.js +7 -3
  82. package/src/materials/nodes/MeshToonNodeMaterial.js +7 -3
  83. package/src/materials/nodes/NodeMaterial.js +20 -45
  84. package/src/materials/nodes/NodeMaterials.js +2 -0
  85. package/src/materials/nodes/PointsNodeMaterial.js +7 -3
  86. package/src/materials/nodes/ShadowNodeMaterial.js +7 -3
  87. package/src/materials/nodes/SpriteNodeMaterial.js +39 -6
  88. package/src/materials/nodes/VolumeNodeMaterial.js +13 -9
  89. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  90. package/src/math/Triangle.js +24 -0
  91. package/src/nodes/Nodes.js +3 -3
  92. package/src/nodes/TSL.js +96 -93
  93. package/src/nodes/accessors/BatchNode.js +7 -3
  94. package/src/nodes/accessors/BufferAttributeNode.js +6 -3
  95. package/src/nodes/accessors/BufferNode.js +6 -3
  96. package/src/nodes/accessors/Camera.js +10 -16
  97. package/src/nodes/accessors/ClippingNode.js +7 -3
  98. package/src/nodes/accessors/CubeTextureNode.js +6 -3
  99. package/src/nodes/accessors/InstanceNode.js +11 -11
  100. package/src/nodes/accessors/InstancedPointsMaterialNode.js +6 -3
  101. package/src/nodes/accessors/Lights.js +51 -0
  102. package/src/nodes/accessors/MaterialNode.js +8 -4
  103. package/src/nodes/accessors/MaterialReferenceNode.js +6 -3
  104. package/src/nodes/accessors/ModelNode.js +42 -7
  105. package/src/nodes/accessors/ModelViewProjectionNode.js +9 -5
  106. package/src/nodes/accessors/MorphNode.js +7 -3
  107. package/src/nodes/accessors/Normal.js +32 -6
  108. package/src/nodes/accessors/Object3DNode.js +11 -27
  109. package/src/nodes/accessors/PointUVNode.js +7 -3
  110. package/src/nodes/accessors/ReferenceBaseNode.js +32 -4
  111. package/src/nodes/accessors/ReferenceNode.js +40 -3
  112. package/src/nodes/accessors/RendererReferenceNode.js +9 -3
  113. package/src/nodes/accessors/SceneNode.js +7 -3
  114. package/src/nodes/accessors/SkinningNode.js +7 -3
  115. package/src/nodes/accessors/StorageBufferNode.js +21 -3
  116. package/src/nodes/accessors/StorageTextureNode.js +7 -4
  117. package/src/nodes/accessors/Texture3DNode.js +7 -4
  118. package/src/nodes/accessors/TextureNode.js +19 -8
  119. package/src/nodes/accessors/TextureSizeNode.js +8 -5
  120. package/src/nodes/accessors/UniformArrayNode.js +12 -9
  121. package/src/nodes/accessors/UserDataNode.js +9 -6
  122. package/src/nodes/accessors/VelocityNode.js +74 -23
  123. package/src/nodes/accessors/VertexColorNode.js +6 -3
  124. package/src/nodes/code/CodeNode.js +7 -3
  125. package/src/nodes/code/ExpressionNode.js +8 -4
  126. package/src/nodes/code/FunctionCallNode.js +6 -3
  127. package/src/nodes/code/FunctionNode.js +6 -3
  128. package/src/nodes/code/ScriptableNode.js +11 -6
  129. package/src/nodes/code/ScriptableValueNode.js +7 -3
  130. package/src/nodes/core/AssignNode.js +9 -6
  131. package/src/nodes/core/AttributeNode.js +7 -3
  132. package/src/nodes/core/BypassNode.js +8 -4
  133. package/src/nodes/core/CacheNode.js +8 -4
  134. package/src/nodes/core/ConstNode.js +6 -3
  135. package/src/nodes/core/ContextNode.js +7 -3
  136. package/src/nodes/core/IndexNode.js +25 -3
  137. package/src/nodes/core/InputNode.js +7 -3
  138. package/src/nodes/core/MRTNode.js +6 -3
  139. package/src/nodes/core/Node.js +10 -51
  140. package/src/nodes/core/NodeBuilder.js +71 -5
  141. package/src/nodes/core/NodeUtils.js +48 -6
  142. package/src/nodes/core/OutputStructNode.js +8 -4
  143. package/src/nodes/core/ParameterNode.js +6 -3
  144. package/src/nodes/core/PropertyNode.js +7 -3
  145. package/src/nodes/core/StackNode.js +7 -3
  146. package/src/nodes/core/StructTypeNode.js +7 -3
  147. package/src/nodes/core/TempNode.js +8 -4
  148. package/src/nodes/core/UniformGroupNode.js +10 -6
  149. package/src/nodes/core/UniformNode.js +6 -3
  150. package/src/nodes/core/VarNode.js +8 -4
  151. package/src/nodes/core/VaryingNode.js +7 -3
  152. package/src/nodes/display/AfterImageNode.js +6 -0
  153. package/src/nodes/display/AnaglyphPassNode.js +6 -0
  154. package/src/nodes/display/AnamorphicNode.js +6 -0
  155. package/src/nodes/display/BloomNode.js +6 -0
  156. package/src/nodes/display/BumpMapNode.js +6 -0
  157. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  158. package/src/nodes/display/ColorSpaceNode.js +43 -14
  159. package/src/nodes/display/DenoiseNode.js +6 -3
  160. package/src/nodes/display/DepthOfFieldNode.js +6 -3
  161. package/src/nodes/display/DotScreenNode.js +8 -5
  162. package/src/nodes/display/FXAANode.js +6 -3
  163. package/src/nodes/display/FilmNode.js +6 -3
  164. package/src/nodes/display/FrontFacingNode.js +7 -3
  165. package/src/nodes/display/GTAONode.js +6 -3
  166. package/src/nodes/display/GaussianBlurNode.js +6 -3
  167. package/src/nodes/display/Lut3DNode.js +6 -3
  168. package/src/nodes/display/NormalMapNode.js +8 -6
  169. package/src/nodes/display/ParallaxBarrierPassNode.js +8 -5
  170. package/src/nodes/display/PassNode.js +18 -7
  171. package/src/nodes/display/PixelationPassNode.js +12 -5
  172. package/src/nodes/display/PosterizeNode.js +6 -3
  173. package/src/nodes/display/RGBShiftNode.js +6 -3
  174. package/src/nodes/display/RenderOutputNode.js +12 -8
  175. package/src/nodes/display/SSAAPassNode.js +6 -3
  176. package/src/nodes/display/ScreenNode.js +181 -0
  177. package/src/nodes/display/SobelOperatorNode.js +6 -3
  178. package/src/nodes/display/StereoCompositePassNode.js +6 -3
  179. package/src/nodes/display/StereoPassNode.js +6 -3
  180. package/src/nodes/display/ToneMappingFunctions.js +12 -12
  181. package/src/nodes/display/ToneMappingNode.js +8 -7
  182. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  183. package/src/nodes/display/TransitionNode.js +6 -3
  184. package/src/nodes/display/ViewportDepthNode.js +7 -3
  185. package/src/nodes/display/ViewportDepthTextureNode.js +8 -5
  186. package/src/nodes/display/ViewportSharedTextureNode.js +8 -5
  187. package/src/nodes/display/ViewportTextureNode.js +8 -5
  188. package/src/nodes/fog/FogExp2Node.js +6 -3
  189. package/src/nodes/fog/FogNode.js +7 -3
  190. package/src/nodes/fog/FogRangeNode.js +6 -3
  191. package/src/nodes/functions/PhysicalLightingModel.js +2 -2
  192. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  193. package/src/nodes/geometry/RangeNode.js +7 -3
  194. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  195. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  196. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  197. package/src/nodes/gpgpu/ComputeNode.js +8 -4
  198. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  199. package/src/nodes/lighting/AONode.js +6 -3
  200. package/src/nodes/lighting/AmbientLightNode.js +6 -3
  201. package/src/nodes/lighting/AnalyticLightNode.js +198 -30
  202. package/src/nodes/lighting/BasicEnvironmentNode.js +6 -3
  203. package/src/nodes/lighting/BasicLightMapNode.js +6 -3
  204. package/src/nodes/lighting/DirectionalLightNode.js +7 -4
  205. package/src/nodes/lighting/EnvironmentNode.js +6 -3
  206. package/src/nodes/lighting/HemisphereLightNode.js +10 -6
  207. package/src/nodes/lighting/IESSpotLightNode.js +6 -3
  208. package/src/nodes/lighting/IrradianceNode.js +6 -3
  209. package/src/nodes/lighting/LightProbeNode.js +8 -31
  210. package/src/nodes/lighting/LightingContextNode.js +6 -3
  211. package/src/nodes/lighting/LightingNode.js +7 -3
  212. package/src/nodes/lighting/LightsNode.js +24 -5
  213. package/src/nodes/lighting/PointLightNode.js +11 -7
  214. package/src/nodes/lighting/RectAreaLightNode.js +11 -7
  215. package/src/nodes/lighting/SpotLightNode.js +13 -10
  216. package/src/nodes/math/ConditionalNode.js +23 -6
  217. package/src/nodes/math/MathNode.js +6 -3
  218. package/src/nodes/math/OperatorNode.js +6 -3
  219. package/src/nodes/pmrem/PMREMNode.js +6 -3
  220. package/src/nodes/utils/ArrayElementNode.js +8 -4
  221. package/src/nodes/utils/ConvertNode.js +7 -3
  222. package/src/nodes/utils/CubeMapNode.js +6 -3
  223. package/src/nodes/utils/EquirectUVNode.js +6 -3
  224. package/src/nodes/utils/FlipNode.js +7 -4
  225. package/src/nodes/utils/FunctionOverloadingNode.js +7 -3
  226. package/src/nodes/utils/JoinNode.js +6 -3
  227. package/src/nodes/utils/LoopNode.js +7 -3
  228. package/src/nodes/utils/MatcapUVNode.js +6 -3
  229. package/src/nodes/utils/MaxMipLevelNode.js +6 -3
  230. package/src/nodes/utils/OscNode.js +7 -3
  231. package/src/nodes/utils/RTTNode.js +6 -3
  232. package/src/nodes/utils/ReflectorNode.js +8 -5
  233. package/src/nodes/utils/RemapNode.js +7 -3
  234. package/src/nodes/utils/RotateNode.js +6 -3
  235. package/src/nodes/utils/SetNode.js +7 -4
  236. package/src/nodes/utils/SplitNode.js +7 -3
  237. package/src/nodes/utils/SpriteSheetUVNode.js +7 -3
  238. package/src/nodes/utils/StorageArrayElementNode.js +9 -8
  239. package/src/nodes/utils/TimerNode.js +6 -3
  240. package/src/nodes/utils/TriplanarTexturesNode.js +7 -3
  241. package/src/nodes/utils/ViewportUtils.js +2 -2
  242. package/src/objects/BatchedMesh.js +76 -10
  243. package/src/objects/LOD.js +21 -0
  244. package/src/objects/Line.js +1 -0
  245. package/src/objects/Mesh.js +7 -23
  246. package/src/objects/Points.js +2 -0
  247. package/src/renderers/WebGLRenderer.js +64 -41
  248. package/src/renderers/common/BundleGroup.js +26 -0
  249. package/src/renderers/common/ClippingContext.js +4 -3
  250. package/src/renderers/common/RenderContext.js +4 -5
  251. package/src/renderers/common/RenderObject.js +116 -5
  252. package/src/renderers/common/RenderObjects.js +8 -1
  253. package/src/renderers/common/Renderer.js +57 -49
  254. package/src/renderers/common/extras/PMREMGenerator.js +7 -9
  255. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  256. package/src/renderers/common/nodes/Nodes.js +33 -14
  257. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  258. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  259. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  260. package/src/renderers/webgl/WebGLProgram.js +2 -0
  261. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  262. package/src/renderers/webgl/WebGLState.js +21 -0
  263. package/src/renderers/webgl/WebGLTextures.js +22 -0
  264. package/src/renderers/webgl-fallback/WebGLBackend.js +50 -45
  265. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +4 -4
  266. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  267. package/src/renderers/webgl-fallback/utils/WebGLState.js +1 -4
  268. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +61 -16
  269. package/src/renderers/webgpu/WebGPUBackend.js +33 -25
  270. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  271. package/src/renderers/webgpu/WebGPURenderer.js +5 -2
  272. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  273. package/src/renderers/{common → webgpu}/nodes/StandardNodeLibrary.js +11 -11
  274. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +91 -11
  275. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  276. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +1 -1
  277. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +7 -5
  278. package/src/renderers/webgpu/utils/WebGPUUtils.js +1 -1
  279. package/src/utils.js +33 -1
  280. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  281. package/examples/jsm/loaders/TiltLoader.js +0 -520
  282. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  283. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  284. package/src/nodes/display/ViewportNode.js +0 -138
  285. package/src/nodes/lighting/LightNode.js +0 -57
  286. package/src/renderers/common/StandardRenderer.js +0 -18
@@ -1,4 +1,4 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { nodeObject, nodeProxy, vec3 } from '../tsl/TSLBase.js';
3
3
 
4
4
  const sortLights = ( lights ) => {
@@ -23,8 +23,16 @@ const getLightNodeById = ( id, lightNodes ) => {
23
23
 
24
24
  };
25
25
 
26
+ const _lightsNodeRef = /*@__PURE__*/ new WeakMap();
27
+
26
28
  class LightsNode extends Node {
27
29
 
30
+ static get type() {
31
+
32
+ return 'LightsNode';
33
+
34
+ }
35
+
28
36
  constructor( lights = [] ) {
29
37
 
30
38
  super( 'vec3' );
@@ -106,14 +114,27 @@ class LightsNode extends Node {
106
114
 
107
115
  const lightNodeClass = nodeLibrary.getLightNodeClass( light.constructor );
108
116
 
109
- if ( lightNodeClass === undefined ) {
117
+ if ( lightNodeClass === null ) {
110
118
 
111
119
  console.warn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );
112
120
  continue;
113
121
 
114
122
  }
115
123
 
116
- lightNodes.push( nodeObject( new lightNodeClass( light ) ) );
124
+ let lightNode = null;
125
+
126
+ if ( ! _lightsNodeRef.has( light ) ) {
127
+
128
+ lightNode = new lightNodeClass( light );
129
+ _lightsNodeRef.set( light, lightNode );
130
+
131
+ } else {
132
+
133
+ lightNode = _lightsNodeRef.get( light );
134
+
135
+ }
136
+
137
+ lightNodes.push( lightNode );
117
138
 
118
139
  }
119
140
 
@@ -226,6 +247,4 @@ class LightsNode extends Node {
226
247
 
227
248
  export default LightsNode;
228
249
 
229
- LightsNode.type = /*@__PURE__*/ registerNode( 'Lights', LightsNode );
230
-
231
250
  export const lights = /*@__PURE__*/ nodeProxy( LightsNode );
@@ -1,18 +1,24 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import AnalyticLightNode from './AnalyticLightNode.js';
3
2
  import { getDistanceAttenuation } from './LightUtils.js';
4
3
  import { uniform } from '../core/UniformNode.js';
5
- import { objectViewPosition } from '../accessors/Object3DNode.js';
4
+ import { lightViewPosition } from '../accessors/Lights.js';
6
5
  import { positionView } from '../accessors/Position.js';
6
+ import { renderGroup } from '../TSL.js';
7
7
 
8
8
  class PointLightNode extends AnalyticLightNode {
9
9
 
10
+ static get type() {
11
+
12
+ return 'PointLightNode';
13
+
14
+ }
15
+
10
16
  constructor( light = null ) {
11
17
 
12
18
  super( light );
13
19
 
14
- this.cutoffDistanceNode = uniform( 0 );
15
- this.decayExponentNode = uniform( 0 );
20
+ this.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );
21
+ this.decayExponentNode = uniform( 0 ).setGroup( renderGroup );
16
22
 
17
23
  }
18
24
 
@@ -33,7 +39,7 @@ class PointLightNode extends AnalyticLightNode {
33
39
 
34
40
  const lightingModel = builder.context.lightingModel;
35
41
 
36
- const lVector = objectViewPosition( light ).sub( positionView ); // @TODO: Add it into LightNode
42
+ const lVector = lightViewPosition( light ).sub( positionView ); // @TODO: Add it into LightNode
37
43
 
38
44
  const lightDirection = lVector.normalize();
39
45
  const lightDistance = lVector.length();
@@ -59,5 +65,3 @@ class PointLightNode extends AnalyticLightNode {
59
65
  }
60
66
 
61
67
  export default PointLightNode;
62
-
63
- PointLightNode.type = /*@__PURE__*/ registerNode( 'PointLight', PointLightNode );
@@ -1,8 +1,8 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import AnalyticLightNode from './AnalyticLightNode.js';
3
2
  import { texture } from '../accessors/TextureNode.js';
4
3
  import { uniform } from '../core/UniformNode.js';
5
- import { objectViewPosition } from '../accessors/Object3DNode.js';
4
+ import { lightViewPosition } from '../accessors/Lights.js';
5
+ import { renderGroup } from '../core/UniformGroupNode.js';
6
6
 
7
7
  import { Matrix4 } from '../../math/Matrix4.js';
8
8
  import { Vector3 } from '../../math/Vector3.js';
@@ -14,12 +14,18 @@ let ltcLib = null;
14
14
 
15
15
  class RectAreaLightNode extends AnalyticLightNode {
16
16
 
17
+ static get type() {
18
+
19
+ return 'RectAreaLightNode';
20
+
21
+ }
22
+
17
23
  constructor( light = null ) {
18
24
 
19
25
  super( light );
20
26
 
21
- this.halfHeight = uniform( new Vector3() );
22
- this.halfWidth = uniform( new Vector3() );
27
+ this.halfHeight = uniform( new Vector3() ).setGroup( renderGroup );
28
+ this.halfWidth = uniform( new Vector3() ).setGroup( renderGroup );
23
29
 
24
30
  }
25
31
 
@@ -65,7 +71,7 @@ class RectAreaLightNode extends AnalyticLightNode {
65
71
  const { colorNode, light } = this;
66
72
  const lightingModel = builder.context.lightingModel;
67
73
 
68
- const lightPosition = objectViewPosition( light );
74
+ const lightPosition = lightViewPosition( light );
69
75
  const reflectedLight = builder.context.reflectedLight;
70
76
 
71
77
  lightingModel.directRectArea( {
@@ -89,5 +95,3 @@ class RectAreaLightNode extends AnalyticLightNode {
89
95
  }
90
96
 
91
97
  export default RectAreaLightNode;
92
-
93
- RectAreaLightNode.type = /*@__PURE__*/ registerNode( 'RectAreaLight', RectAreaLightNode );
@@ -1,23 +1,28 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import AnalyticLightNode from './AnalyticLightNode.js';
3
- import { lightTargetDirection } from './LightNode.js';
4
2
  import { getDistanceAttenuation } from './LightUtils.js';
5
3
  import { uniform } from '../core/UniformNode.js';
6
4
  import { smoothstep } from '../math/MathNode.js';
7
- import { objectViewPosition } from '../accessors/Object3DNode.js';
8
5
  import { positionView } from '../accessors/Position.js';
6
+ import { renderGroup } from '../core/UniformGroupNode.js';
7
+ import { lightViewPosition, lightTargetDirection } from '../accessors/Lights.js';
9
8
 
10
9
  class SpotLightNode extends AnalyticLightNode {
11
10
 
11
+ static get type() {
12
+
13
+ return 'SpotLightNode';
14
+
15
+ }
16
+
12
17
  constructor( light = null ) {
13
18
 
14
19
  super( light );
15
20
 
16
- this.coneCosNode = uniform( 0 );
17
- this.penumbraCosNode = uniform( 0 );
21
+ this.coneCosNode = uniform( 0 ).setGroup( renderGroup );
22
+ this.penumbraCosNode = uniform( 0 ).setGroup( renderGroup );
18
23
 
19
- this.cutoffDistanceNode = uniform( 0 );
20
- this.decayExponentNode = uniform( 0 );
24
+ this.cutoffDistanceNode = uniform( 0 ).setGroup( renderGroup );
25
+ this.decayExponentNode = uniform( 0 ).setGroup( renderGroup );
21
26
 
22
27
  }
23
28
 
@@ -51,7 +56,7 @@ class SpotLightNode extends AnalyticLightNode {
51
56
 
52
57
  const { colorNode, cutoffDistanceNode, decayExponentNode, light } = this;
53
58
 
54
- const lVector = objectViewPosition( light ).sub( positionView ); // @TODO: Add it into LightNode
59
+ const lVector = lightViewPosition( light ).sub( positionView ); // @TODO: Add it into LightNode
55
60
 
56
61
  const lightDirection = lVector.normalize();
57
62
  const angleCos = lightDirection.dot( lightTargetDirection( light ) );
@@ -80,5 +85,3 @@ class SpotLightNode extends AnalyticLightNode {
80
85
  }
81
86
 
82
87
  export default SpotLightNode;
83
-
84
- SpotLightNode.type = /*@__PURE__*/ registerNode( 'SpotLight', SpotLightNode );
@@ -1,9 +1,15 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { property } from '../core/PropertyNode.js';
3
3
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
4
 
5
5
  class ConditionalNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'ConditionalNode';
10
+
11
+ }
12
+
7
13
  constructor( condNode, ifNode, elseNode = null ) {
8
14
 
9
15
  super();
@@ -37,10 +43,23 @@ class ConditionalNode extends Node {
37
43
 
38
44
  setup( builder ) {
39
45
 
46
+ const condNode = this.condNode.cache();
47
+ const ifNode = this.ifNode.cache();
48
+ const elseNode = this.elseNode ? this.elseNode.cache() : null;
49
+
50
+ //
51
+
52
+ const currentNodeBlock = builder.context.nodeBlock;
53
+
54
+ builder.getDataFromNode( ifNode ).parentNodeBlock = currentNodeBlock;
55
+ if ( elseNode !== null ) builder.getDataFromNode( elseNode ).parentNodeBlock = currentNodeBlock;
56
+
57
+ //
58
+
40
59
  const properties = builder.getNodeProperties( this );
41
- properties.condNode = this.condNode.cache();
42
- properties.ifNode = this.ifNode.cache();
43
- properties.elseNode = this.elseNode ? this.elseNode.cache() : null;
60
+ properties.condNode = condNode;
61
+ properties.ifNode = ifNode.context( { nodeBlock: ifNode } );
62
+ properties.elseNode = elseNode ? elseNode.context( { nodeBlock: elseNode } ) : null;
44
63
 
45
64
  }
46
65
 
@@ -121,8 +140,6 @@ class ConditionalNode extends Node {
121
140
 
122
141
  export default ConditionalNode;
123
142
 
124
- ConditionalNode.type = /*@__PURE__*/ registerNode( 'Conditional', ConditionalNode );
125
-
126
143
  export const select = /*@__PURE__*/ nodeProxy( ConditionalNode );
127
144
 
128
145
  addMethodChaining( 'select', select );
@@ -1,10 +1,15 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { sub, mul, div } from './OperatorNode.js';
4
3
  import { addMethodChaining, nodeObject, nodeProxy, float, vec2, vec3, vec4, Fn } from '../tsl/TSLCore.js';
5
4
 
6
5
  class MathNode extends TempNode {
7
6
 
7
+ static get type() {
8
+
9
+ return 'MathNode';
10
+
11
+ }
12
+
8
13
  constructor( method, aNode, bNode = null, cNode = null ) {
9
14
 
10
15
  super();
@@ -264,8 +269,6 @@ MathNode.FACEFORWARD = 'faceforward';
264
269
 
265
270
  export default MathNode;
266
271
 
267
- MathNode.type = /*@__PURE__*/ registerNode( 'Math', MathNode );
268
-
269
272
  export const EPSILON = /*@__PURE__*/ float( 1e-6 );
270
273
  export const INFINITY = /*@__PURE__*/ float( 1e6 );
271
274
  export const PI = /*@__PURE__*/ float( Math.PI );
@@ -1,9 +1,14 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
4
3
 
5
4
  class OperatorNode extends TempNode {
6
5
 
6
+ static get type() {
7
+
8
+ return 'OperatorNode';
9
+
10
+ }
11
+
7
12
  constructor( op, aNode, bNode, ...params ) {
8
13
 
9
14
  super();
@@ -259,8 +264,6 @@ class OperatorNode extends TempNode {
259
264
 
260
265
  export default OperatorNode;
261
266
 
262
- OperatorNode.type = /*@__PURE__*/ registerNode( 'Operator', OperatorNode );
263
-
264
267
  export const add = /*@__PURE__*/ nodeProxy( OperatorNode, '+' );
265
268
  export const sub = /*@__PURE__*/ nodeProxy( OperatorNode, '-' );
266
269
  export const mul = /*@__PURE__*/ nodeProxy( OperatorNode, '*' );
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { texture } from '../accessors/TextureNode.js';
4
3
  import { textureCubeUV } from './PMREMUtils.js';
@@ -74,6 +73,12 @@ function _getPMREMFromTexture( texture ) {
74
73
 
75
74
  class PMREMNode extends TempNode {
76
75
 
76
+ static get type() {
77
+
78
+ return 'PMREMNode';
79
+
80
+ }
81
+
77
82
  constructor( value, uvNode = null, levelNode = null ) {
78
83
 
79
84
  super( 'vec3' );
@@ -206,8 +211,6 @@ class PMREMNode extends TempNode {
206
211
 
207
212
  export default PMREMNode;
208
213
 
209
- PMREMNode.type = /*@__PURE__*/ registerNode( 'PMREM', PMREMNode );
210
-
211
214
  function isCubeMapReady( image ) {
212
215
 
213
216
  if ( image === null || image === undefined ) return false;
@@ -1,6 +1,12 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
 
3
- class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
3
+ class ArrayElementNode extends Node {
4
+
5
+ static get type() {
6
+
7
+ return 'ArrayElementNode';
8
+
9
+ } // @TODO: If extending from TempNode it breaks webgpu_compute
4
10
 
5
11
  constructor( node, indexNode ) {
6
12
 
@@ -31,5 +37,3 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
31
37
  }
32
38
 
33
39
  export default ArrayElementNode;
34
-
35
- ArrayElementNode.type = /*@__PURE__*/ registerNode( 'ArrayElement', ArrayElementNode );
@@ -1,7 +1,13 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
 
3
3
  class ConvertNode extends Node {
4
4
 
5
+ static get type() {
6
+
7
+ return 'ConvertNode';
8
+
9
+ }
10
+
5
11
  constructor( node, convertTo ) {
6
12
 
7
13
  super();
@@ -61,5 +67,3 @@ class ConvertNode extends Node {
61
67
  }
62
68
 
63
69
  export default ConvertNode;
64
-
65
- ConvertNode.type = /*@__PURE__*/ registerNode( 'Convert', ConvertNode );
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { NodeUpdateType } from '../core/constants.js';
4
3
  import { nodeProxy } from '../tsl/TSLBase.js';
@@ -11,6 +10,12 @@ const _cache = new WeakMap();
11
10
 
12
11
  class CubeMapNode extends TempNode {
13
12
 
13
+ static get type() {
14
+
15
+ return 'CubeMapNode';
16
+
17
+ }
18
+
14
19
  constructor( envNode ) {
15
20
 
16
21
  super( 'vec3' );
@@ -112,8 +117,6 @@ class CubeMapNode extends TempNode {
112
117
 
113
118
  export default CubeMapNode;
114
119
 
115
- CubeMapNode.type = /*@__PURE__*/ registerNode( 'CubeMap', CubeMapNode );
116
-
117
120
  function isEquirectangularMapReady( image ) {
118
121
 
119
122
  if ( image === null || image === undefined ) return false;
@@ -1,10 +1,15 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { positionWorldDirection } from '../accessors/Position.js';
4
3
  import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
5
4
 
6
5
  class EquirectUVNode extends TempNode {
7
6
 
7
+ static get type() {
8
+
9
+ return 'EquirectUVNode';
10
+
11
+ }
12
+
8
13
  constructor( dirNode = positionWorldDirection ) {
9
14
 
10
15
  super( 'vec2' );
@@ -28,6 +33,4 @@ class EquirectUVNode extends TempNode {
28
33
 
29
34
  export default EquirectUVNode;
30
35
 
31
- EquirectUVNode.type = /*@__PURE__*/ registerNode( 'EquirectUV', EquirectUVNode );
32
-
33
36
  export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
@@ -1,9 +1,14 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { vectorComponents } from '../core/constants.js';
4
3
 
5
4
  class FlipNode extends TempNode {
6
5
 
6
+ static get type() {
7
+
8
+ return 'FlipNode';
9
+
10
+ }
11
+
7
12
  constructor( sourceNode, components ) {
8
13
 
9
14
  super();
@@ -29,7 +34,7 @@ class FlipNode extends TempNode {
29
34
  const sourceCache = builder.getVarFromNode( this );
30
35
  const sourceProperty = builder.getPropertyName( sourceCache );
31
36
 
32
- builder.addLineFlowCode( sourceProperty + ' = ' + sourceSnippet );
37
+ builder.addLineFlowCode( sourceProperty + ' = ' + sourceSnippet, this );
33
38
 
34
39
  const length = builder.getTypeLength( sourceType );
35
40
  const snippetValues = [];
@@ -61,5 +66,3 @@ class FlipNode extends TempNode {
61
66
  }
62
67
 
63
68
  export default FlipNode;
64
-
65
- FlipNode.type = /*@__PURE__*/ registerNode( 'Flip', FlipNode );
@@ -1,8 +1,14 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { nodeProxy } from '../tsl/TSLBase.js';
3
3
 
4
4
  class FunctionOverloadingNode extends Node {
5
5
 
6
+ static get type() {
7
+
8
+ return 'FunctionOverloadingNode';
9
+
10
+ }
11
+
6
12
  constructor( functionNodes = [], ...parametersNodes ) {
7
13
 
8
14
  super();
@@ -90,8 +96,6 @@ class FunctionOverloadingNode extends Node {
90
96
 
91
97
  export default FunctionOverloadingNode;
92
98
 
93
- FunctionOverloadingNode.type = /*@__PURE__*/ registerNode( 'FunctionOverloading', FunctionOverloadingNode );
94
-
95
99
  const overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );
96
100
 
97
101
  export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
@@ -1,8 +1,13 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
 
4
3
  class JoinNode extends TempNode {
5
4
 
5
+ static get type() {
6
+
7
+ return 'JoinNode';
8
+
9
+ }
10
+
6
11
  constructor( nodes = [], nodeType = null ) {
7
12
 
8
13
  super( nodeType );
@@ -57,5 +62,3 @@ class JoinNode extends TempNode {
57
62
  }
58
63
 
59
64
  export default JoinNode;
60
-
61
- JoinNode.type = /*@__PURE__*/ registerNode( 'Join', JoinNode );
@@ -1,9 +1,15 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { expression } from '../code/ExpressionNode.js';
3
3
  import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
4
4
 
5
5
  class LoopNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'LoopNode';
10
+
11
+ }
12
+
7
13
  constructor( params = [] ) {
8
14
 
9
15
  super();
@@ -191,8 +197,6 @@ class LoopNode extends Node {
191
197
 
192
198
  export default LoopNode;
193
199
 
194
- LoopNode.type = /*@__PURE__*/ registerNode( 'Loop', LoopNode );
195
-
196
200
  export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
197
201
  export const Continue = () => expression( 'continue' ).append();
198
202
  export const Break = () => expression( 'break' ).append();
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
2
  import { transformedNormalView } from '../accessors/Normal.js';
4
3
  import { positionViewDirection } from '../accessors/Position.js';
@@ -6,6 +5,12 @@ import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
6
5
 
7
6
  class MatcapUVNode extends TempNode {
8
7
 
8
+ static get type() {
9
+
10
+ return 'MatcapUVNode';
11
+
12
+ }
13
+
9
14
  constructor() {
10
15
 
11
16
  super( 'vec2' );
@@ -25,6 +30,4 @@ class MatcapUVNode extends TempNode {
25
30
 
26
31
  export default MatcapUVNode;
27
32
 
28
- MatcapUVNode.type = /*@__PURE__*/ registerNode( 'MatcapUV', MatcapUVNode );
29
-
30
33
  export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
@@ -1,10 +1,15 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import UniformNode from '../core/UniformNode.js';
3
2
  import { NodeUpdateType } from '../core/constants.js';
4
3
  import { nodeProxy } from '../tsl/TSLBase.js';
5
4
 
6
5
  class MaxMipLevelNode extends UniformNode {
7
6
 
7
+ static get type() {
8
+
9
+ return 'MaxMipLevelNode';
10
+
11
+ }
12
+
8
13
  constructor( textureNode ) {
9
14
 
10
15
  super( 0 );
@@ -47,6 +52,4 @@ class MaxMipLevelNode extends UniformNode {
47
52
 
48
53
  export default MaxMipLevelNode;
49
54
 
50
- MaxMipLevelNode.type = /*@__PURE__*/ registerNode( 'MaxMipLevel', MaxMipLevelNode );
51
-
52
55
  export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
@@ -1,9 +1,15 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { timerLocal } from './TimerNode.js';
3
3
  import { nodeObject, nodeProxy } from '../tsl/TSLBase.js';
4
4
 
5
5
  class OscNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'OscNode';
10
+
11
+ }
12
+
7
13
  constructor( method = OscNode.SINE, timeNode = timerLocal() ) {
8
14
 
9
15
  super();
@@ -73,8 +79,6 @@ OscNode.SAWTOOTH = 'sawtooth';
73
79
 
74
80
  export default OscNode;
75
81
 
76
- OscNode.type = /*@__PURE__*/ registerNode( 'Osc', OscNode );
77
-
78
82
  export const oscSine = /*@__PURE__*/ nodeProxy( OscNode, OscNode.SINE );
79
83
  export const oscSquare = /*@__PURE__*/ nodeProxy( OscNode, OscNode.SQUARE );
80
84
  export const oscTriangle = /*@__PURE__*/ nodeProxy( OscNode, OscNode.TRIANGLE );
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import { nodeObject } from '../tsl/TSLCore.js';
3
2
  import TextureNode from '../accessors/TextureNode.js';
4
3
  import { NodeUpdateType } from '../core/constants.js';
@@ -14,6 +13,12 @@ const _size = /*@__PURE__*/ new Vector2();
14
13
 
15
14
  class RTTNode extends TextureNode {
16
15
 
16
+ static get type() {
17
+
18
+ return 'RTTNode';
19
+
20
+ }
21
+
17
22
  constructor( node, width = null, height = null, options = { type: HalfFloatType } ) {
18
23
 
19
24
  const renderTarget = new RenderTarget( width, height, options );
@@ -124,7 +129,5 @@ class RTTNode extends TextureNode {
124
129
 
125
130
  export default RTTNode;
126
131
 
127
- RTTNode.type = /*@__PURE__*/ registerNode( 'RTT', RTTNode );
128
-
129
132
  export const rtt = ( node, ...params ) => nodeObject( new RTTNode( nodeObject( node ), ...params ) );
130
133
  export const convertToTexture = ( node, ...params ) => node.isTextureNode ? node : rtt( node, ...params );
@@ -1,8 +1,7 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TextureNode from '../accessors/TextureNode.js';
3
2
  import { nodeObject } from '../tsl/TSLBase.js';
4
3
  import { NodeUpdateType } from '../core/constants.js';
5
- import { viewportUV } from '../display/ViewportNode.js';
4
+ import { screenUV } from '../display/ScreenNode.js';
6
5
 
7
6
  import { HalfFloatType, LinearMipMapLinearFilter } from '../../constants.js';
8
7
  import { Plane } from '../../math/Plane.js';
@@ -28,12 +27,18 @@ const _q = new Vector4();
28
27
  const _size = new Vector2();
29
28
 
30
29
  const _defaultRT = new RenderTarget();
31
- const _defaultUV = viewportUV.flipX();
30
+ const _defaultUV = screenUV.flipX();
32
31
 
33
32
  let _inReflector = false;
34
33
 
35
34
  class ReflectorNode extends TextureNode {
36
35
 
36
+ static get type() {
37
+
38
+ return 'ReflectorNode';
39
+
40
+ }
41
+
37
42
  constructor( parameters = {} ) {
38
43
 
39
44
  super( _defaultRT.texture, _defaultUV );
@@ -236,5 +241,3 @@ class ReflectorNode extends TextureNode {
236
241
  export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
237
242
 
238
243
  export default ReflectorNode;
239
-
240
- ReflectorNode.type = /*@__PURE__*/ registerNode( 'Reflector', ReflectorNode );