@plastic-software/three 0.183.4 → 0.184.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 +775 -287
- package/build/three.core.js +372 -110
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +428 -181
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +7 -1
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2979 -1281
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2942 -1281
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +11 -0
- package/examples/jsm/animation/CCDIKSolver.js +5 -1
- package/examples/jsm/controls/ArcballControls.js +4 -1
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/TrackballControls.js +2 -2
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/exporters/GLTFExporter.js +21 -5
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +169 -114
- package/examples/jsm/inspector/RendererInspector.js +2 -2
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +34 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +105 -3
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +273 -176
- package/examples/jsm/inspector/ui/Style.js +64 -10
- package/examples/jsm/inspector/ui/Tab.js +39 -7
- package/examples/jsm/inspector/ui/Values.js +39 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +8 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +1 -1
- package/examples/jsm/loaders/EXRLoader.js +682 -43
- package/examples/jsm/loaders/FBXLoader.js +233 -33
- package/examples/jsm/loaders/GLTFLoader.js +24 -7
- package/examples/jsm/loaders/HDRLoader.js +1 -1
- package/examples/jsm/loaders/KTX2Loader.js +8 -2
- package/examples/jsm/loaders/LDrawLoader.js +39 -47
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/VTKLoader.js +5 -1
- package/examples/jsm/loaders/collada/ColladaComposer.js +101 -7
- package/examples/jsm/loaders/collada/ColladaParser.js +19 -4
- package/examples/jsm/loaders/usd/USDAParser.js +6 -0
- package/examples/jsm/loaders/usd/USDCParser.js +26 -0
- package/examples/jsm/loaders/usd/USDComposer.js +656 -103
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +14 -2
- package/examples/jsm/objects/SkyMesh.js +23 -6
- package/examples/jsm/renderers/Projector.js +18 -38
- package/examples/jsm/renderers/SVGRenderer.js +6 -25
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +10 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +11 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +10 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/GTAONode.js +2 -1
- package/examples/jsm/tsl/display/GaussianBlurNode.js +10 -0
- package/examples/jsm/tsl/display/GodraysNode.js +2 -11
- package/examples/jsm/tsl/display/OutlineNode.js +66 -16
- package/examples/jsm/tsl/display/SSGINode.js +0 -4
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +48 -7
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +13 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +4 -4
- package/src/Three.Core.js +1 -0
- package/src/Three.TSL.js +6 -0
- package/src/Three.WebGPU.Nodes.js +3 -0
- package/src/Three.WebGPU.js +6 -0
- package/src/animation/AnimationAction.js +11 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/Clock.js +1 -1
- package/src/core/Object3D.js +1 -5
- package/src/core/RenderTarget.js +1 -0
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +1 -2
- package/src/loaders/ImageBitmapLoader.js +4 -6
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +25 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +27 -0
- package/src/materials/nodes/NodeMaterial.js +0 -27
- package/src/materials/nodes/manager/NodeMaterialObserver.js +188 -89
- package/src/math/Line3.js +3 -0
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +13 -9
- package/src/math/Plane.js +4 -3
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +12 -8
- package/src/math/Vector4.js +13 -9
- package/src/nodes/Nodes.js +0 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/BufferAttributeNode.js +9 -3
- package/src/nodes/accessors/CubeTextureNode.js +7 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/SceneProperties.js +2 -8
- package/src/nodes/accessors/StorageBufferNode.js +10 -4
- package/src/nodes/accessors/StorageTextureNode.js +4 -9
- package/src/nodes/accessors/TextureNode.js +10 -2
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/core/ArrayNode.js +1 -1
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/Node.js +83 -12
- package/src/nodes/core/NodeBuilder.js +117 -16
- package/src/nodes/core/NodeUtils.js +1 -1
- package/src/nodes/core/OutputStructNode.js +1 -1
- package/src/nodes/core/ParameterNode.js +1 -1
- package/src/nodes/core/StackNode.js +1 -1
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +1 -1
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/VarNode.js +1 -1
- package/src/nodes/core/VaryingNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +27 -7
- package/src/nodes/display/RenderOutputNode.js +4 -4
- package/src/nodes/display/ScreenNode.js +1 -1
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +18 -7
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +69 -44
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +6 -27
- package/src/nodes/lighting/ShadowNode.js +24 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +1 -1
- package/src/nodes/math/MathNode.js +73 -1
- package/src/nodes/math/OperatorNode.js +1 -1
- package/src/nodes/math/PackFloatNode.js +1 -1
- package/src/nodes/math/UnpackFloatNode.js +1 -1
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +21 -3
- package/src/nodes/utils/ArrayElementNode.js +1 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +1 -1
- package/src/nodes/utils/EventNode.js +30 -0
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/objects/BatchedMesh.js +17 -2
- package/src/objects/InstancedMesh.js +19 -3
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +147 -48
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +0 -8
- package/src/renderers/common/Background.js +2 -2
- package/src/renderers/common/BindGroup.js +1 -8
- package/src/renderers/common/Bindings.js +2 -2
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Pipelines.js +36 -3
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +5 -2
- package/src/renderers/common/RenderObject.js +2 -2
- package/src/renderers/common/RenderObjects.js +3 -3
- package/src/renderers/common/RenderPipeline.js +35 -6
- package/src/renderers/common/Renderer.js +232 -53
- package/src/renderers/common/Textures.js +72 -3
- package/src/renderers/common/UniformsGroup.js +1 -1
- package/src/renderers/common/XRManager.js +34 -27
- package/src/renderers/common/extras/PMREMGenerator.js +23 -15
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeManager.js +230 -99
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -3
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib.js +0 -1
- package/src/renderers/shaders/UniformsLib.js +7 -2
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +13 -13
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +6 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLMaterials.js +12 -13
- package/src/renderers/webgl/WebGLOutput.js +4 -1
- package/src/renderers/webgl/WebGLProgram.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +21 -4
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLState.js +43 -0
- package/src/renderers/webgl/WebGLTextures.js +129 -26
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +106 -65
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +29 -51
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +42 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +63 -50
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +160 -146
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +55 -33
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +103 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -0
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +91 -17
- package/src/renderers/webgpu/utils/WebGPUUtils.js +18 -2
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +13 -2
- package/src/utils.js +23 -1
- package/src/nodes/utils/RemapNode.js +0 -125
|
@@ -35,6 +35,10 @@ class EventNode extends Node {
|
|
|
35
35
|
|
|
36
36
|
this.updateType = NodeUpdateType.RENDER;
|
|
37
37
|
|
|
38
|
+
} else if ( eventType === EventNode.FRAME ) {
|
|
39
|
+
|
|
40
|
+
this.updateType = NodeUpdateType.FRAME;
|
|
41
|
+
|
|
38
42
|
} else if ( eventType === EventNode.BEFORE_OBJECT ) {
|
|
39
43
|
|
|
40
44
|
this.updateBeforeType = NodeUpdateType.OBJECT;
|
|
@@ -43,6 +47,10 @@ class EventNode extends Node {
|
|
|
43
47
|
|
|
44
48
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
45
49
|
|
|
50
|
+
} else if ( eventType === EventNode.BEFORE_FRAME ) {
|
|
51
|
+
|
|
52
|
+
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
53
|
+
|
|
46
54
|
}
|
|
47
55
|
|
|
48
56
|
}
|
|
@@ -63,8 +71,10 @@ class EventNode extends Node {
|
|
|
63
71
|
|
|
64
72
|
EventNode.OBJECT = 'object';
|
|
65
73
|
EventNode.MATERIAL = 'material';
|
|
74
|
+
EventNode.FRAME = 'frame';
|
|
66
75
|
EventNode.BEFORE_OBJECT = 'beforeObject';
|
|
67
76
|
EventNode.BEFORE_MATERIAL = 'beforeMaterial';
|
|
77
|
+
EventNode.BEFORE_FRAME = 'beforeFrame';
|
|
68
78
|
|
|
69
79
|
export default EventNode;
|
|
70
80
|
|
|
@@ -97,6 +107,16 @@ export const OnObjectUpdate = ( callback ) => createEvent( EventNode.OBJECT, cal
|
|
|
97
107
|
*/
|
|
98
108
|
export const OnMaterialUpdate = ( callback ) => createEvent( EventNode.MATERIAL, callback );
|
|
99
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Creates an event that triggers a function every frame.
|
|
112
|
+
*
|
|
113
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
114
|
+
*
|
|
115
|
+
* @param {Function} callback - The callback function.
|
|
116
|
+
* @returns {EventNode}
|
|
117
|
+
*/
|
|
118
|
+
export const OnFrameUpdate = ( callback ) => createEvent( EventNode.FRAME, callback );
|
|
119
|
+
|
|
100
120
|
/**
|
|
101
121
|
* Creates an event that triggers a function before an object (Mesh|Sprite) is updated.
|
|
102
122
|
*
|
|
@@ -116,3 +136,13 @@ export const OnBeforeObjectUpdate = ( callback ) => createEvent( EventNode.BEFOR
|
|
|
116
136
|
* @returns {EventNode}
|
|
117
137
|
*/
|
|
118
138
|
export const OnBeforeMaterialUpdate = ( callback ) => createEvent( EventNode.BEFORE_MATERIAL, callback );
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Creates an event that triggers a function before every frame.
|
|
142
|
+
*
|
|
143
|
+
* The event will be bound to the declared TSL function `Fn()`; it must be declared within a `Fn()` or the JS function call must be inherited from one.
|
|
144
|
+
*
|
|
145
|
+
* @param {Function} callback - The callback function.
|
|
146
|
+
* @returns {EventNode}
|
|
147
|
+
*/
|
|
148
|
+
export const OnBeforeFrameUpdate = ( callback ) => createEvent( EventNode.BEFORE_FRAME, callback );
|
|
@@ -65,7 +65,7 @@ class FunctionOverloadingNode extends Node {
|
|
|
65
65
|
* @param {NodeBuilder} builder - The current node builder.
|
|
66
66
|
* @return {string} The node type.
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
generateNodeType( builder ) {
|
|
69
69
|
|
|
70
70
|
const candidateFn = this.getCandidateFn( builder );
|
|
71
71
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { float, addMethodChaining, Fn, bool, defined } from '../tsl/TSLCore.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
5
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
6
|
+
* `remap` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
7
|
+
*
|
|
8
|
+
* @tsl
|
|
9
|
+
* @function
|
|
10
|
+
* @param {Node} node - The node that should be remapped.
|
|
11
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
12
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
13
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
14
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
15
|
+
* @returns {Node}
|
|
16
|
+
*/
|
|
17
|
+
export const remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {
|
|
18
|
+
|
|
19
|
+
let t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );
|
|
20
|
+
|
|
21
|
+
if ( defined( doClamp ) ) t = t.clamp();
|
|
22
|
+
|
|
23
|
+
return t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of
|
|
29
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
30
|
+
* `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @function
|
|
34
|
+
* @param {Node} node - The node that should be remapped.
|
|
35
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
36
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
37
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
38
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
39
|
+
* @returns {Node}
|
|
40
|
+
*/
|
|
41
|
+
export function remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
42
|
+
|
|
43
|
+
return remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
addMethodChaining( 'remap', remap );
|
|
48
|
+
addMethodChaining( 'remapClamp', remapClamp );
|
|
@@ -49,7 +49,7 @@ class RotateNode extends TempNode {
|
|
|
49
49
|
* @param {NodeBuilder} builder - The current node builder.
|
|
50
50
|
* @return {string} The node's type.
|
|
51
51
|
*/
|
|
52
|
-
|
|
52
|
+
generateNodeType( builder ) {
|
|
53
53
|
|
|
54
54
|
return this.positionNode.getNodeType( builder );
|
|
55
55
|
|
|
@@ -94,7 +94,7 @@ class SplitNode extends Node {
|
|
|
94
94
|
* @param {NodeBuilder} builder - The current node builder.
|
|
95
95
|
* @return {string} The node type.
|
|
96
96
|
*/
|
|
97
|
-
|
|
97
|
+
generateNodeType( builder ) {
|
|
98
98
|
|
|
99
99
|
return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
|
|
100
100
|
|
|
@@ -272,7 +272,6 @@ class BatchedMesh extends Mesh {
|
|
|
272
272
|
this._multiDrawCounts = new Int32Array( maxInstanceCount );
|
|
273
273
|
this._multiDrawStarts = new Int32Array( maxInstanceCount );
|
|
274
274
|
this._multiDrawCount = 0;
|
|
275
|
-
this._multiDrawInstances = null;
|
|
276
275
|
|
|
277
276
|
// Local matrix per geometry by using data texture
|
|
278
277
|
this._matricesTexture = null;
|
|
@@ -1133,7 +1132,23 @@ class BatchedMesh extends Mesh {
|
|
|
1133
1132
|
getColorAt( instanceId, color ) {
|
|
1134
1133
|
|
|
1135
1134
|
this.validateInstanceId( instanceId );
|
|
1136
|
-
|
|
1135
|
+
if ( this._colorsTexture === null ) {
|
|
1136
|
+
|
|
1137
|
+
if ( color.isVector4 ) {
|
|
1138
|
+
|
|
1139
|
+
return color.set( 1, 1, 1, 1 );
|
|
1140
|
+
|
|
1141
|
+
} else {
|
|
1142
|
+
|
|
1143
|
+
return color.setRGB( 1, 1, 1 );
|
|
1144
|
+
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
} else {
|
|
1148
|
+
|
|
1149
|
+
return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
|
|
1150
|
+
|
|
1151
|
+
}
|
|
1137
1152
|
|
|
1138
1153
|
}
|
|
1139
1154
|
|
|
@@ -213,10 +213,19 @@ class InstancedMesh extends Mesh {
|
|
|
213
213
|
*
|
|
214
214
|
* @param {number} index - The instance index.
|
|
215
215
|
* @param {Color} color - The target object that is used to store the method's result.
|
|
216
|
+
* @return {Color} A reference to the target color.
|
|
216
217
|
*/
|
|
217
218
|
getColorAt( index, color ) {
|
|
218
219
|
|
|
219
|
-
|
|
220
|
+
if ( this.instanceColor === null ) {
|
|
221
|
+
|
|
222
|
+
return color.setRGB( 1, 1, 1 );
|
|
223
|
+
|
|
224
|
+
} else {
|
|
225
|
+
|
|
226
|
+
return color.fromArray( this.instanceColor.array, index * 3 );
|
|
227
|
+
|
|
228
|
+
}
|
|
220
229
|
|
|
221
230
|
}
|
|
222
231
|
|
|
@@ -225,10 +234,11 @@ class InstancedMesh extends Mesh {
|
|
|
225
234
|
*
|
|
226
235
|
* @param {number} index - The instance index.
|
|
227
236
|
* @param {Matrix4} matrix - The target object that is used to store the method's result.
|
|
237
|
+
* @return {Matrix4} A reference to the target matrix.
|
|
228
238
|
*/
|
|
229
239
|
getMatrixAt( index, matrix ) {
|
|
230
240
|
|
|
231
|
-
matrix.fromArray( this.instanceMatrix.array, index * 16 );
|
|
241
|
+
return matrix.fromArray( this.instanceMatrix.array, index * 16 );
|
|
232
242
|
|
|
233
243
|
}
|
|
234
244
|
|
|
@@ -314,6 +324,7 @@ class InstancedMesh extends Mesh {
|
|
|
314
324
|
*
|
|
315
325
|
* @param {number} index - The instance index.
|
|
316
326
|
* @param {Color} color - The instance color.
|
|
327
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
317
328
|
*/
|
|
318
329
|
setColorAt( index, color ) {
|
|
319
330
|
|
|
@@ -324,19 +335,22 @@ class InstancedMesh extends Mesh {
|
|
|
324
335
|
}
|
|
325
336
|
|
|
326
337
|
color.toArray( this.instanceColor.array, index * 3 );
|
|
338
|
+
return this;
|
|
327
339
|
|
|
328
340
|
}
|
|
329
341
|
|
|
330
342
|
/**
|
|
331
343
|
* Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of
|
|
332
|
-
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the
|
|
344
|
+
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the matrices.
|
|
333
345
|
*
|
|
334
346
|
* @param {number} index - The instance index.
|
|
335
347
|
* @param {Matrix4} matrix - The local transformation.
|
|
348
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
336
349
|
*/
|
|
337
350
|
setMatrixAt( index, matrix ) {
|
|
338
351
|
|
|
339
352
|
matrix.toArray( this.instanceMatrix.array, index * 16 );
|
|
353
|
+
return this;
|
|
340
354
|
|
|
341
355
|
}
|
|
342
356
|
|
|
@@ -347,6 +361,7 @@ class InstancedMesh extends Mesh {
|
|
|
347
361
|
* @param {number} index - The instance index.
|
|
348
362
|
* @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights
|
|
349
363
|
* of a single instance.
|
|
364
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
350
365
|
*/
|
|
351
366
|
setMorphAt( index, object ) {
|
|
352
367
|
|
|
@@ -377,6 +392,7 @@ class InstancedMesh extends Mesh {
|
|
|
377
392
|
array[ dataIndex ] = morphBaseInfluence;
|
|
378
393
|
|
|
379
394
|
array.set( objectInfluences, dataIndex + 1 );
|
|
395
|
+
return this;
|
|
380
396
|
|
|
381
397
|
}
|
|
382
398
|
|
|
@@ -8,12 +8,12 @@ import { Ray } from '../math/Ray.js';
|
|
|
8
8
|
import { AttachedBindMode, DetachedBindMode } from '../constants.js';
|
|
9
9
|
import { warn } from '../utils.js';
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const _baseVector = /*@__PURE__*/ new Vector4();
|
|
12
12
|
|
|
13
13
|
const _skinIndex = /*@__PURE__*/ new Vector4();
|
|
14
14
|
const _skinWeight = /*@__PURE__*/ new Vector4();
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const _vector4 = /*@__PURE__*/ new Vector4();
|
|
17
17
|
const _matrix4 = /*@__PURE__*/ new Matrix4();
|
|
18
18
|
const _vertex = /*@__PURE__*/ new Vector3();
|
|
19
19
|
|
|
@@ -309,12 +309,12 @@ class SkinnedMesh extends Mesh {
|
|
|
309
309
|
|
|
310
310
|
/**
|
|
311
311
|
* Applies the bone transform associated with the given index to the given
|
|
312
|
-
*
|
|
312
|
+
* vector. Can be used to transform positions or direction vectors by providing
|
|
313
|
+
* a Vector4 with 1 or 0 in the w component respectively. Returns the updated vector.
|
|
313
314
|
*
|
|
314
315
|
* @param {number} index - The vertex index.
|
|
315
|
-
* @param {Vector3} target - The target object that is used to store the method's result.
|
|
316
|
-
*
|
|
317
|
-
* @return {Vector3} The updated vertex position.
|
|
316
|
+
* @param {Vector3|Vector4} target - The target object that is used to store the method's result.
|
|
317
|
+
* @return {Vector3|Vector4} The updated vertex attribute data.
|
|
318
318
|
*/
|
|
319
319
|
applyBoneTransform( index, target ) {
|
|
320
320
|
|
|
@@ -324,9 +324,19 @@ class SkinnedMesh extends Mesh {
|
|
|
324
324
|
_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
|
|
325
325
|
_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
|
|
326
326
|
|
|
327
|
-
|
|
327
|
+
if ( target.isVector4 ) {
|
|
328
|
+
|
|
329
|
+
_baseVector.copy( target );
|
|
330
|
+
target.set( 0, 0, 0, 0 );
|
|
331
|
+
|
|
332
|
+
} else {
|
|
333
|
+
|
|
334
|
+
_baseVector.set( ...target, 1 );
|
|
335
|
+
target.set( 0, 0, 0 );
|
|
328
336
|
|
|
329
|
-
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
_baseVector.applyMatrix4( this.bindMatrix );
|
|
330
340
|
|
|
331
341
|
for ( let i = 0; i < 4; i ++ ) {
|
|
332
342
|
|
|
@@ -338,12 +348,19 @@ class SkinnedMesh extends Mesh {
|
|
|
338
348
|
|
|
339
349
|
_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
|
|
340
350
|
|
|
341
|
-
target.addScaledVector(
|
|
351
|
+
target.addScaledVector( _vector4.copy( _baseVector ).applyMatrix4( _matrix4 ), weight );
|
|
342
352
|
|
|
343
353
|
}
|
|
344
354
|
|
|
345
355
|
}
|
|
346
356
|
|
|
357
|
+
if ( target.isVector4 ) {
|
|
358
|
+
|
|
359
|
+
// ensure the homogenous coordinate remains unchanged after vector operations
|
|
360
|
+
target.w = _baseVector.w;
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
347
364
|
return target.applyMatrix4( this.bindMatrixInverse );
|
|
348
365
|
|
|
349
366
|
}
|