super-three 0.158.0 → 0.160.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.
- package/build/three.cjs +1720 -380
- package/build/three.js +1720 -380
- package/build/three.min.js +1 -1
- package/build/three.module.js +1719 -381
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +71 -3
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/math/Octree.js +15 -4
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +30 -21
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +4 -1
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +24 -19
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- 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,
|
|
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
|
-
|
|
30
|
+
setupUV( builder, uvNode ) {
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
return vec3( uvNode.x.negate(), uvNode.yz );
|
|
36
33
|
|
|
37
|
-
|
|
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
|
-
|
|
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 {
|
|
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 =
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
169
|
+
setup( builder ) {
|
|
23
170
|
|
|
24
|
-
const
|
|
25
|
-
const attributes = mesh.geometry.morphAttributes[ name ];
|
|
171
|
+
const { geometry } = builder;
|
|
26
172
|
|
|
27
|
-
|
|
173
|
+
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
174
|
+
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
28
175
|
|
|
29
|
-
|
|
176
|
+
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
177
|
+
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
30
178
|
|
|
31
|
-
|
|
179
|
+
// nodes
|
|
32
180
|
|
|
33
|
-
|
|
34
|
-
const influence = reference( i, 'float', mesh.morphTargetInfluences );
|
|
181
|
+
const { texture: bufferMap, stride, size } = getEntry( geometry );
|
|
35
182
|
|
|
36
|
-
|
|
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
|
-
|
|
204
|
+
}
|
|
43
205
|
|
|
44
|
-
|
|
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
|
-
|
|
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 );
|