super-three 0.158.0 → 0.160.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 (191) hide show
  1. package/build/three.cjs +1719 -379
  2. package/build/three.js +1719 -379
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1718 -380
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +23 -18
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. package/examples/jsm/objects/BatchedMesh.js +0 -586
@@ -27,9 +27,10 @@ export { default as NodeUniform } from './core/NodeUniform.js';
27
27
  export { default as NodeVar } from './core/NodeVar.js';
28
28
  export { default as NodeVarying } from './core/NodeVarying.js';
29
29
  export { default as ParameterNode, parameter } from './core/ParameterNode.js';
30
- export { default as PropertyNode, property, output, diffuseColor, roughness, metalness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, shininess, dashSize, gapSize, pointWidth } from './core/PropertyNode.js';
30
+ export { default as PropertyNode, property, varyingProperty, output, diffuseColor, roughness, metalness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, shininess, dashSize, gapSize, pointWidth } from './core/PropertyNode.js';
31
31
  export { default as StackNode, stack } from './core/StackNode.js';
32
32
  export { default as TempNode } from './core/TempNode.js';
33
+ export { default as UniformGroupNode, uniformGroup, objectGroup, renderGroup, frameGroup } from './core/UniformGroupNode.js';
33
34
  export { default as UniformNode, uniform } from './core/UniformNode.js';
34
35
  export { default as VaryingNode, varying } from './core/VaryingNode.js';
35
36
  export { default as OutputStructNode, outputStruct } from './core/OutputStructNode.js';
@@ -38,7 +39,7 @@ import * as NodeUtils from './core/NodeUtils.js';
38
39
  export { NodeUtils };
39
40
 
40
41
  // math
41
- 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';
42
+ 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, bitcast, 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';
42
43
  export { default as OperatorNode, add, sub, mul, div, remainder, equal, lessThan, greaterThan, lessThanEqual, greaterThanEqual, and, or, xor, bitAnd, bitOr, bitXor, shiftLeft, shiftRight } from './math/OperatorNode.js';
43
44
  export { default as CondNode, cond } from './math/CondNode.js';
44
45
  export { default as HashNode, hash } from './math/HashNode.js';
@@ -48,6 +49,7 @@ export { default as ArrayElementNode } from './utils/ArrayElementNode.js';
48
49
  export { default as ConvertNode } from './utils/ConvertNode.js';
49
50
  export { default as DiscardNode, discard } from './utils/DiscardNode.js';
50
51
  export { default as EquirectUVNode, equirectUV } from './utils/EquirectUVNode.js';
52
+ export { default as FunctionOverloadingNode, overloadingFn } from './utils/FunctionOverloadingNode.js';
51
53
  export { default as JoinNode } from './utils/JoinNode.js';
52
54
  export { default as LoopNode, loop } from './utils/LoopNode.js';
53
55
  export { default as MatcapUVNode, matcapUV } from './utils/MatcapUVNode.js';
@@ -70,7 +72,7 @@ export * from './shadernode/ShaderNode.js';
70
72
  export { default as BitangentNode, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, transformedBitangentView, transformedBitangentWorld } from './accessors/BitangentNode.js';
71
73
  export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute, instancedBufferAttribute, instancedDynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
72
74
  export { default as BufferNode, buffer } from './accessors/BufferNode.js';
73
- export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition, cameraNear, cameraFar } from './accessors/CameraNode.js';
75
+ export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition, cameraNear, cameraFar, cameraLogDepth } from './accessors/CameraNode.js';
74
76
  export { default as CubeTextureNode, cubeTexture } from './accessors/CubeTextureNode.js';
75
77
  export { default as InstanceNode, instance } from './accessors/InstanceNode.js';
76
78
  export { default as MaterialNode, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialSpecularStrength, materialReflectivity, materialRoughness, materialMetalness, materialNormal, materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialRotation, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLineScale, materialLineDashSize, materialLineGapSize, materialLineWidth, materialLineDashOffset, materialPointWidth } from './accessors/MaterialNode.js';
@@ -83,13 +85,13 @@ export { default as NormalNode, normalGeometry, normalLocal, normalView, normalW
83
85
  export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectScale, objectViewPosition } from './accessors/Object3DNode.js';
84
86
  export { default as PointUVNode, pointUV } from './accessors/PointUVNode.js';
85
87
  export { default as PositionNode, positionGeometry, positionLocal, positionWorld, positionWorldDirection, positionView, positionViewDirection } from './accessors/PositionNode.js';
86
- export { default as ReferenceNode, reference } from './accessors/ReferenceNode.js';
88
+ export { default as ReferenceNode, reference, referenceIndex } from './accessors/ReferenceNode.js';
87
89
  export { default as ReflectVectorNode, reflectVector } from './accessors/ReflectVectorNode.js';
88
90
  export { default as SkinningNode, skinning } from './accessors/SkinningNode.js';
89
91
  export { default as SceneNode, backgroundBlurriness, backgroundIntensity } from './accessors/SceneNode.js';
90
92
  export { default as StorageBufferNode, storage } from './accessors/StorageBufferNode.js';
91
93
  export { default as TangentNode, tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './accessors/TangentNode.js';
92
- export { default as TextureNode, texture, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
94
+ export { default as TextureNode, texture, textureLoad, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
93
95
  export { default as TextureStoreNode, textureStore } from './accessors/TextureStoreNode.js';
94
96
  export { default as UVNode, uv } from './accessors/UVNode.js';
95
97
  export { default as UserDataNode, userData } from './accessors/UserDataNode.js';
@@ -107,7 +109,9 @@ export { default as ViewportNode, viewport, viewportCoordinate, viewportResoluti
107
109
  export { default as ViewportTextureNode, viewportTexture, viewportMipTexture } from './display/ViewportTextureNode.js';
108
110
  export { default as ViewportSharedTextureNode, viewportSharedTexture } from './display/ViewportSharedTextureNode.js';
109
111
  export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js';
110
- export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture } from './display/ViewportDepthNode.js';
112
+ export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture, depthPixel } from './display/ViewportDepthNode.js';
113
+ export { default as GaussianBlurNode, gaussianBlur } from './display/GaussianBlurNode.js';
114
+ export { default as PassNode, pass, depthPass } from './display/PassNode.js';
111
115
 
112
116
  // code
113
117
  export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
@@ -135,7 +139,7 @@ export { default as DirectionalLightNode } from './lighting/DirectionalLightNode
135
139
  export { default as SpotLightNode } from './lighting/SpotLightNode.js';
136
140
  export { default as IESSpotLightNode } from './lighting/IESSpotLightNode.js';
137
141
  export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
138
- export { default as LightsNode, lights, lightsWithoutWrap, addLightNode } from './lighting/LightsNode.js';
142
+ export { default as LightsNode, lights, lightNodes, addLightNode } from './lighting/LightsNode.js';
139
143
  export { default as LightingNode /* @TODO: lighting (abstract), light */ } from './lighting/LightingNode.js';
140
144
  export { default as LightingContextNode, lightingContext } from './lighting/LightingContextNode.js';
141
145
  export { default as HemisphereLightNode } from './lighting/HemisphereLightNode.js';
@@ -1,14 +1,22 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
3
  import { label } from '../core/ContextNode.js';
4
+ import { NodeUpdateType } from '../core/constants.js';
5
+ //import { sharedUniformGroup } from '../core/UniformGroupNode.js';
4
6
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
5
7
 
8
+ //const cameraGroup = sharedUniformGroup( 'camera' );
9
+
6
10
  class CameraNode extends Object3DNode {
7
11
 
8
12
  constructor( scope = CameraNode.POSITION ) {
9
13
 
10
14
  super( scope );
11
15
 
16
+ this.updateType = NodeUpdateType.RENDER;
17
+
18
+ //this._uniformNode.groupNode = cameraGroup;
19
+
12
20
  }
13
21
 
14
22
  getNodeType( builder ) {
@@ -19,7 +27,7 @@ class CameraNode extends Object3DNode {
19
27
 
20
28
  return 'mat4';
21
29
 
22
- } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
30
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR || scope === CameraNode.LOG_DEPTH ) {
23
31
 
24
32
  return 'float';
25
33
 
@@ -35,6 +43,8 @@ class CameraNode extends Object3DNode {
35
43
  const uniformNode = this._uniformNode;
36
44
  const scope = this.scope;
37
45
 
46
+ //cameraGroup.needsUpdate = true;
47
+
38
48
  if ( scope === CameraNode.VIEW_MATRIX ) {
39
49
 
40
50
  uniformNode.value = camera.matrixWorldInverse;
@@ -51,6 +61,10 @@ class CameraNode extends Object3DNode {
51
61
 
52
62
  uniformNode.value = camera.far;
53
63
 
64
+ } else if ( scope === CameraNode.LOG_DEPTH ) {
65
+
66
+ uniformNode.value = 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 );
67
+
54
68
  } else {
55
69
 
56
70
  this.object3d = camera;
@@ -69,7 +83,7 @@ class CameraNode extends Object3DNode {
69
83
 
70
84
  this._uniformNode.nodeType = 'mat4';
71
85
 
72
- } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
86
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR || scope === CameraNode.LOG_DEPTH ) {
73
87
 
74
88
  this._uniformNode.nodeType = 'float';
75
89
 
@@ -84,12 +98,14 @@ class CameraNode extends Object3DNode {
84
98
  CameraNode.PROJECTION_MATRIX = 'projectionMatrix';
85
99
  CameraNode.NEAR = 'near';
86
100
  CameraNode.FAR = 'far';
101
+ CameraNode.LOG_DEPTH = 'logDepth';
87
102
 
88
103
  export default CameraNode;
89
104
 
90
105
  export const cameraProjectionMatrix = label( nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ), 'projectionMatrix' );
91
106
  export const cameraNear = nodeImmutable( CameraNode, CameraNode.NEAR );
92
107
  export const cameraFar = nodeImmutable( CameraNode, CameraNode.FAR );
108
+ export const cameraLogDepth = nodeImmutable( CameraNode, CameraNode.LOG_DEPTH );
93
109
  export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
94
110
  export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
95
111
  export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
@@ -1,9 +1,6 @@
1
1
  import TextureNode from './TextureNode.js';
2
- import UniformNode from '../core/UniformNode.js';
3
2
  import { reflectVector } from './ReflectVectorNode.js';
4
3
  import { addNodeClass } from '../core/Node.js';
5
- import { colorSpaceToLinear } from '../display/ColorSpaceNode.js';
6
- import { expression } from '../code/ExpressionNode.js';
7
4
  import { addNodeElement, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
8
5
 
9
6
  class CubeTextureNode extends TextureNode {
@@ -30,80 +27,15 @@ class CubeTextureNode extends TextureNode {
30
27
 
31
28
  setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
32
29
 
33
- generate( builder, output ) {
30
+ setupUV( builder, uvNode ) {
34
31
 
35
- const { uvNode, levelNode } = builder.getNodeProperties( this );
32
+ return vec3( uvNode.x.negate(), uvNode.yz );
36
33
 
37
- const texture = this.value;
38
-
39
- if ( ! texture || texture.isCubeTexture !== true ) {
40
-
41
- throw new Error( 'CubeTextureNode: Need a three.js cube texture.' );
42
-
43
- }
44
-
45
- const textureProperty = UniformNode.prototype.generate.call( this, builder, 'cubeTexture' );
46
-
47
- if ( output === 'sampler' ) {
48
-
49
- return textureProperty + '_sampler';
50
-
51
- } else if ( builder.isReference( output ) ) {
52
-
53
- return textureProperty;
54
-
55
- } else {
56
-
57
- const nodeData = builder.getDataFromNode( this );
58
-
59
- let propertyName = nodeData.propertyName;
60
-
61
- if ( propertyName === undefined ) {
62
-
63
- const cubeUV = vec3( uvNode.x.negate(), uvNode.yz );
64
- const uvSnippet = cubeUV.build( builder, 'vec3' );
65
-
66
- const nodeVar = builder.getVarFromNode( this );
67
-
68
- propertyName = builder.getPropertyName( nodeVar );
69
-
70
- let snippet = null;
71
-
72
- if ( levelNode && levelNode.isNode === true ) {
73
-
74
- const levelSnippet = levelNode.build( builder, 'float' );
75
-
76
- snippet = builder.getTextureLevel( this, textureProperty, uvSnippet, levelSnippet );
77
-
78
- } else {
79
-
80
- snippet = builder.getTexture( this, textureProperty, uvSnippet );
81
-
82
- }
83
-
84
- builder.addLineFlowCode( `${propertyName} = ${snippet}` );
85
-
86
- if ( builder.context.tempWrite !== false ) {
87
-
88
- nodeData.snippet = snippet;
89
- nodeData.propertyName = propertyName;
90
-
91
- }
92
-
93
- }
94
-
95
- let snippet = propertyName;
96
- const nodeType = this.getNodeType( builder );
97
-
98
- if ( builder.needsColorSpaceToLinear( this.value ) ) {
99
-
100
- snippet = colorSpaceToLinear( expression( snippet, nodeType ), this.value.colorSpace ).setup( builder ).build( builder, nodeType );
101
-
102
- }
34
+ }
103
35
 
104
- return builder.format( snippet, nodeType, output );
36
+ generateUV( builder, cubeUV ) {
105
37
 
106
- }
38
+ return cubeUV.build( builder, 'vec3' );
107
39
 
108
40
  }
109
41
 
@@ -1,5 +1,6 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
- import { NodeUpdateType } from '../core/constants.js';
2
+ //import { renderGroup } from '../core/UniformGroupNode.js';
3
+ //import { NodeUpdateType } from '../core/constants.js';
3
4
  import { addNodeClass } from '../core/Node.js';
4
5
  import { nodeObject } from '../shadernode/ShaderNode.js';
5
6
 
@@ -11,10 +12,18 @@ class MaterialReferenceNode extends ReferenceNode {
11
12
 
12
13
  this.material = material;
13
14
 
14
- this.updateType = NodeUpdateType.RENDER;
15
+ //this.updateType = NodeUpdateType.RENDER;
15
16
 
16
17
  }
17
18
 
19
+ /*setNodeType( node ) {
20
+
21
+ super.setNodeType( node );
22
+
23
+ this.node.groupNode = renderGroup;
24
+
25
+ }*/
26
+
18
27
  updateReference( frame ) {
19
28
 
20
29
  this.reference = this.material !== null ? this.material : frame.material;
@@ -23,7 +23,7 @@ class ModelNode extends Object3DNode {
23
23
  export default ModelNode;
24
24
 
25
25
  export const modelDirection = nodeImmutable( ModelNode, ModelNode.DIRECTION );
26
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ).temp( 'ModelViewMatrix' );
26
+ export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ).label( 'modelViewMatrix' ).temp( 'ModelViewMatrix' );
27
27
  export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
28
28
  export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
29
29
  export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
@@ -4,10 +4,11 @@ import { cameraProjectionMatrix } from './CameraNode.js';
4
4
  import { modelViewMatrix } from './ModelNode.js';
5
5
  import { positionLocal } from './PositionNode.js';
6
6
  import { nodeProxy } from '../shadernode/ShaderNode.js';
7
+ import { varying } from '../core/VaryingNode.js';
7
8
 
8
9
  class ModelViewProjectionNode extends TempNode {
9
10
 
10
- constructor( positionNode = positionLocal ) {
11
+ constructor( positionNode = null ) {
11
12
 
12
13
  super( 'vec4' );
13
14
 
@@ -15,9 +16,17 @@ class ModelViewProjectionNode extends TempNode {
15
16
 
16
17
  }
17
18
 
18
- setup() {
19
+ setup( builder ) {
19
20
 
20
- return cameraProjectionMatrix.mul( modelViewMatrix ).mul( this.positionNode );
21
+ if ( builder.shaderStage === 'fragment' ) {
22
+
23
+ return varying( builder.context.mvp );
24
+
25
+ }
26
+
27
+ const position = this.positionNode || positionLocal;
28
+
29
+ return cameraProjectionMatrix.mul( modelViewMatrix ).mul( position );
21
30
 
22
31
  }
23
32
 
@@ -1,10 +1,157 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy, tslFn } from '../shadernode/ShaderNode.js';
4
4
  import { uniform } from '../core/UniformNode.js';
5
- import { reference } from './ReferenceNode.js';
6
- import { bufferAttribute } from './BufferAttributeNode.js';
5
+ import { referenceIndex } from './ReferenceNode.js';
7
6
  import { positionLocal } from './PositionNode.js';
7
+ import { normalLocal } from './NormalNode.js';
8
+ import { textureLoad } from './TextureNode.js';
9
+ import { vertexIndex } from '../core/IndexNode.js';
10
+ import { ivec2, int } from '../shadernode/ShaderNode.js';
11
+ import { DataArrayTexture, Vector2, Vector4, FloatType } from 'three';
12
+
13
+ const morphTextures = new WeakMap();
14
+ const morphVec4 = new Vector4();
15
+
16
+ const getMorph = tslFn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
17
+
18
+ const texelIndex = int( vertexIndex ).mul( stride ).add( offset );
19
+
20
+ const y = texelIndex.div( width );
21
+ const x = texelIndex.sub( y.mul( width ) );
22
+
23
+ const bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth );
24
+
25
+ return bufferAttrib.mul( influence );
26
+
27
+ } );
28
+
29
+ function getEntry( geometry ) {
30
+
31
+ const hasMorphPosition = geometry.morphAttributes.position !== undefined;
32
+ const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
33
+ const hasMorphColors = geometry.morphAttributes.color !== undefined;
34
+
35
+ // instead of using attributes, the WebGL 2 code path encodes morph targets
36
+ // into an array of data textures. Each layer represents a single morph target.
37
+
38
+ const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
39
+ const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
40
+
41
+ let entry = morphTextures.get( geometry );
42
+
43
+ if ( entry === undefined || entry.count !== morphTargetsCount ) {
44
+
45
+ if ( entry !== undefined ) entry.texture.dispose();
46
+
47
+ const morphTargets = geometry.morphAttributes.position || [];
48
+ const morphNormals = geometry.morphAttributes.normal || [];
49
+ const morphColors = geometry.morphAttributes.color || [];
50
+
51
+ let vertexDataCount = 0;
52
+
53
+ if ( hasMorphPosition === true ) vertexDataCount = 1;
54
+ if ( hasMorphNormals === true ) vertexDataCount = 2;
55
+ if ( hasMorphColors === true ) vertexDataCount = 3;
56
+
57
+ let width = geometry.attributes.position.count * vertexDataCount;
58
+ let height = 1;
59
+
60
+ const maxTextureSize = 4096; // @TODO: Use 'capabilities.maxTextureSize'
61
+
62
+ if ( width > maxTextureSize ) {
63
+
64
+ height = Math.ceil( width / maxTextureSize );
65
+ width = maxTextureSize;
66
+
67
+ }
68
+
69
+ const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
70
+
71
+ const bufferTexture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
72
+ bufferTexture.type = FloatType;
73
+ bufferTexture.needsUpdate = true;
74
+
75
+ // fill buffer
76
+
77
+ const vertexDataStride = vertexDataCount * 4;
78
+
79
+ for ( let i = 0; i < morphTargetsCount; i ++ ) {
80
+
81
+ const morphTarget = morphTargets[ i ];
82
+ const morphNormal = morphNormals[ i ];
83
+ const morphColor = morphColors[ i ];
84
+
85
+ const offset = width * height * 4 * i;
86
+
87
+ for ( let j = 0; j < morphTarget.count; j ++ ) {
88
+
89
+ const stride = j * vertexDataStride;
90
+
91
+ if ( hasMorphPosition === true ) {
92
+
93
+ morphVec4.fromBufferAttribute( morphTarget, j );
94
+
95
+ buffer[ offset + stride + 0 ] = morphVec4.x;
96
+ buffer[ offset + stride + 1 ] = morphVec4.y;
97
+ buffer[ offset + stride + 2 ] = morphVec4.z;
98
+ buffer[ offset + stride + 3 ] = 0;
99
+
100
+ }
101
+
102
+ if ( hasMorphNormals === true ) {
103
+
104
+ morphVec4.fromBufferAttribute( morphNormal, j );
105
+
106
+ buffer[ offset + stride + 4 ] = morphVec4.x;
107
+ buffer[ offset + stride + 5 ] = morphVec4.y;
108
+ buffer[ offset + stride + 6 ] = morphVec4.z;
109
+ buffer[ offset + stride + 7 ] = 0;
110
+
111
+ }
112
+
113
+ if ( hasMorphColors === true ) {
114
+
115
+ morphVec4.fromBufferAttribute( morphColor, j );
116
+
117
+ buffer[ offset + stride + 8 ] = morphVec4.x;
118
+ buffer[ offset + stride + 9 ] = morphVec4.y;
119
+ buffer[ offset + stride + 10 ] = morphVec4.z;
120
+ buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morphVec4.w : 1;
121
+
122
+ }
123
+
124
+ }
125
+
126
+ }
127
+
128
+ entry = {
129
+ count: morphTargetsCount,
130
+ texture: bufferTexture,
131
+ stride: vertexDataCount,
132
+ size: new Vector2( width, height )
133
+ };
134
+
135
+ morphTextures.set( geometry, entry );
136
+
137
+ function disposeTexture() {
138
+
139
+ bufferTexture.dispose();
140
+
141
+ morphTextures.delete( geometry );
142
+
143
+ geometry.removeEventListener( 'dispose', disposeTexture );
144
+
145
+ }
146
+
147
+ geometry.addEventListener( 'dispose', disposeTexture );
148
+
149
+ }
150
+
151
+ return entry;
152
+
153
+ }
154
+
8
155
 
9
156
  class MorphNode extends Node {
10
157
 
@@ -19,29 +166,57 @@ class MorphNode extends Node {
19
166
 
20
167
  }
21
168
 
22
- setupAttribute( name, assignNode = positionLocal ) {
169
+ setup( builder ) {
23
170
 
24
- const mesh = this.mesh;
25
- const attributes = mesh.geometry.morphAttributes[ name ];
171
+ const { geometry } = builder;
26
172
 
27
- assignNode.mulAssign( this.morphBaseInfluence );
173
+ const hasMorphPosition = geometry.morphAttributes.position !== undefined;
174
+ const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
28
175
 
29
- for ( let i = 0; i < attributes.length; i ++ ) {
176
+ const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
177
+ const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
30
178
 
31
- const attribute = attributes[ i ];
179
+ // nodes
32
180
 
33
- const bufferAttrib = bufferAttribute( attribute.array, 'vec3' );
34
- const influence = reference( i, 'float', mesh.morphTargetInfluences );
181
+ const { texture: bufferMap, stride, size } = getEntry( geometry );
35
182
 
36
- assignNode.addAssign( bufferAttrib.mul( influence ) );
183
+ if ( hasMorphPosition === true ) positionLocal.mulAssign( this.morphBaseInfluence );
184
+ if ( hasMorphNormals === true ) normalLocal.mulAssign( this.morphBaseInfluence );
37
185
 
38
- }
186
+ const width = int( size.width );
39
187
 
40
- }
188
+ for ( let i = 0; i < morphTargetsCount; i ++ ) {
189
+
190
+ const influence = referenceIndex( 'morphTargetInfluences', i, 'float' );
191
+ const depth = int( i );
192
+
193
+ if ( hasMorphPosition === true ) {
194
+
195
+ positionLocal.addAssign( getMorph( {
196
+ bufferMap,
197
+ influence,
198
+ stride,
199
+ width,
200
+ depth,
201
+ offset: int( 0 )
202
+ } ) );
41
203
 
42
- setup( /*builder*/ ) {
204
+ }
43
205
 
44
- this.setupAttribute( 'position' );
206
+ if ( hasMorphNormals === true ) {
207
+
208
+ normalLocal.addAssign( getMorph( {
209
+ bufferMap,
210
+ influence,
211
+ stride,
212
+ width,
213
+ depth,
214
+ offset: int( 1 )
215
+ } ) );
216
+
217
+ }
218
+
219
+ }
45
220
 
46
221
  }
47
222
 
@@ -11,6 +11,7 @@ class ReferenceNode extends Node {
11
11
  super();
12
12
 
13
13
  this.property = property;
14
+ this.index = null;
14
15
 
15
16
  this.uniformType = uniformType;
16
17
 
@@ -33,6 +34,20 @@ class ReferenceNode extends Node {
33
34
 
34
35
  }
35
36
 
37
+ setIndex( index ) {
38
+
39
+ this.index = index;
40
+
41
+ return this;
42
+
43
+ }
44
+
45
+ getIndex() {
46
+
47
+ return this.index;
48
+
49
+ }
50
+
36
51
  setNodeType( uniformType ) {
37
52
 
38
53
  let node = null;
@@ -59,7 +74,15 @@ class ReferenceNode extends Node {
59
74
 
60
75
  update( /*frame*/ ) {
61
76
 
62
- this.node.value = this.reference[ this.property ];
77
+ let value = this.reference[ this.property ];
78
+
79
+ if ( this.index !== null ) {
80
+
81
+ value = value[ this.index ];
82
+
83
+ }
84
+
85
+ this.node.value = value;
63
86
 
64
87
  }
65
88
 
@@ -74,5 +97,6 @@ class ReferenceNode extends Node {
74
97
  export default ReferenceNode;
75
98
 
76
99
  export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
100
+ export const referenceIndex = ( name, index, type, object ) => nodeObject( new ReferenceNode( name, type, object ).setIndex( index ) );
77
101
 
78
102
  addNodeClass( 'ReferenceNode', ReferenceNode );