super-three 0.155.0 → 0.157.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 (268) hide show
  1. package/build/three.cjs +361 -324
  2. package/build/three.js +361 -324
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +354 -323
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/capabilities/WebGL.js +17 -0
  7. package/examples/jsm/controls/DragControls.js +3 -2
  8. package/examples/jsm/controls/OrbitControls.js +13 -5
  9. package/examples/jsm/csm/CSMShader.js +59 -21
  10. package/examples/jsm/exporters/EXRExporter.js +102 -24
  11. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  14. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  15. package/examples/jsm/libs/tween.module.js +790 -735
  16. package/examples/jsm/libs/utif.module.js +1644 -1558
  17. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  18. package/examples/jsm/lines/LineMaterial.js +90 -156
  19. package/examples/jsm/loaders/3DMLoader.js +378 -104
  20. package/examples/jsm/loaders/DDSLoader.js +46 -3
  21. package/examples/jsm/loaders/EXRLoader.js +4 -4
  22. package/examples/jsm/loaders/FBXLoader.js +2 -0
  23. package/examples/jsm/loaders/GLTFLoader.js +18 -8
  24. package/examples/jsm/loaders/KTX2Loader.js +126 -77
  25. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  26. package/examples/jsm/loaders/LogLuvLoader.js +2 -2
  27. package/examples/jsm/loaders/MMDLoader.js +10 -7
  28. package/examples/jsm/loaders/RGBELoader.js +48 -66
  29. package/examples/jsm/loaders/STLLoader.js +7 -0
  30. package/examples/jsm/loaders/USDZLoader.js +215 -12
  31. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  32. package/examples/jsm/nodes/Nodes.js +8 -1
  33. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
  35. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  36. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
  38. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
  39. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  40. package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
  41. package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
  42. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
  43. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  44. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  45. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  46. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  47. package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
  48. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  49. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  51. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  52. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  53. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  54. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  55. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  56. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  57. package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
  58. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
  60. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  61. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  62. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  63. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  64. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  65. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  66. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  67. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  68. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  69. package/examples/jsm/nodes/core/AttributeNode.js +3 -3
  70. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  71. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  72. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  73. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  74. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  75. package/examples/jsm/nodes/core/InputNode.js +1 -1
  76. package/examples/jsm/nodes/core/Node.js +45 -14
  77. package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
  78. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  79. package/examples/jsm/nodes/core/NodeUniform.js +1 -1
  80. package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
  81. package/examples/jsm/nodes/core/PropertyNode.js +3 -1
  82. package/examples/jsm/nodes/core/StackNode.js +5 -5
  83. package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
  84. package/examples/jsm/nodes/core/TempNode.js +1 -1
  85. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  86. package/examples/jsm/nodes/core/VarNode.js +1 -1
  87. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  88. package/examples/jsm/nodes/core/constants.js +1 -1
  89. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  90. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  91. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  92. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  93. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  94. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  95. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  96. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  97. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  98. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  99. package/examples/jsm/nodes/display/ViewportNode.js +21 -7
  100. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  101. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  102. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  103. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  104. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  105. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  106. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  107. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  108. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  110. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  111. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  112. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  113. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  114. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  115. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  116. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  117. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  118. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  119. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  120. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  121. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  122. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
  123. package/examples/jsm/nodes/materials/Materials.js +2 -0
  124. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  125. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  126. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  127. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  128. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  129. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  130. package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
  131. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  132. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  133. package/examples/jsm/nodes/math/CondNode.js +1 -1
  134. package/examples/jsm/nodes/math/HashNode.js +34 -0
  135. package/examples/jsm/nodes/math/MathNode.js +2 -2
  136. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  137. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  138. package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
  139. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  140. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  141. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  142. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  143. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  144. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  145. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  146. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  147. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  148. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  149. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  150. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  151. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  152. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  153. package/examples/jsm/nodes/utils/SplitNode.js +2 -2
  154. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  155. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  156. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  157. package/examples/jsm/objects/Sky.js +1 -3
  158. package/examples/jsm/postprocessing/FilmPass.js +3 -5
  159. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  160. package/examples/jsm/postprocessing/RenderPass.js +30 -12
  161. package/examples/jsm/postprocessing/SAOPass.js +23 -98
  162. package/examples/jsm/postprocessing/SSAOPass.js +10 -30
  163. package/examples/jsm/renderers/common/Backend.js +11 -8
  164. package/examples/jsm/renderers/common/Background.js +2 -2
  165. package/examples/jsm/renderers/common/Binding.js +6 -0
  166. package/examples/jsm/renderers/common/Bindings.js +4 -5
  167. package/examples/jsm/renderers/common/Pipelines.js +9 -9
  168. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  169. package/examples/jsm/renderers/common/RenderContexts.js +26 -1
  170. package/examples/jsm/renderers/common/RenderList.js +12 -4
  171. package/examples/jsm/renderers/common/RenderObject.js +43 -15
  172. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  173. package/examples/jsm/renderers/common/Renderer.js +52 -16
  174. package/examples/jsm/renderers/common/SampledTexture.js +6 -3
  175. package/examples/jsm/renderers/common/Sampler.js +1 -1
  176. package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
  177. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  178. package/examples/jsm/renderers/common/Textures.js +166 -21
  179. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  180. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
  181. package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
  182. package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
  183. package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
  184. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
  185. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
  186. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
  187. package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
  188. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
  189. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
  190. package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
  191. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
  192. package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
  193. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
  194. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
  195. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
  196. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
  197. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
  198. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
  199. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  200. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
  201. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
  202. package/examples/jsm/shaders/FilmShader.js +11 -54
  203. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  204. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  205. package/examples/jsm/shaders/OutputShader.js +2 -2
  206. package/examples/jsm/shaders/SAOShader.js +0 -13
  207. package/examples/jsm/shaders/SSAOShader.js +33 -26
  208. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  209. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  210. package/package.json +1 -1
  211. package/src/Three.js +1 -2
  212. package/src/animation/AnimationUtils.js +3 -20
  213. package/src/animation/KeyframeTrack.js +8 -8
  214. package/src/audio/Audio.js +6 -0
  215. package/src/cameras/Camera.js +1 -5
  216. package/src/cameras/CubeCamera.js +14 -8
  217. package/src/constants.js +10 -1
  218. package/src/core/Object3D.js +1 -14
  219. package/src/core/RenderTarget.js +16 -7
  220. package/src/core/UniformsGroup.js +2 -2
  221. package/src/extras/core/CurvePath.js +4 -1
  222. package/src/loaders/DataTextureLoader.js +0 -2
  223. package/src/loaders/MaterialLoader.js +1 -1
  224. package/src/loaders/ObjectLoader.js +6 -0
  225. package/src/materials/Material.js +10 -10
  226. package/src/math/Color.js +1 -5
  227. package/src/math/ColorManagement.js +82 -60
  228. package/src/math/Vector2.js +2 -2
  229. package/src/math/Vector3.js +3 -3
  230. package/src/math/Vector4.js +4 -4
  231. package/src/objects/Line.js +1 -1
  232. package/src/objects/Mesh.js +1 -1
  233. package/src/objects/Points.js +1 -1
  234. package/src/objects/Sprite.js +2 -2
  235. package/src/renderers/WebGLRenderer.js +42 -51
  236. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  237. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  238. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  239. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  240. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  241. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  242. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  243. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  244. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  245. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  246. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  247. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  248. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  249. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
  250. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  251. package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
  252. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  253. package/src/renderers/shaders/UniformsUtils.js +2 -2
  254. package/src/renderers/webgl/WebGLBackground.js +9 -17
  255. package/src/renderers/webgl/WebGLLights.js +14 -3
  256. package/src/renderers/webgl/WebGLProgram.js +36 -5
  257. package/src/renderers/webgl/WebGLPrograms.js +9 -1
  258. package/src/renderers/webgl/WebGLTextures.js +19 -8
  259. package/src/renderers/webgl/WebGLUtils.js +25 -20
  260. package/src/scenes/Fog.js +1 -0
  261. package/src/scenes/FogExp2.js +1 -0
  262. package/src/textures/Source.js +2 -2
  263. package/src/textures/Texture.js +2 -2
  264. package/src/utils.js +9 -1
  265. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  266. package/src/lights/AmbientLightProbe.js +0 -21
  267. package/src/lights/HemisphereLightProbe.js +0 -30
  268. /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
@@ -0,0 +1,29 @@
1
+ import MaterialNode from './MaterialNode.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
+
5
+ class LineMaterialNode extends MaterialNode {
6
+
7
+ setup( /*builder*/ ) {
8
+
9
+ return this.getFloat( this.scope );
10
+
11
+ }
12
+
13
+ }
14
+
15
+ LineMaterialNode.SCALE = 'scale';
16
+ LineMaterialNode.DASH_SIZE = 'dashSize';
17
+ LineMaterialNode.GAP_SIZE = 'gapSize';
18
+ LineMaterialNode.LINEWIDTH = 'linewidth';
19
+ LineMaterialNode.DASH_OFFSET = 'dashOffset';
20
+
21
+ export default LineMaterialNode;
22
+
23
+ export const materialLineScale = nodeImmutable( LineMaterialNode, LineMaterialNode.SCALE );
24
+ export const materialLineDashOffset = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_OFFSET );
25
+ export const materialLineDashSize = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_SIZE );
26
+ export const materialLineGapSize = nodeImmutable( LineMaterialNode, LineMaterialNode.GAP_SIZE );
27
+ export const materialLineWidth = nodeImmutable( LineMaterialNode, LineMaterialNode.LINEWIDTH );
28
+
29
+ addNodeClass( 'LineMaterialNode', LineMaterialNode );
@@ -3,6 +3,8 @@ import { reference } from './ReferenceNode.js';
3
3
  import { materialReference } from './MaterialReferenceNode.js';
4
4
  import { nodeImmutable, float } from '../shadernode/ShaderNode.js';
5
5
 
6
+ const _propertyCache = new Map();
7
+
6
8
  class MaterialNode extends Node {
7
9
 
8
10
  constructor( scope ) {
@@ -13,33 +15,41 @@ class MaterialNode extends Node {
13
15
 
14
16
  }
15
17
 
16
- getFloat( property ) {
18
+ getCache( property, type ) {
17
19
 
18
- //@TODO: Check if it can be cached by property name.
20
+ let node = _propertyCache.get( property );
19
21
 
20
- return materialReference( property, 'float' );
22
+ if ( node === undefined ) {
21
23
 
22
- }
24
+ node = materialReference( property, type );
23
25
 
24
- getColor( property ) {
26
+ _propertyCache.set( property, node );
25
27
 
26
- //@TODO: Check if it can be cached by property name.
28
+ }
27
29
 
28
- return materialReference( property, 'color' );
30
+ return node;
29
31
 
30
32
  }
31
33
 
32
- getTexture( property ) {
34
+ getFloat( property ) {
33
35
 
34
- //@TODO: Check if it can be cached by property name.
36
+ return this.getCache( property, 'float' );
35
37
 
36
- const textureRefNode = materialReference( property, 'texture' );
38
+ }
39
+
40
+ getColor( property ) {
41
+
42
+ return this.getCache( property, 'color' );
43
+
44
+ }
45
+
46
+ getTexture( property ) {
37
47
 
38
- return textureRefNode;
48
+ return this.getCache( property, 'texture' );
39
49
 
40
50
  }
41
51
 
42
- construct( builder ) {
52
+ setup( builder ) {
43
53
 
44
54
  const material = builder.context.material;
45
55
  const scope = this.scope;
@@ -264,4 +274,4 @@ export const materialIridescence = nodeImmutable( MaterialNode, MaterialNode.IRI
264
274
  export const materialIridescenceIOR = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );
265
275
  export const materialIridescenceThickness = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );
266
276
 
267
- addNodeClass( MaterialNode );
277
+ addNodeClass( 'MaterialNode', MaterialNode );
@@ -1,4 +1,5 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
2
3
  import { addNodeClass } from '../core/Node.js';
3
4
  import { nodeObject } from '../shadernode/ShaderNode.js';
4
5
 
@@ -10,23 +11,25 @@ class MaterialReferenceNode extends ReferenceNode {
10
11
 
11
12
  this.material = material;
12
13
 
13
- }
14
+ this.updateType = NodeUpdateType.RENDER;
14
15
 
15
- construct( builder ) {
16
+ }
16
17
 
17
- const material = this.material !== null ? this.material : builder.material;
18
+ updateReference( frame ) {
18
19
 
19
- this.node.value = material[ this.property ];
20
+ this.reference = this.material !== null ? this.material : frame.material;
20
21
 
21
- return super.construct( builder );
22
+ return this.reference;
22
23
 
23
24
  }
24
25
 
25
- update( frame ) {
26
+ setup( builder ) {
26
27
 
27
- this.object = this.material !== null ? this.material : frame.material;
28
+ const material = this.material !== null ? this.material : builder.material;
29
+
30
+ this.node.value = material[ this.property ];
28
31
 
29
- super.update( frame );
32
+ return super.setup( builder );
30
33
 
31
34
  }
32
35
 
@@ -36,4 +39,4 @@ export default MaterialReferenceNode;
36
39
 
37
40
  export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
38
41
 
39
- addNodeClass( MaterialReferenceNode );
42
+ addNodeClass( 'MaterialReferenceNode', MaterialReferenceNode );
@@ -31,4 +31,4 @@ export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
31
31
  export const modelScale = nodeImmutable( ModelNode, ModelNode.SCALE );
32
32
  export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
33
33
 
34
- addNodeClass( ModelNode );
34
+ addNodeClass( 'ModelNode', ModelNode );
@@ -1,10 +1,11 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import { addNodeClass } from '../core/Node.js';
2
+ import TempNode from '../core/TempNode.js';
2
3
  import { cameraProjectionMatrix } from './CameraNode.js';
3
4
  import { modelViewMatrix } from './ModelNode.js';
4
5
  import { positionLocal } from './PositionNode.js';
5
6
  import { nodeProxy } from '../shadernode/ShaderNode.js';
6
7
 
7
- class ModelViewProjectionNode extends Node {
8
+ class ModelViewProjectionNode extends TempNode {
8
9
 
9
10
  constructor( positionNode = positionLocal ) {
10
11
 
@@ -14,7 +15,7 @@ class ModelViewProjectionNode extends Node {
14
15
 
15
16
  }
16
17
 
17
- construct() {
18
+ setup() {
18
19
 
19
20
  return cameraProjectionMatrix.mul( modelViewMatrix ).mul( this.positionNode );
20
21
 
@@ -26,4 +27,4 @@ export default ModelViewProjectionNode;
26
27
 
27
28
  export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
28
29
 
29
- addNodeClass( ModelViewProjectionNode );
30
+ addNodeClass( 'ModelViewProjectionNode', ModelViewProjectionNode );
@@ -19,7 +19,7 @@ class MorphNode extends Node {
19
19
 
20
20
  }
21
21
 
22
- constructAttribute( builder, name, assignNode = positionLocal ) {
22
+ setupAttribute( builder, name, assignNode = positionLocal ) {
23
23
 
24
24
  const mesh = this.mesh;
25
25
  const attributes = mesh.geometry.morphAttributes[ name ];
@@ -39,9 +39,9 @@ class MorphNode extends Node {
39
39
 
40
40
  }
41
41
 
42
- construct( builder ) {
42
+ setup( builder ) {
43
43
 
44
- this.constructAttribute( builder, 'position' );
44
+ this.setupAttribute( builder, 'position' );
45
45
 
46
46
  }
47
47
 
@@ -67,4 +67,4 @@ export default MorphNode;
67
67
 
68
68
  export const morph = nodeProxy( MorphNode );
69
69
 
70
- addNodeClass( MorphNode );
70
+ addNodeClass( 'MorphNode', MorphNode );
@@ -93,4 +93,4 @@ export const transformedNormalView = property( 'vec3', 'TransformedNormalView' )
93
93
  export const transformedNormalWorld = transformedNormalView.transformDirection( cameraViewMatrix ).normalize();
94
94
  export const transformedClearcoatNormalView = property( 'vec3', 'TransformedClearcoatNormalView' );
95
95
 
96
- addNodeClass( NormalNode );
96
+ addNodeClass( 'NormalNode', NormalNode );
@@ -1,6 +1,6 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { uniform } from '../core/UniformNode.js';
3
+ import UniformNode from '../core/UniformNode.js';
4
4
  import { nodeProxy } from '../shadernode/ShaderNode.js';
5
5
 
6
6
  import { Vector3 } from 'three';
@@ -16,7 +16,7 @@ class Object3DNode extends Node {
16
16
 
17
17
  this.updateType = NodeUpdateType.OBJECT;
18
18
 
19
- this._uniformNode = uniform( null );
19
+ this._uniformNode = new UniformNode( null );
20
20
 
21
21
  }
22
22
 
@@ -147,4 +147,4 @@ export const objectPosition = nodeProxy( Object3DNode, Object3DNode.POSITION );
147
147
  export const objectScale = nodeProxy( Object3DNode, Object3DNode.SCALE );
148
148
  export const objectViewPosition = nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
149
149
 
150
- addNodeClass( Object3DNode );
150
+ addNodeClass( 'Object3DNode', Object3DNode );
@@ -23,4 +23,4 @@ export default PointUVNode;
23
23
 
24
24
  export const pointUV = nodeImmutable( PointUVNode );
25
25
 
26
- addNodeClass( PointUVNode );
26
+ addNodeClass( 'PointUVNode', PointUVNode );
@@ -101,4 +101,4 @@ export const positionWorldDirection = nodeImmutable( PositionNode, PositionNode.
101
101
  export const positionView = nodeImmutable( PositionNode, PositionNode.VIEW );
102
102
  export const positionViewDirection = nodeImmutable( PositionNode, PositionNode.VIEW_DIRECTION );
103
103
 
104
- addNodeClass( PositionNode );
104
+ addNodeClass( 'PositionNode', PositionNode );
@@ -15,6 +15,7 @@ class ReferenceNode extends Node {
15
15
  this.uniformType = uniformType;
16
16
 
17
17
  this.object = object;
18
+ this.reference = null;
18
19
 
19
20
  this.node = null;
20
21
 
@@ -24,6 +25,14 @@ class ReferenceNode extends Node {
24
25
 
25
26
  }
26
27
 
28
+ updateReference( frame ) {
29
+
30
+ this.reference = this.object !== null ? this.object : frame.object;
31
+
32
+ return this.reference;
33
+
34
+ }
35
+
27
36
  setNodeType( uniformType ) {
28
37
 
29
38
  let node = null;
@@ -48,16 +57,13 @@ class ReferenceNode extends Node {
48
57
 
49
58
  }
50
59
 
51
- update( frame ) {
52
-
53
- const object = this.object !== null ? this.object : frame.object;
54
- const property = this.property;
60
+ update( /*frame*/ ) {
55
61
 
56
- this.node.value = object[ property ];
62
+ this.node.value = this.reference[ this.property ];
57
63
 
58
64
  }
59
65
 
60
- construct( /*builder*/ ) {
66
+ setup( /*builder*/ ) {
61
67
 
62
68
  return this.node;
63
69
 
@@ -69,4 +75,4 @@ export default ReferenceNode;
69
75
 
70
76
  export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
71
77
 
72
- addNodeClass( ReferenceNode );
78
+ addNodeClass( 'ReferenceNode', ReferenceNode );
@@ -18,7 +18,7 @@ class ReflectVectorNode extends Node {
18
18
 
19
19
  }
20
20
 
21
- construct() {
21
+ setup() {
22
22
 
23
23
  const reflectView = positionViewDirection.negate().reflect( transformedNormalView );
24
24
 
@@ -32,4 +32,4 @@ export default ReflectVectorNode;
32
32
 
33
33
  export const reflectVector = nodeImmutable( ReflectVectorNode );
34
34
 
35
- addNodeClass( ReflectVectorNode );
35
+ addNodeClass( 'ReflectVectorNode', ReflectVectorNode );
@@ -14,7 +14,7 @@ class SceneNode extends Node {
14
14
 
15
15
  }
16
16
 
17
- construct( builder ) {
17
+ setup( builder ) {
18
18
 
19
19
  const scope = this.scope;
20
20
  const scene = this.scene !== null ? this.scene : builder.scene;
@@ -49,4 +49,4 @@ export default SceneNode;
49
49
  export const backgroundBlurriness = nodeImmutable( SceneNode, SceneNode.BACKGROUND_BLURRINESS );
50
50
  export const backgroundIntensity = nodeImmutable( SceneNode, SceneNode.BACKGROUND_INTENSITY );
51
51
 
52
- addNodeClass( SceneNode );
52
+ addNodeClass( 'SceneNode', SceneNode );
@@ -30,7 +30,7 @@ class SkinningNode extends Node {
30
30
 
31
31
  }
32
32
 
33
- construct( builder ) {
33
+ setup( builder ) {
34
34
 
35
35
  const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode, boneMatricesNode } = this;
36
36
 
@@ -90,4 +90,4 @@ export default SkinningNode;
90
90
 
91
91
  export const skinning = nodeProxy( SkinningNode );
92
92
 
93
- addNodeClass( SkinningNode );
93
+ addNodeClass( 'SkinningNode', SkinningNode );
@@ -24,4 +24,4 @@ export default StorageBufferNode;
24
24
 
25
25
  export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
26
26
 
27
- addNodeClass( StorageBufferNode );
27
+ addNodeClass( 'StorageBufferNode', StorageBufferNode );
@@ -100,4 +100,4 @@ export const tangentWorld = nodeImmutable( TangentNode, TangentNode.WORLD );
100
100
  export const transformedTangentView = temp( tangentView, 'TransformedTangentView' );
101
101
  export const transformedTangentWorld = normalize( transformedTangentView.transformDirection( cameraViewMatrix ) );
102
102
 
103
- addNodeClass( TangentNode );
103
+ addNodeClass( 'TangentNode', TangentNode );
@@ -77,7 +77,7 @@ class TextureBicubicNode extends TempNode {
77
77
 
78
78
  }
79
79
 
80
- construct() {
80
+ setup() {
81
81
 
82
82
  return textureBicubicMethod( this.textureNode, this.blurNode );
83
83
 
@@ -91,4 +91,4 @@ export const textureBicubic = nodeProxy( TextureBicubicNode );
91
91
 
92
92
  addNodeElement( 'bicubic', textureBicubic );
93
93
 
94
- addNodeClass( TextureBicubicNode );
94
+ addNodeClass( 'TextureBicubicNode', TextureBicubicNode );
@@ -53,7 +53,13 @@ class TextureNode extends UniformNode {
53
53
 
54
54
  }
55
55
 
56
- getTextureMatrix( uvNode ) {
56
+ updateReference( /*frame*/ ) {
57
+
58
+ return this.value;
59
+
60
+ }
61
+
62
+ getTransformedUV( uvNode ) {
57
63
 
58
64
  const texture = this.value;
59
65
 
@@ -70,7 +76,7 @@ class TextureNode extends UniformNode {
70
76
 
71
77
  }
72
78
 
73
- construct( builder ) {
79
+ setup( builder ) {
74
80
 
75
81
  const properties = builder.getNodeProperties( this );
76
82
 
@@ -86,9 +92,9 @@ class TextureNode extends UniformNode {
86
92
 
87
93
  if ( ! uvNode ) uvNode = this.getDefaultUV();
88
94
 
89
- if ( this.updateMatrix ) {
95
+ if ( this.updateMatrix === true ) {
90
96
 
91
- uvNode = this.getTextureMatrix( uvNode );
97
+ uvNode = this.getTransformedUV( uvNode );
92
98
 
93
99
  }
94
100
 
@@ -168,8 +174,12 @@ class TextureNode extends UniformNode {
168
174
 
169
175
  builder.addLineFlowCode( `${propertyName} = ${snippet}` );
170
176
 
171
- nodeData.snippet = snippet;
172
- nodeData.propertyName = propertyName;
177
+ if ( builder.context.tempWrite !== false ) {
178
+
179
+ nodeData.snippet = snippet;
180
+ nodeData.propertyName = propertyName;
181
+
182
+ }
173
183
 
174
184
  }
175
185
 
@@ -177,7 +187,7 @@ class TextureNode extends UniformNode {
177
187
 
178
188
  if ( builder.needsColorSpaceToLinear( this.value ) ) {
179
189
 
180
- snippet = colorSpaceToLinear( expression( snippet, nodeType ), this.value.colorSpace ).construct( builder ).build( builder, nodeType );
190
+ snippet = colorSpaceToLinear( expression( snippet, nodeType ), this.value.colorSpace ).setup( builder ).build( builder, nodeType );
181
191
 
182
192
  }
183
193
 
@@ -268,4 +278,4 @@ export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : t
268
278
  addNodeElement( 'texture', texture );
269
279
  //addNodeElement( 'textureLevel', textureLevel );
270
280
 
271
- addNodeClass( TextureNode );
281
+ addNodeClass( 'TextureNode', TextureNode );
@@ -20,7 +20,7 @@ class TextureSizeNode extends Node {
20
20
  const textureProperty = this.textureNode.build( builder, 'property' );
21
21
  const levelNode = this.levelNode.build( builder, 'int' );
22
22
 
23
- return builder.format( `textureDimensions( ${textureProperty}, ${levelNode} )`, this.getNodeType( builder ), output );
23
+ return builder.format( `${builder.getMethod( 'textureDimensions' )}( ${textureProperty}, ${levelNode} )`, this.getNodeType( builder ), output );
24
24
 
25
25
  }
26
26
 
@@ -32,4 +32,4 @@ export const textureSize = nodeProxy( TextureSizeNode );
32
32
 
33
33
  addNodeElement( 'textureSize', textureSize );
34
34
 
35
- addNodeClass( TextureSizeNode );
35
+ addNodeClass( 'TextureSizeNode', TextureSizeNode );
@@ -0,0 +1,29 @@
1
+ import { addNodeClass } from '../core/Node.js';
2
+ import TextureNode from './TextureNode.js';
3
+ import { nodeProxy } from '../shadernode/ShaderNode.js';
4
+
5
+ class TextureStoreNode extends TextureNode {
6
+
7
+ constructor( value, uvNode, storeNode = null ) {
8
+
9
+ super( value, uvNode );
10
+
11
+ this.storeNode = storeNode;
12
+
13
+ this.isStoreTextureNode = true;
14
+
15
+ }
16
+
17
+ getNodeType( /*builder*/ ) {
18
+
19
+ return 'void';
20
+
21
+ }
22
+
23
+ }
24
+
25
+ export default TextureStoreNode;
26
+
27
+ export const textureStore = nodeProxy( TextureStoreNode );
28
+
29
+ addNodeClass( 'TextureStoreNode', TextureStoreNode );
@@ -44,4 +44,4 @@ export default UVNode;
44
44
 
45
45
  export const uv = ( ...params ) => nodeObject( new UVNode( ...params ) );
46
46
 
47
- addNodeClass( UVNode );
47
+ addNodeClass( 'UVNode', UVNode );
@@ -14,7 +14,7 @@ class UserDataNode extends ReferenceNode {
14
14
 
15
15
  update( frame ) {
16
16
 
17
- this.object = this.userData !== null ? this.userData : frame.object.userData;
17
+ this.reference = this.userData !== null ? this.userData : frame.object.userData;
18
18
 
19
19
  super.update( frame );
20
20
 
@@ -26,4 +26,4 @@ export default UserDataNode;
26
26
 
27
27
  export const userData = ( name, inputType, userData ) => nodeObject( new UserDataNode( name, inputType, userData ) );
28
28
 
29
- addNodeClass( UserDataNode );
29
+ addNodeClass( 'UserDataNode', UserDataNode );
@@ -75,4 +75,4 @@ export const js = ( src, includes ) => code( src, includes, 'js' );
75
75
  export const wgsl = ( src, includes ) => code( src, includes, 'wgsl' );
76
76
  export const glsl = ( src, includes ) => code( src, includes, 'glsl' );
77
77
 
78
- addNodeClass( CodeNode );
78
+ addNodeClass( 'CodeNode', CodeNode );
@@ -34,4 +34,4 @@ export default ExpressionNode;
34
34
 
35
35
  export const expression = nodeProxy( ExpressionNode );
36
36
 
37
- addNodeClass( ExpressionNode );
37
+ addNodeClass( 'ExpressionNode', ExpressionNode );
@@ -93,4 +93,4 @@ export const call = ( func, ...params ) => {
93
93
 
94
94
  addNodeElement( 'call', call );
95
95
 
96
- addNodeClass( FunctionCallNode );
96
+ addNodeClass( 'FunctionCallNode', FunctionCallNode );
@@ -99,17 +99,28 @@ class FunctionNode extends CodeNode {
99
99
 
100
100
  export default FunctionNode;
101
101
 
102
- const nativeFn = ( code, includes, language = '' ) => {
102
+ const nativeFn = ( code, includes = [], language = '' ) => {
103
103
 
104
- let functionNode = null;
104
+ for ( let i = 0; i < includes.length; i ++ ) {
105
105
 
106
- return ( ...params ) => {
106
+ const include = includes[ i ];
107
107
 
108
- if ( functionNode === null ) functionNode = nodeObject( new FunctionNode( code, includes, language ) );
108
+ // TSL Function: glslFn, wgslFn
109
109
 
110
- return functionNode.call( ...params );
110
+ if ( typeof include === 'function' ) {
111
111
 
112
- };
112
+ includes[ i ] = include.functionNode;
113
+
114
+ }
115
+
116
+ }
117
+
118
+ const functionNode = nodeObject( new FunctionNode( code, includes, language ) );
119
+
120
+ const fn = ( ...params ) => functionNode.call( ...params );
121
+ fn.functionNode = functionNode;
122
+
123
+ return fn;
113
124
 
114
125
  };
115
126
 
@@ -124,4 +135,4 @@ export const func = ( code, includes ) => { // @deprecated, r154
124
135
 
125
136
  };
126
137
 
127
- addNodeClass( FunctionNode );
138
+ addNodeClass( 'FunctionNode', FunctionNode );
@@ -431,7 +431,7 @@ class ScriptableNode extends Node {
431
431
 
432
432
  }
433
433
 
434
- construct() {
434
+ setup() {
435
435
 
436
436
  return this.getDefaultOutputNode();
437
437
 
@@ -485,4 +485,4 @@ export const scriptable = nodeProxy( ScriptableNode );
485
485
 
486
486
  addNodeElement( 'scriptable', scriptable );
487
487
 
488
- addNodeClass( ScriptableNode );
488
+ addNodeClass( 'ScriptableNode', ScriptableNode );
@@ -92,7 +92,7 @@ class ScriptableValueNode extends Node {
92
92
 
93
93
  }
94
94
 
95
- construct() {
95
+ setup() {
96
96
 
97
97
  return this.value && this.value.isNode ? this.value : float();
98
98
 
@@ -164,4 +164,4 @@ export const scriptableValue = nodeProxy( ScriptableValueNode );
164
164
 
165
165
  addNodeElement( 'scriptableValue', scriptableValue );
166
166
 
167
- addNodeClass( ScriptableValueNode );
167
+ addNodeClass( 'ScriptableValueNode', ScriptableValueNode );
@@ -23,4 +23,4 @@ class ArrayUniformNode extends UniformNode {
23
23
 
24
24
  export default ArrayUniformNode;
25
25
 
26
- addNodeClass( ArrayUniformNode );
26
+ addNodeClass( 'ArrayUniformNode', ArrayUniformNode );
@@ -20,12 +20,12 @@ class AttributeNode extends Node {
20
20
 
21
21
  getNodeType( builder ) {
22
22
 
23
- const attributeName = this.getAttributeName( builder );
24
-
25
23
  let nodeType = super.getNodeType( builder );
26
24
 
27
25
  if ( nodeType === null ) {
28
26
 
27
+ const attributeName = this.getAttributeName( builder );
28
+
29
29
  if ( builder.hasGeometryAttribute( attributeName ) ) {
30
30
 
31
31
  const attribute = builder.geometry.getAttribute( attributeName );
@@ -99,4 +99,4 @@ export default AttributeNode;
99
99
 
100
100
  export const attribute = ( name, nodeType ) => nodeObject( new AttributeNode( name, nodeType ) );
101
101
 
102
- addNodeClass( AttributeNode );
102
+ addNodeClass( 'AttributeNode', AttributeNode );
@@ -42,4 +42,4 @@ export const bypass = nodeProxy( BypassNode );
42
42
 
43
43
  addNodeElement( 'bypass', bypass );
44
44
 
45
- addNodeClass( BypassNode );
45
+ addNodeClass( 'BypassNode', BypassNode );
@@ -43,4 +43,4 @@ export const cache = nodeProxy( CacheNode );
43
43
 
44
44
  addNodeElement( 'cache', cache );
45
45
 
46
- addNodeClass( CacheNode );
46
+ addNodeClass( 'CacheNode', CacheNode );
@@ -29,4 +29,4 @@ class ConstNode extends InputNode {
29
29
 
30
30
  export default ConstNode;
31
31
 
32
- addNodeClass( ConstNode );
32
+ addNodeClass( 'ConstNode', ConstNode );