@needle-tools/three 0.153.1 → 0.154.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 (180) hide show
  1. package/build/three.cjs +1260 -1517
  2. package/build/three.js +1267 -1524
  3. package/build/three.min.js +7 -8
  4. package/build/three.module.js +859 -1097
  5. package/build/three.module.min.js +6 -7
  6. package/examples/jsm/controls/ArcballControls.js +2 -1
  7. package/examples/jsm/controls/FlyControls.js +25 -9
  8. package/examples/jsm/controls/OrbitControls.js +7 -1
  9. package/examples/jsm/csm/CSM.js +1 -1
  10. package/examples/jsm/effects/AnaglyphEffect.js +1 -1
  11. package/examples/jsm/effects/OutlineEffect.js +1 -1
  12. package/examples/jsm/effects/ParallaxBarrierEffect.js +1 -1
  13. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  14. package/examples/jsm/lines/LineMaterial.js +1 -1
  15. package/examples/jsm/loaders/3DMLoader.js +1 -1
  16. package/examples/jsm/loaders/3MFLoader.js +5 -1
  17. package/examples/jsm/loaders/AMFLoader.js +5 -1
  18. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  19. package/examples/jsm/loaders/FBXLoader.js +9 -2
  20. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  21. package/examples/jsm/loaders/PLYLoader.js +16 -6
  22. package/examples/jsm/loaders/VRMLLoader.js +16 -4
  23. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  24. package/examples/jsm/math/MeshSurfaceSampler.js +76 -35
  25. package/examples/jsm/nodes/Nodes.js +20 -15
  26. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +21 -8
  27. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  28. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  29. package/examples/jsm/nodes/accessors/InstanceNode.js +2 -4
  30. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  31. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  32. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  33. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  34. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  35. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  36. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  37. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  38. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  39. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  40. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  41. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  42. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  43. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  44. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  45. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  46. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  47. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  48. package/examples/jsm/nodes/core/Node.js +12 -15
  49. package/examples/jsm/nodes/core/NodeBuilder.js +24 -5
  50. package/examples/jsm/nodes/core/PropertyNode.js +4 -0
  51. package/examples/jsm/nodes/core/StackNode.js +1 -1
  52. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  53. package/examples/jsm/nodes/core/VarNode.js +1 -3
  54. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  55. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  56. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  57. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  58. package/examples/jsm/nodes/display/ToneMappingNode.js +8 -8
  59. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  60. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  61. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -5
  62. package/examples/jsm/nodes/display/ViewportTextureNode.js +23 -15
  63. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  64. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  65. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  66. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  67. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  68. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  69. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  70. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  71. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  72. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  73. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +129 -18
  74. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  75. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  76. package/examples/jsm/nodes/geometry/RangeNode.js +1 -1
  77. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  78. package/examples/jsm/nodes/lighting/EnvironmentNode.js +91 -62
  79. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  80. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  81. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  82. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  83. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  84. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  85. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  86. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  87. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  88. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  89. package/examples/jsm/nodes/materials/NodeMaterial.js +79 -28
  90. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  91. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  92. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  93. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  94. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  95. package/examples/jsm/nodes/math/MathNode.js +6 -0
  96. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  97. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  98. package/examples/jsm/nodes/shadernode/ShaderNode.js +24 -4
  99. package/examples/jsm/nodes/utils/LoopNode.js +1 -1
  100. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  101. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +1 -1
  103. package/examples/jsm/objects/Refractor.js +1 -1
  104. package/examples/jsm/objects/Sky.js +1 -1
  105. package/examples/jsm/objects/Water.js +1 -1
  106. package/examples/jsm/objects/Water2.js +1 -1
  107. package/examples/jsm/offscreen/scene.js +1 -0
  108. package/examples/jsm/postprocessing/EffectComposer.js +2 -0
  109. package/examples/jsm/postprocessing/OutlinePass.js +1 -3
  110. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -12
  111. package/examples/jsm/postprocessing/SavePass.js +3 -1
  112. package/examples/jsm/postprocessing/TAARenderPass.js +14 -2
  113. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  114. package/examples/jsm/postprocessing/UnrealBloomPass.js +9 -10
  115. package/examples/jsm/renderers/common/Backend.js +2 -0
  116. package/examples/jsm/renderers/common/Background.js +7 -6
  117. package/examples/jsm/renderers/common/Pipelines.js +26 -14
  118. package/examples/jsm/renderers/common/RenderObject.js +18 -0
  119. package/examples/jsm/renderers/common/RenderObjects.js +29 -29
  120. package/examples/jsm/renderers/common/Renderer.js +48 -6
  121. package/examples/jsm/renderers/common/nodes/Nodes.js +1 -1
  122. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  123. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  124. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +123 -41
  125. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +29 -9
  126. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -0
  127. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +8 -13
  128. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +85 -3
  129. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +5 -1
  130. package/examples/jsm/shaders/BlendShader.js +1 -2
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/CopyShader.js +2 -2
  133. package/examples/jsm/shaders/ToonShader.js +4 -4
  134. package/examples/jsm/shaders/WaterRefractionShader.js +1 -1
  135. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  136. package/package.json +2 -1
  137. package/src/Three.Legacy.js +0 -228
  138. package/src/animation/PropertyBinding.js +1 -1
  139. package/src/constants.js +1 -1
  140. package/src/core/BufferAttribute.js +0 -24
  141. package/src/core/BufferGeometry.js +0 -7
  142. package/src/loaders/Loader.js +2 -0
  143. package/src/loaders/MaterialLoader.js +1 -0
  144. package/src/materials/Material.js +3 -0
  145. package/src/objects/Skeleton.js +0 -2
  146. package/src/renderers/WebGLRenderer.js +9 -21
  147. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  148. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  149. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  150. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  151. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +9 -1
  152. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +1 -1
  153. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +1 -1
  154. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +1 -1
  155. package/src/renderers/shaders/ShaderChunk.js +10 -6
  156. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  157. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  158. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  159. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  160. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  161. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  162. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  163. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  164. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  165. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  166. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  167. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
  168. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  169. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  170. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  171. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  172. package/src/renderers/webgl/WebGLObjects.js +23 -3
  173. package/src/renderers/webgl/WebGLProgram.js +24 -5
  174. package/src/renderers/webgl/WebGLPrograms.js +3 -0
  175. package/src/renderers/webxr/WebXRManager.js +11 -33
  176. package/src/scenes/Scene.js +0 -14
  177. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -45
  178. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  179. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
  180. /package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +0 -0
@@ -10,8 +10,8 @@ export { default as AttributeNode, attribute } from './core/AttributeNode.js';
10
10
  export { default as BypassNode, bypass } from './core/BypassNode.js';
11
11
  export { default as CacheNode, cache } from './core/CacheNode.js';
12
12
  export { default as ConstNode } from './core/ConstNode.js';
13
- export { default as ContextNode, context } from './core/ContextNode.js';
14
- export { default as InstanceIndexNode, instanceIndex } from './core/InstanceIndexNode.js';
13
+ export { default as ContextNode, context, label } from './core/ContextNode.js';
14
+ export { default as IndexNode, vertexIndex, instanceIndex } from './core/IndexNode.js';
15
15
  export { default as LightingModel, lightingModel } from './core/LightingModel.js';
16
16
  export { default as Node, addNodeClass, createNodeFromType } from './core/Node.js';
17
17
  export { default as NodeAttribute } from './core/NodeAttribute.js';
@@ -28,14 +28,14 @@ export { default as PropertyNode, property, diffuseColor, roughness, metalness,
28
28
  export { default as StackNode, stack } from './core/StackNode.js';
29
29
  export { default as TempNode } from './core/TempNode.js';
30
30
  export { default as UniformNode, uniform } from './core/UniformNode.js';
31
- export { default as VarNode, label, temp } from './core/VarNode.js';
31
+ export { default as VarNode, temp } from './core/VarNode.js';
32
32
  export { default as VaryingNode, varying } from './core/VaryingNode.js';
33
33
 
34
34
  import * as NodeUtils from './core/NodeUtils.js';
35
35
  export { NodeUtils };
36
36
 
37
37
  // math
38
- export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
38
+ export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, trunc, fwidth, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
39
39
  export { default as OperatorNode, add, sub, mul, div, remainder, equal, assign, lessThan, greaterThan, lessThanEqual, greaterThanEqual, and, or, xor, bitAnd, bitOr, bitXor, shiftLeft, shiftRight } from './math/OperatorNode.js';
40
40
  export { default as CondNode, cond } from './math/CondNode.js';
41
41
 
@@ -63,46 +63,51 @@ export * from './shadernode/ShaderNode.js';
63
63
 
64
64
  // accessors
65
65
  export { default as BitangentNode, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, transformedBitangentView, transformedBitangentWorld } from './accessors/BitangentNode.js';
66
- export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
66
+ export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute, instancedBufferAttribute, instancedDynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
67
67
  export { default as BufferNode, buffer } from './accessors/BufferNode.js';
68
- export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition } from './accessors/CameraNode.js';
68
+ export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition, cameraNear, cameraFar } from './accessors/CameraNode.js';
69
69
  export { default as CubeTextureNode, cubeTexture } from './accessors/CubeTextureNode.js';
70
70
  export { default as ExtendedMaterialNode, materialNormal } from './accessors/ExtendedMaterialNode.js';
71
71
  export { default as InstanceNode, instance } from './accessors/InstanceNode.js';
72
- export { default as MaterialNode, materialUV, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialReflectivity, materialRoughness, materialMetalness, materialRotation } from './accessors/MaterialNode.js';
72
+ export { default as MaterialNode, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialReflectivity, materialRoughness, materialMetalness, materialRotation, materialSheen, materialSheenRoughness } from './accessors/MaterialNode.js';
73
73
  export { default as MaterialReferenceNode, materialReference } from './accessors/MaterialReferenceNode.js';
74
- export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition } from './accessors/ModelNode.js';
74
+ export { default as MorphNode, morph } from './accessors/MorphNode.js';
75
+ export { default as TextureBicubicNode, textureBicubic } from './accessors/TextureBicubicNode.js';
76
+ export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition, modelScale } from './accessors/ModelNode.js';
75
77
  export { default as ModelViewProjectionNode, modelViewProjection } from './accessors/ModelViewProjectionNode.js';
76
- export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld } from './accessors/NormalNode.js';
77
- export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectViewPosition } from './accessors/Object3DNode.js';
78
+ export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld, transformedClearcoatNormalView } from './accessors/NormalNode.js';
79
+ export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectScale, objectViewPosition } from './accessors/Object3DNode.js';
78
80
  export { default as PointUVNode, pointUV } from './accessors/PointUVNode.js';
79
81
  export { default as PositionNode, positionGeometry, positionLocal, positionWorld, positionWorldDirection, positionView, positionViewDirection } from './accessors/PositionNode.js';
80
82
  export { default as ReferenceNode, reference } from './accessors/ReferenceNode.js';
81
83
  export { default as ReflectVectorNode, reflectVector } from './accessors/ReflectVectorNode.js';
82
84
  export { default as SkinningNode, skinning } from './accessors/SkinningNode.js';
85
+ export { default as SceneNode, backgroundBlurriness } from './accessors/SceneNode.js';
83
86
  export { default as StorageBufferNode, storage } from './accessors/StorageBufferNode.js';
84
87
  export { default as TangentNode, tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './accessors/TangentNode.js';
85
- export { default as TextureNode, texture, sampler } from './accessors/TextureNode.js';
88
+ export { default as TextureNode, texture, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
86
89
  export { default as UVNode, uv } from './accessors/UVNode.js';
87
90
  export { default as UserDataNode, userData } from './accessors/UserDataNode.js';
88
91
 
89
92
  // display
90
93
  export { default as BlendModeNode, burn, dodge, overlay, screen } from './display/BlendModeNode.js';
91
94
  export { default as ColorAdjustmentNode, saturation, vibrance, hue, lumaCoeffs, luminance } from './display/ColorAdjustmentNode.js';
92
- export { default as ColorSpaceNode, colorSpace } from './display/ColorSpaceNode.js';
95
+ export { default as ColorSpaceNode, linearToColorSpace, colorSpaceToLinear, linearTosRGB, sRGBToLinear } from './display/ColorSpaceNode.js';
93
96
  export { default as FrontFacingNode, frontFacing, faceDirection } from './display/FrontFacingNode.js';
94
97
  export { default as NormalMapNode, normalMap, TBNViewMatrix } from './display/NormalMapNode.js';
95
98
  export { default as PosterizeNode, posterize } from './display/PosterizeNode.js';
96
99
  export { default as ToneMappingNode, toneMapping } from './display/ToneMappingNode.js';
97
100
  export { default as ViewportNode, viewportCoordinate, viewportResolution, viewportTopLeft, viewportBottomLeft, viewportTopRight, viewportBottomRight } from './display/ViewportNode.js';
98
- export { default as ViewportTextureNode, viewportTexture } from './display/ViewportTextureNode.js';
101
+ export { default as ViewportTextureNode, viewportTexture, viewportMipTexture } from './display/ViewportTextureNode.js';
99
102
  export { default as ViewportSharedTextureNode, viewportSharedTexture } from './display/ViewportSharedTextureNode.js';
103
+ export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js';
104
+ export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture } from './display/ViewportDepthNode.js';
100
105
 
101
106
  // code
102
107
  export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
103
- export { default as CodeNode, code, js } from './code/CodeNode.js';
108
+ export { default as CodeNode, code, js, wgsl, glsl } from './code/CodeNode.js';
104
109
  export { default as FunctionCallNode, call } from './code/FunctionCallNode.js';
105
- export { default as FunctionNode, func, fn } from './code/FunctionNode.js';
110
+ export { default as FunctionNode, wgslFn, glslFn } from './code/FunctionNode.js';
106
111
  export { default as ScriptableNode, scriptable, global } from './code/ScriptableNode.js';
107
112
  export { default as ScriptableValueNode, scriptableValue } from './code/ScriptableValueNode.js';
108
113
 
@@ -17,6 +17,7 @@ class BufferAttributeNode extends InputNode {
17
17
  this.bufferOffset = bufferOffset;
18
18
 
19
19
  this.usage = StaticDrawUsage;
20
+ this.instanced = false;
20
21
 
21
22
  }
22
23
 
@@ -34,7 +35,7 @@ class BufferAttributeNode extends InputNode {
34
35
  buffer.setUsage( this.usage );
35
36
 
36
37
  this.attribute = bufferAttribute;
37
- this.attribute.isInstancedBufferAttribute = true; // @TODO: Add a possible: InstancedInterleavedBufferAttribute
38
+ this.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute
38
39
 
39
40
  }
40
41
 
@@ -69,18 +70,30 @@ class BufferAttributeNode extends InputNode {
69
70
 
70
71
  }
71
72
 
73
+ setUsage( value ) {
74
+
75
+ this.usage = value;
76
+
77
+ return this;
78
+
79
+ }
80
+
81
+ setInstanced( value ) {
82
+
83
+ this.instanced = value;
84
+
85
+ return this;
86
+
87
+ }
88
+
72
89
  }
73
90
 
74
91
  export default BufferAttributeNode;
75
92
 
76
93
  export const bufferAttribute = ( array, type, stride, offset ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
77
- export const dynamicBufferAttribute = ( array, type, stride, offset ) => {
78
-
79
- const node = bufferAttribute( array, type, stride, offset );
80
- node.usage = DynamicDrawUsage;
81
-
82
- return node;
94
+ export const dynamicBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
83
95
 
84
- };
96
+ export const instancedBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
97
+ export const instancedDynamicBufferAttribute = ( array, type, stride, offset ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
85
98
 
86
99
  addNodeClass( BufferAttributeNode );
@@ -1,5 +1,6 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
+ import { label } from '../core/ContextNode.js';
3
4
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
5
 
5
6
  class CameraNode extends Object3DNode {
@@ -18,6 +19,10 @@ class CameraNode extends Object3DNode {
18
19
 
19
20
  return 'mat4';
20
21
 
22
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
23
+
24
+ return 'float';
25
+
21
26
  }
22
27
 
23
28
  return super.getNodeType( builder );
@@ -30,13 +35,21 @@ class CameraNode extends Object3DNode {
30
35
  const uniformNode = this._uniformNode;
31
36
  const scope = this.scope;
32
37
 
33
- if ( scope === CameraNode.PROJECTION_MATRIX ) {
38
+ if ( scope === CameraNode.VIEW_MATRIX ) {
39
+
40
+ uniformNode.value = camera.matrixWorldInverse;
41
+
42
+ } else if ( scope === CameraNode.PROJECTION_MATRIX ) {
34
43
 
35
44
  uniformNode.value = camera.projectionMatrix;
36
45
 
37
- } else if ( scope === CameraNode.VIEW_MATRIX ) {
46
+ } else if ( scope === CameraNode.NEAR ) {
38
47
 
39
- uniformNode.value = camera.matrixWorldInverse;
48
+ uniformNode.value = camera.near;
49
+
50
+ } else if ( scope === CameraNode.FAR ) {
51
+
52
+ uniformNode.value = camera.far;
40
53
 
41
54
  } else {
42
55
 
@@ -56,6 +69,10 @@ class CameraNode extends Object3DNode {
56
69
 
57
70
  this._uniformNode.nodeType = 'mat4';
58
71
 
72
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
73
+
74
+ this._uniformNode.nodeType = 'float';
75
+
59
76
  }
60
77
 
61
78
  return super.generate( builder );
@@ -65,10 +82,14 @@ class CameraNode extends Object3DNode {
65
82
  }
66
83
 
67
84
  CameraNode.PROJECTION_MATRIX = 'projectionMatrix';
85
+ CameraNode.NEAR = 'near';
86
+ CameraNode.FAR = 'far';
68
87
 
69
88
  export default CameraNode;
70
89
 
71
- export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
90
+ export const cameraProjectionMatrix = label( nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ), 'projectionMatrix' );
91
+ export const cameraNear = nodeImmutable( CameraNode, CameraNode.NEAR );
92
+ export const cameraFar = nodeImmutable( CameraNode, CameraNode.FAR );
72
93
  export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
73
94
  export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
74
95
  export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
@@ -20,7 +20,7 @@ class ExtendedMaterialNode extends MaterialNode {
20
20
  const scope = this.scope;
21
21
  let type = null;
22
22
 
23
- if ( scope === ExtendedMaterialNode.NORMAL ) {
23
+ if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
24
24
 
25
25
  type = 'vec3';
26
26
 
@@ -41,6 +41,10 @@ class ExtendedMaterialNode extends MaterialNode {
41
41
 
42
42
  node = material.normalMap ? normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) ) : normalView;
43
43
 
44
+ } else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
45
+
46
+ node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
47
+
44
48
  }
45
49
 
46
50
  return node || super.construct( builder );
@@ -50,9 +54,11 @@ class ExtendedMaterialNode extends MaterialNode {
50
54
  }
51
55
 
52
56
  ExtendedMaterialNode.NORMAL = 'normal';
57
+ ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
53
58
 
54
59
  export default ExtendedMaterialNode;
55
60
 
56
61
  export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
62
+ export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
57
63
 
58
64
  addNodeClass( ExtendedMaterialNode );
@@ -1,5 +1,5 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { bufferAttribute, dynamicBufferAttribute } from './BufferAttributeNode.js';
2
+ import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
3
3
  import { normalLocal } from './NormalNode.js';
4
4
  import { positionLocal } from './PositionNode.js';
5
5
  import { nodeProxy, vec3, mat3, mat4 } from '../shadernode/ShaderNode.js';
@@ -27,7 +27,7 @@ class InstanceNode extends Node {
27
27
  const instaceAttribute = instanceMesh.instanceMatrix;
28
28
  const array = instaceAttribute.array;
29
29
 
30
- const bufferFn = instaceAttribute.usage === DynamicDrawUsage ? dynamicBufferAttribute : bufferAttribute;
30
+ const bufferFn = instaceAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
31
31
 
32
32
  const instanceBuffers = [
33
33
  // F.Signature -> bufferAttribute( array, type, stride, offset )
@@ -60,8 +60,6 @@ class InstanceNode extends Node {
60
60
  builder.stack.assign( positionLocal, instancePosition );
61
61
  builder.stack.assign( normalLocal, instanceNormal );
62
62
 
63
- return builder.stack;
64
-
65
63
  }
66
64
 
67
65
  }
@@ -1,8 +1,6 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { uniform } from '../core/UniformNode.js';
3
2
  import { materialReference } from './MaterialReferenceNode.js';
4
- import { uv } from './UVNode.js';
5
- import { nodeImmutable, vec3 } from '../shadernode/ShaderNode.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
6
4
 
7
5
  class MaterialNode extends Node {
8
6
 
@@ -27,15 +25,11 @@ class MaterialNode extends Node {
27
25
 
28
26
  return 'float';
29
27
 
30
- } else if ( scope === MaterialNode.UV ) {
31
-
32
- return 'vec2';
33
-
34
- } else if ( scope === MaterialNode.EMISSIVE ) {
28
+ } else if ( scope === MaterialNode.EMISSIVE || scope === MaterialNode.SHEEN ) {
35
29
 
36
30
  return 'vec3';
37
31
 
38
- } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS ) {
32
+ } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS || scope === MaterialNode.CLEARCOAT_ROUGHNESS || scope === MaterialNode.SHEEN_ROUGHNESS ) {
39
33
 
40
34
  return 'float';
41
35
 
@@ -64,7 +58,6 @@ class MaterialNode extends Node {
64
58
  //@TODO: Check if it can be cached by property name.
65
59
 
66
60
  const textureRefNode = materialReference( property, 'texture' );
67
- textureRefNode.node.uvNode = materialUV;
68
61
 
69
62
  return textureRefNode;
70
63
 
@@ -173,59 +166,68 @@ class MaterialNode extends Node {
173
166
 
174
167
  }
175
168
 
176
- } else if ( scope === MaterialNode.ROTATION ) {
169
+ } else if ( scope === MaterialNode.CLEARCOAT ) {
177
170
 
178
- node = this.getFloat( 'rotation' );
171
+ const clearcoatNode = this.getFloat( 'clearcoat' );
172
+
173
+ if ( material.clearcoatMap && material.clearcoatMap.isTexture === true ) {
174
+
175
+ node = clearcoatNode.mul( this.getTexture( 'clearcoatMap' ).r );
176
+
177
+ } else {
178
+
179
+ node = clearcoatNode;
180
+
181
+ }
182
+
183
+ } else if ( scope === MaterialNode.CLEARCOAT_ROUGHNESS ) {
184
+
185
+ const clearcoatRoughnessNode = this.getFloat( 'clearcoatRoughness' );
179
186
 
180
- } else if ( scope === MaterialNode.UV ) {
187
+ if ( material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true ) {
181
188
 
182
- // uv repeat and offset setting priorities
189
+ node = clearcoatRoughnessNode.mul( this.getTexture( 'clearcoatRoughnessMap' ).r );
183
190
 
184
- let uvScaleMap =
185
- material.map ||
186
- material.specularMap ||
187
- material.displacementMap ||
188
- material.normalMap ||
189
- material.bumpMap ||
190
- material.roughnessMap ||
191
- material.metalnessMap ||
192
- material.alphaMap ||
193
- material.emissiveMap ||
194
- material.clearcoatMap ||
195
- material.clearcoatNormalMap ||
196
- material.clearcoatRoughnessMap ||
197
- material.iridescenceMap ||
198
- material.iridescenceThicknessMap ||
199
- material.specularIntensityMap ||
200
- material.specularColorMap ||
201
- material.transmissionMap ||
202
- material.thicknessMap ||
203
- material.sheenColorMap ||
204
- material.sheenRoughnessMap;
191
+ } else {
192
+
193
+ node = clearcoatRoughnessNode;
194
+
195
+ }
196
+
197
+ } else if ( scope === MaterialNode.SHEEN ) {
198
+
199
+ const sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU
200
+
201
+ if ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {
205
202
 
206
- if ( uvScaleMap ) {
203
+ node = sheenNode.mul( this.getTexture( 'sheenColorMap' ).rgb );
207
204
 
208
- // backwards compatibility
209
- if ( uvScaleMap.isWebGLRenderTarget ) {
205
+ } else {
210
206
 
211
- uvScaleMap = uvScaleMap.texture;
207
+ node = sheenNode;
212
208
 
213
- }
209
+ }
214
210
 
215
- if ( uvScaleMap.matrixAutoUpdate === true ) {
211
+ } else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {
216
212
 
217
- uvScaleMap.updateMatrix();
213
+ const sheenRoughnessNode = this.getFloat( 'sheenRoughness' );
218
214
 
219
- }
215
+ if ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {
220
216
 
221
- node = uniform( uvScaleMap.matrix ).mul( vec3( uv(), 1 ) );
217
+ node = sheenRoughnessNode.mul( this.getTexture( 'sheenRoughnessMap' ).a );
222
218
 
223
219
  } else {
224
220
 
225
- node = uv();
221
+ node = sheenRoughnessNode;
226
222
 
227
223
  }
228
224
 
225
+ node = node.clamp( 0.07, 1.0 );
226
+
227
+ } else if ( scope === MaterialNode.ROTATION ) {
228
+
229
+ node = this.getFloat( 'rotation' );
230
+
229
231
  } else {
230
232
 
231
233
  const outputType = this.getNodeType( builder );
@@ -248,13 +250,15 @@ MaterialNode.SPECULAR_COLOR = 'specularColor';
248
250
  MaterialNode.REFLECTIVITY = 'reflectivity';
249
251
  MaterialNode.ROUGHNESS = 'roughness';
250
252
  MaterialNode.METALNESS = 'metalness';
253
+ MaterialNode.CLEARCOAT = 'clearcoat';
254
+ MaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness';
251
255
  MaterialNode.EMISSIVE = 'emissive';
252
256
  MaterialNode.ROTATION = 'rotation';
253
- MaterialNode.UV = 'uv';
257
+ MaterialNode.SHEEN = 'sheen';
258
+ MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';
254
259
 
255
260
  export default MaterialNode;
256
261
 
257
- export const materialUV = nodeImmutable( MaterialNode, MaterialNode.UV );
258
262
  export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
259
263
  export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
260
264
  export const materialShininess = nodeImmutable( MaterialNode, MaterialNode.SHININESS );
@@ -264,6 +268,10 @@ export const materialSpecularColor = nodeImmutable( MaterialNode, MaterialNode.S
264
268
  export const materialReflectivity = nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );
265
269
  export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
266
270
  export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
271
+ export const materialClearcoat = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );
272
+ export const materialClearcoatRoughness = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );
267
273
  export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
274
+ export const materialSheen = nodeImmutable( MaterialNode, MaterialNode.SHEEN );
275
+ export const materialSheenRoughness = nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
268
276
 
269
277
  addNodeClass( MaterialNode );
@@ -1,5 +1,6 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
+ import { label } from '../core/ContextNode.js';
3
4
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
5
 
5
6
  class ModelNode extends Object3DNode {
@@ -23,10 +24,11 @@ class ModelNode extends Object3DNode {
23
24
  export default ModelNode;
24
25
 
25
26
  export const modelDirection = nodeImmutable( ModelNode, ModelNode.DIRECTION );
26
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
27
+ export const modelViewMatrix = label( nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ), 'modelViewMatrix' );
27
28
  export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
28
29
  export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
29
30
  export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
31
+ export const modelScale = nodeImmutable( ModelNode, ModelNode.SCALE );
30
32
  export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
31
33
 
32
34
  addNodeClass( ModelNode );
@@ -0,0 +1,70 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
3
+ import { nodeProxy } from '../shadernode/ShaderNode.js';
4
+ import { uniform } from '../core/UniformNode.js';
5
+ import { reference } from './ReferenceNode.js';
6
+ import { bufferAttribute } from './BufferAttributeNode.js';
7
+ import { positionLocal } from './PositionNode.js';
8
+
9
+ class MorphNode extends Node {
10
+
11
+ constructor( mesh ) {
12
+
13
+ super( 'void' );
14
+
15
+ this.mesh = mesh;
16
+ this.morphBaseInfluence = uniform( 1 );
17
+
18
+ this.updateType = NodeUpdateType.OBJECT;
19
+
20
+ }
21
+
22
+ constructAttribute( builder, name, assignNode = positionLocal ) {
23
+
24
+ const mesh = this.mesh;
25
+ const attributes = mesh.geometry.morphAttributes[ name ];
26
+
27
+ builder.stack.assign( assignNode, assignNode.mul( this.morphBaseInfluence ) );
28
+
29
+ for ( let i = 0; i < attributes.length; i ++ ) {
30
+
31
+ const attribute = attributes[ i ];
32
+
33
+ const bufferAttrib = bufferAttribute( attribute.array, 'vec3' );
34
+ const influence = reference( i, 'float', mesh.morphTargetInfluences );
35
+
36
+ builder.stack.assign( assignNode, assignNode.add( bufferAttrib.mul( influence ) ) );
37
+
38
+ }
39
+
40
+ }
41
+
42
+ construct( builder ) {
43
+
44
+ this.constructAttribute( builder, 'position' );
45
+
46
+ }
47
+
48
+ update() {
49
+
50
+ const morphBaseInfluence = this.morphBaseInfluence;
51
+
52
+ if ( this.mesh.geometry.morphTargetsRelative ) {
53
+
54
+ morphBaseInfluence.value = 1;
55
+
56
+ } else {
57
+
58
+ morphBaseInfluence.value = 1 - this.mesh.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );
59
+
60
+ }
61
+
62
+ }
63
+
64
+ }
65
+
66
+ export default MorphNode;
67
+
68
+ export const morph = nodeProxy( MorphNode );
69
+
70
+ addNodeClass( MorphNode );
@@ -1,7 +1,7 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { attribute } from '../core/AttributeNode.js';
3
- import { label } from '../core/VarNode.js';
4
3
  import { varying } from '../core/VaryingNode.js';
4
+ import { property } from '../core/PropertyNode.js';
5
5
  import { normalize } from '../math/MathNode.js';
6
6
  import { cameraViewMatrix } from './CameraNode.js';
7
7
  import { modelNormalMatrix } from './ModelNode.js';
@@ -89,7 +89,8 @@ export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
89
89
  export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
90
90
  export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
91
91
  export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
92
- export const transformedNormalView = label( normalView, 'TransformedNormalView' );
92
+ export const transformedNormalView = property( 'vec3', 'TransformedNormalView' );
93
93
  export const transformedNormalWorld = transformedNormalView.transformDirection( cameraViewMatrix ).normalize();
94
+ export const transformedClearcoatNormalView = property( 'vec3', 'TransformedClearcoatNormalView' );
94
95
 
95
96
  addNodeClass( NormalNode );
@@ -32,7 +32,7 @@ class Object3DNode extends Node {
32
32
 
33
33
  return 'mat3';
34
34
 
35
- } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION ) {
35
+ } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
36
36
 
37
37
  return 'vec3';
38
38
 
@@ -64,6 +64,12 @@ class Object3DNode extends Node {
64
64
 
65
65
  uniformNode.value.setFromMatrixPosition( object.matrixWorld );
66
66
 
67
+ } else if ( scope === Object3DNode.SCALE ) {
68
+
69
+ uniformNode.value = uniformNode.value || new Vector3();
70
+
71
+ uniformNode.value.setFromMatrixScale( object.matrixWorld );
72
+
67
73
  } else if ( scope === Object3DNode.DIRECTION ) {
68
74
 
69
75
  uniformNode.value = uniformNode.value || new Vector3();
@@ -95,7 +101,7 @@ class Object3DNode extends Node {
95
101
 
96
102
  this._uniformNode.nodeType = 'mat3';
97
103
 
98
- } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION ) {
104
+ } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
99
105
 
100
106
  this._uniformNode.nodeType = 'vec3';
101
107
 
@@ -127,6 +133,7 @@ Object3DNode.VIEW_MATRIX = 'viewMatrix';
127
133
  Object3DNode.NORMAL_MATRIX = 'normalMatrix';
128
134
  Object3DNode.WORLD_MATRIX = 'worldMatrix';
129
135
  Object3DNode.POSITION = 'position';
136
+ Object3DNode.SCALE = 'scale';
130
137
  Object3DNode.VIEW_POSITION = 'viewPosition';
131
138
  Object3DNode.DIRECTION = 'direction';
132
139
 
@@ -137,6 +144,7 @@ export const objectViewMatrix = nodeProxy( Object3DNode, Object3DNode.VIEW_MATRI
137
144
  export const objectNormalMatrix = nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
138
145
  export const objectWorldMatrix = nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
139
146
  export const objectPosition = nodeProxy( Object3DNode, Object3DNode.POSITION );
147
+ export const objectScale = nodeProxy( Object3DNode, Object3DNode.SCALE );
140
148
  export const objectViewPosition = nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
141
149
 
142
150
  addNodeClass( Object3DNode );
@@ -0,0 +1,46 @@
1
+ import Node from '../core/Node.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
+ import { reference } from './ReferenceNode.js';
5
+
6
+ class SceneNode extends Node {
7
+
8
+ constructor( scope = SceneNode.BACKGROUND_BLURRINESS, scene = null ) {
9
+
10
+ super();
11
+
12
+ this.scope = scope;
13
+ this.scene = scene;
14
+
15
+ }
16
+
17
+ construct( builder ) {
18
+
19
+ const scope = this.scope;
20
+ const scene = this.scene !== null ? this.scene : builder.scene;
21
+
22
+ let output;
23
+
24
+ if ( scope === SceneNode.BACKGROUND_BLURRINESS ) {
25
+
26
+ output = reference( 'backgroundBlurriness', 'float', scene );
27
+
28
+ } else {
29
+
30
+ console.error( 'THREE.SceneNode: Unknown scope:', scope );
31
+
32
+ }
33
+
34
+ return output;
35
+
36
+ }
37
+
38
+ }
39
+
40
+ SceneNode.BACKGROUND_BLURRINESS = 'backgroundBlurriness';
41
+
42
+ export default SceneNode;
43
+
44
+ export const backgroundBlurriness = nodeImmutable( SceneNode, SceneNode.BACKGROUND_BLURRINESS );
45
+
46
+ addNodeClass( SceneNode );