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 { NodeUpdateType } from '../core/constants.js';
3
3
  import { uniform } from '../core/UniformNode.js';
4
4
  import { nodeObject } from '../tsl/TSLCore.js';
@@ -6,6 +6,12 @@ import ArrayElementNode from '../utils/ArrayElementNode.js';
6
6
 
7
7
  class ReferenceElementNode extends ArrayElementNode {
8
8
 
9
+ static get type() {
10
+
11
+ return 'ReferenceElementNode';
12
+
13
+ }
14
+
9
15
  constructor( referenceNode, indexNode ) {
10
16
 
11
17
  super( referenceNode, indexNode );
@@ -36,6 +42,12 @@ class ReferenceElementNode extends ArrayElementNode {
36
42
 
37
43
  class ReferenceBaseNode extends Node {
38
44
 
45
+ static get type() {
46
+
47
+ return 'ReferenceBaseNode';
48
+
49
+ }
50
+
39
51
  constructor( property, uniformType, object = null, count = null ) {
40
52
 
41
53
  super();
@@ -48,11 +60,20 @@ class ReferenceBaseNode extends Node {
48
60
  this.properties = property.split( '.' );
49
61
  this.reference = object;
50
62
  this.node = null;
63
+ this.group = null;
51
64
 
52
65
  this.updateType = NodeUpdateType.OBJECT;
53
66
 
54
67
  }
55
68
 
69
+ setGroup( group ) {
70
+
71
+ this.group = group;
72
+
73
+ return this;
74
+
75
+ }
76
+
56
77
  element( indexNode ) {
57
78
 
58
79
  return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
@@ -61,7 +82,15 @@ class ReferenceBaseNode extends Node {
61
82
 
62
83
  setNodeType( uniformType ) {
63
84
 
64
- this.node = uniform( null, uniformType ).getSelf();
85
+ const node = uniform( null, uniformType ).getSelf();
86
+
87
+ if ( this.group !== null ) {
88
+
89
+ node.setGroup( this.group );
90
+
91
+ }
92
+
93
+ this.node = node;
65
94
 
66
95
  }
67
96
 
@@ -69,6 +98,7 @@ class ReferenceBaseNode extends Node {
69
98
 
70
99
  if ( this.node === null ) {
71
100
 
101
+ this.updateReference( builder );
72
102
  this.updateValue();
73
103
 
74
104
  }
@@ -137,7 +167,5 @@ class ReferenceBaseNode extends Node {
137
167
 
138
168
  export default ReferenceBaseNode;
139
169
 
140
- ReferenceBaseNode.type = /*@__PURE__*/ registerNode( 'ReferenceBase', ReferenceBaseNode );
141
-
142
170
  export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
143
171
  export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
@@ -1,4 +1,4 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import { uniform } from '../core/UniformNode.js';
4
4
  import { texture } from './TextureNode.js';
@@ -10,6 +10,12 @@ import ArrayElementNode from '../utils/ArrayElementNode.js';
10
10
 
11
11
  class ReferenceElementNode extends ArrayElementNode {
12
12
 
13
+ static get type() {
14
+
15
+ return 'ReferenceElementNode';
16
+
17
+ }
18
+
13
19
  constructor( referenceNode, indexNode ) {
14
20
 
15
21
  super( referenceNode, indexNode );
@@ -41,6 +47,12 @@ class ReferenceElementNode extends ArrayElementNode {
41
47
  // TODO: Extends this from ReferenceBaseNode
42
48
  class ReferenceNode extends Node {
43
49
 
50
+ static get type() {
51
+
52
+ return 'ReferenceNode';
53
+
54
+ }
55
+
44
56
  constructor( property, uniformType, object = null, count = null ) {
45
57
 
46
58
  super();
@@ -53,6 +65,8 @@ class ReferenceNode extends Node {
53
65
  this.properties = property.split( '.' );
54
66
  this.reference = object;
55
67
  this.node = null;
68
+ this.group = null;
69
+ this.name = null;
56
70
 
57
71
  this.updateType = NodeUpdateType.OBJECT;
58
72
 
@@ -64,6 +78,22 @@ class ReferenceNode extends Node {
64
78
 
65
79
  }
66
80
 
81
+ setGroup( group ) {
82
+
83
+ this.group = group;
84
+
85
+ return this;
86
+
87
+ }
88
+
89
+ label( name ) {
90
+
91
+ this.name = name;
92
+
93
+ return this;
94
+
95
+ }
96
+
67
97
  setNodeType( uniformType ) {
68
98
 
69
99
  let node = null;
@@ -90,6 +120,14 @@ class ReferenceNode extends Node {
90
120
 
91
121
  }
92
122
 
123
+ if ( this.group !== null ) {
124
+
125
+ node.setGroup( this.group );
126
+
127
+ }
128
+
129
+ if ( this.name !== null ) node.label( this.name );
130
+
93
131
  this.node = node.getSelf();
94
132
 
95
133
  }
@@ -98,6 +136,7 @@ class ReferenceNode extends Node {
98
136
 
99
137
  if ( this.node === null ) {
100
138
 
139
+ this.updateReference( builder );
101
140
  this.updateValue();
102
141
 
103
142
  }
@@ -166,7 +205,5 @@ class ReferenceNode extends Node {
166
205
 
167
206
  export default ReferenceNode;
168
207
 
169
- ReferenceNode.type = /*@__PURE__*/ registerNode( 'Reference', ReferenceNode );
170
-
171
208
  export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
172
209
  export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
@@ -1,15 +1,23 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import ReferenceBaseNode from './ReferenceBaseNode.js';
3
2
  import { nodeObject } from '../tsl/TSLCore.js';
3
+ import { renderGroup } from '../core/UniformGroupNode.js';
4
4
 
5
5
  class RendererReferenceNode extends ReferenceBaseNode {
6
6
 
7
+ static get type() {
8
+
9
+ return 'RendererReferenceNode';
10
+
11
+ }
12
+
7
13
  constructor( property, inputType, renderer = null ) {
8
14
 
9
15
  super( property, inputType, renderer );
10
16
 
11
17
  this.renderer = renderer;
12
18
 
19
+ this.setGroup( renderGroup );
20
+
13
21
  }
14
22
 
15
23
  updateReference( state ) {
@@ -24,6 +32,4 @@ class RendererReferenceNode extends ReferenceBaseNode {
24
32
 
25
33
  export default RendererReferenceNode;
26
34
 
27
- RendererReferenceNode.type = /*@__PURE__*/ registerNode( 'RendererReference', RendererReferenceNode );
28
-
29
35
  export const rendererReference = ( name, type, renderer ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
@@ -1,9 +1,15 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { nodeImmutable } from '../tsl/TSLBase.js';
3
3
  import { reference } from './ReferenceNode.js';
4
4
 
5
5
  class SceneNode extends Node {
6
6
 
7
+ static get type() {
8
+
9
+ return 'SceneNode';
10
+
11
+ }
12
+
7
13
  constructor( scope = SceneNode.BACKGROUND_BLURRINESS, scene = null ) {
8
14
 
9
15
  super();
@@ -45,7 +51,5 @@ SceneNode.BACKGROUND_INTENSITY = 'backgroundIntensity';
45
51
 
46
52
  export default SceneNode;
47
53
 
48
- SceneNode.type = /*@__PURE__*/ registerNode( 'Scene', SceneNode );
49
-
50
54
  export const backgroundBlurriness = /*@__PURE__*/ nodeImmutable( SceneNode, SceneNode.BACKGROUND_BLURRINESS );
51
55
  export const backgroundIntensity = /*@__PURE__*/ nodeImmutable( SceneNode, SceneNode.BACKGROUND_INTENSITY );
@@ -1,4 +1,4 @@
1
- import Node, { registerNode } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import { nodeObject } from '../tsl/TSLBase.js';
4
4
  import { attribute } from '../core/AttributeNode.js';
@@ -14,6 +14,12 @@ const _frameId = new WeakMap();
14
14
 
15
15
  class SkinningNode extends Node {
16
16
 
17
+ static get type() {
18
+
19
+ return 'SkinningNode';
20
+
21
+ }
22
+
17
23
  constructor( skinnedMesh, useReference = false ) {
18
24
 
19
25
  super( 'void' );
@@ -181,7 +187,5 @@ class SkinningNode extends Node {
181
187
 
182
188
  export default SkinningNode;
183
189
 
184
- SkinningNode.type = /*@__PURE__*/ registerNode( 'Skinning', SkinningNode );
185
-
186
190
  export const skinning = ( skinnedMesh ) => nodeObject( new SkinningNode( skinnedMesh ) );
187
191
  export const skinningReference = ( skinnedMesh ) => nodeObject( new SkinningNode( skinnedMesh, true ) );
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import BufferNode from './BufferNode.js';
3
2
  import { bufferAttribute } from './BufferAttributeNode.js';
4
3
  import { nodeObject, varying } from '../tsl/TSLBase.js';
@@ -7,6 +6,12 @@ import { GPUBufferBindingType } from '../../renderers/webgpu/utils/WebGPUConstan
7
6
 
8
7
  class StorageBufferNode extends BufferNode {
9
8
 
9
+ static get type() {
10
+
11
+ return 'StorageBufferNode';
12
+
13
+ }
14
+
10
15
  constructor( value, bufferType, bufferCount = 0 ) {
11
16
 
12
17
  super( value, bufferType, bufferCount );
@@ -14,6 +19,7 @@ class StorageBufferNode extends BufferNode {
14
19
  this.isStorageBufferNode = true;
15
20
 
16
21
  this.access = GPUBufferBindingType.Storage;
22
+ this.isAtomic = false;
17
23
 
18
24
  this.bufferObject = false;
19
25
  this.bufferCount = bufferCount;
@@ -92,6 +98,20 @@ class StorageBufferNode extends BufferNode {
92
98
 
93
99
  }
94
100
 
101
+ setAtomic( value ) {
102
+
103
+ this.isAtomic = value;
104
+
105
+ return this;
106
+
107
+ }
108
+
109
+ toAtomic() {
110
+
111
+ return this.setAtomic( true );
112
+
113
+ }
114
+
95
115
  generate( builder ) {
96
116
 
97
117
  if ( builder.isAvailable( 'storageBuffer' ) ) {
@@ -122,8 +142,6 @@ class StorageBufferNode extends BufferNode {
122
142
 
123
143
  export default StorageBufferNode;
124
144
 
125
- StorageBufferNode.type = /*@__PURE__*/ registerNode( 'StorageBuffer', StorageBufferNode );
126
-
127
145
  // Read-Write Storage
128
146
  export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
129
147
  export const storageObject = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ).setBufferObject( true ) );
@@ -1,10 +1,15 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TextureNode from './TextureNode.js';
3
2
  import { nodeProxy } from '../tsl/TSLBase.js';
4
3
  import { GPUStorageTextureAccess } from '../../renderers/webgpu/utils/WebGPUConstants.js';
5
4
 
6
5
  class StorageTextureNode extends TextureNode {
7
6
 
7
+ static get type() {
8
+
9
+ return 'StorageTextureNode';
10
+
11
+ }
12
+
8
13
  constructor( value, uvNode, storeNode = null ) {
9
14
 
10
15
  super( value, uvNode );
@@ -81,7 +86,7 @@ class StorageTextureNode extends TextureNode {
81
86
 
82
87
  const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, storeSnippet );
83
88
 
84
- builder.addLineFlowCode( snippet );
89
+ builder.addLineFlowCode( snippet, this );
85
90
 
86
91
  }
87
92
 
@@ -89,8 +94,6 @@ class StorageTextureNode extends TextureNode {
89
94
 
90
95
  export default StorageTextureNode;
91
96
 
92
- StorageTextureNode.type = /*@__PURE__*/ registerNode( 'StorageTexture', StorageTextureNode );
93
-
94
97
  export const storageTexture = /*@__PURE__*/ nodeProxy( StorageTextureNode );
95
98
 
96
99
  export const textureStore = ( value, uvNode, storeNode ) => {
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import TextureNode from './TextureNode.js';
3
2
  import { nodeProxy, vec3, Fn, If } from '../tsl/TSLBase.js';
4
3
 
@@ -6,7 +5,7 @@ const normal = Fn( ( { texture, uv } ) => {
6
5
 
7
6
  const epsilon = 0.0001;
8
7
 
9
- const ret = vec3().temp();
8
+ const ret = vec3().toVar();
10
9
 
11
10
  If( uv.x.lessThan( epsilon ), () => {
12
11
 
@@ -51,6 +50,12 @@ const normal = Fn( ( { texture, uv } ) => {
51
50
 
52
51
  class Texture3DNode extends TextureNode {
53
52
 
53
+ static get type() {
54
+
55
+ return 'Texture3DNode';
56
+
57
+ }
58
+
54
59
  constructor( value, uvNode = null, levelNode = null ) {
55
60
 
56
61
  super( value, uvNode, levelNode );
@@ -95,6 +100,4 @@ class Texture3DNode extends TextureNode {
95
100
 
96
101
  export default Texture3DNode;
97
102
 
98
- Texture3DNode.type = /*@__PURE__*/ registerNode( 'Texture3D', Texture3DNode );
99
-
100
103
  export const texture3D = /*@__PURE__*/ nodeProxy( Texture3DNode );
@@ -1,17 +1,22 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import UniformNode, { uniform } from '../core/UniformNode.js';
3
2
  import { uv } from './UV.js';
4
3
  import { textureSize } from './TextureSizeNode.js';
5
- import { toWorkingColorSpace } from '../display/ColorSpaceNode.js';
4
+ import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
6
5
  import { expression } from '../code/ExpressionNode.js';
7
6
  import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
8
- import { nodeProxy, vec3, nodeObject } from '../tsl/TSLBase.js';
7
+ import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
9
8
  import { NodeUpdateType } from '../core/constants.js';
10
9
 
11
10
  import { IntType, UnsignedIntType } from '../../constants.js';
12
11
 
13
12
  class TextureNode extends UniformNode {
14
13
 
14
+ static get type() {
15
+
16
+ return 'TextureNode';
17
+
18
+ }
19
+
15
20
  constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
16
21
 
17
22
  super( value );
@@ -123,7 +128,15 @@ class TextureNode extends UniformNode {
123
128
 
124
129
  if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
125
130
 
126
- uvNode = uvNode.setY( uvNode.y.oneMinus() );
131
+ if ( this.sampler ) {
132
+
133
+ uvNode = uvNode.flipY();
134
+
135
+ } else {
136
+
137
+ uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
138
+
139
+ }
127
140
 
128
141
  }
129
142
 
@@ -264,7 +277,7 @@ class TextureNode extends UniformNode {
264
277
 
265
278
  const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
266
279
 
267
- builder.addLineFlowCode( `${propertyName} = ${snippet}` );
280
+ builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
268
281
 
269
282
  nodeData.snippet = snippet;
270
283
  nodeData.propertyName = propertyName;
@@ -276,7 +289,7 @@ class TextureNode extends UniformNode {
276
289
 
277
290
  if ( builder.needsToWorkingColorSpace( texture ) ) {
278
291
 
279
- snippet = toWorkingColorSpace( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
292
+ snippet = colorSpaceToWorking( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
280
293
 
281
294
  }
282
295
 
@@ -430,8 +443,6 @@ class TextureNode extends UniformNode {
430
443
 
431
444
  export default TextureNode;
432
445
 
433
- TextureNode.type = /*@__PURE__*/ registerNode( 'Texture', TextureNode );
434
-
435
446
  export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
436
447
  export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
437
448
 
@@ -1,9 +1,14 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import Node from '../core/Node.js';
3
2
  import { nodeProxy } from '../tsl/TSLBase.js';
4
3
 
5
4
  class TextureSizeNode extends Node {
6
5
 
6
+ static get type() {
7
+
8
+ return 'TextureSizeNode';
9
+
10
+ }
11
+
7
12
  constructor( textureNode, levelNode = null ) {
8
13
 
9
14
  super( 'uvec2' );
@@ -18,9 +23,9 @@ class TextureSizeNode extends Node {
18
23
  generate( builder, output ) {
19
24
 
20
25
  const textureProperty = this.textureNode.build( builder, 'property' );
21
- const levelNode = this.levelNode.build( builder, 'int' );
26
+ const level = this.levelNode === null ? '0' : this.levelNode.build( builder, 'int' );
22
27
 
23
- return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ levelNode } )`, this.getNodeType( builder ), output );
28
+ return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ level } )`, this.getNodeType( builder ), output );
24
29
 
25
30
  }
26
31
 
@@ -28,6 +33,4 @@ class TextureSizeNode extends Node {
28
33
 
29
34
  export default TextureSizeNode;
30
35
 
31
- TextureSizeNode.type = /*@__PURE__*/ registerNode( 'TextureSize', TextureSizeNode );
32
-
33
36
  export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );
@@ -1,4 +1,3 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import { nodeObject } from '../tsl/TSLBase.js';
3
2
  import { NodeUpdateType } from '../core/constants.js';
4
3
  import { getValueType } from '../core/NodeUtils.js';
@@ -7,17 +6,17 @@ import BufferNode from './BufferNode.js';
7
6
 
8
7
  class UniformArrayElementNode extends ArrayElementNode {
9
8
 
10
- constructor( arrayBuffer, indexNode ) {
11
-
12
- super( arrayBuffer, indexNode );
9
+ static get type() {
13
10
 
14
- this.isArrayBufferElementNode = true;
11
+ return 'UniformArrayElementNode';
15
12
 
16
13
  }
17
14
 
18
- getNodeType( builder ) {
15
+ constructor( arrayBuffer, indexNode ) {
19
16
 
20
- return this.node.getElementType( builder );
17
+ super( arrayBuffer, indexNode );
18
+
19
+ this.isArrayBufferElementNode = true;
21
20
 
22
21
  }
23
22
 
@@ -34,6 +33,12 @@ class UniformArrayElementNode extends ArrayElementNode {
34
33
 
35
34
  class UniformArrayNode extends BufferNode {
36
35
 
36
+ static get type() {
37
+
38
+ return 'UniformArrayNode';
39
+
40
+ }
41
+
37
42
  constructor( value, elementType = null ) {
38
43
 
39
44
  super( null, 'vec4' );
@@ -141,8 +146,6 @@ class UniformArrayNode extends BufferNode {
141
146
 
142
147
  export default UniformArrayNode;
143
148
 
144
- UniformArrayNode.type = /*@__PURE__*/ registerNode( 'UniformArray', UniformArrayNode );
145
-
146
149
  export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
147
150
 
148
151
  //
@@ -1,9 +1,14 @@
1
- import { registerNode } from '../core/Node.js';
2
1
  import ReferenceNode from './ReferenceNode.js';
3
2
  import { nodeObject } from '../tsl/TSLBase.js';
4
3
 
5
4
  class UserDataNode extends ReferenceNode {
6
5
 
6
+ static get type() {
7
+
8
+ return 'UserDataNode';
9
+
10
+ }
11
+
7
12
  constructor( property, inputType, userData = null ) {
8
13
 
9
14
  super( property, inputType, userData );
@@ -12,11 +17,11 @@ class UserDataNode extends ReferenceNode {
12
17
 
13
18
  }
14
19
 
15
- update( frame ) {
20
+ updateReference( state ) {
16
21
 
17
- this.reference = this.userData !== null ? this.userData : frame.object.userData;
22
+ this.reference = this.userData !== null ? this.userData : state.object.userData;
18
23
 
19
- super.update( frame );
24
+ return this.reference;
20
25
 
21
26
  }
22
27
 
@@ -24,6 +29,4 @@ class UserDataNode extends ReferenceNode {
24
29
 
25
30
  export default UserDataNode;
26
31
 
27
- UserDataNode.type = /*@__PURE__*/ registerNode( 'UserData', UserDataNode );
28
-
29
32
  export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );