super-three 0.156.0 → 0.157.1

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 (223) hide show
  1. package/build/three.cjs +753 -277
  2. package/build/three.js +753 -277
  3. package/build/three.min.js +2 -2
  4. package/build/three.module.js +750 -276
  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/csm/CSMShader.js +25 -21
  9. package/examples/jsm/exporters/EXRExporter.js +102 -24
  10. package/examples/jsm/exporters/GLTFExporter.js +1 -1
  11. package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
  12. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
  13. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  14. package/examples/jsm/lights/LightProbeGenerator.js +37 -3
  15. package/examples/jsm/lines/LineMaterial.js +90 -156
  16. package/examples/jsm/loaders/3DMLoader.js +378 -104
  17. package/examples/jsm/loaders/GLTFLoader.js +1 -1
  18. package/examples/jsm/loaders/LDrawLoader.js +22 -16
  19. package/examples/jsm/loaders/RGBELoader.js +1 -1
  20. package/examples/jsm/loaders/USDZLoader.js +215 -12
  21. package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
  22. package/examples/jsm/nodes/Nodes.js +5 -1
  23. package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
  24. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
  25. package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
  26. package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
  27. package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
  28. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
  29. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
  30. package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
  31. package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
  32. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
  33. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  34. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
  35. package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
  36. package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
  37. package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
  38. package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
  39. package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
  40. package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
  41. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
  42. package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
  43. package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
  44. package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
  45. package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
  46. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
  47. package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
  48. package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
  49. package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
  50. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  51. package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
  52. package/examples/jsm/nodes/code/CodeNode.js +1 -1
  53. package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
  54. package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
  55. package/examples/jsm/nodes/code/FunctionNode.js +18 -7
  56. package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
  57. package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
  58. package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
  59. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  60. package/examples/jsm/nodes/core/BypassNode.js +1 -1
  61. package/examples/jsm/nodes/core/CacheNode.js +1 -1
  62. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  63. package/examples/jsm/nodes/core/ContextNode.js +2 -2
  64. package/examples/jsm/nodes/core/IndexNode.js +1 -1
  65. package/examples/jsm/nodes/core/InputNode.js +1 -1
  66. package/examples/jsm/nodes/core/Node.js +28 -13
  67. package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
  68. package/examples/jsm/nodes/core/NodeFrame.js +37 -14
  69. package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
  70. package/examples/jsm/nodes/core/PropertyNode.js +3 -3
  71. package/examples/jsm/nodes/core/StackNode.js +1 -1
  72. package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
  73. package/examples/jsm/nodes/core/TempNode.js +1 -1
  74. package/examples/jsm/nodes/core/UniformNode.js +3 -1
  75. package/examples/jsm/nodes/core/VarNode.js +1 -1
  76. package/examples/jsm/nodes/core/VaryingNode.js +1 -1
  77. package/examples/jsm/nodes/core/constants.js +1 -1
  78. package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
  79. package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
  82. package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
  83. package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
  84. package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
  85. package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
  86. package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
  87. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
  88. package/examples/jsm/nodes/display/ViewportNode.js +2 -2
  89. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
  90. package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
  91. package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
  92. package/examples/jsm/nodes/fog/FogNode.js +2 -2
  93. package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
  94. package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
  95. package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
  96. package/examples/jsm/nodes/lighting/AONode.js +2 -2
  97. package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
  98. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
  99. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
  100. package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
  101. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
  102. package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
  103. package/examples/jsm/nodes/lighting/LightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
  105. package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
  106. package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
  107. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  108. package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
  109. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
  111. package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
  112. package/examples/jsm/nodes/materials/Materials.js +1 -0
  113. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
  114. package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
  115. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
  116. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
  117. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
  118. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
  119. package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
  120. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
  121. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
  122. package/examples/jsm/nodes/math/CondNode.js +1 -1
  123. package/examples/jsm/nodes/math/HashNode.js +8 -9
  124. package/examples/jsm/nodes/math/MathNode.js +2 -2
  125. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  126. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  127. package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
  128. package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
  129. package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
  130. package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
  131. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
  132. package/examples/jsm/nodes/utils/JoinNode.js +1 -1
  133. package/examples/jsm/nodes/utils/LoopNode.js +11 -11
  134. package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
  135. package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
  136. package/examples/jsm/nodes/utils/OscNode.js +2 -2
  137. package/examples/jsm/nodes/utils/PackingNode.js +2 -2
  138. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  139. package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
  140. package/examples/jsm/nodes/utils/SetNode.js +62 -0
  141. package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
  142. package/examples/jsm/nodes/utils/SplitNode.js +1 -1
  143. package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
  144. package/examples/jsm/nodes/utils/TimerNode.js +2 -2
  145. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
  146. package/examples/jsm/objects/Sky.js +1 -3
  147. package/examples/jsm/postprocessing/OutputPass.js +3 -2
  148. package/examples/jsm/renderers/common/Background.js +2 -2
  149. package/examples/jsm/renderers/common/Bindings.js +3 -5
  150. package/examples/jsm/renderers/common/Pipelines.js +7 -7
  151. package/examples/jsm/renderers/common/RenderContext.js +3 -0
  152. package/examples/jsm/renderers/common/RenderObject.js +40 -16
  153. package/examples/jsm/renderers/common/RenderObjects.js +8 -14
  154. package/examples/jsm/renderers/common/Renderer.js +40 -13
  155. package/examples/jsm/renderers/common/SampledTexture.js +4 -2
  156. package/examples/jsm/renderers/common/StorageTexture.js +19 -0
  157. package/examples/jsm/renderers/common/Textures.js +14 -9
  158. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
  159. package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
  160. package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
  161. package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
  162. package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
  163. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
  164. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
  165. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
  166. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
  167. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
  168. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
  169. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
  170. package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
  171. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
  172. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  173. package/examples/jsm/shaders/MMDToonShader.js +4 -4
  174. package/examples/jsm/shaders/OutputShader.js +2 -2
  175. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
  176. package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
  177. package/package.json +1 -1
  178. package/src/Three.js +0 -2
  179. package/src/animation/AnimationUtils.js +3 -20
  180. package/src/animation/KeyframeTrack.js +8 -8
  181. package/src/cameras/Camera.js +1 -5
  182. package/src/cameras/CubeCamera.js +14 -8
  183. package/src/constants.js +7 -1
  184. package/src/core/RenderTarget.js +16 -7
  185. package/src/extras/core/CurvePath.js +4 -1
  186. package/src/loaders/MaterialLoader.js +1 -1
  187. package/src/loaders/ObjectLoader.js +6 -0
  188. package/src/materials/Material.js +8 -8
  189. package/src/math/Color.js +1 -5
  190. package/src/math/ColorManagement.js +82 -60
  191. package/src/objects/Sprite.js +2 -2
  192. package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
  193. package/src/renderers/WebGLRenderer.js +78 -22
  194. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
  195. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
  196. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
  197. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
  198. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
  199. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
  200. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
  201. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
  202. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
  203. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
  204. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
  205. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
  206. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
  207. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
  208. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
  209. package/src/renderers/shaders/UniformsUtils.js +2 -2
  210. package/src/renderers/webgl/WebGLBackground.js +5 -4
  211. package/src/renderers/webgl/WebGLLights.js +14 -3
  212. package/src/renderers/webgl/WebGLMultiview.js +100 -0
  213. package/src/renderers/webgl/WebGLProgram.js +84 -5
  214. package/src/renderers/webgl/WebGLPrograms.js +11 -2
  215. package/src/renderers/webgl/WebGLTextures.js +214 -26
  216. package/src/renderers/webgl/WebGLUtils.js +21 -23
  217. package/src/renderers/webxr/WebXRManager.js +36 -12
  218. package/src/scenes/Fog.js +1 -0
  219. package/src/scenes/FogExp2.js +1 -0
  220. package/src/textures/Source.js +2 -2
  221. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
  222. package/src/lights/AmbientLightProbe.js +0 -21
  223. package/src/lights/HemisphereLightProbe.js +0 -30
@@ -29,7 +29,7 @@ class ExtendedMaterialNode extends MaterialNode {
29
29
 
30
30
  }
31
31
 
32
- construct( builder ) {
32
+ setup( builder ) {
33
33
 
34
34
  const material = builder.material;
35
35
  const scope = this.scope;
@@ -40,10 +40,11 @@ class ExtendedMaterialNode extends MaterialNode {
40
40
 
41
41
  if ( material.normalMap ) {
42
42
 
43
- node = normalMap( this.getTexture( builder, 'normalMap' ), materialReference( 'normalScale', 'vec2' ) );
43
+ node = normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) );
44
44
 
45
45
  } else if ( material.bumpMap ) {
46
46
 
47
+ // @TODO: Replace material.bumpMap to this.getTexture( 'bumpMap' )
47
48
  node = bumpMap( material.bumpMap, materialReference( 'bumpScale', 'float' ) );
48
49
 
49
50
  } else {
@@ -54,11 +55,11 @@ class ExtendedMaterialNode extends MaterialNode {
54
55
 
55
56
  } else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
56
57
 
57
- node = material.clearcoatNormalMap ? normalMap( this.getTexture( builder, 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
58
+ node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
58
59
 
59
60
  }
60
61
 
61
- return node || super.construct( builder );
62
+ return node || super.setup( builder );
62
63
 
63
64
  }
64
65
 
@@ -72,4 +73,4 @@ export default ExtendedMaterialNode;
72
73
  export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
73
74
  export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
74
75
 
75
- addNodeClass( ExtendedMaterialNode );
76
+ addNodeClass( 'ExtendedMaterialNode', ExtendedMaterialNode );
@@ -17,7 +17,7 @@ class InstanceNode extends Node {
17
17
 
18
18
  }
19
19
 
20
- construct( builder ) {
20
+ setup( builder ) {
21
21
 
22
22
  let instanceMatrixNode = this.instanceMatrixNode;
23
23
 
@@ -68,4 +68,4 @@ export default InstanceNode;
68
68
 
69
69
  export const instance = nodeProxy( InstanceNode );
70
70
 
71
- addNodeClass( InstanceNode );
71
+ addNodeClass( 'InstanceNode', InstanceNode );
@@ -4,15 +4,9 @@ import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
4
 
5
5
  class LineMaterialNode extends MaterialNode {
6
6
 
7
- constructor( scope ) {
7
+ setup( /*builder*/ ) {
8
8
 
9
- super( scope );
10
-
11
- }
12
-
13
- construct( builder ) {
14
-
15
- return this.getFloat( builder, this.scope );
9
+ return this.getFloat( this.scope );
16
10
 
17
11
  }
18
12
 
@@ -21,11 +15,15 @@ class LineMaterialNode extends MaterialNode {
21
15
  LineMaterialNode.SCALE = 'scale';
22
16
  LineMaterialNode.DASH_SIZE = 'dashSize';
23
17
  LineMaterialNode.GAP_SIZE = 'gapSize';
18
+ LineMaterialNode.LINEWIDTH = 'linewidth';
19
+ LineMaterialNode.DASH_OFFSET = 'dashOffset';
24
20
 
25
21
  export default LineMaterialNode;
26
22
 
27
23
  export const materialLineScale = nodeImmutable( LineMaterialNode, LineMaterialNode.SCALE );
24
+ export const materialLineDashOffset = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_OFFSET );
28
25
  export const materialLineDashSize = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_SIZE );
29
26
  export const materialLineGapSize = nodeImmutable( LineMaterialNode, LineMaterialNode.GAP_SIZE );
27
+ export const materialLineWidth = nodeImmutable( LineMaterialNode, LineMaterialNode.LINEWIDTH );
30
28
 
31
- addNodeClass( LineMaterialNode );
29
+ addNodeClass( 'LineMaterialNode', LineMaterialNode );
@@ -3,7 +3,7 @@ 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 cache = new WeakMap();
6
+ const _propertyCache = new Map();
7
7
 
8
8
  class MaterialNode extends Node {
9
9
 
@@ -15,27 +15,15 @@ class MaterialNode extends Node {
15
15
 
16
16
  }
17
17
 
18
- getCache( builder, property, type ) {
18
+ getCache( property, type ) {
19
19
 
20
- const material = builder.context.material;
21
-
22
- let cacheMaterial = cache.get( material );
23
-
24
- if ( cacheMaterial === undefined ) {
25
-
26
- cacheMaterial = {};
27
-
28
- cache.set( material, cacheMaterial );
29
-
30
- }
31
-
32
- let node = cacheMaterial[ property ];
20
+ let node = _propertyCache.get( property );
33
21
 
34
22
  if ( node === undefined ) {
35
23
 
36
24
  node = materialReference( property, type );
37
25
 
38
- cacheMaterial[ property ] = node;
26
+ _propertyCache.set( property, node );
39
27
 
40
28
  }
41
29
 
@@ -43,25 +31,25 @@ class MaterialNode extends Node {
43
31
 
44
32
  }
45
33
 
46
- getFloat( builder, property ) {
34
+ getFloat( property ) {
47
35
 
48
- return this.getCache( builder, property, 'float' );
36
+ return this.getCache( property, 'float' );
49
37
 
50
38
  }
51
39
 
52
- getColor( builder, property ) {
40
+ getColor( property ) {
53
41
 
54
- return this.getCache( builder, property, 'color' );
42
+ return this.getCache( property, 'color' );
55
43
 
56
44
  }
57
45
 
58
- getTexture( builder, property ) {
46
+ getTexture( property ) {
59
47
 
60
- return this.getCache( builder, property, 'texture' );
48
+ return this.getCache( property, 'texture' );
61
49
 
62
50
  }
63
51
 
64
- construct( builder ) {
52
+ setup( builder ) {
65
53
 
66
54
  const material = builder.context.material;
67
55
  const scope = this.scope;
@@ -70,19 +58,19 @@ class MaterialNode extends Node {
70
58
 
71
59
  if ( scope === MaterialNode.ALPHA_TEST || scope === MaterialNode.SHININESS || scope === MaterialNode.REFLECTIVITY || scope === MaterialNode.ROTATION || scope === MaterialNode.IRIDESCENCE || scope === MaterialNode.IRIDESCENCE_IOR ) {
72
60
 
73
- node = this.getFloat( builder, scope );
61
+ node = this.getFloat( scope );
74
62
 
75
63
  } else if ( scope === MaterialNode.SPECULAR_COLOR ) {
76
64
 
77
- node = this.getColor( builder, 'specular' );
65
+ node = this.getColor( 'specular' );
78
66
 
79
67
  } else if ( scope === MaterialNode.COLOR ) {
80
68
 
81
- const colorNode = this.getColor( builder, 'color' );
69
+ const colorNode = this.getColor( 'color' );
82
70
 
83
71
  if ( material.map && material.map.isTexture === true ) {
84
72
 
85
- node = colorNode.mul( this.getTexture( builder, 'map' ) );
73
+ node = colorNode.mul( this.getTexture( 'map' ) );
86
74
 
87
75
  } else {
88
76
 
@@ -92,11 +80,11 @@ class MaterialNode extends Node {
92
80
 
93
81
  } else if ( scope === MaterialNode.OPACITY ) {
94
82
 
95
- const opacityNode = this.getFloat( builder, 'opacity' );
83
+ const opacityNode = this.getFloat( 'opacity' );
96
84
 
97
85
  if ( material.alphaMap && material.alphaMap.isTexture === true ) {
98
86
 
99
- node = opacityNode.mul( this.getTexture( builder, 'alphaMap' ) );
87
+ node = opacityNode.mul( this.getTexture( 'alphaMap' ) );
100
88
 
101
89
  } else {
102
90
 
@@ -108,7 +96,7 @@ class MaterialNode extends Node {
108
96
 
109
97
  if ( material.specularMap && material.specularMap.isTexture === true ) {
110
98
 
111
- node = this.getTexture( builder, 'specularMap' ).r;
99
+ node = this.getTexture( 'specularMap' ).r;
112
100
 
113
101
  } else {
114
102
 
@@ -118,11 +106,11 @@ class MaterialNode extends Node {
118
106
 
119
107
  } else if ( scope === MaterialNode.ROUGHNESS ) {
120
108
 
121
- const roughnessNode = this.getFloat( builder, 'roughness' );
109
+ const roughnessNode = this.getFloat( 'roughness' );
122
110
 
123
111
  if ( material.roughnessMap && material.roughnessMap.isTexture === true ) {
124
112
 
125
- node = roughnessNode.mul( this.getTexture( builder, 'roughnessMap' ).g );
113
+ node = roughnessNode.mul( this.getTexture( 'roughnessMap' ).g );
126
114
 
127
115
  } else {
128
116
 
@@ -132,11 +120,11 @@ class MaterialNode extends Node {
132
120
 
133
121
  } else if ( scope === MaterialNode.METALNESS ) {
134
122
 
135
- const metalnessNode = this.getFloat( builder, 'metalness' );
123
+ const metalnessNode = this.getFloat( 'metalness' );
136
124
 
137
125
  if ( material.metalnessMap && material.metalnessMap.isTexture === true ) {
138
126
 
139
- node = metalnessNode.mul( this.getTexture( builder, 'metalnessMap' ).b );
127
+ node = metalnessNode.mul( this.getTexture( 'metalnessMap' ).b );
140
128
 
141
129
  } else {
142
130
 
@@ -146,11 +134,11 @@ class MaterialNode extends Node {
146
134
 
147
135
  } else if ( scope === MaterialNode.EMISSIVE ) {
148
136
 
149
- const emissiveNode = this.getColor( builder, 'emissive' );
137
+ const emissiveNode = this.getColor( 'emissive' );
150
138
 
151
139
  if ( material.emissiveMap && material.emissiveMap.isTexture === true ) {
152
140
 
153
- node = emissiveNode.mul( this.getTexture( builder, 'emissiveMap' ) );
141
+ node = emissiveNode.mul( this.getTexture( 'emissiveMap' ) );
154
142
 
155
143
  } else {
156
144
 
@@ -160,11 +148,11 @@ class MaterialNode extends Node {
160
148
 
161
149
  } else if ( scope === MaterialNode.CLEARCOAT ) {
162
150
 
163
- const clearcoatNode = this.getFloat( builder, 'clearcoat' );
151
+ const clearcoatNode = this.getFloat( 'clearcoat' );
164
152
 
165
153
  if ( material.clearcoatMap && material.clearcoatMap.isTexture === true ) {
166
154
 
167
- node = clearcoatNode.mul( this.getTexture( builder, 'clearcoatMap' ).r );
155
+ node = clearcoatNode.mul( this.getTexture( 'clearcoatMap' ).r );
168
156
 
169
157
  } else {
170
158
 
@@ -174,11 +162,11 @@ class MaterialNode extends Node {
174
162
 
175
163
  } else if ( scope === MaterialNode.CLEARCOAT_ROUGHNESS ) {
176
164
 
177
- const clearcoatRoughnessNode = this.getFloat( builder, 'clearcoatRoughness' );
165
+ const clearcoatRoughnessNode = this.getFloat( 'clearcoatRoughness' );
178
166
 
179
167
  if ( material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true ) {
180
168
 
181
- node = clearcoatRoughnessNode.mul( this.getTexture( builder, 'clearcoatRoughnessMap' ).r );
169
+ node = clearcoatRoughnessNode.mul( this.getTexture( 'clearcoatRoughnessMap' ).r );
182
170
 
183
171
  } else {
184
172
 
@@ -188,11 +176,11 @@ class MaterialNode extends Node {
188
176
 
189
177
  } else if ( scope === MaterialNode.SHEEN ) {
190
178
 
191
- const sheenNode = this.getColor( builder, 'sheenColor' ).mul( this.getFloat( builder, 'sheen' ) ); // Move this mul() to CPU
179
+ const sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU
192
180
 
193
181
  if ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {
194
182
 
195
- node = sheenNode.mul( this.getTexture( builder, 'sheenColorMap' ).rgb );
183
+ node = sheenNode.mul( this.getTexture( 'sheenColorMap' ).rgb );
196
184
 
197
185
  } else {
198
186
 
@@ -202,11 +190,11 @@ class MaterialNode extends Node {
202
190
 
203
191
  } else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {
204
192
 
205
- const sheenRoughnessNode = this.getFloat( builder, 'sheenRoughness' );
193
+ const sheenRoughnessNode = this.getFloat( 'sheenRoughness' );
206
194
 
207
195
  if ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {
208
196
 
209
- node = sheenRoughnessNode.mul( this.getTexture( builder, 'sheenRoughnessMap' ).a );
197
+ node = sheenRoughnessNode.mul( this.getTexture( 'sheenRoughnessMap' ).a );
210
198
 
211
199
  } else {
212
200
 
@@ -224,7 +212,7 @@ class MaterialNode extends Node {
224
212
 
225
213
  const iridescenceThicknessMinimum = reference( 0, 'float', material.iridescenceThicknessRange );
226
214
 
227
- node = iridescenceThicknessMaximum.sub( iridescenceThicknessMinimum ).mul( this.getTexture( builder, 'iridescenceThicknessMap' ).g ).add( iridescenceThicknessMinimum );
215
+ node = iridescenceThicknessMaximum.sub( iridescenceThicknessMinimum ).mul( this.getTexture( 'iridescenceThicknessMap' ).g ).add( iridescenceThicknessMinimum );
228
216
 
229
217
  } else {
230
218
 
@@ -286,4 +274,4 @@ export const materialIridescence = nodeImmutable( MaterialNode, MaterialNode.IRI
286
274
  export const materialIridescenceIOR = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_IOR );
287
275
  export const materialIridescenceThickness = nodeImmutable( MaterialNode, MaterialNode.IRIDESCENCE_THICKNESS );
288
276
 
289
- addNodeClass( MaterialNode );
277
+ addNodeClass( 'MaterialNode', MaterialNode );
@@ -15,21 +15,21 @@ class MaterialReferenceNode extends ReferenceNode {
15
15
 
16
16
  }
17
17
 
18
- construct( builder ) {
18
+ updateReference( frame ) {
19
19
 
20
- const material = this.material !== null ? this.material : builder.material;
21
-
22
- this.node.value = material[ this.property ];
20
+ this.reference = this.material !== null ? this.material : frame.material;
23
21
 
24
- return super.construct( builder );
22
+ return this.reference;
25
23
 
26
24
  }
27
25
 
28
- update( frame ) {
26
+ setup( builder ) {
29
27
 
30
- 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 ];
31
31
 
32
- super.update( frame );
32
+ return super.setup( builder );
33
33
 
34
34
  }
35
35
 
@@ -39,4 +39,4 @@ export default MaterialReferenceNode;
39
39
 
40
40
  export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
41
41
 
42
- 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 );
@@ -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
 
@@ -181,7 +187,7 @@ class TextureNode extends UniformNode {
181
187
 
182
188
  if ( builder.needsColorSpaceToLinear( this.value ) ) {
183
189
 
184
- 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 );
185
191
 
186
192
  }
187
193
 
@@ -272,4 +278,4 @@ export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : t
272
278
  addNodeElement( 'texture', texture );
273
279
  //addNodeElement( 'textureLevel', textureLevel );
274
280
 
275
- 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 );
@@ -26,4 +26,4 @@ export default TextureStoreNode;
26
26
 
27
27
  export const textureStore = nodeProxy( TextureStoreNode );
28
28
 
29
- addNodeClass( TextureStoreNode );
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 );