super-three 0.167.0 → 0.168.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.
- package/build/three.cjs +165 -44
- package/build/three.module.js +165 -45
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +23600 -21931
- package/build/three.webgpu.min.js +1 -1
- package/examples/jsm/Addons.js +3 -1
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/controls/ArcballControls.js +174 -158
- package/examples/jsm/controls/DragControls.js +260 -132
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +777 -786
- package/examples/jsm/controls/PointerLockControls.js +24 -15
- package/examples/jsm/controls/TrackballControls.js +453 -452
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +6 -1
- package/examples/jsm/exporters/USDZExporter.js +29 -8
- package/examples/jsm/helpers/LightProbeHelper.js +42 -43
- package/examples/jsm/loaders/KTX2Loader.js +19 -7
- package/examples/jsm/loaders/MaterialXLoader.js +11 -4
- package/examples/jsm/loaders/PCDLoader.js +9 -9
- package/examples/jsm/objects/SkyMesh.js +188 -0
- package/examples/jsm/objects/Water2Mesh.js +159 -0
- package/examples/jsm/objects/WaterMesh.js +102 -0
- package/examples/jsm/physics/RapierPhysics.js +20 -0
- package/examples/jsm/postprocessing/OutlinePass.js +31 -46
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -2
- package/examples/jsm/shaders/OutputShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +8 -8
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/package.json +2 -1
- package/src/Three.WebGPU.js +6 -0
- package/src/Three.js +1 -0
- package/src/constants.js +1 -1
- package/src/extras/Controls.js +32 -0
- package/src/loaders/ObjectLoader.js +3 -3
- package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +4 -4
- package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +1 -2
- package/src/materials/Material.js +4 -7
- package/src/{nodes/materials → materials/nodes}/InstancedPointsNodeMaterial.js +33 -24
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +34 -37
- package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +3 -4
- package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +7 -9
- package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +11 -11
- package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +5 -5
- package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +8 -8
- package/src/materials/nodes/MeshNormalNodeMaterial.js +40 -0
- package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +9 -8
- package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +18 -17
- package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +6 -6
- package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +17 -11
- package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +4 -4
- package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +67 -86
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +1 -1
- package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +3 -4
- package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +4 -4
- package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +11 -11
- package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +14 -16
- package/src/nodes/Nodes.js +103 -159
- package/src/nodes/TSL.js +176 -0
- package/src/nodes/accessors/AccessorsUtils.js +8 -8
- package/src/nodes/accessors/BatchNode.js +48 -20
- package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
- package/src/nodes/accessors/BufferAttributeNode.js +5 -5
- package/src/nodes/accessors/BufferNode.js +4 -4
- package/src/nodes/accessors/{CameraNode.js → Camera.js} +10 -10
- package/src/nodes/accessors/ClippingNode.js +16 -14
- package/src/nodes/accessors/CubeTextureNode.js +5 -7
- package/src/nodes/accessors/InstanceNode.js +17 -13
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +4 -4
- package/src/nodes/accessors/MaterialNode.js +52 -55
- package/src/nodes/accessors/MaterialProperties.js +3 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +6 -4
- package/src/nodes/accessors/ModelNode.js +11 -11
- package/src/nodes/accessors/ModelViewProjectionNode.js +6 -7
- package/src/nodes/accessors/MorphNode.js +12 -12
- package/src/nodes/accessors/Normal.js +62 -0
- package/src/nodes/accessors/Object3DNode.js +10 -10
- package/src/nodes/accessors/PointUVNode.js +4 -4
- package/src/nodes/accessors/Position.js +10 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +143 -0
- package/src/nodes/accessors/ReferenceNode.js +13 -7
- package/src/nodes/accessors/ReflectVector.js +10 -0
- package/src/nodes/accessors/RendererReferenceNode.js +6 -6
- package/src/nodes/accessors/SceneNode.js +5 -6
- package/src/nodes/accessors/SkinningNode.js +84 -21
- package/src/nodes/accessors/StorageBufferNode.js +4 -5
- package/src/nodes/accessors/StorageTextureNode.js +5 -5
- package/src/nodes/accessors/Tangent.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +11 -11
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
- package/src/nodes/accessors/TextureNode.js +16 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -6
- package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +17 -8
- package/src/nodes/accessors/UserDataNode.js +4 -4
- package/src/nodes/accessors/VelocityNode.js +83 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +5 -5
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +5 -5
- package/src/nodes/code/FunctionNode.js +5 -23
- package/src/nodes/code/ScriptableNode.js +4 -6
- package/src/nodes/code/ScriptableValueNode.js +4 -6
- package/src/nodes/core/AssignNode.js +5 -5
- package/src/nodes/core/AttributeNode.js +7 -20
- package/src/nodes/core/BypassNode.js +5 -5
- package/src/nodes/core/CacheNode.js +5 -5
- package/src/nodes/core/ConstNode.js +2 -2
- package/src/nodes/core/ContextNode.js +17 -11
- package/src/nodes/core/IndexNode.js +12 -7
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/MRTNode.js +12 -6
- package/src/nodes/core/Node.js +39 -19
- package/src/nodes/core/NodeBuilder.js +46 -33
- package/src/nodes/core/NodeUtils.js +1 -0
- package/src/nodes/core/OutputStructNode.js +4 -4
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +32 -32
- package/src/nodes/core/StackNode.js +26 -10
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/TempNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +8 -9
- package/src/nodes/core/UniformNode.js +4 -4
- package/src/nodes/core/VarNode.js +6 -6
- package/src/nodes/core/VaryingNode.js +5 -5
- package/src/nodes/display/AfterImageNode.js +9 -9
- package/src/nodes/display/AnaglyphPassNode.js +61 -0
- package/src/nodes/display/AnamorphicNode.js +11 -11
- package/src/nodes/display/BleachBypass.js +26 -0
- package/src/nodes/display/BlendMode.js +54 -0
- package/src/nodes/display/BloomNode.js +21 -19
- package/src/nodes/display/BumpMapNode.js +7 -12
- package/src/nodes/display/ColorAdjustment.js +46 -0
- package/src/nodes/display/ColorSpaceFunctions.js +38 -0
- package/src/nodes/display/ColorSpaceNode.js +40 -63
- package/src/nodes/display/DenoiseNode.js +20 -17
- package/src/nodes/display/DepthOfFieldNode.js +8 -6
- package/src/nodes/display/DotScreenNode.js +10 -22
- package/src/nodes/display/FXAANode.js +17 -15
- package/src/nodes/display/FilmNode.js +7 -6
- package/src/nodes/display/FrontFacingNode.js +5 -5
- package/src/nodes/display/GTAONode.js +19 -15
- package/src/nodes/display/GaussianBlurNode.js +11 -8
- package/src/nodes/display/Lut3DNode.js +6 -5
- package/src/nodes/display/MotionBlur.js +25 -0
- package/src/nodes/display/NormalMapNode.js +8 -10
- package/src/nodes/display/ParallaxBarrierPassNode.js +55 -0
- package/src/nodes/display/PassNode.js +84 -8
- package/src/nodes/display/PixelationPassNode.js +12 -7
- package/src/nodes/display/PosterizeNode.js +4 -6
- package/src/nodes/display/RGBShiftNode.js +8 -7
- package/src/nodes/display/RenderOutputNode.js +9 -9
- package/src/nodes/display/SSAAPassNode.js +284 -0
- package/src/nodes/display/Sepia.js +17 -0
- package/src/nodes/display/SobelOperatorNode.js +9 -7
- package/src/nodes/display/StereoCompositePassNode.js +107 -0
- package/src/nodes/display/StereoPassNode.js +80 -0
- package/src/nodes/display/ToneMappingFunctions.js +190 -0
- package/src/nodes/display/ToneMappingNode.js +12 -173
- package/src/nodes/display/TransitionNode.js +9 -8
- package/src/nodes/display/ViewportDepthNode.js +30 -29
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -8
- package/src/nodes/display/ViewportNode.js +26 -25
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -8
- package/src/nodes/display/ViewportTextureNode.js +7 -10
- package/src/nodes/fog/FogExp2Node.js +4 -6
- package/src/nodes/fog/FogNode.js +5 -7
- package/src/nodes/fog/FogRangeNode.js +4 -6
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +6 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +5 -5
- package/src/nodes/functions/PhysicalLightingModel.js +32 -31
- package/src/nodes/functions/ShadowMaskModel.js +1 -1
- package/src/nodes/functions/ToonLightingModel.js +3 -3
- package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +5 -5
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +2 -7
- package/src/nodes/lighting/AnalyticLightNode.js +34 -13
- package/src/nodes/lighting/BasicEnvironmentNode.js +4 -3
- package/src/nodes/lighting/BasicLightMapNode.js +3 -3
- package/src/nodes/lighting/DirectionalLightNode.js +2 -7
- package/src/nodes/lighting/EnvironmentNode.js +20 -19
- package/src/nodes/lighting/HemisphereLightNode.js +3 -7
- package/src/nodes/lighting/IESSpotLightNode.js +3 -8
- package/src/nodes/lighting/IrradianceNode.js +2 -2
- package/src/nodes/lighting/LightNode.js +5 -5
- package/src/nodes/lighting/LightProbeNode.js +76 -0
- package/src/nodes/lighting/LightUtils.js +3 -3
- package/src/nodes/lighting/LightingContextNode.js +15 -17
- package/src/nodes/lighting/LightingNode.js +2 -2
- package/src/nodes/lighting/LightsNode.js +94 -76
- package/src/nodes/lighting/PointLightNode.js +3 -8
- package/src/nodes/lighting/RectAreaLightNode.js +2 -6
- package/src/nodes/lighting/SpotLightNode.js +3 -8
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +36 -31
- package/src/nodes/materialx/lib/mx_noise.js +96 -96
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/{CondNode.js → ConditionalNode.js} +18 -7
- package/src/nodes/math/Hash.js +13 -0
- package/src/nodes/math/MathNode.js +124 -124
- package/src/nodes/math/MathUtils.js +0 -7
- package/src/nodes/math/OperatorNode.js +94 -52
- package/src/nodes/math/TriNoise3D.js +19 -29
- package/src/nodes/pmrem/PMREMNode.js +58 -15
- package/src/nodes/pmrem/PMREMUtils.js +46 -46
- package/src/nodes/procedural/Checker.js +14 -0
- package/src/nodes/tsl/TSLBase.js +30 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
- package/src/nodes/utils/ArrayElementNode.js +2 -2
- package/src/nodes/utils/ConvertNode.js +2 -2
- package/src/nodes/utils/CubeMapNode.js +157 -0
- package/src/nodes/utils/Discard.js +8 -0
- package/src/nodes/utils/EquirectUVNode.js +5 -5
- package/src/nodes/utils/FlipNode.js +65 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +5 -5
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +12 -6
- package/src/nodes/utils/MatcapUVNode.js +6 -6
- package/src/nodes/utils/MaxMipLevelNode.js +4 -4
- package/src/nodes/utils/OscNode.js +7 -7
- package/src/nodes/utils/Packing.js +4 -0
- package/src/nodes/utils/RTTNode.js +8 -8
- package/src/nodes/utils/ReflectorNode.js +8 -3
- package/src/nodes/utils/RemapNode.js +7 -7
- package/src/nodes/utils/RotateNode.js +4 -12
- package/src/nodes/utils/SetNode.js +2 -2
- package/src/nodes/utils/SplitNode.js +2 -2
- package/src/nodes/utils/SpriteSheetUVNode.js +5 -5
- package/src/nodes/utils/SpriteUtils.js +47 -0
- package/src/nodes/utils/StorageArrayElementNode.js +4 -6
- package/src/nodes/utils/TimerNode.js +5 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +7 -9
- package/src/nodes/utils/UVUtils.js +19 -0
- package/src/nodes/utils/ViewportUtils.js +14 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/renderers/WebGLRenderer.js +24 -0
- package/src/renderers/common/Backend.js +2 -2
- package/src/renderers/common/Background.js +3 -1
- package/src/renderers/common/BindGroup.js +3 -1
- package/src/renderers/common/Bindings.js +13 -15
- package/src/renderers/common/ClippingContext.js +14 -5
- package/src/renderers/common/CubeRenderTarget.js +9 -3
- package/src/renderers/common/PostProcessing.js +4 -1
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderContext.js +24 -0
- package/src/renderers/common/RenderList.js +1 -1
- package/src/renderers/common/RenderObject.js +2 -2
- package/src/renderers/common/Renderer.js +75 -49
- package/src/renderers/common/SampledTexture.js +12 -3
- package/src/renderers/common/StandardRenderer.js +18 -0
- package/src/renderers/common/Textures.js +8 -12
- package/src/renderers/common/extras/PMREMGenerator.js +12 -13
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +118 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
- package/src/renderers/common/nodes/Nodes.js +36 -9
- package/src/renderers/common/nodes/StandardNodeLibrary.js +105 -0
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/webgl/WebGLProgram.js +1 -1
- package/src/renderers/webgl/WebGLProperties.js +7 -0
- package/src/renderers/webgl/WebGLTextures.js +61 -4
- package/src/renderers/webgl-fallback/WebGLBackend.js +88 -68
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +57 -9
- package/src/renderers/webgl-fallback/utils/WebGLState.js +21 -0
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +28 -21
- package/src/renderers/webgpu/WebGPUBackend.js +86 -68
- package/src/renderers/webgpu/WebGPURenderer.js +8 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -63
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +6 -15
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +36 -21
- package/src/renderers/webgpu/utils/WebGPUUtils.js +18 -1
- package/src/renderers/webxr/WebXRManager.js +32 -25
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/RotateUVNode.js +0 -35
- /package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +0 -0
- /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { registerNode } from '../core/Node.js';
|
|
2
2
|
import TempNode from '../core/TempNode.js';
|
|
3
|
-
import { cameraProjectionMatrix } from './
|
|
3
|
+
import { cameraProjectionMatrix } from './Camera.js';
|
|
4
4
|
import { modelViewMatrix } from './ModelNode.js';
|
|
5
|
-
import { positionLocal } from './
|
|
6
|
-
import { nodeProxy } from '../
|
|
7
|
-
import { varying } from '../core/VaryingNode.js';
|
|
5
|
+
import { positionLocal } from './Position.js';
|
|
6
|
+
import { nodeProxy, varying } from '../tsl/TSLBase.js';
|
|
8
7
|
|
|
9
8
|
class ModelViewProjectionNode extends TempNode {
|
|
10
9
|
|
|
@@ -34,6 +33,6 @@ class ModelViewProjectionNode extends TempNode {
|
|
|
34
33
|
|
|
35
34
|
export default ModelViewProjectionNode;
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
ModelViewProjectionNode.type = /*@__PURE__*/ registerNode( 'ModelViewProjection', ModelViewProjectionNode );
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
export const modelViewProjection = /*@__PURE__*/ nodeProxy( ModelViewProjectionNode );
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { float, nodeProxy,
|
|
3
|
+
import { float, nodeProxy, Fn } from '../tsl/TSLBase.js';
|
|
4
4
|
import { uniform } from '../core/UniformNode.js';
|
|
5
5
|
import { reference } from './ReferenceNode.js';
|
|
6
|
-
import { positionLocal } from './
|
|
7
|
-
import { normalLocal } from './
|
|
6
|
+
import { positionLocal } from './Position.js';
|
|
7
|
+
import { normalLocal } from './Normal.js';
|
|
8
8
|
import { textureLoad } from './TextureNode.js';
|
|
9
9
|
import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
|
|
10
|
-
import { ivec2, int } from '../
|
|
11
|
-
import {
|
|
10
|
+
import { ivec2, int } from '../tsl/TSLBase.js';
|
|
11
|
+
import { Loop } from '../utils/LoopNode.js';
|
|
12
12
|
|
|
13
13
|
import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
14
14
|
import { Vector2 } from '../../math/Vector2.js';
|
|
15
15
|
import { Vector4 } from '../../math/Vector4.js';
|
|
16
16
|
import { FloatType } from '../../constants.js';
|
|
17
17
|
|
|
18
|
-
const _morphTextures = new WeakMap();
|
|
18
|
+
const _morphTextures = /*@__PURE__*/ new WeakMap();
|
|
19
19
|
const _morphVec4 = /*@__PURE__*/ new Vector4();
|
|
20
20
|
|
|
21
|
-
const getMorph =
|
|
21
|
+
const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
|
|
22
22
|
|
|
23
23
|
const texelIndex = int( vertexIndex ).mul( stride ).add( offset );
|
|
24
24
|
|
|
@@ -176,7 +176,7 @@ class MorphNode extends Node {
|
|
|
176
176
|
const { geometry } = builder;
|
|
177
177
|
|
|
178
178
|
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
179
|
-
const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
|
|
179
|
+
const hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;
|
|
180
180
|
|
|
181
181
|
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
182
182
|
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
@@ -190,7 +190,7 @@ class MorphNode extends Node {
|
|
|
190
190
|
|
|
191
191
|
const width = int( size.width );
|
|
192
192
|
|
|
193
|
-
|
|
193
|
+
Loop( morphTargetsCount, ( { i } ) => {
|
|
194
194
|
|
|
195
195
|
const influence = float( 0 ).toVar();
|
|
196
196
|
|
|
@@ -254,6 +254,6 @@ class MorphNode extends Node {
|
|
|
254
254
|
|
|
255
255
|
export default MorphNode;
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
MorphNode.type = /*@__PURE__*/ registerNode( 'Morph', MorphNode );
|
|
258
258
|
|
|
259
|
-
|
|
259
|
+
export const morphReference = /*@__PURE__*/ nodeProxy( MorphNode );
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
3
|
+
import { modelNormalMatrix } from './ModelNode.js';
|
|
4
|
+
import { vec3 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { positionView } from './Position.js';
|
|
6
|
+
import { Fn, varying } from '../tsl/TSLBase.js';
|
|
7
|
+
import { faceDirection } from '../display/FrontFacingNode.js';
|
|
8
|
+
|
|
9
|
+
export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
|
|
10
|
+
|
|
11
|
+
export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
12
|
+
|
|
13
|
+
if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
|
|
14
|
+
|
|
15
|
+
console.warn( 'TSL.NormalNode: Vertex attribute "normal" not found on geometry.' );
|
|
16
|
+
|
|
17
|
+
return vec3( 0, 1, 0 );
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return normalGeometry;
|
|
22
|
+
|
|
23
|
+
}, 'vec3' ).once() )().toVar( 'normalLocal' );
|
|
24
|
+
|
|
25
|
+
export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
|
|
26
|
+
|
|
27
|
+
let normalViewVarying = null;
|
|
28
|
+
|
|
29
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
30
|
+
|
|
31
|
+
let node;
|
|
32
|
+
|
|
33
|
+
if ( builder.material.flatShading === true ) {
|
|
34
|
+
|
|
35
|
+
node = normalFlat;
|
|
36
|
+
|
|
37
|
+
} else {
|
|
38
|
+
|
|
39
|
+
node = normalViewVarying || ( normalViewVarying = varying( modelNormalMatrix.mul( normalLocal ), 'v_normalView' ).normalize() );
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return node;
|
|
44
|
+
|
|
45
|
+
}, 'vec3' ).once() )().toVar( 'normalView' );
|
|
46
|
+
|
|
47
|
+
export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
|
|
48
|
+
|
|
49
|
+
export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
50
|
+
|
|
51
|
+
return builder.context.setupNormal();
|
|
52
|
+
|
|
53
|
+
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedNormalWorld' );
|
|
57
|
+
|
|
58
|
+
export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
59
|
+
|
|
60
|
+
return builder.context.setupClearcoatNormal();
|
|
61
|
+
|
|
62
|
+
}, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import UniformNode from '../core/UniformNode.js';
|
|
4
|
-
import { nodeProxy } from '../
|
|
4
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
|
|
@@ -139,12 +139,12 @@ Object3DNode.DIRECTION = 'direction';
|
|
|
139
139
|
|
|
140
140
|
export default Object3DNode;
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
export const objectViewMatrix = nodeProxy( Object3DNode, Object3DNode.VIEW_MATRIX );
|
|
144
|
-
export const objectNormalMatrix = nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
|
|
145
|
-
export const objectWorldMatrix = nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
|
|
146
|
-
export const objectPosition = nodeProxy( Object3DNode, Object3DNode.POSITION );
|
|
147
|
-
export const objectScale = nodeProxy( Object3DNode, Object3DNode.SCALE );
|
|
148
|
-
export const objectViewPosition = nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
|
|
142
|
+
Object3DNode.type = /*@__PURE__*/ registerNode( 'Object3D', Object3DNode );
|
|
149
143
|
|
|
150
|
-
|
|
144
|
+
export const objectDirection = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.DIRECTION );
|
|
145
|
+
export const objectViewMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_MATRIX );
|
|
146
|
+
export const objectNormalMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
|
|
147
|
+
export const objectWorldMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
|
|
148
|
+
export const objectPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.POSITION );
|
|
149
|
+
export const objectScale = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.SCALE );
|
|
150
|
+
export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Node, {
|
|
2
|
-
import { nodeImmutable } from '../
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
|
+
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
4
|
class PointUVNode extends Node {
|
|
5
5
|
|
|
@@ -21,6 +21,6 @@ class PointUVNode extends Node {
|
|
|
21
21
|
|
|
22
22
|
export default PointUVNode;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
PointUVNode.type = /*@__PURE__*/ registerNode( 'PointUV', PointUVNode );
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
export const pointUV = /*@__PURE__*/ nodeImmutable( PointUVNode );
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
+
import { modelWorldMatrix, modelViewMatrix } from './ModelNode.js';
|
|
3
|
+
|
|
4
|
+
export const positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );
|
|
5
|
+
export const positionLocal = /*@__PURE__*/ positionGeometry.varying( 'positionLocal' );
|
|
6
|
+
export const positionPrevious = /*@__PURE__*/ positionGeometry.varying( 'positionPrevious' );
|
|
7
|
+
export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal ).xyz.varying( 'v_positionWorld' );
|
|
8
|
+
export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirection( modelWorldMatrix ).varying( 'v_positionWorldDirection' ).normalize().toVar( 'positionWorldDirection' );
|
|
9
|
+
export const positionView = /*@__PURE__*/ modelViewMatrix.mul( positionLocal ).xyz.varying( 'v_positionView' );
|
|
10
|
+
export const positionViewDirection = /*@__PURE__*/ positionView.negate().varying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
|
+
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
+
import { uniform } from '../core/UniformNode.js';
|
|
4
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
5
|
+
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
6
|
+
|
|
7
|
+
class ReferenceElementNode extends ArrayElementNode {
|
|
8
|
+
|
|
9
|
+
constructor( referenceNode, indexNode ) {
|
|
10
|
+
|
|
11
|
+
super( referenceNode, indexNode );
|
|
12
|
+
|
|
13
|
+
this.referenceNode = referenceNode;
|
|
14
|
+
|
|
15
|
+
this.isReferenceElementNode = true;
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
getNodeType() {
|
|
20
|
+
|
|
21
|
+
return this.referenceNode.uniformType;
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
generate( builder ) {
|
|
26
|
+
|
|
27
|
+
const snippet = super.generate( builder );
|
|
28
|
+
const arrayType = this.referenceNode.getNodeType();
|
|
29
|
+
const elementType = this.getNodeType();
|
|
30
|
+
|
|
31
|
+
return builder.format( snippet, arrayType, elementType );
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
class ReferenceBaseNode extends Node {
|
|
38
|
+
|
|
39
|
+
constructor( property, uniformType, object = null, count = null ) {
|
|
40
|
+
|
|
41
|
+
super();
|
|
42
|
+
|
|
43
|
+
this.property = property;
|
|
44
|
+
this.uniformType = uniformType;
|
|
45
|
+
this.object = object;
|
|
46
|
+
this.count = count;
|
|
47
|
+
|
|
48
|
+
this.properties = property.split( '.' );
|
|
49
|
+
this.reference = object;
|
|
50
|
+
this.node = null;
|
|
51
|
+
|
|
52
|
+
this.updateType = NodeUpdateType.OBJECT;
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
element( indexNode ) {
|
|
57
|
+
|
|
58
|
+
return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
setNodeType( uniformType ) {
|
|
63
|
+
|
|
64
|
+
this.node = uniform( null, uniformType ).getSelf();
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
getNodeType( builder ) {
|
|
69
|
+
|
|
70
|
+
if ( this.node === null ) {
|
|
71
|
+
|
|
72
|
+
this.updateValue();
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return this.node.getNodeType( builder );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getValueFromReference( object = this.reference ) {
|
|
81
|
+
|
|
82
|
+
const { properties } = this;
|
|
83
|
+
|
|
84
|
+
let value = object[ properties[ 0 ] ];
|
|
85
|
+
|
|
86
|
+
for ( let i = 1; i < properties.length; i ++ ) {
|
|
87
|
+
|
|
88
|
+
value = value[ properties[ i ] ];
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return value;
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
updateReference( state ) {
|
|
97
|
+
|
|
98
|
+
this.reference = this.object !== null ? this.object : state.object;
|
|
99
|
+
|
|
100
|
+
return this.reference;
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
setup() {
|
|
105
|
+
|
|
106
|
+
this.updateValue();
|
|
107
|
+
|
|
108
|
+
return this.node;
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
update( /*frame*/ ) {
|
|
113
|
+
|
|
114
|
+
this.updateValue();
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
updateValue() {
|
|
119
|
+
|
|
120
|
+
if ( this.node === null ) this.setNodeType( this.uniformType );
|
|
121
|
+
|
|
122
|
+
const value = this.getValueFromReference();
|
|
123
|
+
|
|
124
|
+
if ( Array.isArray( value ) ) {
|
|
125
|
+
|
|
126
|
+
this.node.array = value;
|
|
127
|
+
|
|
128
|
+
} else {
|
|
129
|
+
|
|
130
|
+
this.node.value = value;
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export default ReferenceBaseNode;
|
|
139
|
+
|
|
140
|
+
ReferenceBaseNode.type = /*@__PURE__*/ registerNode( 'ReferenceBase', ReferenceBaseNode );
|
|
141
|
+
|
|
142
|
+
export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
|
|
143
|
+
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { uniform } from '../core/UniformNode.js';
|
|
4
4
|
import { texture } from './TextureNode.js';
|
|
5
|
+
import { cubeTexture } from './CubeTextureNode.js';
|
|
5
6
|
import { buffer } from './BufferNode.js';
|
|
6
|
-
import { nodeObject } from '../
|
|
7
|
-
import {
|
|
7
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
8
|
+
import { uniformArray } from './UniformArrayNode.js';
|
|
8
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
9
10
|
|
|
10
11
|
class ReferenceElementNode extends ArrayElementNode {
|
|
@@ -37,6 +38,7 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
37
38
|
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
// TODO: Extends this from ReferenceBaseNode
|
|
40
42
|
class ReferenceNode extends Node {
|
|
41
43
|
|
|
42
44
|
constructor( property, uniformType, object = null, count = null ) {
|
|
@@ -72,19 +74,23 @@ class ReferenceNode extends Node {
|
|
|
72
74
|
|
|
73
75
|
} else if ( Array.isArray( this.getValueFromReference() ) ) {
|
|
74
76
|
|
|
75
|
-
node =
|
|
77
|
+
node = uniformArray( null, uniformType );
|
|
76
78
|
|
|
77
79
|
} else if ( uniformType === 'texture' ) {
|
|
78
80
|
|
|
79
81
|
node = texture( null );
|
|
80
82
|
|
|
83
|
+
} else if ( uniformType === 'cubeTexture' ) {
|
|
84
|
+
|
|
85
|
+
node = cubeTexture( null );
|
|
86
|
+
|
|
81
87
|
} else {
|
|
82
88
|
|
|
83
89
|
node = uniform( null, uniformType );
|
|
84
90
|
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
this.node = node;
|
|
93
|
+
this.node = node.getSelf();
|
|
88
94
|
|
|
89
95
|
}
|
|
90
96
|
|
|
@@ -160,7 +166,7 @@ class ReferenceNode extends Node {
|
|
|
160
166
|
|
|
161
167
|
export default ReferenceNode;
|
|
162
168
|
|
|
169
|
+
ReferenceNode.type = /*@__PURE__*/ registerNode( 'Reference', ReferenceNode );
|
|
170
|
+
|
|
163
171
|
export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
|
|
164
172
|
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
|
|
165
|
-
|
|
166
|
-
addNodeClass( 'ReferenceNode', ReferenceNode );
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
2
|
+
import { transformedNormalView } from './Normal.js';
|
|
3
|
+
import { positionViewDirection } from './Position.js';
|
|
4
|
+
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
5
|
+
|
|
6
|
+
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( transformedNormalView );
|
|
7
|
+
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( transformedNormalView, materialRefractionRatio );
|
|
8
|
+
|
|
9
|
+
export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
|
|
10
|
+
export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { nodeObject } from '../
|
|
1
|
+
import { registerNode } from '../core/Node.js';
|
|
2
|
+
import ReferenceBaseNode from './ReferenceBaseNode.js';
|
|
3
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
-
class RendererReferenceNode extends
|
|
5
|
+
class RendererReferenceNode extends ReferenceBaseNode {
|
|
6
6
|
|
|
7
7
|
constructor( property, inputType, renderer = null ) {
|
|
8
8
|
|
|
@@ -24,6 +24,6 @@ class RendererReferenceNode extends ReferenceNode {
|
|
|
24
24
|
|
|
25
25
|
export default RendererReferenceNode;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
RendererReferenceNode.type = /*@__PURE__*/ registerNode( 'RendererReference', RendererReferenceNode );
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
export const rendererReference = ( name, type, renderer ) => nodeObject( new RendererReferenceNode( name, type, renderer ) );
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import Node from '../core/Node.js';
|
|
2
|
-
import {
|
|
3
|
-
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
|
+
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
4
3
|
import { reference } from './ReferenceNode.js';
|
|
5
4
|
|
|
6
5
|
class SceneNode extends Node {
|
|
@@ -46,7 +45,7 @@ SceneNode.BACKGROUND_INTENSITY = 'backgroundIntensity';
|
|
|
46
45
|
|
|
47
46
|
export default SceneNode;
|
|
48
47
|
|
|
49
|
-
|
|
50
|
-
export const backgroundIntensity = nodeImmutable( SceneNode, SceneNode.BACKGROUND_INTENSITY );
|
|
48
|
+
SceneNode.type = /*@__PURE__*/ registerNode( 'Scene', SceneNode );
|
|
51
49
|
|
|
52
|
-
|
|
50
|
+
export const backgroundBlurriness = /*@__PURE__*/ nodeImmutable( SceneNode, SceneNode.BACKGROUND_BLURRINESS );
|
|
51
|
+
export const backgroundIntensity = /*@__PURE__*/ nodeImmutable( SceneNode, SceneNode.BACKGROUND_INTENSITY );
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { nodeObject } from '../
|
|
3
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
4
4
|
import { attribute } from '../core/AttributeNode.js';
|
|
5
5
|
import { reference, referenceBuffer } from './ReferenceNode.js';
|
|
6
6
|
import { add } from '../math/OperatorNode.js';
|
|
7
|
-
import { normalLocal } from './
|
|
8
|
-
import { positionLocal } from './
|
|
9
|
-
import { tangentLocal } from './
|
|
7
|
+
import { normalLocal } from './Normal.js';
|
|
8
|
+
import { positionLocal, positionPrevious } from './Position.js';
|
|
9
|
+
import { tangentLocal } from './Tangent.js';
|
|
10
10
|
import { uniform } from '../core/UniformNode.js';
|
|
11
11
|
import { buffer } from './BufferNode.js';
|
|
12
12
|
|
|
13
|
+
const _frameId = new WeakMap();
|
|
14
|
+
|
|
13
15
|
class SkinningNode extends Node {
|
|
14
16
|
|
|
15
17
|
constructor( skinnedMesh, useReference = false ) {
|
|
@@ -45,21 +47,22 @@ class SkinningNode extends Node {
|
|
|
45
47
|
this.bindMatrixNode = bindMatrixNode;
|
|
46
48
|
this.bindMatrixInverseNode = bindMatrixInverseNode;
|
|
47
49
|
this.boneMatricesNode = boneMatricesNode;
|
|
50
|
+
this.previousBoneMatricesNode = null;
|
|
48
51
|
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
|
|
54
|
+
getSkinnedPosition( boneMatrices = this.boneMatricesNode, position = positionLocal ) {
|
|
52
55
|
|
|
53
|
-
const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode
|
|
56
|
+
const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;
|
|
54
57
|
|
|
55
|
-
const boneMatX =
|
|
56
|
-
const boneMatY =
|
|
57
|
-
const boneMatZ =
|
|
58
|
-
const boneMatW =
|
|
58
|
+
const boneMatX = boneMatrices.element( skinIndexNode.x );
|
|
59
|
+
const boneMatY = boneMatrices.element( skinIndexNode.y );
|
|
60
|
+
const boneMatZ = boneMatrices.element( skinIndexNode.z );
|
|
61
|
+
const boneMatW = boneMatrices.element( skinIndexNode.w );
|
|
59
62
|
|
|
60
63
|
// POSITION
|
|
61
64
|
|
|
62
|
-
const skinVertex = bindMatrixNode.mul(
|
|
65
|
+
const skinVertex = bindMatrixNode.mul( position );
|
|
63
66
|
|
|
64
67
|
const skinned = add(
|
|
65
68
|
boneMatX.mul( skinWeightNode.x ).mul( skinVertex ),
|
|
@@ -68,7 +71,18 @@ class SkinningNode extends Node {
|
|
|
68
71
|
boneMatW.mul( skinWeightNode.w ).mul( skinVertex )
|
|
69
72
|
);
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
return bindMatrixInverseNode.mul( skinned ).xyz;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
getSkinnedNormal( boneMatrices = this.boneMatricesNode, normal = normalLocal ) {
|
|
79
|
+
|
|
80
|
+
const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode } = this;
|
|
81
|
+
|
|
82
|
+
const boneMatX = boneMatrices.element( skinIndexNode.x );
|
|
83
|
+
const boneMatY = boneMatrices.element( skinIndexNode.y );
|
|
84
|
+
const boneMatZ = boneMatrices.element( skinIndexNode.z );
|
|
85
|
+
const boneMatW = boneMatrices.element( skinIndexNode.w );
|
|
72
86
|
|
|
73
87
|
// NORMAL
|
|
74
88
|
|
|
@@ -81,16 +95,58 @@ class SkinningNode extends Node {
|
|
|
81
95
|
|
|
82
96
|
skinMatrix = bindMatrixInverseNode.mul( skinMatrix ).mul( bindMatrixNode );
|
|
83
97
|
|
|
84
|
-
|
|
98
|
+
return skinMatrix.transformDirection( normal ).xyz;
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
getPreviousSkinnedPosition( builder ) {
|
|
103
|
+
|
|
104
|
+
const skinnedMesh = builder.object;
|
|
105
|
+
|
|
106
|
+
if ( this.previousBoneMatricesNode === null ) {
|
|
107
|
+
|
|
108
|
+
skinnedMesh.skeleton.previousBoneMatrices = new Float32Array( skinnedMesh.skeleton.boneMatrices );
|
|
109
|
+
|
|
110
|
+
this.previousBoneMatricesNode = referenceBuffer( 'skeleton.previousBoneMatrices', 'mat4', skinnedMesh.skeleton.bones.length );
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return this.getSkinnedPosition( this.previousBoneMatricesNode, positionPrevious );
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
needsPreviousBoneMatrices( builder ) {
|
|
119
|
+
|
|
120
|
+
const mrt = builder.renderer.getMRT();
|
|
121
|
+
|
|
122
|
+
return mrt && mrt.has( 'velocity' );
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
setup( builder ) {
|
|
127
|
+
|
|
128
|
+
if ( this.needsPreviousBoneMatrices( builder ) ) {
|
|
129
|
+
|
|
130
|
+
positionPrevious.assign( this.getPreviousSkinnedPosition( builder ) );
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const skinPosition = this.getSkinnedPosition();
|
|
85
135
|
|
|
86
|
-
// ASSIGNS
|
|
87
136
|
|
|
88
137
|
positionLocal.assign( skinPosition );
|
|
89
|
-
normalLocal.assign( skinNormal );
|
|
90
138
|
|
|
91
|
-
if ( builder.hasGeometryAttribute( '
|
|
139
|
+
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
140
|
+
|
|
141
|
+
const skinNormal = this.getSkinnedNormal();
|
|
142
|
+
|
|
143
|
+
normalLocal.assign( skinNormal );
|
|
144
|
+
|
|
145
|
+
if ( builder.hasGeometryAttribute( 'tangent' ) ) {
|
|
146
|
+
|
|
147
|
+
tangentLocal.assign( skinNormal );
|
|
92
148
|
|
|
93
|
-
|
|
149
|
+
}
|
|
94
150
|
|
|
95
151
|
}
|
|
96
152
|
|
|
@@ -109,8 +165,15 @@ class SkinningNode extends Node {
|
|
|
109
165
|
update( frame ) {
|
|
110
166
|
|
|
111
167
|
const object = this.useReference ? frame.object : this.skinnedMesh;
|
|
168
|
+
const skeleton = object.skeleton;
|
|
112
169
|
|
|
113
|
-
|
|
170
|
+
if ( _frameId.get( skeleton ) === frame.frameId ) return;
|
|
171
|
+
|
|
172
|
+
_frameId.set( skeleton, frame.frameId );
|
|
173
|
+
|
|
174
|
+
if ( this.previousBoneMatricesNode !== null ) skeleton.previousBoneMatrices.set( skeleton.boneMatrices );
|
|
175
|
+
|
|
176
|
+
skeleton.update();
|
|
114
177
|
|
|
115
178
|
}
|
|
116
179
|
|
|
@@ -118,7 +181,7 @@ class SkinningNode extends Node {
|
|
|
118
181
|
|
|
119
182
|
export default SkinningNode;
|
|
120
183
|
|
|
184
|
+
SkinningNode.type = /*@__PURE__*/ registerNode( 'Skinning', SkinningNode );
|
|
185
|
+
|
|
121
186
|
export const skinning = ( skinnedMesh ) => nodeObject( new SkinningNode( skinnedMesh ) );
|
|
122
187
|
export const skinningReference = ( skinnedMesh ) => nodeObject( new SkinningNode( skinnedMesh, true ) );
|
|
123
|
-
|
|
124
|
-
addNodeClass( 'SkinningNode', SkinningNode );
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import { registerNode } from '../core/Node.js';
|
|
1
2
|
import BufferNode from './BufferNode.js';
|
|
2
3
|
import { bufferAttribute } from './BufferAttributeNode.js';
|
|
3
|
-
import {
|
|
4
|
-
import { nodeObject } from '../shadernode/ShaderNode.js';
|
|
5
|
-
import { varying } from '../core/VaryingNode.js';
|
|
4
|
+
import { nodeObject, varying } from '../tsl/TSLBase.js';
|
|
6
5
|
import { storageElement } from '../utils/StorageArrayElementNode.js';
|
|
7
6
|
import { GPUBufferBindingType } from '../../renderers/webgpu/utils/WebGPUConstants.js';
|
|
8
7
|
|
|
@@ -123,8 +122,8 @@ class StorageBufferNode extends BufferNode {
|
|
|
123
122
|
|
|
124
123
|
export default StorageBufferNode;
|
|
125
124
|
|
|
125
|
+
StorageBufferNode.type = /*@__PURE__*/ registerNode( 'StorageBuffer', StorageBufferNode );
|
|
126
|
+
|
|
126
127
|
// Read-Write Storage
|
|
127
128
|
export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
|
|
128
129
|
export const storageObject = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ).setBufferObject( true ) );
|
|
129
|
-
|
|
130
|
-
addNodeClass( 'StorageBufferNode', StorageBufferNode );
|